예제 #1
0
    /// <summary>
    /// Reads player input and sets the appropriate info for the movement startegy to use.
    /// </summary>
    private void ReadPlayerInput()
    {
        // Determine horizontal movement

        // First we attempt to use Input.GetAxisRaw in case the player is using a controller.
        // We use GetAxisRaw to avoid Unity's automatic smoothing to enable the player to stop on a dime.
        // Multiply the input by our movement speed to allow controller users to input analog movement
        horizontalMovement = Input.GetAxisRaw("Horizontal") * movementSpeed;

        // If no axis movement was detected, read the keys with out custom keybinding
        if (horizontalMovement == 0)
        {
            if (keyBinding.GetKey("Left") && !keyBinding.GetKey("Right"))
            {
                horizontalMovement = -movementSpeed;
            }
            else if (!keyBinding.GetKey("Left") && keyBinding.GetKey("Right"))
            {
                horizontalMovement = movementSpeed;
            }
        }

        // Determine if player wants to jump
        // We only want to change jump if it is already false, changing its value when its true can result in missed inputs
        if (!jump)
        {
            jump = keyBinding.GetKeyDown("Jump");
        }

        // Check if the current animal should be switched, using the same method as with jumps
        if (!switchAnimal)
        {
            switchAnimal = keyBinding.GetKeyDown("Switch");
        }
    }
        public void LateUpdate()
        {
            // In the VAB
            if (vessel == null)
            {
                return;
            }

            if (sCurrentHandler == null)
            {
                sCurrentHandler = this;
            }


            if (sCurrentCamera != null)
            {
                if (sCurrentCamera.vessel != FlightGlobals.ActiveVessel)
                {
                    Vector3d activeVesselPos = FlightGlobals.ActiveVessel.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()) + FlightGlobals.ActiveVessel.orbit.referenceBody.position;
                    Vector3d targetVesselPos = sCurrentCamera.vessel.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()) + sCurrentCamera.vessel.orbit.referenceBody.position;

                    sCameraDistance = (activeVesselPos - targetVesselPos).magnitude;

                    if (sCameraDistance >= 2480)
                    {
                        LeaveCamera();
                    }
                }
            }

            if (CameraManager.Instance.currentCameraMode != CameraManager.CameraMode.Flight)
            {
                return;
            }

#if true
            if (sActionFlags.deactivateCamera || CAMERA_RESET.GetKeyDown() || GameSettings.CAMERA_NEXT.GetKeyDown())
            {
                LeaveCamera();
                sActionFlags.deactivateCamera = false;
            }
#endif
            if (sActionFlags.nextCamera || (sCurrentHandler == this && CAMERA_NEXT.GetKeyDown()))
            {
                CycleCamera(1);
                sActionFlags.nextCamera = false;
            }
#if true
            if (sActionFlags.prevCamera || (sCurrentHandler == this && CAMERA_PREV.GetKeyDown()))
            {
                if (sCameras.IndexOf(sCurrentCamera) != -1)
                {
                    CycleCamera(-1);
                    sActionFlags.prevCamera = false;
                }
                else
                {
                    DebugOutput(" 2");
                    CycleCamera(sCameras.Count);
                }
            }
#endif



            /*
             *  if (sCurrentCamera == this)
             *          {
             *      if (Input.GetKeyUp(KeyCode.Keypad8))
             *      {
             *          cameraPosition += cameraUp * 0.1f;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad2))
             *      {
             *          cameraPosition -= cameraUp * 0.1f;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad6))
             *      {
             *          cameraPosition += cameraForward * 0.1f;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad4))
             *      {
             *          cameraPosition -= cameraForward * 0.1f;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad7))
             *      {
             *          cameraClip += 0.05f;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad1))
             *      {
             *          cameraClip -= 0.05f;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad9))
             *      {
             *          cameraFoV += 5;
             *      }
             *      if (Input.GetKeyUp(KeyCode.Keypad3))
             *      {
             *          cameraFoV -= 5;
             *      }
             *      if (Input.GetKeyUp(KeyCode.KeypadMinus))
             *      {
             *          print("Position: " + cameraPosition + " - Clip = " + cameraClip + " - FoV = " + cameraFoV);
             *      }
             *  } */
            doOnUpdate();
        }
        void Update()
        {
            if (ADJUST_LOOK.GetKeyDown())
            {
                adjustLook = true;
            }
            if (ADJUST_LOOK.GetKeyUp())
            {
                adjustLook = false;
            }


            if (InternalCamera.Instance != null && InternalCamera.Instance.isActive)  //checking if camera is IVA
            {
                if (!isIVA)
                {
                    isIVA = true;
                }
            }
            else
            {
                if (isIVA)
                {
                    isIVA = false;
                }
            }

            #region Chase(locked) mode
            if (FlightCamera.fetch.mode == FlightCamera.Modes.LOCKED && !MapView.MapIsEnabled && !FlightGlobals.ActiveVessel.isEVA)
            {
                Vector3 lookVector = Quaternion.Inverse(FlightGlobals.ActiveVessel.transform.rotation) * FlightGlobals.ActiveVessel.GetSrfVelocity();
                //lookvector X is left/right velocity, Y is forward velocity, Z is up/down velocity

                Vector3    forwardVector = new Vector3(0f, 1f, 0f);
                Quaternion pitchAngleQ   = Quaternion.FromToRotation(forwardVector, lookVector);
                //float lerpRate = Mathf.Clamp((float) FlightGlobals.ActiveVessel.srf_velocity.magnitude / 50f, 0f, 1f);
                float lerpRate;
                if (Time.time - timeCheck < 2)
                {
                    lerpRate = 0.1f;
                }
                else
                {
                    lerpRate = 1;
                }

                if (adjustLook)
                {
                    snapHeading = FlightCamera.fetch.camHdg - (0 - pitchAngleQ.Roll());
                    snapPitch   = FlightCamera.fetch.camPitch - (0 + pitchAngleQ.Pitch());
                }

                if (defaultOn && defaultFiredMode != "CHASE")
                {
                    enableChase      = true;
                    defaultFiredMode = "CHASE";

                    ScreenMessages.RemoveMessage(chaseOn);
                    ScreenMessages.RemoveMessage(chaseOff);
                    ScreenMessages.RemoveMessage(freeChaseOn);
                    ScreenMessages.RemoveMessage(freeChaseOff);

                    ScreenMessages.PostScreenMessage(chaseOn);
                    timeCheck   = Time.time;
                    snapHeading = 0;
                    snapPitch   = defaultAngle * Mathf.Deg2Rad;
                    //FlightCamera.fetch.SetFoV(setFov);
                }

                if (ENABLE_CHASE.GetKeyDown())
                {
                    if (enableChase)
                    {
                        ScreenMessages.RemoveMessage(chaseOn);
                        ScreenMessages.RemoveMessage(chaseOff);
                        ScreenMessages.RemoveMessage(freeChaseOn);
                        ScreenMessages.RemoveMessage(freeChaseOff);

                        ScreenMessages.PostScreenMessage(chaseOff);
                        FlightCamera.fetch.SetFoV(FlightCamera.fetch.fovDefault);
                    }
                    if (!enableChase)
                    {
                        ScreenMessages.RemoveMessage(chaseOn);
                        ScreenMessages.RemoveMessage(chaseOff);
                        ScreenMessages.RemoveMessage(freeChaseOn);
                        ScreenMessages.RemoveMessage(freeChaseOff);

                        ScreenMessages.PostScreenMessage(chaseOn);
                        timeCheck   = Time.time;
                        snapHeading = 0;
                        snapPitch   = defaultAngle * Mathf.Deg2Rad;
                        //FlightCamera.fetch.SetFoV(setFov);
                    }
                    enableChase = !enableChase;
                }

                if (enableChase && FlightGlobals.ActiveVessel != null && !adjustLook) //runs continuously while in chase cam on an active vessel when not adjusting look angle
                {
                    if (FlightGlobals.ActiveVessel.srf_velocity.magnitude > 0.5)
                    {
                        targetPitch = (0 + pitchAngleQ.Pitch() + snapPitch);
                        FlightCamera.fetch.camPitch = Mathf.Lerp(FlightCamera.fetch.camPitch, targetPitch, lerpRate);
                        targetHeading             = (0 - pitchAngleQ.Roll() + snapHeading);
                        FlightCamera.fetch.camHdg = Mathf.Lerp(FlightCamera.fetch.camHdg, targetHeading, lerpRate);
                    }
                }
            }
            if (FlightCamera.fetch.mode != FlightCamera.Modes.LOCKED && enableChase) //runs once on switching out of chase cam
            {
                //setCam = false;
                enableChase = false;
            }
            #endregion



            #region Free chase mode
            if (FlightCamera.fetch.mode == FlightCamera.Modes.FREE && !MapView.MapIsEnabled && !FlightGlobals.ActiveVessel.isEVA)
            {
                Vessel     v           = FlightGlobals.ActiveVessel;
                Quaternion vesselRot   = getSrfRotation(v);
                float      headingRads = vesselRot.eulerAngles.y * Mathf.Deg2Rad;
                float      pitchRads   = ((vesselRot.eulerAngles.x > 180f) ? (360.0f - vesselRot.eulerAngles.x) : -vesselRot.eulerAngles.x) * Mathf.Deg2Rad; //cred to r4m0n
                float      rollDegrees = ((vesselRot.eulerAngles.z > 180f) ? (vesselRot.eulerAngles.z - 360.0f) : vesselRot.eulerAngles.z);

                Vector3 lookVector = Quaternion.Inverse(FlightGlobals.ActiveVessel.transform.rotation) * FlightGlobals.ActiveVessel.GetSrfVelocity();
                //lookvector X is left/right velocity, Y is forward velocity, Z is up/down velocity
                Vector3    forwardVector = new Vector3(0f, 1f, 0f);
                Quaternion rollAdjust    = Quaternion.AngleAxis(rollDegrees, forwardVector);
                lookVector = rollAdjust * lookVector;

                Quaternion viewAngleQ = Quaternion.FromToRotation(forwardVector, lookVector);



                if (defaultOn && defaultFiredMode != "FREE")
                {
                    enableFreeChase  = true;
                    defaultFiredMode = "FREE";

                    ScreenMessages.RemoveMessage(chaseOn);
                    ScreenMessages.RemoveMessage(chaseOff);
                    ScreenMessages.RemoveMessage(freeChaseOn);
                    ScreenMessages.RemoveMessage(freeChaseOff);

                    ScreenMessages.PostScreenMessage(freeChaseOn);
                    snapHeading = 0;
                    snapPitch   = defaultAngle * Mathf.Deg2Rad;
                    //FlightCamera.fetch.SetFoV(setFov);
                    timeCheck = Time.time;
                }

                if (ENABLE_CHASE.GetKeyDown())
                {
                    if (enableFreeChase)
                    {
                        ScreenMessages.RemoveMessage(chaseOn);
                        ScreenMessages.RemoveMessage(chaseOff);
                        ScreenMessages.RemoveMessage(freeChaseOn);
                        ScreenMessages.RemoveMessage(freeChaseOff);

                        ScreenMessages.PostScreenMessage(freeChaseOff);
                        FlightCamera.fetch.SetFoV(FlightCamera.fetch.fovDefault);
                    }
                    if (!enableFreeChase)
                    {
                        ScreenMessages.RemoveMessage(chaseOn);
                        ScreenMessages.RemoveMessage(chaseOff);
                        ScreenMessages.RemoveMessage(freeChaseOn);
                        ScreenMessages.RemoveMessage(freeChaseOff);

                        ScreenMessages.PostScreenMessage(freeChaseOn);
                        snapHeading = 0;
                        snapPitch   = defaultAngle * Mathf.Deg2Rad;
                        //FlightCamera.fetch.SetFoV(setFov);
                        timeCheck = Time.time;
                    }
                    enableFreeChase = !enableFreeChase;
                }


                if (adjustLook)
                {
                    if (!autoSnap)
                    {
                        if (!vtolMode)
                        {
                            snapPitch   = FlightCamera.fetch.camPitch - (0 - pitchRads + (1f * viewAngleQ.Pitch())); //adjusted
                            snapHeading = FlightCamera.fetch.camHdg - (headingRads - (1f * viewAngleQ.Roll()));      //adjusted
                        }
                        else
                        {
                            snapPitch   = FlightCamera.fetch.camPitch - (0 + Mathf.Clamp(viewAngleQ.Pitch() / 10, 0, 90f));
                            snapHeading = FlightCamera.fetch.camHdg - (headingRads - (viewAngleQ.Roll() / 10));
                        }
                        if (Mathf.Abs(snapHeading) < 5 * Mathf.Deg2Rad)  //snap heading straight if close enough
                        {
                            snapHeading = 0;
                        }
                    }
                    else
                    {
                        snapHeading = 0;
                        snapPitch   = defaultAngle * Mathf.Deg2Rad;
                        timeCheck   = Time.time;
                    }
                }

                float lerpRate;
                if (Time.time - timeCheck < 1 || v.srfSpeed < 90)
                {
                    lerpRate = 0.1f;
                }
                else
                {
                    lerpRate = 1;
                }

                if (enableFreeChase && FlightGlobals.ActiveVessel != null && !adjustLook)
                {
                    if (FlightGlobals.ActiveVessel.srf_velocity.magnitude > 0.5)
                    {
                        if (lookVector.y < 35 && FlightGlobals.ActiveVessel.srfSpeed < 50)//vtol mode when fwd velocity is less than 50m/s
                        {
                            if (!vtolMode)
                            {
                                vtolMode = true;
                            }
                            lerpRate = 0.1f;
                            FlightCamera.fetch.camPitch = Mathf.LerpAngle(FlightCamera.fetch.camPitch, (0 + Mathf.Clamp(viewAngleQ.Pitch() / 10, 0, 90f) + snapPitch), lerpRate);
                            FlightCamera.fetch.camHdg   = (Mathf.LerpAngle(FlightCamera.fetch.camHdg * Mathf.Rad2Deg, ((headingRads - (viewAngleQ.Roll() / 10) + snapHeading) * Mathf.Rad2Deg), lerpRate)) * Mathf.Deg2Rad;
                        }
                        else
                        {
                            if (vtolMode)
                            {
                                vtolMode = false;
                            }
                            FlightCamera.fetch.camPitch = Mathf.LerpAngle(FlightCamera.fetch.camPitch, 0 - pitchRads + viewAngleQ.Pitch() + snapPitch, lerpRate);  //doesn't really need to be LerpAngle unless converted to degrees.
                            FlightCamera.fetch.camHdg   = (Mathf.LerpAngle(FlightCamera.fetch.camHdg * Mathf.Rad2Deg, (headingRads - viewAngleQ.Roll() + snapHeading) * Mathf.Rad2Deg, lerpRate)) * Mathf.Deg2Rad;
                        }
                    }
                }
            }



            if (FlightCamera.fetch.mode != FlightCamera.Modes.FREE && enableFreeChase)
            {
                enableFreeChase = false;
            }
            #endregion

            if (FlightCamera.fetch.mode == FlightCamera.Modes.AUTO)
            {
                if (disableAuto)
                {
                    FlightCamera.fetch.setMode(FlightCamera.GetAutoModeForVessel(FlightGlobals.ActiveVessel));
                    if (defaultOn && FlightCamera.fetch.mode == FlightCamera.Modes.FREE)
                    {
                        enableFreeChase = true;
                    }
                    snapHeading = 0;
                    snapPitch   = defaultAngle * Mathf.Deg2Rad;
                }



                if (defaultFiredMode != "AUTO")
                {
                    ScreenMessages.RemoveMessage(chaseOn);
                    ScreenMessages.RemoveMessage(chaseOff);
                    ScreenMessages.RemoveMessage(freeChaseOn);
                    ScreenMessages.RemoveMessage(freeChaseOff);
                }
            }

            #region IVA

            /*
             *          if(isIVA && !MapView.MapIsEnabled)
             *          {
             *                  if(enableIVASnap)
             *                  {
             *                          adjustLookIVA = InternalCamera.Instance.mouseLocked;
             *                          if(adjustLookIVA)
             *                          {
             *                                  if(SET_IVA_SNAP.GetKeyDown())
             *                                  {
             *                                          snapIVARotation = InternalCamera.Instance.camera.transform.localRotation;
             *                                  }
             *                                  if(ADJUST_LOOK.GetKeyUp())
             *                                  {
             *                                          InternalCamera.Instance.UnlockMouse();
             *                                  }
             *                          }
             *                          else
             *                          {
             *                                  InternalCamera.Instance.camera.transform.localRotation = snapIVARotation;
             *                          }
             *                  }
             *          }
             */
            #endregion
        }
예제 #4
0
        void Update()
        {
            Vessel       pVessel   = FlightGlobals.ActiveVessel;
            FlightCamera flightCam = FlightCamera.fetch;

            if (pVessel == null)
            {
                return;
            }
            if (pVessel.isEVA && !pVessel.packed && pVessel.loaded && pVessel.evaController != null)
            {
                if (pVessel != lastHookedVessel)
                {
                    lastHookedVessel = pVessel;

                    //KSPLog.print (string.Format("{0} switched to, hooking vessel for general hooks.", pVessel.GetName()));
                    EVABoundFix.Hook(pVessel.evaController);
                }
            }

            if (FlightGlobals.ActiveVessel.isEVA && fpCameraManager.isFirstPerson && needCamReset)
            {
                fpCameraManager.isFirstPerson = false;
                fpCameraManager.CheckAndSetFirstPerson(pVessel);
            }
            needCamReset = false;

            if (HighLogic.LoadedSceneIsFlight && pVessel != null && pVessel.isActiveVessel && pVessel.state != Vessel.State.DEAD && !stopTouchingCamera)
            {
                if (forceEVA || fpCameraManager.isFirstPerson)
                {
                    if (!fpCameraManager.isCameraProperlyPositioned(flightCam))
                    {
                        fpCameraManager.isFirstPerson = false;
                    }
                    fpCameraManager.CheckAndSetFirstPerson(pVessel);
                }
                if (!forceEVA && pVessel.isEVA)
                {
                    if (Input.GetKeyDown(toggleFirstPersonKey))
                    {
                        if (!fpCameraManager.isFirstPerson)
                        {
                            fpCameraManager.saveCameraState(flightCam);
                            fpCameraManager.CheckAndSetFirstPerson(pVessel);
                        }
                        else
                        {
                            fpCameraManager.resetCamera(pVessel);
                        }
                    }
                }

                fpCameraManager.updateGUI();
            }

            if (fpCameraManager.isFirstPerson && resetivacamerabinding.GetKeyDown())
            {
                fpCameraManager.viewToNeutral();
                fpCameraManager.reorient();
            }

            if (OnUpdate != null)
            {
                OnUpdate(this, null);
            }
        }
예제 #5
0
    public void Update()
    {
        // In the VAB
        if (vessel == null)
        {
            return;
        }

        if (sCurrentHandler == null)
        {
            sCurrentHandler = this;
        }

        if (CameraManager.Instance.currentCameraMode != CameraManager.CameraMode.Flight)
        {
            return;
        }

        if (sActionFlags.deactivateCamera || CAMERA_RESET.GetKeyDown() || GameSettings.CAMERA_NEXT.GetKeyDown())
        {
            LeaveCamera();
            sActionFlags.deactivateCamera = false;
        }
        if (sActionFlags.nextCamera || (sCurrentHandler == this && CAMERA_NEXT.GetKeyDown()))
        {
            CycleCamera(1);
            sActionFlags.nextCamera = false;
        }
        if (sActionFlags.prevCamera || (sCurrentHandler == this && CAMERA_PREV.GetKeyDown()))
        {
            CycleCamera(-1);
            sActionFlags.prevCamera = false;
        }

        /*
         * if ((sCurrentCamera == this) && adjustMode)
         * {
         * if (Input.GetKeyUp(KeyCode.Keypad8))
         * {
         * cameraPosition += cameraUp * 0.1f;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad2))
         * {
         * cameraPosition -= cameraUp * 0.1f;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad6))
         * {
         * cameraPosition += cameraForward * 0.1f;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad4))
         * {
         * cameraPosition -= cameraForward * 0.1f;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad7))
         * {
         * cameraClip += 0.05f;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad1))
         * {
         * cameraClip -= 0.05f;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad9))
         * {
         * cameraFoV += 5;
         * }
         * if (Input.GetKeyUp(KeyCode.Keypad3))
         * {
         * cameraFoV -= 5;
         * }
         * if (Input.GetKeyUp(KeyCode.KeypadMinus))
         * {
         * print("Position: " + cameraPosition + " - Clip = " + cameraClip + " - FoV = " + cameraFoV);
         * }
         * }
         */
    }