Skip to content

Commit

Permalink
Allow copying to FastSimpleGame from GameState, and add getSubject to…
Browse files Browse the repository at this point in the history
… GameState
Sothatsit committed Jun 11, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 86cb978 commit 10e4864
Showing 5 changed files with 35 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/main/java/net/royalur/rules/simple/fast/FastSimpleGame.java
Original file line number Diff line number Diff line change
@@ -2,6 +2,8 @@

import net.royalur.Game;
import net.royalur.model.*;
import net.royalur.rules.state.GameState;
import net.royalur.rules.state.WaitingForMoveGameState;

import javax.annotation.Nullable;
import java.util.List;
@@ -68,13 +70,17 @@ public void copyFrom(FastSimpleGame other) {
this.isFinished = other.isFinished;
}

public void copyFrom(GameState state) {
board.copyFrom(state.getBoard());
light.copyFrom(state.getLightPlayer());
dark.copyFrom(state.getDarkPlayer());
this.isLightTurn = (state.getSubject() == PlayerType.LIGHT);
this.rollValue = (state instanceof WaitingForMoveGameState wfm ? wfm.getRoll().value() : -1);
this.isFinished = state.isFinished();
}

public void copyFrom(Game game) {
board.copyFrom(game.getBoard());
light.copyFrom(game.getLightPlayer());
dark.copyFrom(game.getDarkPlayer());
this.isLightTurn = (game.getTurn() == PlayerType.LIGHT);
this.rollValue = (game.isWaitingForMove() ? game.getRoll().value() : -1);
this.isFinished = game.isFinished();
copyFrom(game.getState());
}

/**
5 changes: 5 additions & 0 deletions src/main/java/net/royalur/rules/state/ControlGameState.java
Original file line number Diff line number Diff line change
@@ -47,6 +47,11 @@ public ControlGameState(
this(board, lightPlayer, darkPlayer, null);
}

@Override
public @Nullable PlayerType getSubject() {
return player;
}

@Override
public boolean isPlayable() {
return false;
5 changes: 5 additions & 0 deletions src/main/java/net/royalur/rules/state/EndGameState.java
Original file line number Diff line number Diff line change
@@ -95,6 +95,11 @@ public PlayerState getLosingPlayer() {
return getPlayerState(getLoser());
}

@Override
public @Nullable PlayerType getSubject() {
return winner;
}

@Override
public String describe() {
if (winner == null)
8 changes: 8 additions & 0 deletions src/main/java/net/royalur/rules/state/GameState.java
Original file line number Diff line number Diff line change
@@ -2,6 +2,8 @@

import net.royalur.model.*;

import javax.annotation.Nullable;

/**
* A game state represents a single point within a game.
*/
@@ -79,6 +81,12 @@ public PlayerState getPlayerState(PlayerType player) {
};
}

/**
* Get the subject player of the game state. e.g., player
* to roll/move, player that rolled/moved, player that won.
*/
public abstract @Nullable PlayerType getSubject();

/**
* Returns whether this state is a valid state to be played from.
* @return Whether this state is a valid state to be played from.
5 changes: 5 additions & 0 deletions src/main/java/net/royalur/rules/state/OngoingGameState.java
Original file line number Diff line number Diff line change
@@ -72,6 +72,11 @@ public PlayerState getWaitingPlayer() {
return getPlayerState(getWaiting());
}

@Override
public PlayerType getSubject() {
return turn;
}

@Override
public boolean equals(Object obj) {
if (this == obj)

0 comments on commit 10e4864

Please sign in to comment.