Esempio n. 1
0
 private GameMenu.Item MenuBuildFortress()
 {
     GameMenu.Item item = new GameMenu.Item("Build fortress", "f");
     if (!Game.CurrentPlayer.HasAdvance <Construction>())
     {
         item.Enabled = false;
     }
     else
     {
         item.Selected += (s, a) => GameTask.Enqueue(Orders.BuildFortress(this));
     }
     return(item);
 }
Esempio n. 2
0
        private bool KeyDownActiveUnit(KeyboardEventArgs args)
        {
            if (Game.ActiveUnit == null || Game.ActiveUnit.Moving)
            {
                return(false);
            }

            if (args.Key == Key.Space)
            {
                Game.ActiveUnit.SkipTurn();
                return(true);
            }
            else if (Settings.ArrowHelper)
            {
                switch (args.Key)
                {
                case Key.NumPad1:
                case Key.End:
                    return(MoveTo(-1, 1));

                case Key.NumPad2:
                    return(MoveTo(0, 1));

                case Key.NumPad3:
                case Key.PageDown:
                    return(MoveTo(1, 1));

                case Key.NumPad4:
                    return(MoveTo(-1, 0));

                case Key.NumPad5:
                    GameTask.Enqueue(Show.Empty);
                    return(true);

                case Key.NumPad6:
                    return(MoveTo(1, 0));

                case Key.NumPad7:
                case Key.Home:
                    return(MoveTo(-1, -1));

                case Key.NumPad8:
                    return(MoveTo(0, -1));

                case Key.NumPad9:
                case Key.PageUp:
                    return(MoveTo(1, -1));

                case Key.Escape:
                    _helperDirection = new Point(0, 0);
                    return(true);

                case Key.Down:
                    _helperDirection.Y++;
                    break;

                case Key.Up:
                    _helperDirection.Y--;
                    break;

                case Key.Left:
                    _helperDirection.X--;
                    break;

                case Key.Right:
                    _helperDirection.X++;
                    break;

                default:
                    _helperDirection = new Point(0, 0);
                    break;
                }

                if (Math.Abs(_helperDirection.X) + Math.Abs(_helperDirection.Y) >= 2)
                {
                    int x = 0, y = 0;
                    if (_helperDirection.X < 0)
                    {
                        x = -1;
                    }
                    else if (_helperDirection.X > 0)
                    {
                        x = 1;
                    }

                    if (_helperDirection.Y < 0)
                    {
                        y = -1;
                    }
                    else if (_helperDirection.Y > 0)
                    {
                        y = 1;
                    }

                    _helperDirection = new Point(0, 0);
                    return(MoveTo(x, y));
                }
            }
            else
            {
                switch (args.Key)
                {
                case Key.NumPad1:
                case Key.End:
                    return(MoveTo(-1, 1));

                case Key.NumPad2:
                case Key.Down:
                    return(MoveTo(0, 1));

                case Key.NumPad3:
                case Key.PageDown:
                    return(MoveTo(1, 1));

                case Key.NumPad4:
                case Key.Left:
                    return(MoveTo(-1, 0));

                case Key.NumPad5:
                    GameTask.Enqueue(Show.Empty);
                    return(true);

                case Key.NumPad6:
                case Key.Right:
                    return(MoveTo(1, 0));

                case Key.NumPad7:
                case Key.Home:
                    return(MoveTo(-1, -1));

                case Key.NumPad8:
                case Key.Up:
                    return(MoveTo(0, -1));

                case Key.NumPad9:
                case Key.PageUp:
                    return(MoveTo(1, -1));
                }
            }

            switch (args.KeyChar)
            {
            case 'B':
                GameTask.Enqueue(Orders.FoundCity(Game.ActiveUnit));
                return(true);

            case 'C':
                if (Game.ActiveUnit == null)
                {
                    break;
                }
                CenterOnUnit();
                return(true);

            case 'D':
                if (!args.Shift)
                {
                    break;
                }
                Game.DisbandUnit(Game.ActiveUnit);
                return(true);

            case 'H':
                Game.ActiveUnit.SetHome();
                return(true);

            case 'I':
                GameTask.Enqueue(Orders.BuildIrrigation(Game.ActiveUnit));
                return(true);

            case 'M':
                GameTask.Enqueue(Orders.BuildMines(Game.ActiveUnit));
                break;

            case 'R':
                GameTask.Enqueue(Orders.BuildRoad(Game.ActiveUnit));
                break;

            case 'S':
                Game.ActiveUnit.Sentry = true;
                break;

            case 'F':
                if (Game.ActiveUnit is Settlers)
                {
                    GameTask.Enqueue(Orders.BuildFortress(Game.ActiveUnit));
                    break;
                }
                Game.ActiveUnit.Fortify = true;
                break;

            case 'U':
                if (Game.ActiveUnit is IBoardable)
                {
                    return((Game.ActiveUnit as BaseUnitSea).Unload());;
                }
                break;

            case 'W':
                GameTask.Enqueue(Orders.Wait(Game.ActiveUnit));
                break;
            }

            return(false);
        }
Esempio n. 3
0
 private MenuItem <int> MenuBuildFortress() => MenuItem <int>
 .Create("Build fortress")
 .SetShortcut("f")
 .SetEnabled(Game.CurrentPlayer.HasAdvance <Construction>())
 .OnSelect((s, a) => GameTask.Enqueue(Orders.BuildFortress(this)));
Esempio n. 4
0
        private bool KeyDownActiveUnit(KeyboardEventArgs args)
        {
            if (Game.ActiveUnit == null || Game.ActiveUnit.Moving)
            {
                return(false);
            }

            switch (args.Key)
            {
            case Key.Space:
                Game.ActiveUnit.SkipTurn();
                return(true);

            case Key.NumPad1:
                return(MoveTo(-1, 1));

            case Key.NumPad2:
            case Key.Down:
                return(MoveTo(0, 1));

            case Key.NumPad3:
                return(MoveTo(1, 1));

            case Key.NumPad4:
            case Key.Left:
                return(MoveTo(-1, 0));

            case Key.NumPad5:
                GameTask.Enqueue(Show.Empty);
                return(true);

            case Key.NumPad6:
            case Key.Right:
                return(MoveTo(1, 0));

            case Key.NumPad7:
                return(MoveTo(-1, -1));

            case Key.NumPad8:
            case Key.Up:
                return(MoveTo(0, -1));

            case Key.NumPad9:
                return(MoveTo(1, -1));
            }

            switch (args.KeyChar)
            {
            case 'B':
                GameTask.Enqueue(Orders.FoundCity(Game.ActiveUnit));
                return(true);

            case 'C':
                if (Game.ActiveUnit == null)
                {
                    break;
                }
                CenterOnUnit();
                return(true);

            case 'D':
                if (!args.Shift)
                {
                    break;
                }
                Game.DisbandUnit(Game.ActiveUnit);
                return(true);

            case 'H':
                Game.ActiveUnit.SetHome();
                return(true);

            case 'I':
                GameTask.Enqueue(Orders.BuildIrrigation(Game.ActiveUnit));
                return(true);

            case 'M':
                GameTask.Enqueue(Orders.BuildMines(Game.ActiveUnit));
                break;

            case 'R':
                GameTask.Enqueue(Orders.BuildRoad(Game.ActiveUnit));
                break;

            case 'S':
                Game.ActiveUnit.Sentry = true;
                break;

            case 'F':
                if (Game.ActiveUnit is Settlers)
                {
                    GameTask.Enqueue(Orders.BuildFortress(Game.ActiveUnit));
                    break;
                }
                Game.ActiveUnit.Fortify = true;
                break;

            case 'U':
                if (Game.ActiveUnit is IBoardable)
                {
                    return((Game.ActiveUnit as BaseUnitSea).Unload());;
                }
                break;

            case 'W':
                GameTask.Enqueue(Orders.Wait(Game.ActiveUnit));
                break;
            }

            return(false);
        }