public void Update() { if (IsActive) { if (KeyboardManager.IsKeyPressed(Keys.Enter) && !KeyboardManager.IsPreviousKeyPressed(Keys.Enter)) { if (currentPage < playerSentences[currentPlayerSentence].pages.Count - 1) { currentPage++; } else { if (currentPlayerSentence < playerSentences.Count - 1) { currentPlayerSentence++; currentPage = 0; } else { Hide(); } } } } }
public void UpdateVelocity() { if (KeyboardManager.IsKeyPressed(Keys.Left)) { Velocity.X -= speed; } if (KeyboardManager.IsKeyPressed(Keys.Right)) { Velocity.X += speed; } if (KeyboardManager.IsKeyPressed(Keys.Up)) { Velocity.Y -= speed; } if (KeyboardManager.IsKeyPressed(Keys.Down)) { Velocity.Y += speed; } }
public void HandlePlayerCollision() { IsInTerminalArea = false; IsInExerciseArea = false; // will get slow for 50+ objects, not necessary to fix foreach (MapObject Object in map.MapObjects) { if (Object.IsCollidable == true) { if (Object.ObjectType == EObjectType.Door && GameProgress.Doors[Object.ObjectNumber] == EDoor.Open) { Object.SetRotation(); Object.IsCollidable = false; Object.IsCollisionResponseStatic = false; // Open/close teleport } if (RectangleHelper.IsCollision(player.PlayerArea, Object.Area)) { if (Object.IsCollisionResponseStatic) { player.ResolveStaticCollision(Object); } else { // more efficient than else if, could be sped up if every type had it's collision response in method switch (Object.ObjectType) { case EObjectType.Teleport: if (GameProgress.AreTeleportsActive[Object.ObjectNumber]) { map = new Map(Object.NextLevelPath, Content, player); } break; case EObjectType.Dialog: if (GameProgress.AreDialogsActive[Object.ObjectNumber]) { DialogManager.DisplayDialog(Object.DialogPath, dialogBox, Object.ObjectNumber); GameProgress.AreDialogsActive[Object.ObjectNumber] = false; } break; case EObjectType.Terminal: if (GameProgress.AreTerminalActive[Object.ObjectNumber]) { terminal = (Terminal)Object.Instance; IsInTerminalArea = true; if (KeyboardManager.IsKeyPressed(Keys.Space)) { terminal.IsActive = true; IsPlayerMovementBlock = true; //can cause problems } else if (KeyboardManager.IsKeyPressed(Keys.Escape)) { terminal.IsActive = false; IsPlayerMovementBlock = false; } } break; case EObjectType.Exercise: exercise = (Exercise)Object.Instance; IsInExerciseArea = true; if (KeyboardManager.IsKeyPressed(Keys.Space)) { exercise.IsActive = true; IsPlayerMovementBlock = true; //can cause problems } else if (KeyboardManager.IsKeyPressed(Keys.Escape)) { exercise.IsActive = false; IsPlayerMovementBlock = false; } break; } } } } } }
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); // first time GUI + end screen if (IsHelloPlayerActive) // intro { SpriteBatch helloSprite = new SpriteBatch(GraphicsDevice); helloSprite.Begin(); helloSprite.Draw(introduce, new Rectangle(0, 0, screenWidth, screenHeight), Color.White); if (KeyboardManager.IsKeyPressed(Keys.Enter)) { IsHelloPlayerActive = false; } helloSprite.End(); } else if (IsGameEnd) // outtro, has 2 modes { SpriteBatch endSprite = new SpriteBatch(GraphicsDevice); endSprite.Begin(); if (endScreenType) // game end 1 screen { gameEndScreen = Content.Load <Texture2D>("GameEnd1"); endSprite.Draw(gameEndScreen, new Rectangle(0, 0, screenWidth, screenHeight), Color.White); if (GameProgress.stopWatch.Elapsed.TotalSeconds > 2) { endScreenType = false; GameProgress.stopWatch.Stop(); } } else // game end 2 screen { gameEndScreen = Content.Load <Texture2D>("GameEnd2"); endSprite.Draw(gameEndScreen, new Rectangle(0, 0, screenWidth, screenHeight), Color.White); if (Keyboard.GetState().IsKeyDown(Keys.Escape)) // end game { Exit(); } } endSprite.End(); } // else we can draw game else { /* * Deferred - from back to front * PointClamp - nearest neighbour scaling (preserves pixelation, gets rid of ugly white spaces) * globalSpriteBatchMatrix - takes care of scaling and translation * */ spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, globalSpriteBatchMatrix); map.DrawLevel(spriteBatch, player); player.Draw(spriteBatch); // terminal handle code if (IsInTerminalArea && terminal != null) { if (terminal.IsActive) { terminal.DrawTerminal(spriteBatch, Content); terminal.EnterCode(); terminal.WriteActualCode(spriteBatch, dialogBox.TextScale); } else { terminal.WriteSpaceMessage(spriteBatch, dialogBox.TextScale); } } // exercise handle code if (IsInExerciseArea && exercise != null) { if (exercise.IsActive) { exercise.DrawExercise(spriteBatch, Content); } else { exercise.WriteSpaceMessage(spriteBatch, dialogBox.TextScale); } } spriteBatch.End(); dialogBox.Draw(GraphicsDevice); } base.Draw(gameTime); }
public void EnterCode() { if (userInput.Length < 4) { if (KeyboardManager.IsKeyPressed(Keys.D0) && !KeyboardManager.IsPreviousKeyPressed(Keys.D0)) { userInput += "0"; } else if (KeyboardManager.IsKeyPressed(Keys.D1) && !KeyboardManager.IsPreviousKeyPressed(Keys.D1)) { userInput += "1"; } else if (KeyboardManager.IsKeyPressed(Keys.D2) && !KeyboardManager.IsPreviousKeyPressed(Keys.D2)) { userInput += "2"; } else if (KeyboardManager.IsKeyPressed(Keys.D3) && !KeyboardManager.IsPreviousKeyPressed(Keys.D3)) { userInput += "3"; } else if (KeyboardManager.IsKeyPressed(Keys.D4) && !KeyboardManager.IsPreviousKeyPressed(Keys.D4)) { userInput += "4"; } else if (KeyboardManager.IsKeyPressed(Keys.D5) && !KeyboardManager.IsPreviousKeyPressed(Keys.D5)) { userInput += "5"; } else if (KeyboardManager.IsKeyPressed(Keys.D6) && !KeyboardManager.IsPreviousKeyPressed(Keys.D6)) { userInput += "6"; } else if (KeyboardManager.IsKeyPressed(Keys.D7) && !KeyboardManager.IsPreviousKeyPressed(Keys.D7)) { userInput += "7"; } else if (KeyboardManager.IsKeyPressed(Keys.D8) && !KeyboardManager.IsPreviousKeyPressed(Keys.D8)) { userInput += "8"; } else if (KeyboardManager.IsKeyPressed(Keys.D9) && !KeyboardManager.IsPreviousKeyPressed(Keys.D9)) { userInput += "9"; } } if (KeyboardManager.IsKeyPressed(Keys.Back) && !KeyboardManager.IsPreviousKeyPressed(Keys.Back)) { if (userInput.Length >= 1) { userInput = userInput.Substring(0, userInput.Length - 1); } } if (KeyboardManager.IsKeyPressed(Keys.Enter) && !KeyboardManager.IsPreviousKeyPressed(Keys.Enter)) { if (GameProgress.TerminalCodes[terminalNumber] == userInput) { GameProgress.SetTerminalValues(0); } else { framesCountFail = 60; } } }