package org.drooms.impl.logic.commands; import org.drooms.api.Action; import org.drooms.api.GameProgressListener; import org.drooms.api.Node; import org.drooms.api.Player; import org.drooms.impl.PlayerPosition; import org.drooms.impl.logic.PlayerLogic; import org.drooms.impl.logic.PlayerRelated; import org.drooms.impl.logic.events.PlayerActionEvent; import java.util.Collection; public class PlayerActionCommand implements Command, PlayerRelated { private final Player actor; private final Action action; private final Collection<Node> nodes; private final PlayerActionEvent event; public PlayerActionCommand(final Action a, final PlayerPosition position) { this.actor = position.getPlayer(); this.action = a; this.nodes = position.getNodes(); this.event = new PlayerActionEvent(this.actor, a, position.getHeadNode(), nodes); } public Collection<Node> getNodes() { return this.nodes; } @Override public Player getPlayer() { return this.actor; } @Override public void perform(final PlayerLogic logic) { logic.notifyOfPlayerMove(this.event); } @Override public void report(final GameProgressListener report) { report.playerPerformedAction(this.actor, this.action, this.nodes.toArray(new Node[]{})); } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("MovePlayerCommand [actor=").append(this.actor) .append(", action=").append(this.action) .append(", nodes=").append(this.nodes).append("]"); return builder.toString(); } }