package org.mafagafogigante.dungeon.spells; import org.mafagafogigante.dungeon.entity.creatures.Hero; import org.mafagafogigante.dungeon.game.Id; import org.mafagafogigante.dungeon.game.Name; import org.mafagafogigante.dungeon.util.Selectable; import java.io.Serializable; /** * The class that represents a spell. */ public abstract class Spell implements Selectable, Serializable { private final SpellDefinition definition; Spell(String id, String name) { this.definition = new SpellDefinition(id, name); } public abstract void operate(Hero hero, String[] targetMatcher); public Id getId() { return definition.id; // Delegate to SpellDefinition. } @Override public Name getName() { return definition.name; // Delegate to SpellDefinition. } @Override public boolean equals(Object object) { if (this == object) { return true; } if (object == null || getClass() != object.getClass()) { return false; } Spell spell = (Spell) object; return definition.equals(spell.definition); } @Override public int hashCode() { return definition.hashCode(); } @Override public String toString() { return getName().getSingular(); } }