Game.java
package ch.ladestation.connectncharge.model.game.gamelogic;
import ch.ladestation.connectncharge.util.mvcbase.ObservableArray;
import ch.ladestation.connectncharge.util.mvcbase.ObservableValue;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Game {
public static final String HOUSE_FLAG = "H";
public static final int MAX_LEVEL = 5;
private static final Logger LOG = LoggerFactory.getLogger(Game.class);
private static final String LOG_MSG_OBSERVABLE_VAL_CHANGED = "{} changed from {} to {}";
public final ObservableArray<Edge> solution = new ObservableArray<>(new Edge[0]);
public final ObservableArray<Edge> activatedEdges = new ObservableArray<>(new Edge[0]);
public final ObservableArray<Node> terminals = new ObservableArray<>(new Node[0]);
public final ObservableValue<Integer> currentScore = new ObservableValue<>(0);
public final ObservableValue<Boolean> gameStarted = new ObservableValue<>(false);
public final ObservableValue<Boolean> isFinished = new ObservableValue<>(false);
public final ObservableValue<Boolean> isCountdownFinished = new ObservableValue<>(false);
public final ObservableValue<Boolean> isEdgeBlinking = new ObservableValue<>(true);
public final ObservableValue<Boolean> isTippOn = new ObservableValue<>(false);
public final ObservableValue<Boolean> hasCycle = new ObservableValue<>(false);
public final ObservableValue<Hint> activeHint = new ObservableValue<>(Hint.HINT_EMPTY_HINT);
public final ObservableArray<Hint> activeHints = new ObservableArray<>(new Hint[0]);
public final ObservableValue<Boolean> muted = new ObservableValue<>(false);
public Edge tippEdge = null;
public Edge blinkingEdge = null;
public boolean ignoringInputs = false;
public StringProperty endTime = new SimpleStringProperty("");
public Game() {
//set these so instances can look up whether they're active on their own,
//and also prevent any annoying async bugs.
Segment.setActiveTerminalsRef(terminals);
Segment.setActiveEdgesRef(activatedEdges);
setupLogging(solution, "solution");
setupLogging(activatedEdges, "activatedEdges");
setupLogging(terminals, "terminals");
setupLogging(currentScore, "currentScore");
setupLogging(gameStarted, "gameStarted");
setupLogging(isFinished, "isFinished");
setupLogging(isCountdownFinished, "isCountdownFinished");
setupLogging(isEdgeBlinking, "isEdgeBlinking");
setupLogging(isTippOn, "isTippOn");
setupLogging(hasCycle, "hasCycle");
setupLogging(activeHint, "activeHint");
setupLogging(activeHints, "activeHints");
}
private static void setupLogging(ObservableValue<?> val, String name) {
val.onChange((oldV, newV) -> LOG.info(LOG_MSG_OBSERVABLE_VAL_CHANGED, name, oldV, newV));
}
private static void setupLogging(ObservableArray<?> val, String name) {
val.onChange((oldV, newV) -> LOG.info(LOG_MSG_OBSERVABLE_VAL_CHANGED, name, oldV, newV));
}
}