public Vector3 SimulateShipMovement(InputActionEnemy action, GameTime gameTime) { float second = (float)gameTime.ElapsedGameTime.TotalSeconds; float currentTurningSpeed = second * TurningSpeed; float ShipSpeedTest = ShipSpeed; switch (action) { case InputActionEnemy.Forward: ShipSpeedTest = MaxShipSpeed; break; case InputActionEnemy.Reverse: ShipSpeedTest = MinShipSpeed; break; case InputActionEnemy.Stop: ShipSpeedTest = 0; break; } Vector3 ShipPositionSim = ShipPosition; ShipPositionSim += Vector3.Transform(Vector3.UnitZ, ShipRotation) * (ShipSpeedTest * second); return ShipPositionSim; }
public override void MoveShip(InputActionEnemy action, GameTime gameTime) { //0.001f float second = (float)gameTime.ElapsedGameTime.TotalSeconds; float currentTurningSpeed = second * TurningSpeed; if (_deadLockDelay > 0) { ShipRotation = FollowShip(_alternateRotation, 0.0005f); } else { ShipRotation = FollowShip(ClosestFriendPosition, 0.0005f); } //Increments the Acceleration Variable. Acceleration should occur for 0.5 seconds. This means the ship has only 0.5 seconds to react to another movement. if (ShipSpeed == MaxShipSpeed) { if (_xIndexSpeed < 30) { _momentum = CalculateAcceleration(++_xIndexSpeed); } } else if (ShipSpeed == MinShipSpeed) { if (_xIndexSpeed > -30) { _momentum = CalculateAcceleration(--_xIndexSpeed) * -1; } } else if (_shipStopped) { if (_xIndexSpeed < 0) _momentum = CalculateAcceleration(++_xIndexSpeed); else if (_xIndexSpeed > 0) _momentum = CalculateAcceleration(--_xIndexSpeed); } switch (action) { case InputActionEnemy.Forward: //The Enemy cannot move until it finalizes it's acceleration. if (ShipSpeed != MaxShipSpeed) { ShipSpeed = MaxShipSpeed; _shipStopped = false; } break; case InputActionEnemy.Reverse: if (ShipSpeed != MinShipSpeed) { ShipSpeed = MinShipSpeed; _shipStopped = false; } break; case InputActionEnemy.Stop: if (!_shipStopped) { _shipStopped = true; } break; } //Updates ShipPosition. ShipPosition += Vector3.Transform(Vector3.UnitZ, ShipRotation) * (ShipSpeed * _momentum * second); //Updates ShipWorld. ShipWorld = Matrix.CreateFromQuaternion(ShipRotation) * Matrix.CreateTranslation(ShipPosition); }
public void MoveShip(InputActionEnemy action, GameTime gameTime) { float second = (float)gameTime.ElapsedGameTime.TotalSeconds; float currentTurningSpeed = second * TurningSpeed; if (_deadLockDelay > 0) { ShipRotation = FollowShip(_alternateRotation, 0.025f); } else { ShipRotation = FollowShip(ClosestEnemyPosition, 0.025f); } if (Acceleration < 1f) Acceleration += 0.034f; switch (action) { case InputActionEnemy.Forward: if (ShipSpeed != MaxShipSpeed && Acceleration >= 1f) { ShipSpeed = MaxShipSpeed; Acceleration = 0; } break; case InputActionEnemy.Reverse: if (ShipSpeed != MinShipSpeed && Acceleration >= 1f) { ShipSpeed = MinShipSpeed; Acceleration = 0; } break; case InputActionEnemy.Stop: if (ShipSpeed != 0 && Acceleration >= 1f) { ShipSpeed = 0; Acceleration = 0; } break; } ShipPosition += Vector3.Transform(Vector3.UnitZ, ShipRotation) * (ShipSpeed * Acceleration * second); ShipWorld = Matrix.CreateFromQuaternion(ShipRotation) * Matrix.CreateTranslation(ShipPosition); }