Beispiel #1
0
        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);
        }
Beispiel #2
0
        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--;
            }
        }