Exemple #1
0
        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);
                }
            }
        }