private void DoCameraSlew() { if (_kbdActions.Any()) { _cameraSlewProgress = 1.0f; } if (_cameraSlewProgress < 1.0f) { _cameraActionMovement = Vector3.Zero; var newprogress = _cameraSlewProgress + _ticks / (CameraSlewTime * 1000); var totvector = new Vector3((float)(CenterSystem.x - _cameraPos.X), (float)(-CenterSystem.y - _cameraPos.Y), (float)(CenterSystem.z - _cameraPos.Z)); if (newprogress >= 1.0f) { _cameraPos = new Vector3((float)CenterSystem.x, (float)(-CenterSystem.y), (float)CenterSystem.z); } else { var slewstart = Math.Sin((_cameraSlewProgress - 0.5) * Math.PI); var slewend = Math.Sin((newprogress - 0.5) * Math.PI); var slewfact = (slewend - slewstart) / (1.0 - slewstart); _cameraPos += Vector3.Multiply(totvector, (float)slewfact); } _cameraSlewProgress = (float)newprogress; } }