diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java index abf9d648..82300679 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java @@ -4,6 +4,7 @@ import pp.mdga.client.ClientState; import pp.mdga.client.GameState; import pp.mdga.client.gamestate.determinestartplayerstate.DetermineStartPlayerStates; +import pp.mdga.client.gamestate.determinestartplayerstate.Intro; import pp.mdga.client.gamestate.determinestartplayerstate.RollRankingDiceState; import pp.mdga.client.gamestate.determinestartplayerstate.WaitRankingState; import pp.mdga.message.server.DieMessage; @@ -17,12 +18,33 @@ public class DetermineStartPlayerState extends GameStates { private final RollRankingDiceState rollRankingDiceState = new RollRankingDiceState(this, logic); private final WaitRankingState waitRankingState = new WaitRankingState(this, logic); + private final Intro intro = new Intro(this, logic); public DetermineStartPlayerState(ClientState parent, ClientGameLogic logic) { super(parent, logic); this.parent = (GameState) parent; } + public RollRankingDiceState getRollRankingDice() { + return rollRankingDiceState; + } + + public WaitRankingState getWaitRanking() { + return waitRankingState; + } + + public DetermineStartPlayerStates getState(){ + return state; + } + + public Intro getIntro(){ + return intro; + } + + public GameState getParent() { + return parent; + } + @Override public void enter() { this.setState(this.rollRankingDiceState); @@ -60,20 +82,4 @@ public void received(RankingRollAgainMessage msg){ public void received(RankingResponseMessage msg){ state.received(msg); } - - public RollRankingDiceState getRollRankingDice() { - return rollRankingDiceState; - } - - public WaitRankingState getWaitRanking() { - return waitRankingState; - } - - public DetermineStartPlayerStates getState(){ - return state; - } - - public GameState getParent() { - return parent; - } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java index 3b41d5fc..dca39b4f 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java @@ -3,27 +3,78 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientState; import pp.mdga.client.gamestate.DetermineStartPlayerState; +import pp.mdga.game.Player; +import pp.mdga.message.client.AnimationEndMessage; +import pp.mdga.notification.AcquireCardNotification; +import pp.mdga.notification.DrawCardNotification; +import pp.mdga.notification.WaitMoveNotification; + +import java.util.Map; public class Intro extends DetermineStartPlayerStates{ private final DetermineStartPlayerState parent; + private int animationCounter = 0; + + /** + * Constructor for Intro + * + * @param parent the parent state + * @param logic the client game logic + */ public Intro(ClientState parent, ClientGameLogic logic) { super(parent, logic); this.parent = (DetermineStartPlayerState) parent; } - @Override - public void enter() { - - } - - @Override - public void exit() { - - } - + /** + * This method is used to get the parent state; + * + * @return the parent state + */ public DetermineStartPlayerState getParent(){ return parent; } + + /** + * This method is used to enter this state and play all necessary intro animations. + */ + @Override + public void enter() { + for(Map.Entry entry : logic.getGame().getPlayers().entrySet()){ + logic.addNotification(new WaitMoveNotification(entry.getValue().getPieces()[0].getUuid())); + animationCounter++; + if(entry.getKey() == logic.getOwnPlayerId()){ + logic.addNotification(new AcquireCardNotification(entry.getValue().getHandCards().get(0))); + } else { + logic.addNotification(new DrawCardNotification(entry.getValue().getColor(), entry.getValue().getHandCards().get(0))); + } + } + } + + /** + * This method i s used to exit this state. + */ + @Override + public void exit() { + animationCounter = 0; + } + + /** + * This method is used when the view has completed the animation. + */ + @Override + public void selectAnimationEnd(){ + animationCounter--; + if(animationCounter != 0){ + return; + } + logic.send(new AnimationEndMessage()); + if (logic.getGame().getActivePlayerId() == logic.getOwnPlayerId()){ + parent.getParent().setState(parent.getParent().getTurn()); + } else { + parent.getParent().setState(parent.getParent().getWaiting()); + } + } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java index e919d878..6deca992 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java @@ -3,6 +3,7 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientState; import pp.mdga.client.gamestate.DetermineStartPlayerState; +import pp.mdga.message.server.ActivePlayerMessage; import pp.mdga.message.server.RankingResponseMessage; import pp.mdga.message.server.RankingRollAgainMessage; import pp.mdga.notification.ActivePlayerNotification; @@ -33,8 +34,12 @@ public void received(RankingRollAgainMessage msg){ @Override public void received(RankingResponseMessage msg){ - logic.addNotification(new ActivePlayerNotification(logic.getGame().getPlayers().get(msg.getStartingPlayerId()).getColor())); - logic.getGame().setActiveColor(logic.getGame().getPlayers().get(msg.getStartingPlayerId()).getColor()); - parent.getParent().setState(parent.getParent().getWaiting()); + } + + @Override + public void received(ActivePlayerMessage msg){ + logic.addNotification(new ActivePlayerNotification(msg.getColor())); + logic.getGame().setActiveColor(msg.getColor()); + parent.setState(parent.getIntro()); } }