/// <summary> /// Deals with Hardware input relivant to the playstate /// </summary> private void DealWithInput() { KeyboardState New_Key_State = Keyboard.GetState(); // SAVE THE CURRENT LEVEL TO A NEW LEVEL if (New_Key_State.IsKeyDown(Key.Period) && !Old_Key_State.IsKeyDown(Key.Period) || New_Key_State.IsKeyDown(Key.BracketLeft) && !Old_Key_State.IsKeyDown(Key.BracketLeft) || New_Key_State.IsKeyDown(Key.BracketRight) && !Old_Key_State.IsKeyDown(Key.BracketRight) || New_Key_State.IsKeyDown(Key.Slash) && !Old_Key_State.IsKeyDown(Key.Slash) || New_Key_State.IsKeyDown(Key.Semicolon) && !Old_Key_State.IsKeyDown(Key.Semicolon)) showUI = true; if (New_Key_State.IsKeyDown(Key.Period) && !Old_Key_State.IsKeyDown(Key.Period)) { _write_level_file("TestLevelWrite", 99); Console.WriteLine("Level Written"); } // Allow snapping for movement if (New_Key_State.IsKeyDown(Key.Slash) && !Old_Key_State.IsKeyDown(Key.Slash)) { AllowSnapping = !AllowSnapping; if (AllowSnapping) { UnitsToMove = 10.0f; } else { UnitsToMove = 1.0f; } Console.WriteLine("Snapping is: {0}", AllowSnapping.ToString()); } if (New_Key_State.IsKeyDown(Key.Semicolon) && !Old_Key_State.IsKeyDown(Key.Semicolon)) { int totalKeys = ObjectList.Keys.Count; listKey += 1; objectIter = 0; if (listKey > totalKeys - 1) { listKey = 0; } Console.WriteLine(" You are in {0}", listKey); } // If we are in 2D View, Allow user to zoom out and in with W and S if (!enable3d) { if (New_Key_State.IsKeyDown(Key.W)) { orthoWidth = Math.Max(192, orthoWidth - orthoWidth * 0.01); orthoHeight = Math.Max(108, orthoHeight - orthoHeight * 0.01); camera.Set2DCamera(orthoWidth, orthoHeight); } if (New_Key_State.IsKeyDown(Key.S)) { orthoWidth = Math.Min(1920, orthoWidth + orthoWidth * 0.01); orthoHeight = Math.Min(1080, orthoHeight + orthoHeight * 0.01); camera.Set2DCamera(orthoWidth, orthoHeight); } } // Testing the Level Design feature of re-loading LoadLevel after changing coords for a given game object if (eng.Keyboard[Key.F5]) { LevelDesignerState lds = new LevelDesignerState(eng, menustate, current_level); if (!window.IsActive) { window.Show(); } eng.ChangeState(lds); //LoadLevel.Load(0, pst); } if (eng.Keyboard[Key.Escape] || eng.Keyboard[Key.Tilde]) { //eng.PushState(menustate); eng.PushState(pms); } //********************** tab if (!camera.isInTransition && player.onGround) { if (eng.Keyboard[Key.Tab] && !tabDown) { enable3d = !enable3d; tabDown = true; player.velocity.Z = 0; camera.startTransition(enable3d); //figure out if the player gets a grace jump if (enable3d && player.onGround && !VectorUtil.overGround3dLoose(player, physList)) { player.viewSwitchJumpTimer = 1.0; } } else if (!eng.Keyboard[Key.Tab]) { tabDown = false; } } // Allow movement of the selected objects if (!enable3d) { if (New_Key_State.IsKeyDown(Key.Up) && !Old_Key_State.IsKeyDown(Key.Up)) { MoveObjects(SelectedObject, new Vector3(0.0f, UnitsToMove, 0.0f)); } if (New_Key_State.IsKeyDown(Key.Down) && !Old_Key_State.IsKeyDown(Key.Down)) { MoveObjects(SelectedObject, new Vector3(0.0f, -UnitsToMove, 0.0f)); } if (New_Key_State.IsKeyDown(Key.Left) && !Old_Key_State.IsKeyDown(Key.Left)) { MoveObjects(SelectedObject, new Vector3(-UnitsToMove, 0.0f, 0.0f)); } if (New_Key_State.IsKeyDown(Key.Right) && !Old_Key_State.IsKeyDown(Key.Right)) { MoveObjects(SelectedObject, new Vector3(UnitsToMove, 0.0f, 0.0f)); } // Moving between obstacles if (New_Key_State.IsKeyDown(Key.BracketLeft) && !Old_Key_State.IsKeyDown(Key.BracketLeft)) { if (objectIter - 1 < 0) objectIter = ObjectList[listKey].Count - 1; else objectIter--; Console.WriteLine("Using {0}", ObjectList[listKey][objectIter]); } if (New_Key_State.IsKeyDown(Key.BracketRight) && !Old_Key_State.IsKeyDown(Key.BracketRight)) { if (objectIter + 1 > ObjectList[listKey].Count - 1) objectIter = 0; else objectIter++; Console.WriteLine("Using {0}", ObjectList[listKey][objectIter]); } } #region 3D Move Controls else { if (New_Key_State.IsKeyDown(Key.Up) && !Old_Key_State.IsKeyDown(Key.Up) && !eng.Keyboard[Key.ControlLeft]) { MoveObjects(SelectedObject, new Vector3(UnitsToMove, 0.0f, 0.0f)); } if (New_Key_State.IsKeyDown(Key.Down) && !Old_Key_State.IsKeyDown(Key.Down) && !eng.Keyboard[Key.ControlLeft]) { MoveObjects(SelectedObject, new Vector3(-UnitsToMove, 0.0f, 0.0f)); } if (New_Key_State.IsKeyDown(Key.Left) && !Old_Key_State.IsKeyDown(Key.Left)) { MoveObjects(SelectedObject, new Vector3(0.0f, 0.0f, -UnitsToMove)); } if (New_Key_State.IsKeyDown(Key.Right) && !Old_Key_State.IsKeyDown(Key.Right)) { MoveObjects(SelectedObject, new Vector3(0.0f, 0.0f, UnitsToMove)); } if (New_Key_State.IsKeyDown(Key.Up) && !Old_Key_State.IsKeyDown(Key.Up) && eng.Keyboard[Key.ControlLeft]) { MoveObjects(SelectedObject, new Vector3(0.0f, UnitsToMove, 0.0f)); } if (New_Key_State.IsKeyDown(Key.Down) && !Old_Key_State.IsKeyDown(Key.Down) && eng.Keyboard[Key.ControlLeft]) { MoveObjects(SelectedObject, new Vector3(0.0f, -UnitsToMove, 0.0f)); } } #endregion Old_Key_State = New_Key_State; }
/// <summary> /// Called by mouse or keyboard handlers when the user picked a button (by clicking or hitting enter) /// </summary> internal void handleButtonPress() { switch(_cur_butn) { case 0: //new game loadPlayState(0); break; case 1: //load saved game loadPlayState(saved_level_index); break; case 2: //quit eng.Exit(); break; case 3: //level designer musicFile.Stop(); LevelDesignerState ls = new LevelDesignerState(eng, this, 0); eng.ChangeState(ls); eng.GameInProgress = true; break; } }