public override void Update(GameTime deltaTime, GamePlayer player) { if (player.ActivePawn != null) { TutorialManager tutorials = TutorialManager.Instance; BoardSquare current = player.ActivePawn.CurrentSquare; // Show idle animation if done if (player.ActivePawn.AnimationPlayer != null) { if (player.ActivePawn.AnimationPlayer.Done) player.ActivePawn.ShowMovement(); } // Set the next soldier spline position if (player.ActivePawn.Spline.IsEndReached(player.transform.Position)) { // Empty the spline player.ActivePawn.Spline.ClearSpline(); // Check if this next square is a question square or not if (current != null) { if (current.Name == "IntXSquare") { // Check for any tutorials that should be shown if (!tutorials.HasTutorialBeenShown(TutorialStage.DeclareXTutorial)) { // Show start tutorial tutorials.ShowTutorial(TutorialStage.DeclareXTutorial, Vector3.Zero, UIManager.TextureAlignment.eTopLeft); } } else if (current.Name == "MainSquare") { if (!tutorials.HasTutorialBeenShown(TutorialStage.EnterMain)) { // Show start tutorial tutorials.ShowTutorial(TutorialStage.EnterMain, Vector3.Zero, UIManager.TextureAlignment.eTopLeft); } } else if (current.GetType() == typeof(IfSquare)) { if (!tutorials.HasTutorialBeenShown(TutorialStage.IfSquare)) { // Show start tutorial tutorials.ShowTutorial(TutorialStage.IfSquare, Vector3.Zero, UIManager.TextureAlignment.eTopLeft); } } else if (current.GetType() == typeof(WhileSquare)) { if (!tutorials.HasTutorialBeenShown(TutorialStage.WhileSquare)) { // Show start tutorial tutorials.ShowTutorial(TutorialStage.WhileSquare, Vector3.Zero, UIManager.TextureAlignment.eTopLeft); } } else if (current.GetType() == typeof(SwitchSquare)) { if (!tutorials.HasTutorialBeenShown(TutorialStage.SwitchSquare)) { // Show start tutorial tutorials.ShowTutorial(TutorialStage.SwitchSquare, Vector3.Zero, UIManager.TextureAlignment.eTopLeft); } } if (current.QuestionSquare) { // If it is the first question and they are passing it, // fire a first question passed event and show the first question // tutorial. if (current.FirstQuestionSquare && !current.FirstQuestionPassed) { FirstQuestionPassedEvent firstQuestionEvent = new FirstQuestionPassedEvent(); firstQuestionEvent.Fire(); // Question tutorial if (!tutorials.HasTutorialBeenShown(TutorialStage.Questions)) { // Show start tutorial tutorials.ShowTutorial(TutorialStage.Questions, Vector3.Zero, UIManager.TextureAlignment.eTopLeft); } } } } if (player.CurrentDiceRoll > 0) { // Decrease the dice roll player.CurrentDiceRoll--; if (player.CurrentDiceRoll != 0) { player.Data = new BoardSquare.DecisionData(); if ((current.GetType() == typeof(IfSquare) || (current.GetType() == typeof(WhileSquare)))) player.Data = current.Decision(player.PreDecisionRoll); // If not default route, switch to the jump state briefly if (player.Data.route != BoardSquare.Route.eDefault) player.ChangeState_Jump(); else { player.MoveToNextSquare(); } } else { // Check if this square is a question // ( if so they have landed on it and have a chance to go a bit further ) if (current.QuestionSquare) { // Change to the question state player.ChangeState_Question(); } else { player.ChangeState_EndOfTurn(); } } } else if (player.CurrentDiceRoll < 0) { // Decrease the dice roll player.CurrentDiceRoll++; if (player.CurrentDiceRoll != 0) { //player.Data = new BoardSquare.DecisionData(); //if ((player.ActivePawn.CurrentSquare.GetType() == typeof(IfSquare) || (player.ActivePawn.CurrentSquare.GetType() == typeof(WhileSquare)))) //player.Data = player.ActivePawn.CurrentSquare.Decision(player.CurrentDiceRoll); // Then it is at the end of the set spline/ // ( for now run the next square code again ) player.MoveToPreviousSquare(); } else { player.ChangeState_EndOfTurn(); } } else { if (player.ActivePawn.CurrentSquare.GetType() != typeof(EndSquare)) player.ChangeState_EndOfTurn(); else player.ChangeState_EndOfBoard(); } } // Show trail particles player.ActivePawn.ShowTrail(); } // MAKE sure this is after changing state base.Update(deltaTime, player); }
public override void Update(GameTime deltaTime, GamePlayer player) { if (player.ActivePawn != null) { if (player.CurrentDiceRoll == 0) { BaseCamera camera = CameraManager.Instance.ActiveCamera; if (!camera.Tween) { if (camera.GetType().IsSubclassOf(typeof(Camera3D))) { if (camera.GetType() == typeof(FixedThirdPersonCamera)) { FixedThirdPersonCamera fixedCamera = (camera as FixedThirdPersonCamera); float zoomDistance = fixedCamera.GetDistanceFromDesiredZoom(); if ((zoomDistance <= 50.0f) && (zoomDistance >= -50.0f)) { /* Begin the pawn moving */ // Save the dice roll determined player.OriginalDiceRoll = player.CurrentDiceRoll = player.Data.diceRoll; // Display text in 3D Color textColor = Color.Yellow; String rollText = ""; if (player.CurrentDiceRoll > 0) { rollText = "+"; textColor = Color.ForestGreen; } else if (player.CurrentDiceRoll < 0) { rollText = "-"; textColor = Color.OrangeRed; } rollText += player.CurrentDiceRoll.ToString(); if (player.CurrentDiceRoll != 1) rollText += " Squares"; else rollText += " Square"; String colorText = "red"; if (player.Color == GamePlayer.PlayerColor.Blue) colorText = "blue"; // Add text to it colorText += "text"; // Add text UIManager.Instance.AddText3DObject(colorText, rollText, (player.ActivePawn.transform.Position + new Vector3(0, +10, 0)), textColor, 1.5f); //UIManager.Instance.AddText3DObject(colorText + "outline", rollText, (player.ActivePawn.Position + new Vector3(-0.05f, +10, -0.05f)), Color.White, 2.05f); // Generate a new camera modifier player.GenerateCameraModifier(true); if (player.CurrentDiceRoll != 0) { // Move to the next square assuming the dice roll returned grater than 0 ( should do ) if (player.CurrentDiceRoll > 0) { // Check whether to go to the jump state first or not if (player.Data.route != BoardSquare.Route.eDefault) player.ChangeState_Jump(); else { player.MoveToNextSquare(); // Swap to movement state player.ChangeState_Movement(); } } else { player.MoveToPreviousSquare(); // Swap to movement state player.ChangeState_Movement(); } } else { if (player.ActivePawn.CurrentSquare.GetType() != typeof(EndSquare)) player.ChangeState_EndOfTurn(); else player.ChangeState_EndOfBoard(); } } } } } else player.ActivePawn.ShowSelected(); } } // MAKE sure this is after changing state base.Update(deltaTime, player); }