package model.automata; import javafx.scene.paint.Color; import model.State; import java.util.List; public class BrianBrainState implements State<BrianBrainState> { enum StateType { DEAD, FIRE, READY_TO_FIRE } private final StateType currentState; public BrianBrainState(StateType state) { this.currentState = state; } @Override public Color getColor() { return switch (currentState) { case DEAD -> Color.WHITE; case FIRE -> Color.RED; case READY_TO_FIRE -> Color.YELLOW; }; } @Override public BrianBrainState next() { return new BrianBrainState(currentState == StateType.FIRE ? StateType.DEAD : StateType.FIRE); } @Override public BrianBrainState update(List<BrianBrainState> neighbours) { int fireCount = (int) neighbours.stream().filter(n -> n.currentState == StateType.FIRE).count(); if (currentState == StateType.READY_TO_FIRE && fireCount > 0) { return new BrianBrainState(StateType.FIRE); } else if (currentState == StateType.FIRE) { return new BrianBrainState(StateType.DEAD); } else { return this; } } }