bool GameLoop() { bool openDoor = true; CollisionMan.PopulateCells(); CollisionMan.CheckCollisionCells(); if (screenShake > 0) { screenShake--; } gameStateC++; if (gameState == GameState.StartLevel) { level.Timer.Reset(); level.Timer.Start(); gameState = GameState.GamePlay; } if (gameState == GameState.ResetFadeOut) { level.Timer.Stop(); fadeOut = gameStateC * 10; if (gameStateC == 25) { gameStateC = 0; gameState = GameState.ResetFadeIn; level.ResetLevel(); } } if (gameState == GameState.ResetFadeIn) { level.ScrollTo(EntityFinder.FindOfType(typeof(Player)).Position, true); if (gameStateC > 10) { fadeOut = 255 - (int)((gameStateC - 10) * 6.3); } else { fadeOut = 255; } if (gameStateC == 50) { gameStateC = 0; gameState = GameState.StartLevel; } } if (gameState == GameState.LevelFinished) { level.Timer.Stop(); if (gameStateC < 50) { fadeOut = gameStateC * 5; } else { fadeOut = 255; } if (gameStateC == 2) { SoundMan.PlaySound("win", SoundMan.Center); } if (gameState == GameState.LevelFinished && gameStateC >= 70) { menu.Active = true; menu.State = Menu.MenuState.LevelWon; menu.CounterReset(); menu.LevelCompletiontime = level.Timer.Elapsed; menu.LevelName = levelName; return(false); } } if (!Keyboard.IsKeyPressed(Keyboard.Key.P)) { buttonTriggerP = false; } if (!buttonTriggerP && Keyboard.IsKeyPressed(Keyboard.Key.P)) { if (gameState == GameState.GamePlay) { gameState = GameState.Paused; level.Timer.Stop(); } else if (gameState == GameState.Paused) { gameState = GameState.GamePlay; level.Timer.Start(); } buttonTriggerP = true; } if (gameState == GameState.Paused) { fadeOut = 128; } if (gameState == GameState.GamePlay) { fadeOut = 0; for (int i = 0; i < level.GetEntities().Count; i++) { Entity ent = level.GetEntities()[i]; if (ent is StarBlock) { StarBlock starBlock = (StarBlock)ent; if (!starBlock.StarOnTop) { openDoor = false; } } if (windowHasFocus) { if (ent is Player) { Player player = (Player)ent; level.ScrollTo(player.Position, false); ControlPlayer(player); if (player.Position.Y > 140) { gameState = GameState.ResetFadeOut; gameStateC = 0; } } if (!ent.Destroyed) { ent.Act(); } else { if (ent.ScreenShake) { screenShake = 50; ent.ScreenShake = false; } } } } foreach (Entity ent in level.GetEntities()) { if (ent is Exit) { Exit exit = (Exit)ent; if (!exit.Open && openDoor) { SoundMan.PlaySound("open", exit.Position); exit.BounceC = 20; } exit.Open = openDoor; if (openDoor) { Entity entp = EntityFinder.FindOfType(typeof(Player)); if (entp != null) { Player pl = (Player)entp; if (pl.BlockedLeftEnt == exit || pl.BlockedRightEnt == exit || pl.CeilingEnt == exit || pl.GroundEnt == exit) { gameState = GameState.LevelFinished; gameStateC = 0; } } } } } } SoundMan.Center = new Vector2f(level.Scroll.X + 160, level.Scroll.Y + 60); //level.GetEntities().RemoveAll(a => a.Destroyed); if (Keyboard.IsKeyPressed(Keyboard.Key.Escape) && windowHasFocus) { menu.Active = true; menu.State = Menu.MenuState.PlayMenu; menu.CounterReset(); } return(true); }
public void Loop(RenderWindow window) { counter++; CursorPosF = new Vector2f(CursorPos.X * 16, CursorPos.Y * 16 + 8); Level.ScrollTo(CursorPosF, false); Level.GetEntities().RemoveAll(a => a.Destroyed); Type entType = Level.EntityTypes[currentEnt]; cursorEnt = (Entity)Activator.CreateInstance(entType, CursorPos); if (buttonDelay == 0) { if (Keyboard.IsKeyPressed(Keyboard.Key.F3) || Keyboard.IsKeyPressed(Keyboard.Key.F5) || Keyboard.IsKeyPressed(Keyboard.Key.F1) ) { showTextWindow = !showTextWindow; if (Keyboard.IsKeyPressed(Keyboard.Key.F3)) { textInputOperation = TextInputOperation.Save; } if (Keyboard.IsKeyPressed(Keyboard.Key.F5)) { textInputOperation = TextInputOperation.Load; } if (Keyboard.IsKeyPressed(Keyboard.Key.F1)) { textInputOperation = TextInputOperation.InfoBox; } if (textInputOperation == TextInputOperation.Save || textInputOperation == TextInputOperation.Load) { textInputString = LevelName; } bool addEvent = true; if (textInputOperation == TextInputOperation.InfoBox) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null && ent is InfoBox) { InfoBox infoBox = (InfoBox)ent; textInputString = infoBox.InfoString; } else { showTextWindow = false; addEvent = false; } } if (addEvent) { if (showTextWindow) { window.TextEntered += TextEntered; } else { window.TextEntered -= TextEntered; } } buttonDelay = 20; } if (showTextWindow) { if (Keyboard.IsKeyPressed(Keyboard.Key.Return)) { if (textInputOperation == TextInputOperation.Save) { LevelName = textInputString; Level.SaveLevel(LevelName); } if (textInputOperation == TextInputOperation.Load) { LevelName = textInputString; Level.LoadLevel(LevelName, true); CollisionMan.Entities = Level.GetEntities(); EntityFinder.Entities = Level.GetEntities(); } if (textInputOperation == TextInputOperation.InfoBox) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null && ent is InfoBox) { InfoBox infoBox = (InfoBox)ent; infoBox.InfoString = textInputString; } } showTextWindow = false; window.TextEntered -= TextEntered; } if (Keyboard.IsKeyPressed(Keyboard.Key.Escape)) { showTextWindow = false; window.TextEntered -= TextEntered; } } } if (buttonDelay == 0 && !showTextWindow) { if (Keyboard.IsKeyPressed(Keyboard.Key.Z)) { if (currentEnt > 0) { currentEnt--; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.X)) { if (currentEnt < Level.EntityTypes.Count - 1) { currentEnt++; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.F12)) { Level.GetEntities().Clear(); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Delete)) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null) { ent.Destroyed = true; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.F)) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null) { ent.Flipped = !ent.Flipped; } buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Space)) { Entity ent = EntityFinder.GetEnt(new Vector2f(CursorPosF.X + 8, CursorPosF.Y - 8)); if (ent != null) { ent.Destroyed = true; } Entity newEnt = (Entity)Activator.CreateInstance(entType, CursorPos); Level.GetEntities().Add(newEnt); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Right)) { CursorPos = new Vector2i(CursorPos.X + 1, CursorPos.Y); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Left)) { CursorPos = new Vector2i(CursorPos.X - 1, CursorPos.Y); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Up)) { CursorPos = new Vector2i(CursorPos.X, CursorPos.Y - 1); buttonDelay = 10; } if (Keyboard.IsKeyPressed(Keyboard.Key.Down)) { CursorPos = new Vector2i(CursorPos.X, CursorPos.Y + 1); buttonDelay = 10; } } if (buttonDelay > 0) { buttonDelay--; } }