public void HandleInput(GraphicsDevice device, MouseState mouse, KeyboardState kb, float dT) { //the screenshot key should work regardless of anything #region screenshot if (kb.IsKeyDown(Keys.F12) && PreviousKbState.IsKeyUp(Keys.F12)) { TakeScreenshot(device); } #endregion bool KeyboardHandled = WindowManager.FocusedText != null; #region all keyboard stuff if (!KeyboardHandled) { #region game windows if (kb.IsKeyDown(Keys.E) && PreviousKbState.IsKeyUp(Keys.E)) { ToggleWindow("inventory", new GameplayAssets.Windows.InventoryWindow(WindowManager, World.Player)); } if (kb.IsKeyDown(Keys.R) && PreviousKbState.IsKeyUp(Keys.R)) { ToggleWindow("equipment", new GameplayAssets.Windows.EquipWindow(WindowManager, World.Player)); } if (kb.IsKeyDown(Keys.T) && PreviousKbState.IsKeyUp(Keys.T)) { ToggleWindow("skills", new GameplayAssets.Windows.SkillTreeWindow(WindowManager, World.Player, abilities)); } #endregion #region map controls if (kb.IsKeyDown(Keys.Add) && PreviousKbState.IsKeyUp(Keys.Add)) { MapZoomLevel++; if (MapZoomLevel > 4) { MapZoomLevel = 4; } } if (kb.IsKeyDown(Keys.Subtract) && PreviousKbState.IsKeyUp(Keys.Subtract)) { MapZoomLevel--; if (MapZoomLevel < 1) { MapZoomLevel = 1; } } if (kb.IsKeyDown(Keys.Multiply) && PreviousKbState.IsKeyUp(Keys.Multiply)) { RotateMap = !RotateMap; } #endregion #region tabbing if (kb.IsKeyDown(Keys.Tab) && PreviousKbState.IsKeyUp(Keys.Tab)) { float Range = 50f; List <Monster> removes = new List <Monster>(); List <Monster> adds = new List <Monster>(); foreach (Monster m in Tablist) { if (m.IsDead) { removes.Add(m); continue; //no need to add twice } Vector3 dist = (m.Position - World.Player.Position); if (dist.Length() > Range) { removes.Add(m); } } List <MapEntity> mm = World.LocateNearby(World.Player); foreach (MapEntity e in mm) { if ((e as Monster) != null) { Vector3 dist = (e.Position - World.Player.Position); if (dist.Length() < Range) { adds.Add((e as Monster)); } } } adds = adds.OrderBy(v => ((Vector3)(v.Position - World.Player.Position)).Length()).ToList(); foreach (Monster r in removes) { Tablist.Remove(r); } Tablist.Clear(); foreach (Monster a in adds) { // if (!Tablist.Contains(a)) Tablist.Add(a); } if (Tablist.Count <= 0) { return; } if (World.Player.Target == null) { Tablistindex = 0; } else { Tablistindex++; } if (Tablistindex >= Tablist.Count) { Tablistindex = 0; } World.Player.Target = Tablist[Tablistindex]; } #endregion #region skills //later on target requirement also goes away as each skill checks individually if (kb.IsKeyDown(Keys.F1) && World.Player.Target != null) { InvokeFBind(0); } if (kb.IsKeyDown(Keys.F2) && World.Player.Target != null) { InvokeFBind(1); } if (kb.IsKeyDown(Keys.F3) && World.Player.Target != null) { InvokeFBind(2); } if (kb.IsKeyDown(Keys.F4) && World.Player.Target != null) { InvokeFBind(3); } if (kb.IsKeyDown(Keys.F5) && World.Player.Target != null) { InvokeFBind(4); } if (kb.IsKeyDown(Keys.F6) && World.Player.Target != null) { InvokeFBind(5); } if (kb.IsKeyDown(Keys.F7) && World.Player.Target != null) { InvokeFBind(6); } if (kb.IsKeyDown(Keys.F8) && World.Player.Target != null) { InvokeFBind(7); } #endregion #region gravity debug if (kb.IsKeyDown(Keys.F) && PreviousKbState.IsKeyUp(Keys.F)) { World.Player.Gravity = !World.Player.Gravity; } if (kb.IsKeyDown(Keys.F10) && PreviousKbState.IsKeyUp(Keys.F10)) { World.Entities.Clear(); World.Entities.Clear(); } #endregion #region jumping if (kb.IsKeyDown(Keys.Space) && (PreviousKbState.IsKeyUp(Keys.Space))) { if (!World.Player.Gravity) { World.Player.Position.Y += 1.1f; } else { World.Player.Jump(); } } #endregion #region WASD and forced walking if (World.Player.Executor == null) { if (kb.IsKeyDown(Keys.D)) { World.Player.Walking = false; World.Player.Speed = World.Player.GetMovementSpeed(); World.Player.Heading = World.Camera.Yaw - 180f; World.Player.AnimationMultiplier = World.Player.Speed / 10f; World.Player.Model.ApplyAnimation("Walk"); } else if (kb.IsKeyDown(Keys.A)) { World.Player.Walking = false; World.Player.Speed = World.Player.GetMovementSpeed(); World.Player.Heading = World.Camera.Yaw - 0f; World.Player.AnimationMultiplier = World.Player.Speed / 10f; World.Player.Model.ApplyAnimation("Walk"); } else if (kb.IsKeyDown(Keys.S)) { World.Player.Walking = false; World.Player.Speed = World.Player.GetMovementSpeed(); World.Player.Heading = World.Camera.Yaw - 90f; World.Player.AnimationMultiplier = World.Player.Speed / 10f; World.Player.Model.ApplyAnimation("Walk"); } else if (kb.IsKeyDown(Keys.W)) { World.Player.Walking = false; World.Player.Speed = World.Player.GetMovementSpeed(); World.Player.Heading = World.Camera.Yaw + 90f; World.Player.AnimationMultiplier = World.Player.Speed / 10f; World.Player.Model.ApplyAnimation("Walk"); } else if (World.Player.Walking) { //World.Player.Speed = World.Player.GetMovementSpeed() ; World.Player.AnimationMultiplier = World.Player.Speed / 10f; World.Player.Model.ApplyAnimation("Walk"); } else { World.Player.Speed = 0; World.Player.AnimationMultiplier = 1f; if (!World.Player.LetPlayOnce) { World.Player.Model.ApplyAnimation("Straighten"); } } } else { // World.Player.AnimationMultiplier = 1f; if (!World.Player.LetPlayOnce) { World.Player.Model.ApplyAnimation("Straighten"); } } #endregion #region zooming if (kb.IsKeyDown(Keys.Up)) { World.Camera.Distance *= 0.99f; } if (kb.IsKeyDown(Keys.Down)) { World.Camera.Distance /= 0.99f; } World.Camera.Distance = MathHelper.Clamp(World.Camera.Distance, 0.01f, 1010f); //World.Player.Position += mv; #endregion } #endregion /* idk wtf this is * if (kb.IsKeyUp(Keys.W) && kb.IsKeyUp(Keys.S)) * Accel -=0.25f*(Accel>=0?1:-1); * Vector3 mv= -World.Camera.GetMoveVector() * dT * Accel; * if (mv.Length() > 1f) * { * mv.X += 0.0f; * } * else if(Accel>20f) * { * mv.Y += 0.0f; * } * //*/ #region mouse code!! WindowManager.MouseX = mouse.X; WindowManager.MouseY = mouse.Y; bool MouseHandled = WindowManager.HandleMouse(mouse, dT); Vector3 r0 = device.Viewport.Unproject(new Vector3(mouse.X, mouse.Y, 0), World.Camera.GetProjection(device), World.Camera.GetView(), Matrix.Identity); Vector3 r1 = device.Viewport.Unproject(new Vector3(mouse.X, mouse.Y, 1), World.Camera.GetProjection(device), World.Camera.GetView(), Matrix.Identity); Vector3 vc = (r0 - r1); vc.Normalize(); Ray MouseRay = new Ray(r0, -vc); BoundingSphere bs; if (!MouseHandled) { List <MapEntity> targets = World.LocateNearby(World.Player); float closest = 9999; float? intersect = null; MapEntity Target = null; foreach (MapEntity t in targets) { bs = new BoundingSphere(t.Position.WRT(World.Player.Position), 1); intersect = bs.Intersects(MouseRay); if (intersect.HasValue && intersect.GetValueOrDefault(0) < closest) { Target = t; } } HoverTarget = Target; targets = null; WorldPosition check = MouseRay.Position; check.Normalize(); WorldPosition campos = World.Player.Position + ((Vector3)World.Player.Camera.GetCamVector() - World.Camera.Position.Truncate()); check.BX = World.Player.Position.BX; check.BY = World.Player.Position.BY; //* check.BX = campos.BX; check.BY = campos.BY; //*/ if (mouse.LeftButton == ButtonState.Pressed && PreviousMouseState.LeftButton == ButtonState.Released) { if (HoverTarget != null) { if (World.Player.Target == HoverTarget) { HoverTarget.DoubleClick(World.Player); if (World.Player.Target is NPC npc) { GUI.Window w = new Scenes.GameplayAssets.Windows.NPCWindow(Main.CurrentScene.WindowManager, npc, World.Player); WindowManager.Add(w); w.Visible = true; } } else { HoverTarget.Click(World.Player); } } else //if(kb.IsKeyDown(Keys.LeftShift)) { for (int i = 0; i < 1000; i++) { check += MouseRay.Direction / 1; float th = World.Terrain.GetHeight(check.Truncate(), check.Reference()) == 0 ? -127f : (float)World.Terrain.GetHeight(check.Truncate(), check.Reference()); if (check.Y - 0 < th) { TerrainClick(check); break; } } } } } if (mouse.RightButton == ButtonState.Pressed && !MouseHandled) { // this.IsMouseVisible = false; // Volatile.WindowManager.MovingWindow = null; //mouselook float DX = mouse.X - PreviousMouseState.X; float DY = mouse.Y - PreviousMouseState.Y; World.Camera.Yaw += DX * dT * 3.0f; World.Camera.Pitch -= DY * dT * 3.0f; World.Camera.Pitch = MathHelper.Clamp(World.Camera.Pitch, -89.0f, 89.0f); Mouse.SetPosition(PreviousMouseState.X, PreviousMouseState.Y); // Mouse.SetPosition(device.Viewport.Width / 2, device.Viewport.Height / 2); } else { //this.IsMouseVisible = true; } #endregion PreviousKbState = Keyboard.GetState(); PreviousMouseState = Mouse.GetState(); }