added the constructors for all client states and their statemachines

This commit is contained in:
Fleischer Hanno
2024-11-24 16:02:04 +01:00
committed by Felix
parent 85ea4d340c
commit 6938ce16b7
46 changed files with 319 additions and 9 deletions

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Animation extends ClientState {
protected Animation(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class AudioSettings extends ClientState {
protected AudioSettings(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class Ceremony extends ClientState {
private final CeremonyStateMachine ceremonyStateMachine = new CeremonyStateMachine();
private final CeremonyStateMachine ceremonyStateMachine;
protected Ceremony(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.ceremonyStateMachine = new CeremonyStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,14 @@
package pp.mdga.client;
public class CeremonyStateMachine extends ClientStateMachine {
protected CeremonyStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public Podium initialState() {
return new Podium(this, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class ChoosePiece extends ClientState {
private final ChoosePieceStateMachine choosePieceStateMachine = new ChoosePieceStateMachine();
private final ChoosePieceStateMachine choosePieceStateMachine;
protected ChoosePiece(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.choosePieceStateMachine = new ChoosePieceStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class ChoosePieceStateMachine extends ClientStateMachine{
protected ChoosePieceStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public NoPiece initialState() {
return new NoPiece(this, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class ChoosePowerCard extends ClientState {
protected ChoosePowerCard(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,14 @@
package pp.mdga.client;
public class ClientAutomaton extends ClientStateMachine {
public ClientAutomaton(ClientGameLogic logic){
super(null, logic);
entry();
}
@Override
public Dialogs initialState(){
return new Dialogs(this, logic);
}
}

View File

@@ -1,4 +1,36 @@
package pp.mdga.client;
import pp.mdga.game.Game;
import pp.mdga.message.client.ClientMessage;
import pp.mdga.server.ServerSender;
public class ClientGameLogic {
static final System.Logger LOGGER = System.getLogger(ClientGameLogic.class.getName());
private Game game;
private final ClientSender clientSender;
private ClientState state;
public ClientGameLogic(Game game, ClientSender clientSender) {
this.game = game;
this.clientSender = clientSender;
state = new ClientAutomaton(this);
}
public void send(ClientMessage msg){
LOGGER.log(System.Logger.Level.INFO, "send {0}", msg);
clientSender.send(msg);
}
public ClientSender getClientSender(){
return clientSender;
}
public Game getGame(){
return game;
}
public ClientState getState(){
return state;
}
}

View File

@@ -0,0 +1,7 @@
package pp.mdga.client;
import pp.mdga.message.client.ClientMessage;
public interface ClientSender {
void send(ClientMessage msg);
}

View File

@@ -1,4 +1,33 @@
package pp.mdga.client;
public abstract class ClientState {
public abstract class ClientState implements Observer {
protected static final System.Logger LOGGER = System.getLogger(ClientState.class.getName());
protected ClientState parent;
protected ClientGameLogic logic;
protected ClientState(ClientState parent, ClientGameLogic logic){
this.parent = parent;
this.logic = logic;
}
public void entry(){/* do nothing */}
public void exit() {/* do nothing*/}
public void gotoState(ClientState newState){
throw new IllegalStateException("not in a statemachine");
}
public ClientState getParent(){
return parent;
}
public void update() {/* do nothing */}
@Override
public String toString(){
return getClass().getSimpleName();
}
}

View File

@@ -1,4 +1,46 @@
package pp.mdga.client;
import pp.mdga.message.server.*;
public abstract class ClientStateMachine extends ClientState {
private ClientState state;
protected ClientStateMachine(ClientState parent, ClientGameLogic logic){
super(parent, logic);
}
public abstract ClientState initialState();
@Override
public void gotoState(ClientState newState){
LOGGER.log(System.Logger.Level.DEBUG, "{0}: {1} --> {2}", this, state, newState);
enter(newState);
}
@Override
public void entry(){
final ClientState newState = initialState();
LOGGER.log(System.Logger.Level.DEBUG, "{0}: initial state={1}", this, newState);
enter(newState);
}
private void enter(ClientState newState){
if(newState.parent != this)
throw new IllegalArgumentException("Wrong state: " + newState + " belongs to " + newState.parent + " instead of " + this);
state = newState;
state.entry();
}
@Override
public void exit(){state.exit();}
@Override
public String toString(){
return super.toString() + "(in " + state + ")";
}
public ClientState getState(){
return state;
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class DetermineStartPlayer extends ClientState {
private final DetermineStartPlayerStateMachine determineStartPlayerStateMachine = new DetermineStartPlayerStateMachine();
private final DetermineStartPlayerStateMachine determineStartPlayerStateMachine;
protected DetermineStartPlayer(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.determineStartPlayerStateMachine = new DetermineStartPlayerStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class DetermineStartPlayerStateMachine extends ClientStateMachine{
protected DetermineStartPlayerStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public RollRankingDice initialState() {
return new RollRankingDice(this, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class Dialogs extends ClientState {
private final DialogsStateMachine dialogsStateMachine = new DialogsStateMachine();
private final DialogsStateMachine dialogsStateMachine;
public Dialogs(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.dialogsStateMachine = new DialogsStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class DialogsStateMachine extends ClientStateMachine {
protected DialogsStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public StartDialog initialState() {
return new StartDialog(this, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class GameState extends ClientState {
private final GameStateMachine gameStateMachine = new GameStateMachine();
private final GameStateMachine gameStateMachine;
protected GameState(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.gameStateMachine = new GameStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class GameStateMachine extends ClientStateMachine {
protected GameStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public ClientState initialState() {
return null;
}
}

View File

@@ -1,4 +1,14 @@
package pp.mdga.client;
import pp.mdga.server.GameState;
public class Interrupt extends ClientState {
private final GameState lastState;
public Interrupt(ClientState parent, ClientGameLogic logic, GameState lastState) {
super(parent, logic);
this.lastState = lastState;
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Lobby extends ClientState {
protected Lobby(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class MainSettings extends ClientState {
protected MainSettings(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class MovePiece extends ClientState {
protected MovePiece(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class NetworkDialog extends ClientState {
protected NetworkDialog(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class NoPiece extends ClientState {
protected NoPiece(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -0,0 +1,5 @@
package pp.mdga.client;
public interface Observer {
void update();
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class PlayPowerCard extends ClientState {
protected PlayPowerCard(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Podium extends ClientState {
protected Podium(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class PowerCard extends ClientState {
private final PowerCardStateMachine powerCardStateMachine = new PowerCardStateMachine();
private final PowerCardStateMachine powerCardStateMachine;
protected PowerCard(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.powerCardStateMachine = new PowerCardStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class PowerCardStateMachine extends ClientStateMachine {
protected PowerCardStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public ChoosePowerCard initialState() {
return new ChoosePowerCard(this, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class RollDice extends ClientState {
protected RollDice(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class RollRankingDice extends ClientState {
protected RollRankingDice(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class SelectPiece extends ClientState {
protected SelectPiece(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class Settings extends ClientState {
private final SettingsStateMachine settingsStateMachine = new SettingsStateMachine();
private final SettingsStateMachine settingsStateMachine;
protected Settings(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.settingsStateMachine = new SettingsStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class SettingsStateMachine extends ClientStateMachine {
protected SettingsStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public ClientState initialState() {
return null;
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Shield extends ClientState {
protected Shield(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Spectator extends ClientState {
protected Spectator(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class StartDialog extends ClientState {
protected StartDialog(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class StartPiece extends ClientState {
protected StartPiece(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Statistics extends ClientState {
protected Statistics(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Swap extends ClientState {
protected Swap(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,5 +1,10 @@
package pp.mdga.client;
public class Turn extends ClientState {
private final TurnStateMachine turnStateMachine = new TurnStateMachine();
private final TurnStateMachine turnStateMachine;
protected Turn(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
this.turnStateMachine = new TurnStateMachine(parent, logic);
}
}

View File

@@ -1,4 +1,12 @@
package pp.mdga.client;
public class TurnStateMachine extends ClientStateMachine {
protected TurnStateMachine(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
@Override
public PowerCard initialState() {
return new PowerCard(this, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class VideoSettings extends ClientState {
protected VideoSettings(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class WaitRanking extends ClientState {
protected WaitRanking(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class Waiting extends ClientState {
protected Waiting(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}

View File

@@ -1,4 +1,7 @@
package pp.mdga.client;
public class WaitingPiece extends ClientState {
protected WaitingPiece(ClientState parent, ClientGameLogic logic) {
super(parent, logic);
}
}