public MoveCamera(Camera camera, MovementTime time, Vector3 toPosition, Func<Vector3> toLookAt) : base(camera) { _path = new[] {Camera.Position, toPosition}; EndTime = !time.UnitsPerSecond ? time.Time : (0.1f + pathLength())/time.Time; _toLookAt = toLookAt; }
public MoveCameraYaw(Camera camera, MovementTime time, Vector3 toPosition, Vector3 toLookAt) : base(camera) { _fromPosition = camera.Position; _fromYaw = camera.Yaw; _fromPitch = camera.Pitch; _toPosition = toPosition; _toYaw = (float) Math.Atan2(toPosition.X - toLookAt.X, toPosition.Z - toLookAt.Z); _toPitch = -(float)Math.Asin((_toPosition.Y - toLookAt.Y) / Vector3.Distance(_toPosition, toLookAt)); var angle = _fromYaw - _toYaw; if (angle > MathUtil.Pi) _fromYaw -= MathUtil.TwoPi; else if (angle < -MathUtil.Pi) _fromYaw += MathUtil.TwoPi; EndTime = time.GetTotalTime(Vector3.Distance(_fromPosition, _toPosition)); }