package com.github.dtschust.zork.objects; import com.github.dtschust.zork.ZorkCondition; import com.github.dtschust.zork.ZorkGame; import com.github.dtschust.zork.ZorkTrigger; import com.github.dtschust.zork.types.HasPrintsAndActions; import java.util.*; /* Creature*/ public class ZorkCreature extends ZorkObject implements HasPrintsAndActions { private final Set vulnerabilities; private final List conditions; private final List print; private final List action; public ZorkCreature(final String name, final String description, final String status, final Collection triggers, final Collection vulnerabilities, final Collection conditions, final Collection prints, final Collection actions) { super(name, description, status, triggers); this.vulnerabilities = new HashSet<>(vulnerabilities); this.conditions = new ArrayList<>(conditions); this.print = new ArrayList<>(prints); this.action = new ArrayList<>(actions); } /* Evaluate the success of an attack*/ /** * Given a game instance and a weapon, returns whether the attack is successful, i.e. if the creature is vulnerable * to the weapon and all conditions for a successful attack are satisfied * * @param game the game * @param weapon the weapon * @return true if the attack is successful */ public boolean isAttackSuccessful(final ZorkGame game, final String weapon) { return vulnerabilities.contains(weapon) && conditions.stream().allMatch(c -> c.evaluate(game)); } @Override public List getPrints() { return Collections.unmodifiableList(print); } @Override public List getActions() { return Collections.unmodifiableList(action); } }