예제 #1
0
        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();
        }