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); }
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); }
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 }; }
protected MenuStateBase(GameWindow owner, GameFiniteStateMachine parent) : base(owner, parent) { }
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); }
protected GameStateBase(GameWindow owner, GameFiniteStateMachine parent) : base(parent) { Owner = owner; }
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); } }