/* * Handles all user input to the game, depending on the keyboard/mouse states and the screen's state. */ public void update(GameTime time) { KeyboardState kbs = Keyboard.GetState(); Vector2 destination; /* Normal gameplay (player has control of character's movement*/ if (screenManager.getActiveScreen().getName() == "Normal") { if (kbs.IsKeyDown(Keys.Escape)) { game.Exit(); } else if (kbs.IsKeyDown(Keys.W)) { Console.WriteLine("player: " + player.getLocation().ToString()); player.setDirection(Direction.NORTH); destination = new Vector2(player.getLocation().X, player.getLocation().Y - stepSize); if (player.getLocation().Y + stepSize > 0 && collisionManager.isValid(destination, player)) { player.deriveY(-stepSize); } else { Console.WriteLine("u wanna go north? nty"); } } else if (kbs.IsKeyDown(Keys.S)) { Console.WriteLine("player: " + player.getLocation().ToString()); player.setDirection(Direction.SOUTH); destination = new Vector2(player.getLocation().X, player.getLocation().Y + stepSize); if (player.getLocation().Y + stepSize < midY * 2 && collisionManager.isValid(destination, player)) { player.deriveY(stepSize); } else { Console.WriteLine("u wanna go south? nty"); } } else if (kbs.IsKeyDown(Keys.A)) { Console.WriteLine("player: " + player.getLocation().ToString()); player.setDirection(Direction.WEST); destination = new Vector2(player.getLocation().X - stepSize, player.getLocation().Y); if (player.getLocation().X + stepSize > 0 && collisionManager.isValid(destination, player)) { player.deriveX(-stepSize); } else { Console.WriteLine("u wanna go west? nty"); } } else if (kbs.IsKeyDown(Keys.D)) { Console.WriteLine("player: " + player.getLocation().ToString()); player.setDirection(Direction.EAST); destination = new Vector2(player.getLocation().X + stepSize, player.getLocation().Y); if (player.getLocation().X + stepSize < midX * 2 && collisionManager.isValid(destination, player)) { player.deriveX(stepSize); } else { Console.WriteLine("u wanna go east? nty"); } } if (kbs.IsKeyDown(Keys.Space)) { double totalMilliseconds = time.TotalGameTime.TotalMilliseconds; if (player.getLastFired() == -1 || totalMilliseconds - player.getLastFired() >= player.getProjectile().getCooldown()) { level.addProjectile(player.createProjectile(totalMilliseconds)); } /*foreach (Entity e in level.getNpcs()) { * if (e != null) { * npc.deriveHealth(-50); * // handle projectile interaction with npcs * // if hit, derive npc health by -1 * skilltree power * Console.WriteLine("Health: " + npc.getHealth()); * } * }*/ } else if (kbs.IsKeyDown(Keys.X)) { //switch to telekinesis-select mode (player clicks a liftable object to select it) screenManager.setActiveScreen(2); Console.WriteLine("Entered telekinesis mode!"); } } /* Just entered telekinesis mode (player uses mouse to select a liftable object)*/ else if (screenManager.getActiveScreen().getName() == "Telekinesis-Select") { lastState = state; state = Mouse.GetState().LeftButton; if (lastState.Equals(ButtonState.Pressed) && state.Equals(ButtonState.Released)) { foreach (GameObject obj in level.getObjects()) { if (obj != null && obj.isLiftable()) { Point p = new Point(Mouse.GetState().X, Mouse.GetState().Y); if (p != null && obj.getBounds().Contains(p)) { //select object obj.setSelected(true); selectedObject = obj; //switch screen state to telekinesis-move (control over selected object) screenManager.setActiveScreen(3); Console.WriteLine("obj contains mouse!"); } } } Console.WriteLine("Mouse pressed"); } else if (kbs.IsKeyDown(Keys.X)) { //switch to telekinesis-select mode (player clicks a liftable object to select it) screenManager.setActiveScreen(1); Console.WriteLine("Entered telekinesis mode!"); } } /* Telekinetic lifting mode (player controls the selected object's movement)*/ else if (screenManager.getActiveScreen().getName() == "Telekinesis-Move") { if (kbs.IsKeyDown(Keys.Escape)) { game.Exit(); } else if (kbs.IsKeyDown(Keys.W)) { Console.WriteLine("selectedObject: " + selectedObject.getLocation().ToString()); selectedObject.setDirection(Direction.NORTH); //destination = new Vector2(selectedObject.getLocation().X, selectedObject.getLocation().Y + stepSize); if (selectedObject.getLocation().Y + stepSize > 0 /* && collisionManager.isValid(destination)*/) { selectedObject.deriveY(-stepSize); } else { Console.WriteLine("u wanna go north? nty"); } } else if (kbs.IsKeyDown(Keys.S)) { Console.WriteLine("selectedObject: " + selectedObject.getLocation().ToString()); selectedObject.setDirection(Direction.SOUTH); //destination = new Vector2(selectedObject.getLocation().X, selectedObject.getLocation().Y - stepSize); if (selectedObject.getLocation().Y - stepSize < midY * 2 /* && collisionManager.isValid(destination)*/) { selectedObject.deriveY(stepSize); } else { Console.WriteLine("u wanna go south? nty"); } } else if (kbs.IsKeyDown(Keys.A)) { Console.WriteLine("selectedObject: " + selectedObject.getLocation().ToString()); selectedObject.setDirection(Direction.WEST); //destination = new Vector2(selectedObject.getLocation().X + stepSize, selectedObject.getLocation().Y); if (selectedObject.getLocation().X + stepSize > 0 /* && collisionManager.isValid(destination)*/) { selectedObject.deriveX(-stepSize); } else { Console.WriteLine("u wanna go west? nty"); } } else if (kbs.IsKeyDown(Keys.D)) { Console.WriteLine("selectedObject: " + selectedObject.getLocation().ToString()); selectedObject.setDirection(Direction.EAST); //destination = new Vector2(selectedObject.getLocation().X - stepSize, selectedObject.getLocation().Y); //Console.WriteLine("dest: " + destination.ToString()); if (selectedObject.getLocation().X - stepSize < midX * 2 /* && collisionManager.isValid(destination)*/) { selectedObject.deriveX(stepSize); } else { Console.WriteLine("u wanna go east? nty"); } } if (kbs.IsKeyDown(Keys.Space)) { } else if (kbs.IsKeyDown(Keys.X)) { //deselect object selectedObject.setSelected(false); selectedObject = null; //switch back to normal screen state (control over character) screenManager.setActiveScreen(1); Console.WriteLine("Exited telekinesis mode."); } } }