protected override void Awake() { base.Awake(); Time.timeScale = TimeScale; RigidBody.AddTorque(40f); }
public void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); //ManipulateScrolling(mouseState); Vector2 mousePosition = new Vector2(mouseState.X, mouseState.Y); if (mousePosition.X <= 0 || mousePosition.X >= 900 || mousePosition.Y >= 550 || mousePosition.Y <= 0) { posPressed = new Vector2(0, 0); return; } //if (!IsMouseClickedBefore) //{ if (mouseState.LeftButton == ButtonState.Pressed) { if (posPressed == new Vector2(0, 0)) { posPressed = mousePosition; } if (_isCaptured) { //if (StaticData.CurrentVisual2D is RocketCarrierService) //{ // StaticData.EngineManager.RocketsCarrierManagerEngine.RemoveService(StaticData.CurrentVisual2D as RocketCarrierService); //} if (StaticData.CurrentVisual2D is RigidBody) { //_currentSpringService = // SpringService.CatchSpringServiceForRigidBody(StaticData.CurrentVisual2D as RigidBody); RigidBody rigidBody = StaticData.CurrentVisual2D as RigidBody; switch (StaticData.ManipulationGameMode) { case ManipulationGameMode.TorqueManipulationMode: { Vector3 forceOfTorque = new Vector3(mousePosition.X, mousePosition.Y, 0) - new Vector3(mousePositionStart.X, mousePositionStart.Y, 0); forceOfTorque *= rigidBody.Mass; rigidBody.AddTorque(forceOfTorque, mousePositionStart); } break; case ManipulationGameMode.ForceManipulationMode: { Vector3 force = new Vector3(mousePosition.X, mousePosition.Y, 0) - new Vector3(mousePositionStart.X, mousePositionStart.Y, 0); force *= rigidBody.Mass * 10; rigidBody.AddForce(force); } break; case ManipulationGameMode.DeleteRigidMode: StaticData.EngineManager.RigidsManagerEngine.DeleteRigid(rigidBody); break; case ManipulationGameMode.DragRigidMode: ((RigidBody) StaticData.CurrentVisual2D).PositionXNA = new Vector3(mousePosition.X, mousePosition.Y, 0); break; //case ManipulationGameMode.DeleteRopesMode: // TryDeleteRope(); // break; //case ManipulationGameMode.DeleteBubblesMode: // TryDeleteBubbles(); // break; } } else { switch (StaticData.ManipulationGameMode) { case ManipulationGameMode.DragRigidMode: StaticData.CurrentVisual2D.SetPositionXNA(new Vector3(mousePosition.X, mousePosition.Y, 0)); break; case ManipulationGameMode.DeleteRigidMode: DeleteNonRigidBodies(); break; } } if (StaticData.ManipulationGameMode == ManipulationGameMode.SetStaticComps && staticCompsClick == false) { staticCompsClick = true; StaticData.EngineManager.PrefCompsManager.ToggleComponentSetterState( StaticData.CurrentVisual2D); } } else { var tryVisual = CatchVisual2D(); if (tryVisual != null) { StaticData.CurrentVisual2D = tryVisual; mousePositionStart = new Vector3(mousePosition.X, mousePosition.Y, 0); _isCaptured = true; } } } //} //if (StaticData.ManipulationGameMode == ManipulationGameMode.DeleteBubblesMode) // TryDeleteBubbles(); if (mouseState.LeftButton == ButtonState.Released) { if (posPressed != new Vector2(0, 0) && StaticData.GameSessionMode == SessionMode.PlayingMode) { posReleased = mousePosition; TryRopeCut(posPressed, posReleased); posPressed = new Vector2(0, 0); } _isCaptured = false; staticCompsClick = false; } }
/// <summary> /// Apply a torque. This affects the angular velocity without affecting the linear velocity of /// the center of mass. It wakes up the body. /// </summary> public override void ApplyTorque(Vector3D torque) { jitterBody.AddTorque(JitterDatatypesMapping.Convert(ref torque)); }