public override void Update() { DebugHacks(); if (Input.IsKeyPressed(Stride.Input.Keys.R)) { foreach (var entity in Entity.Scene.Children[0].Entities) { entity.Scene = null; } Entity.Scene.Children.RemoveAt(0); Loader.LoadLevel(currentLevel + 1); PopulateTasks(); } if (state == UIState.InGame) { var timeLeft = TurnSystem.RemainingTime; // is the game over Result result = tasksCompleted.TryReceive() ? Result.Success : timeLeft.Ticks < 0 ? Result.Failure : Result.None; if (result != Result.None) { // update GameResult page var cyclesLeft = 5 - robotBrain.Cycles; var starsNum = result == Result.Success ? Math.Max(1, cyclesLeft) : 0; var message = result == Result.Failure ? "The robot became sentient and took over the world!" : "You have succesfully completed all tasks"; var root = GameResult.RootElement as Panel; var description = root.Children[1] as TextBlock; var stars = (root.Children[2] as Panel).Children.Cast <ImageElement>().ToArray(); description.Text = message; for (int i = 0; i < stars.Length; i++) { if (stars[i].Source == null) { stars[i].Source = new SpriteFromSheet { Sheet = UISheet, CurrentFrame = 10 } } ; stars[i].Visibility = i < starsNum ? Visibility.Visible : Visibility.Hidden; } // Unlock next level if (result == Result.Success) { completedLevels = Math.Max(completedLevels, currentLevel + 1); } UI.Page = GameResult; TurnSystem.Disable(Entity.Scene); state = UIState.GameResult; } else { // update Game UI var nextUserAction = inputController.NextAction.GetActionType(); var nextRobotAction = robotBrain.NextAction.GetActionType(); var grid = GamePage.RootElement as Grid; var actions = ((grid.Children[0] as Panel).Children[0] as Panel).Children.Cast <Border>().ToArray(); var timer = grid.Children[2] as TextBlock; var taskEntries = ((grid.Children.Last() as Panel).Children.Skip(1).Select(c => ((c as Panel).Children[0] as ToggleButton, (c as Panel).Children[1] as TextBlock))).ToArray(); timer.Text = timeLeft.ToString("mm\\:ss"); for (int i = 0; i < taskEntries.Length; i++) { if (i >= tasks.Count) { taskEntries[i].Item1.Parent.Visibility = Visibility.Collapsed; continue; } taskEntries[i].Item1.Parent.Visibility = Visibility.Visible; taskEntries[i].Item1.State = tasks[i].Completed ? ToggleState.Checked : ToggleState.UnChecked; taskEntries[i].Item2.Text = TaskText(tasks[i].Type); taskEntries[i].Item2.WrapText = true; taskEntries[i].Item2.Width = 350; } UpdateActions(actions[0], ActionType.Movement, nextUserAction, nextRobotAction, 0); UpdateActions(actions[1], ActionType.Hold, nextUserAction, nextRobotAction, 2); UpdateActions(actions[2], ActionType.Laser, nextUserAction, nextRobotAction, 4); UpdateActions(actions[3], ActionType.Light, nextUserAction, nextRobotAction, 6); } } }