public void GameLoop() { while (win.IsRunning()) { gameTimer.MeasureTime(); while (gameTimer.ShouldUpdate()) { SpaceTaxiBus.GetBus().ProcessEvents(); win.PollEvents(); eventBus.ProcessEvents(); stateMachine.ActiveState.UpdateGameLogic(); } if (gameTimer.ShouldRender()) { win.Clear(); backGroundImage.RenderEntity(); stateMachine.ActiveState.RenderState(); win.SwapBuffers(); } if (gameTimer.ShouldReset()) { // 1 second has passed - display last captured ups and fps from the timer win.Title = "Space Taxi | UPS: " + gameTimer.CapturedUpdates + ", FPS: " + gameTimer.CapturedFrames; } } }
public Game() { // window win = new Window("Space Taxi Game v0.1", 500, AspectRatio.R1X1); // event bus eventBus = new GameEventBus <object>(); SpaceTaxiBus.GetBus().InitializeEventBus(new List <GameEventType>() { GameEventType.InputEvent, GameEventType.WindowEvent, GameEventType.GameStateEvent, GameEventType.PlayerEvent }); win.RegisterEventBus(SpaceTaxiBus.GetBus()); // game timer gameTimer = new GameTimer(60); // 60 UPS, no FPS limit // game assets backGroundImage = new Entity( new StationaryShape(new Vec2F(0.0f, 0.0f), new Vec2F(1.0f, 1.0f)), new Image(Path.Combine("Assets", "Images", "SpaceBackground.png")) ); backGroundImage.RenderEntity(); // event delegation SpaceTaxiBus.GetBus().Subscribe(GameEventType.InputEvent, this); SpaceTaxiBus.GetBus().Subscribe(GameEventType.WindowEvent, this); SpaceTaxiBus.GetBus().Subscribe(GameEventType.GameStateEvent, this); //make level stateMachine = new StateMachine(this); }
public StateMachine(Game game) { SpaceTaxiBus.GetBus().Subscribe(GameEventType.GameStateEvent, this); SpaceTaxiBus.GetBus().Subscribe(GameEventType.InputEvent, this); this.game = game; ActiveState = MainMenu.GetInstance(); }
public void InitializeGameState() { player = new Player(); player.SetPosition(ChoseLevel.GetInstance().posX, ChoseLevel.GetInstance().posY); player.SetExtent(ChoseLevel.GetInstance().extX, ChoseLevel.GetInstance().extY); SpaceTaxiBus.GetBus().Subscribe(GameEventType.PlayerEvent, player); SpaceTaxiBus.GetBus().Subscribe(GameEventType.PlayerEvent, player); CreateLevel(ChoseLevel.GetInstance().filename); explosionStrides = ImageStride.CreateStrides(8, Path.Combine("Assets", "Images", "Explosion.png")); explosions = new AnimationContainer(5); currentVelocity = new Vec2F(0f, 0f); }
public void HandleKeyEvent(string keyValue, string keyAction) { switch (keyAction) { case "KEY_PRESS": switch (keyValue) { case "KEY_UP": if (activeMenuButton == 1) { menuButtons[0] = new Text("New Game", new Vec2F(0.35f, 0.1f), new Vec2F(0.5f, 0.4f)); menuButtons[1] = new Text("Choose Level", new Vec2F(0.35f, 0.0f), new Vec2F(0.4f, 0.4f)); menuButtons[0].SetColor(Color.Red); menuButtons[1].SetColor(Color.DarkRed); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 0; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); menuButtons[3].RenderText(); } if (activeMenuButton == 2) { menuButtons[1] = new Text("Choose Level", new Vec2F(0.35f, 0.0f), new Vec2F(0.5f, 0.4f)); menuButtons[2] = new Text("Quit", new Vec2F(0.35f, -0.1f), new Vec2F(0.4f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.Red); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 1; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); menuButtons[3].RenderText(); } break; case "KEY_DOWN": if (activeMenuButton == 1) { menuButtons[1] = new Text("Choose Level", new Vec2F(0.35f, 0.0f), new Vec2F(0.4f, 0.4f)); menuButtons[2] = new Text("Quit", new Vec2F(0.35f, -0.1f), new Vec2F(0.5f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.DarkRed); menuButtons[2].SetColor(Color.Red); activeMenuButton = 2; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); menuButtons[3].RenderText(); } if (activeMenuButton == 0) { menuButtons[0] = new Text("New Game", new Vec2F(0.35f, 0.1f), new Vec2F(0.4f, 0.4f)); menuButtons[1] = new Text("Choose Level", new Vec2F(0.35f, 0.0f), new Vec2F(0.5f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.Red); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 1; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); menuButtons[3].RenderText(); } break; case "KEY_ENTER": switch (activeMenuButton) { case 0: // new game button selected GameRunning.instance = null; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_RUNNING", "")); break; case 1: SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "CHOSE_LEVEL", "")); break; case 2: // quit SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.WindowEvent, this, "CLOSE_WINDOW", "", "")); break; } break; case "KEY_ESCAPE": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.WindowEvent, this, "CLOSE_WINDOW", "", "")); break; } break; case "KEY_RELEASE": break; } }
public void UpdateGameLogic() { foreach (var obstacle in currentLevel.obstacles) { var collisionData = CollisionDetection.Aabb(player.Entity.Shape.AsDynamicShape(), obstacle.Shape); if (collisionData.Collision) { if (obstacle.fileName.Equals(GetPlatformName())) { //if collision from below then gameover and explosion if (collisionData.DirectionFactor.Y < 1) { AddExplosion(player.shape.Position.X, player.shape.Position.Y, obstacle.shape.Extent.X + 0.1f, obstacle.shape.Extent.Y + 0.1f); SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_OVER", "")); } if (currentVelocity.Y < -0.0001f && currentVelocity.Y > -0.0075f) { isOnPlatform = true; currentVelocity.Y = 0; currentVelocity.X = 0; } } else { AddExplosion(player.shape.Position.X, player.shape.Position.Y, obstacle.shape.Extent.X + 0.1f, obstacle.shape.Extent.Y + 0.1f); SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_OVER", "")); } } else { if (player.shape.Position.Y > 1) { currentVelocity.Y = 0; currentVelocity.X = 0; isOnPlatform = true; GameRunning.instance = null; ChoseLevel.GetInstance().filename = "the-beach.txt"; ChoseLevel.GetInstance().posX = 0.25f; ChoseLevel.GetInstance().posY = 0.162f; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_RUNNING", "")); } } } }
public void HandleKeyEvent(string keyValue, string keyAction) { switch (keyAction) { case "KEY_PRESS": switch (keyValue) { case "KEY_ESCAPE": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_PAUSED", "")); break; case "KEY_UP": isOnPlatform = false; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForSpecificProcessor( GameEventType.PlayerEvent, this, player, "BOOSTER_UPWARDS", "", "")); break; case "KEY_LEFT": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForSpecificProcessor( GameEventType.PlayerEvent, this, player, "BOOSTER_TO_LEFT", "", "")); break; case "KEY_RIGHT": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForSpecificProcessor( GameEventType.PlayerEvent, this, player, "BOOSTER_TO_RIGHT", "", "")); break; default: Console.WriteLine("pressed"); break; } break; case "KEY_RELEASE": switch (keyValue) { case "KEY_LEFT": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForSpecificProcessor( GameEventType.PlayerEvent, this, player, "STOP_ACCELERATE_LEFT", "", "")); break; case "KEY_RIGHT": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForSpecificProcessor( GameEventType.PlayerEvent, this, player, "STOP_ACCELERATE_RIGHT", "", "")); break; case "KEY_UP": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForSpecificProcessor( GameEventType.PlayerEvent, this, player, "STOP_ACCELERATE_UP", "", "")); break; } break; } }
public void HandleKeyEvent(string keyValue, string keyAction) { switch (keyAction) { case "KEY_PRESS": switch (keyValue) { case "KEY_UP": if (activeMenuButton == 1) { menuButtons[0] = new Text("Short n Sweet", new Vec2F(0.35f, 0.2f), new Vec2F(0.5f, 0.4f)); menuButtons[1] = new Text("The Beach", new Vec2F(0.35f, 0.1f), new Vec2F(0.4f, 0.4f)); menuButtons[0].SetColor(Color.Red); menuButtons[1].SetColor(Color.DarkRed); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 0; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[1].RenderText(); } if (activeMenuButton == 2) { menuButtons[1] = new Text("The Beach", new Vec2F(0.35f, 0.1f), new Vec2F(0.5f, 0.4f)); menuButtons[2] = new Text("Back", new Vec2F(0.35f, 0.0f), new Vec2F(0.4f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.Red); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 1; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); } break; case "KEY_DOWN": if (activeMenuButton == 1) { menuButtons[1] = new Text("The Beach", new Vec2F(0.35f, 0.1f), new Vec2F(0.4f, 0.4f)); menuButtons[2] = new Text("Back", new Vec2F(0.35f, 0.0f), new Vec2F(0.5f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.DarkRed); menuButtons[2].SetColor(Color.Red); activeMenuButton = 2; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); } if (activeMenuButton == 0) { menuButtons[0] = new Text("Short n Sweet", new Vec2F(0.35f, 0.2f), new Vec2F(0.4f, 0.4f)); menuButtons[1] = new Text("The Beach", new Vec2F(0.35f, 0.1f), new Vec2F(0.5f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.Red); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 1; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); } break; case "KEY_ENTER": switch (activeMenuButton) { case 0: // short n sweet chose GameRunning.instance = null; filename = "short-n-sweet.txt"; posX = 0.45f; posY = 0.15f; extX = 0.1f; extY = 0.1f; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_RUNNING", filename)); break; case 1: // the beach chose GameRunning.instance = null; filename = "the-beach.txt"; posX = 0.25f; // posY = 0.162f; posY = 0.20f; extX = 0.1f; extY = 0.1f; GameRunning.instance = null; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_RUNNING", filename)); break; case 2: // back chose GameRunning.instance = null; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "MAIN_MENU", "")); break; } break; } break; case "KEY_RELEASE": break; } }
public void HandleKeyEvent(string keyValue, string keyAction) { switch (keyAction) { case "KEY_PRESS": switch (keyValue) { case "KEY_UP": if (activeMenuButton == 1) { menuButtons[1] = new Text("Main Menu", new Vec2F(0.35f, 0.1f), new Vec2F(0.4f, 0.4f)); menuButtons[0] = new Text("Continue", new Vec2F(0.35f, 0.2f), new Vec2F(0.5f, 0.4f)); menuButtons[0].SetColor(Color.Red); menuButtons[1].SetColor(Color.DarkRed); activeMenuButton = 0; menuButtons[0].RenderText(); menuButtons[1].RenderText(); } break; case "KEY_DOWN": if (activeMenuButton == 0) { menuButtons[0] = new Text("Continue", new Vec2F(0.35f, 0.2f), new Vec2F(0.4f, 0.4f)); menuButtons[1] = new Text("Main Menu", new Vec2F(0.35f, 0.1f), new Vec2F(0.5f, 0.4f)); menuButtons[0].SetColor(Color.DarkRed); menuButtons[1].SetColor(Color.Red); activeMenuButton = 1; menuButtons[0].RenderText(); menuButtons[1].RenderText(); } break; case "KEY_ENTER": switch (activeMenuButton) { case 0: // continue selected SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "GAME_RUNNING", "continue")); break; case 1: // back to main menu selected ChoseLevel.GetInstance().filename = "short-n-sweet.txt"; ChoseLevel.GetInstance().posX = 0.45f; ChoseLevel.GetInstance().posY = 0.075f; ChoseLevel.GetInstance().extX = 0.1f; ChoseLevel.GetInstance().extY = 0.1f; SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "MAIN_MENU", "")); break; } break; } break; case "KEY_RELEASE": break; } }
public void HandleKeyEvent(string keyValue, string keyAction) { switch (keyAction) { case "KEY_PRESS": switch (keyValue) { case "KEY_UP": if (activeMenuButton == 2) { menuButtons[1] = new Text("Main Menu", new Vec2F(0.35f, 0.1f), new Vec2F(0.5f, 0.4f)); menuButtons[2] = new Text("Quit", new Vec2F(0.35f, 0.0f), new Vec2F(0.4f, 0.4f)); menuButtons[1].SetColor(Color.Red); menuButtons[2].SetColor(Color.DarkRed); activeMenuButton = 1; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); } break; case "KEY_DOWN": if (activeMenuButton == 1) { menuButtons[1] = new Text("Main Menu", new Vec2F(0.35f, 0.1f), new Vec2F(0.4f, 0.4f)); menuButtons[2] = new Text("Quit", new Vec2F(0.35f, 0.0f), new Vec2F(0.5f, 0.4f)); menuButtons[1].SetColor(Color.DarkRed); menuButtons[2].SetColor(Color.Red); activeMenuButton = 2; menuButtons[0].RenderText(); menuButtons[1].RenderText(); menuButtons[2].RenderText(); } break; case "KEY_ENTER": switch (activeMenuButton) { case 1: SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.GameStateEvent, this, "CHANGE_STATE", "MAIN_MENU", "")); break; case 2: // quit SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.WindowEvent, this, "CLOSE_WINDOW", "", "")); break; } break; case "KEY_ESCAPE": SpaceTaxiBus.GetBus().RegisterEvent( GameEventFactory <object> .CreateGameEventForAllProcessors( GameEventType.WindowEvent, this, "CLOSE_WINDOW", "", "")); break; } break; case "KEY_RELEASE": break; } }