예제 #1
0
        public SettingMenuState(GameWindow owner, GameFiniteStateMachine parent) : base(owner, parent)
        {
            var uiElementBehavior = new Behaviour <UiElementBase>(o =>
            {
                var floatPos  = BehaviorHelpers.EaseMouse(o.MousePosition);
                o.PositionAdd = floatPos / ((float)o.AttachedProperties["floatiness"]);
            });
            var exitButton = new TextElement(owner, "return", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, -0.15f),
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 50f } },
                MouseOverColor     = Color4.White,
            };

            exitButton.Clicked += args => TransitionOut("return");

            GameElements.Add(new TextElement(owner, "Settings", ".\\fonts\\toxica.ttf", 72f)
            {
                NormalColor        = Color4.DarkRed,
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 25f } },
                Position           = new Vector2(0f, -0.75f)
            });

            GameElements.Add(new TextElement(owner, "alpha 0.1", ".\\fonts\\pixelmix.ttf", 12f)
            {
                Position  = new Vector2(0.8f, 0.9f),
                Alignment = QFontAlignment.Left
            });

            GameElements.Add(exitButton);
        }
예제 #2
0
        public MainMenuState(GameWindow owner, GameFiniteStateMachine parent) : base(owner, parent)
        {
            var startButton = new TextElement(owner, "start", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, -0.4f),
                Behaviours         = { { GameTriggers.MouseMove, FloatBehavior } },
                AttachedProperties = { { FLOATINESS_PROP, 50f } },
                MouseOverColor     = Color4.White
            };

            startButton.Clicked += args =>
            {
                if (Transitioning)
                {
                    return;
                }
                TransitionOut("start");
            };

            var settingsButton = new TextElement(owner, "settings", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, -0.15f),
                Behaviours         = { { GameTriggers.MouseMove, FloatBehavior } },
                AttachedProperties = { { FLOATINESS_PROP, 50f } },
                MouseOverColor     = Color4.White
            };

            settingsButton.Clicked += args =>
            {
                if (Transitioning)
                {
                    return;
                }
                TransitionOut("settings");
            };

            var exitButton = new TextElement(owner, "exit", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, 0.1f),
                Behaviours         = { { GameTriggers.MouseMove, FloatBehavior } },
                AttachedProperties = { { FLOATINESS_PROP, 50f } },
                MouseOverColor     = Color4.White
            };

            exitButton.Clicked += args => StateMachine.Transition("exit");

            GameElements.Add(new TextElement(owner, "Apoplexy", ".\\fonts\\toxica.ttf", 72f)
            {
                NormalColor        = Color4.DarkRed,
                Behaviours         = { { GameTriggers.MouseMove, FloatBehavior } },
                AttachedProperties = { { FLOATINESS_PROP, 25f } },
                Position           = new Vector2(0f, -0.75f)
            });
            GameElements.Add(startButton);
            GameElements.Add(exitButton);
            GameElements.Add(settingsButton);
        }
예제 #3
0
        public IngameState(GameWindow owner, GameFiniteStateMachine parent) : base(owner, parent)
        {
            _debugText = new TextElement(owner, "debug me", ".\\fonts\\pixelmix_micro.ttf", 6f)
            {
                Alignment = QFontAlignment.Left,
                Dynamic   = true,
                Position  = new Vector2(-1f, -1f)
            };

            _pathText = new TextElement(Owner, "", ".\\fonts\\toxica.ttf", 12f)
            {
                Alignment = QFontAlignment.Centre,
                Position  = new Vector2(0, 0.9f),
                MaxWidth  = 1.75f
            };
        }
예제 #4
0
 protected MenuStateBase(GameWindow owner, GameFiniteStateMachine parent) : base(owner, parent)
 {
 }
예제 #5
0
        public PauseMenuState(GameWindow owner, GameFiniteStateMachine parent) : base(owner, parent)
        {
            var uiElementBehavior = new Behaviour <UiElementBase>(o =>
            {
                var floatPos  = BehaviorHelpers.EaseMouse(o.MousePosition);
                o.PositionAdd = floatPos / ((float)o.AttachedProperties["floatiness"]);
            });

            var resumeButton = new TextElement(owner, "resume", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, -0.4f),
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 50f } },
                MouseOverColor     = Color4.White
            };

            resumeButton.Clicked += args => TransitionOut("return");

            var settingsButton = new TextElement(owner, "settings", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, -0.15f),
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 50f } },
                MouseOverColor     = Color4.White,
            };

            settingsButton.Clicked += args => TransitionOut("settings");

            var mainMenuButton = new TextElement(owner, "main menu", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, 0.1f),
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 50f } },
                MouseOverColor     = Color4.White,
            };

            mainMenuButton.Clicked += args => TransitionOut("main menu");

            var exitButton = new TextElement(owner, "exit", ".\\fonts\\toxica.ttf", 40f)
            {
                NormalColor        = Color4.Gray,
                Position           = new Vector2(0f, 0.35f),
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 50f } },
                MouseOverColor     = Color4.White,
            };

            exitButton.Clicked += args => StateMachine.Transition("exit");

            GameElements.Add(new TextElement(owner, "Game Paused", ".\\fonts\\toxica.ttf", 72f)
            {
                NormalColor        = Color4.DarkRed,
                Behaviours         = { { GameTriggers.MouseMove, uiElementBehavior } },
                AttachedProperties = { { "floatiness", 25f } },
                Position           = new Vector2(0f, -0.75f)
            });
            GameElements.Add(resumeButton);
            GameElements.Add(exitButton);
            GameElements.Add(settingsButton);
            GameElements.Add(mainMenuButton);
        }
예제 #6
0
 protected GameStateBase(GameWindow owner, GameFiniteStateMachine parent) : base(parent)
 {
     Owner = owner;
 }
예제 #7
0
        private static void Main()
        {
            var missingfiles = new[] {
                ".\\world.dat",
                ".\\fonts\\toxica.ttf",
                ".\\fonts\\pixelmix.ttf",
                ".\\fonts\\pixelmix_bold.ttf",
                ".\\fonts\\pixelmix_micro.ttf"
            }.Where(file => !File.Exists(file)).ToList();

            foreach (var file in missingfiles)
            {
                MessageBox.Show(
                    $"The file {Environment.NewLine}{new FileInfo(file).FullName}{Environment.NewLine}could not be found.",
                    "A required file is missing!");
            }
            if (missingfiles.Any())
            {
                return;
            }

            using (var game = new GameWindow(1280, 720, new GraphicsMode(32, 24, 0, 8))) {
                var           fsm               = new GameFiniteStateMachine();
                GameStateBase mainMenuState     = new MainMenuState(game, fsm);
                GameStateBase ingameState       = new IngameState(game, fsm);
                GameStateBase settingsMenuState = new SettingMenuState(game, fsm);
                GameStateBase pauseMenuState    = new PauseMenuState(game, fsm);

                fsm.States.Add(mainMenuState);
                fsm.States.Add(ingameState);
                fsm.States.Add(settingsMenuState);
                fsm.States.Add(pauseMenuState);

                fsm.AddTransition(new Transition <GameStateBase>("init", null, mainMenuState));
                fsm.AddTransition(new Transition <GameStateBase>("start", mainMenuState, ingameState));
                fsm.AddTransition(new Transition <GameStateBase>("settings", mainMenuState, settingsMenuState));
                fsm.AddTransition(new Transition <GameStateBase>("settings", pauseMenuState, settingsMenuState));
                fsm.AddTransition(new Transition <GameStateBase>("pause", ingameState, pauseMenuState));
                fsm.AddTransition(new Transition <GameStateBase>("main menu", pauseMenuState, mainMenuState, Mode.Pop));

                fsm.AddTransition(new Transition <GameStateBase>("return", settingsMenuState, mainMenuState, Mode.Pop));
                fsm.AddTransition(new Transition <GameStateBase>("return", settingsMenuState, pauseMenuState, Mode.Pop));
                fsm.AddTransition(new Transition <GameStateBase>("return", pauseMenuState, ingameState, Mode.Pop));

                fsm.AddTransition(new Transition <GameStateBase>("exit", mainMenuState, null));
                fsm.AddTransition(new Transition <GameStateBase>("exit", pauseMenuState, null));

                fsm.Transitioned += t => { if (t.To == null)
                                           {
                                               game.Exit();
                                           }
                };

                fsm.Transition("init");

                game.Load   += (sender, args) => fsm.Load();
                game.Unload += (sender, args) => fsm.UnLoad();

                game.KeyDown  += (sender, args) => fsm.KeyDown(args);
                game.KeyUp    += (sender, args) => fsm.KeyUp(args);
                game.KeyPress += (sender, args) => fsm.KeyPress(args);

                game.MouseMove  += (sender, args) => fsm.MouseMove(args);
                game.MouseDown  += (sender, args) => fsm.MouseDown(args);
                game.MouseUp    += (sender, args) => fsm.MouseUp(args);
                game.MouseEnter += (sender, args) => fsm.MouseEnter();
                game.MouseLeave += (sender, args) => fsm.MouseLeave();
                game.MouseWheel += (sender, args) => fsm.MouseWheel(args);

                game.Resize      += (sender, args) => fsm.Resize();
                game.RenderFrame += (sender, args) => fsm.RenderFrame(args);
                game.UpdateFrame += (sender, args) => fsm.UpdateFrame(args);

                game.Title = "Apoplexy";
                game.Icon  = new Icon("Grim Reaper.ico");

                game.Run(30, 60);
            }
        }