Reactor.RCamera.ChangeBehavior C# (CSharp) Method

ChangeBehavior() private method

Change to a new camera behavior.
private ChangeBehavior ( Behavior newBehavior ) : void
newBehavior Behavior The new camera behavior.
return void
        private void ChangeBehavior(Behavior newBehavior)
        {
            Behavior prevBehavior = behavior;

            if (prevBehavior == newBehavior)
                return;

            behavior = newBehavior;

            switch (newBehavior)
            {
                case Behavior.FirstPerson:
                    switch (prevBehavior)
                    {
                        case Behavior.Free:
                        case Behavior.Flight:
                        case Behavior.Spectator:
                            eye.Y = firstPersonYOffset;
                            UpdateViewMatrix();
                            break;

                        case Behavior.Orbit:
                            eye.X = savedEye.X;
                            eye.Z = savedEye.Z;
                            eye.Y = firstPersonYOffset;
                            orientation = savedOrientation;
                            accumPitchDegrees = savedAccumPitchDegrees;
                            UpdateViewMatrix();
                            break;

                        default:
                            break;
                    }

                    UndoRoll();
                    break;

                case Behavior.Spectator:
                    switch (prevBehavior)
                    {
                        case Behavior.Free:
                            UpdateViewMatrix();
                            break;
                        case Behavior.Flight:
                            UpdateViewMatrix();
                            break;

                        case Behavior.Orbit:
                            eye = savedEye;
                            orientation = savedOrientation;
                            accumPitchDegrees = savedAccumPitchDegrees;
                            UpdateViewMatrix();
                            break;

                        default:
                            break;
                    }

                    UndoRoll();
                    break;

                case Behavior.Flight:
                    if (prevBehavior == Behavior.Orbit)
                    {
                        eye = savedEye;
                        orientation = savedOrientation;
                        accumPitchDegrees = savedAccumPitchDegrees;
                        UpdateViewMatrix();
                    }
                    else
                    {
                        savedEye = eye;
                        UpdateViewMatrix();
                    }
                    break;

                case Behavior.Orbit:
                    if (prevBehavior == Behavior.FirstPerson)
                        firstPersonYOffset = eye.Y;

                    savedEye = eye;
                    savedOrientation = orientation;
                    savedAccumPitchDegrees = accumPitchDegrees;

                    targetYAxis = yAxis;

                    Vector3 newEye = eye + zAxis * orbitOffsetLength;

                    LookAt(R3DVECTOR.FromVector3(newEye), R3DVECTOR.FromVector3(eye), R3DVECTOR.FromVector3(targetYAxis));
                    break;
                case Behavior.Free:
                    if (prevBehavior == Behavior.Orbit)
                    {
                        eye = savedEye;
                        orientation = savedOrientation;
                        accumPitchDegrees = savedAccumPitchDegrees;
                        UpdateViewMatrix();
                    }
                    else
                    {
                        savedEye = eye;
                        UpdateViewMatrix();
                    }
                    break;

                default:
                    break;
            }
        }