public override void UpdateAfterSimulation() { // Change world matrix by rotation (order of matrix multiplications is important!!!) var rotationMatrix = Matrix.CreateRotationZ(m_rotatingSpeed * MyDrillDeviceConstants.ROTATION_SPEED_PER_SECOND * MyConstants.PHYSICS_STEP_SIZE_IN_SECONDS); LocalMatrix = rotationMatrix * LocalMatrix; m_rotationMatrix = rotationMatrix * m_rotationMatrix; base.UpdateAfterSimulation(); if (CurrentState == MyDrillStateEnum.InsideShip) { return; } MyAudio.UpdateCueRotationSpeed(m_drillCue, ((m_rotatingSpeed - m_maxRotatingSpeedIdle) / (m_maxRotatingSpeedDrilling - m_maxRotatingSpeedIdle) * 100)); MyAudio.UpdateCueRotationSpeed(m_movingCue, ((m_rotatingSpeed - m_maxRotatingSpeedIdle) / (m_maxRotatingSpeedDrilling - m_maxRotatingSpeedIdle) * 100)); MyAudio.UpdateCueRotationSpeed(m_movingCueRelease, ((m_rotatingSpeed - m_maxRotatingSpeedIdle) / (m_maxRotatingSpeedDrilling - m_maxRotatingSpeedIdle) * 100)); MyAudio.UpdateCueRotationSpeed(m_idleCue, ((m_rotatingSpeed - m_maxRotatingSpeedIdle) / (m_maxRotatingSpeedDrilling - m_maxRotatingSpeedIdle) * 100)); if (m_drillBits != null) { for (int i = 0; i < DRILL_BIT_COUNT; i++) { m_drillBits[i].SetWorldMatrixForCockpit(ref m_worldMatrixForRenderingFromCockpitView); } } }