package org.pixelgaffer.turnierserver.gamelogic.interfaces;
/**
* @param <C>
* Das Veränderungsobjekt, welches an die Ai gesendet werden soll
* @param <R>
* Die Antwort der Ai
*/
public interface GameState<C, R> {
/**
* Gibt ein Objekt mit allen Änderungen dieses Gamestates zurück, welche an eine bestimme Ai gesendet werden sollen.
*
* @param Die Ai, an welche die Veränderungen gesendet werden sollen
* @return Die Änderungen, welche an diesem Gamestate vollzogen wurden
*/
public C getChanges(Ai ai);
/**
* Leert alle Veränderungen für eine Ai
*
* @param ai Die Ai, für welche die Veränderungen geleert werden sollen
*/
public void clearChanges(Ai ai);
/**
* Führt Änderungen durch, welche eine Ai vorgenommen hat. Wird nur auf der GameLogic aufgerufen.
*
* @param response Die Antwort des Clients, welche den GameState verändern soll
* @param ai Die Ai, welche geantwortet hat
*/
public void applyChanges(R response, Ai ai);
/**
* Führt Änderungen durch, welche von der GameLogic vorgenommen wurden. Wird nur auf der Ai aufgerufen.
*
* @param changes
*/
public void applyChanges(C changes);
}