package org.pixelgaffer.turnierserver.gamelogic.interfaces; import org.pixelgaffer.turnierserver.gamelogic.messages.BuilderSolverChange; import org.pixelgaffer.turnierserver.gamelogic.messages.BuilderSolverResponse; import lombok.Getter; import lombok.Setter; /** * @param <C> * Das Veränderungsobjekt, welches an die Ai gesendet werden soll * @param <B> * Die BuildResponse * @param <B> * Die SolveResponse */ public abstract class BuilderSolverGameState<C, B, S> implements GameState<BuilderSolverChange<C>, BuilderSolverResponse<B, S>> { @Getter @Setter private Ai ai; public static class Response<C> { /** * True wenn die Antwort der Ai valide war */ public boolean valid; /** * True wenn die Aufgabe mit der Antwort abgeschlossen ist */ public boolean finished; /** * Die Änderungen, die während diesem Schritt vorgenommen wurden. Null, wenn nichts gesendet werden soll. */ public C changes; /** * Die Renderdaten. Null wenn nichts gesendet werden soll */ public Object renderData; } /** * Builded den GameState nach der Antwort der Ai, wird nur auf der GameLogic aufgerufen * * @param response Die Antwort der Ai * @param ai Die Ai, welche geantwortet hat * @return Die BuildResponse */ public abstract Response<C> build(B response); /** * Solved den GameState nach der Antwort der Ai, wird nur auf der GameLogic aufgerufen * * @param response Die Antwort der Ai * @param ai Die Ai, welche geantwortet hat * @return Die SolveResponse */ public abstract Response<C> solve(S response); /** * Gibt ein Objekt zurück, welches an die Ai geschickt werden kann, damit diese diesen Zustand erhält bevor sie anfängt zu lösen * * @return Diesen Zustand als Änderungsobjekt */ public abstract C getState(); @Override public final void applyChanges(BuilderSolverResponse<B, S> response, Ai ai) { throw new IllegalStateException(); } @Override public BuilderSolverChange<C> getChanges(Ai ai) { throw new IllegalStateException(); } @Override public void clearChanges(Ai ai) { throw new IllegalStateException(); } }