Ejemplo n.º 1
0
        public static MenuNode GetPauseMenu()
        {
            MenuNode n = new MenuNode("__DOOT__", new List <MenuNode>()
            {
                new MenuNode("__TILE__", null, null, (m) => {
                    m.SubNodes = new List <MenuNode>()
                    {
                        new MenuNode(DesignStrs.Logo),
                        new MenuNode(Sep),
                        new MenuNode("Self-destruct", () => {
                            Players.CurrentPlayer.ShowEnemyBoard = false;
                            GameUI.ShowGame(new Utils.Utils.Point(1, 1), Int16.MaxValue);
                            Players.CurrentPlayer.Board.Explode(new Utils.Utils.Point(1, 1), int.MaxValue);
                            Players.CurrentPlayer.Messages.Add("Goodbye cruel world...");
                            Players.GetOtherPlayer().Messages.Add($"{Players.CurrentPlayer} blew himself up!");
                            UI.Menu.Stop = true;
                        }),
                        new MenuNode(Sep),
                        new MenuNode("QUIT", () => {
                            UI.Menu.Stop = true;
                            GameUI.Stop  = true;
                        }),
                    };
                    if (State.Turn == 0)
                    {
                        m.SubNodes.Insert(2, new MenuNode(Sep));
                        m.SubNodes.Insert(2, new MenuNode("Randomize all ships", () => {
                            new AI.Random().PlaceShips();
                            Menu.Stop = true;
                        }));
                        m.SubNodes.Insert(2, new MenuNode($"Randomize all {ShipPlacer.CurrentShip.Name}s", () => {
                            new AI.Random().PlaceShipType();
                            ShipPlacer.Start = null;
                            Menu.Stop        = true;
                        }));
                        m.SubNodes.Insert(2, new MenuNode($"Randomize one {ShipPlacer.CurrentShip.Name}", () => {
                            new AI.Random().PlaceShip();
                            ShipPlacer.Start = null;
                            Menu.Stop        = true;
                        }));
                    }
                }),
            });

            n.Selectable = false;
            n.SetUpdateAction((m) => Menu.Stop = true);
            return(n.SubNodes[0]);
        }
        public static MenuNode GetMenu(this Boards.BoardTile bt)
        {
            var n = new MenuNode("__DOOT__", new List <MenuNode>()
            {
                new MenuNode("__TILE__", null, null, (m) => {
                    var ship   = bt.GetShipAs(Players.CurrentPlayer);
                    m.SubNodes = new List <MenuNode>()
                    {
                        new MenuNode(PadWithSep($" {bt.Board.Player}'s base: {bt.ToString()} ")),
                        new MenuNode(Sep),
                        new MenuNode(
                            (ship == null ? $"  No {(bt.Board.Player == Players.CurrentPlayer ? "" : "known ")}ships at this tile" : "Ship at this tile:\n" +
                             $"\t{ship}\n" +
                             $"\t  Condition at this tile: {(bt.Destroyed ? "destroyed" : "OK")}"
                            )),
                        new MenuNode(""),
                        new MenuNode(Sep),
                        new MenuNode("Bomb [1x1]", () => {
                            GameUI.ShowGame(bt.Coords);
                            AddHitMessages(bt.Board.Explode(bt.Coords, 1));
                            Menu.Stop = true;
                        }),
                        new MenuNode($"Nuke [3x3] ({Players.CurrentPlayer.Nukes} left)", () => {
                            if (Players.CurrentPlayer.Nukes > 0)
                            {
                                GameUI.ShowGame(bt.Coords, 2);
                                Players.CurrentPlayer.Nukes--;
                                AddHitMessages(bt.Board.Explode(bt.Coords, 2));
                                Menu.Stop = true;
                            }
                        }),
                        //new MenuNode(Sep),
                    };
                })
            });

            n.Selectable = false;
            n.SetUpdateAction((m) => Menu.Stop = true);
            return(n.SubNodes[0]);
        }