Example #1
0
        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;
            }
        }