private void SimulationTick() { const double ELAPSEDTIME = .5; _ship.PrepareForNewTimerCycle(); #region Keyboard Forces if (_isUpPressed) { FireThruster(ThrusterKey.Up); } if (_isDownPressed) { FireThruster(ThrusterKey.Down); } if (_isLeftPressed) { FireThruster(ThrusterKey.Left); } if (_isRightPressed) { FireThruster(ThrusterKey.Right); } if (_isAPressed) { FireThruster(ThrusterKey.A); } if (_isSPressed) { FireThruster(ThrusterKey.S); } if (_isDPressed) { FireThruster(ThrusterKey.D); } if (_isWPressed) { FireThruster(ThrusterKey.W); } #endregion #region Pool Stick if (_isMouseDown) { MyVector mouseDownWorld = pictureBox1.GetPositionViewToWorld(new MyVector(_mouseDownPoint)); MyVector curMouseWorld = pictureBox1.GetPositionViewToWorld(new MyVector(_curMousePoint)); pictureBox1.DrawLine(Color.Yellow, 1, mouseDownWorld, curMouseWorld); pictureBox1.DrawLine(Color.Olive, 1, mouseDownWorld, _ship.Position + _ship.Rotation.GetRotatedVector(_ship.CenterOfMass, true)); } if (_isMouseJustReleased) { _isMouseJustReleased = false; MyVector mouseDownWorld = pictureBox1.GetPositionViewToWorld(new MyVector(_mouseDownPoint)); MyVector curMouseWorld = pictureBox1.GetPositionViewToWorld(new MyVector(_curMousePoint)); _ship.ApplyExternalForce(mouseDownWorld - _ship.Position, mouseDownWorld - curMouseWorld); } #endregion #region Gravity switch (_gravityMode) { case GravityMode.Down: _ship.ExternalForce.Add(new MyVector(0, 100, 0)); break; case GravityMode.Ball: for (int gravCntr = 0; gravCntr < _gravityBalls.Count; gravCntr++) { RunGravityBall(ELAPSEDTIME, _gravityBalls[gravCntr], _gravityBallColors[gravCntr]); } break; } #endregion _ship.TimerTestPosition(ELAPSEDTIME); _ship.TimerFinish(); }