Example #1
0
        public virtual void Open(bool open)
        {
            if (IvaGameObject != null)
            {
                if (IvaGameObjectRenderer != null)
                {
                    IvaGameObjectRenderer.enabled = open;
                }
            }
            HideOnOpen(open);
            FreeIva.SetRenderQueues(FreeIva.CurrentPart);

            if (Collider != null)
            {
                Collider.Enable(!open);
            }

            if (open)
            {
                if (HatchOpenSound != null && HatchOpenSound.audio != null)
                {
                    HatchOpenSound.audio.Play();
                }
            }
            else
            {
                if (HatchCloseSound != null && HatchCloseSound.audio != null)
                {
                    HatchCloseSound.audio.Play();
                }
            }
        }
Example #2
0
        /* Didn't work. Caused slowdown.
         * public void SetRenderQueues(Part activePart)
         * {
         *  SortedList<float, Part> partRanges = new SortedList<float, Part>();
         *  foreach (Part p in FlightGlobals.ActiveVessel.Parts)
         *  {
         *      if (p.internalModel == null) continue;
         *      partRanges.Add(Vector3.Distance(p.collider.bounds.center, activePart.collider.bounds.center), p);
         *  }
         *
         *  int queue = 2000;
         *  foreach (var pr in partRanges)
         *  {
         *      if (pr.Value.internalModel == null) continue;
         *      Renderer[] renderers = pr.Value.internalModel.GetComponentsInChildren<Renderer>();
         *      foreach (var r in renderers)
         *      {
         *          foreach (var m in r.materials)
         *          {
         *              m.renderQueue = queue;
         *              if (queue == 2000) queue--;
         *              queue--;
         *          }
         *      }
         *  }
         * }*/

        public static void ChangeMesh(GameObject original)
        {
            try
            {
                string modelPath = "FreeIva/Models/HatchMask";
                Debug.Log("#Changing mesh");
                GameObject hatchMask = GameDatabase.Instance.GetModel(modelPath);
                if (hatchMask != null)
                {
                    MeshFilter mfC = original.GetComponent <MeshFilter>();
                    MeshFilter mfM = hatchMask.GetComponent <MeshFilter>();
                    Mesh       m   = FreeIva.Instantiate(mfM.mesh) as Mesh;
                    mfC.mesh = m;
                    Debug.Log("#Changed mesh");
                }
                else
                {
                    Debug.LogError("[Free IVA] HatchMask.dae not found at " + modelPath);
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("[Free IVA] Error Loading mesh: " + ex.Message + ", " + ex.StackTrace);
            }
        }
Example #3
0
 public void Update()
 {
     if (CameraManager.Instance.currentCameraMode != CameraManager.CameraMode.IVA)
     {
         if (_lastCameraMode == CameraManager.CameraMode.IVA)
         {
             // Switching away from IVA.
             //InputLockManager.RemoveControlLock("FreeIVA");
             // Return the kerbal to its original seat.
             TargetedSeat = ActiveKerbal.seat;
             Buckle();
         }
     }
     else
     {
         // In IVA.
         if (_lastCameraMode != CameraManager.CameraMode.IVA)
         {
             // Switching to IVA.
             FreeIva.EnableInternals();
             SetCameraToSeat();
             InternalCollider.HideAllColliders();
         }
         GetInput();
     }
     _lastCameraMode = CameraManager.Instance.currentCameraMode;
 }
Example #4
0
        public void Update()
        {
            if (CameraManager.Instance.currentCameraMode != CameraManager.CameraMode.IVA)
            {
                if (_lastCameraMode == CameraManager.CameraMode.IVA) // Switching away from IVA.
                {
                    InputLockManager.RemoveControlLock("FreeIVA");

                    // Return the kerbal to its original seat.
                    TargetedSeat = ActiveKerbal.seat;
                    if (!buckled)
                    {
                        Buckle();
                    }
                }
            }
            else
            {
                // In IVA.
                if (_lastCameraMode != CameraManager.CameraMode.IVA)
                {
                    // Switching to IVA.
                    FreeIva.EnableInternals();
                    UpdateActiveKerbal();//false);
                    SetCameraToSeat();
                    InternalCollider.HideAllColliders();
                }

                // Check if we're changing crew member using the 'V' key.
                if (GameSettings.CAMERA_NEXT.GetKeyDown())
                {
                    _changingCurrentIvaCrew = true;
                }
                else
                {
                    if (_changingCurrentIvaCrew)
                    {
                        UpdateActiveKerbal();//false);
                        _changingCurrentIvaCrew = false;
                    }
                }

                // TODO: Doesn't get mouse input when in FixedUpdate.
                // Split this out to flags set in Update and acted upon in FixedUpdate.
                GetInput();

                /*FreeIva.InitialPart.Events.Clear();
                 * if (_transferStart != 0 && Planetarium.GetUniversalTime() > (0.25 + _transferStart))
                 * {
                 *  FlightGlobals.ActiveVessel.SpawnCrew();
                 *  GameEvents.onVesselChange.Fire(FlightGlobals.ActiveVessel);
                 *  InternalCamera.Instance.transform.parent = ActiveKerbal.KerbalRef.eyeTransform;
                 *  _transferStart = 0;
                 * }*/
            }
            _lastCameraMode = CameraManager.Instance.currentCameraMode;
        }
Example #5
0
        private static void mainGUI(int windowID)
        {
            GUILayout.BeginVertical();

            FreeIva.Gui();

            GUILayout.EndVertical();
            GUI.DragWindow();
        }
        //public override void Open(bool open)
        public void Open(bool open)
        {
            if (open && _isLocked)
            {
                ScreenMessages.PostScreenMessage("Hatch is locked", 1f, ScreenMessageStyle.LOWER_CENTER);
                return;
            }

            if (IvaGameObject != null)
            {
                Renderer r = IvaGameObject.GetComponentCached <Renderer>(ref depthMaskRenderer);
                if (r != null)
                {
                    r.enabled = open;
                }
            }

            AnimationState animationState = unlockAnimation[openAnimationName];

            if (open ^ animationState.speed > 0)
            {
                animationState.speed = -animationState.speed;
            }
            if (animationState.speed > 0)
            {
                animationState.normalizedTime = 0f;
            }
            else
            {
                animationState.normalizedTime = 1f;
            }
            unlockAnimation.clip     = animationState.clip; // This animation player could be used for multiple clips.
            unlockAnimation.enabled  = true;
            unlockAnimation.wrapMode = WrapMode.Once;
            unlockAnimation.Play();

            FreeIva.SetRenderQueues(FreeIva.CurrentPart);

            if (open)
            {
                HatchOpenSound.audio.Play();
            }
            else
            {
                HatchCloseSound.audio.Play();
            }

            _isOpen = !_isOpen;
        }
Example #7
0
        public static void ChangeHelmetMesh(GameObject original, Part p)
        {
            //http://forum.kerbalspaceprogram.com/threads/87562-Changing-the-EVA-Kerbal-model/page4
            try
            {
                string modelPath = "FreeIva/Models/TestSphere";
                Debug.Log("#Changing helmet mesh");
                GameObject testSphere = GameDatabase.Instance.GetModel(modelPath);
                if (testSphere != null)
                {
                    MeshFilter mfC = original.GetComponent <MeshFilter>();

                    MeshFilter mfM = null;
                    foreach (ProtoCrewMember c in p.protoModuleCrew)
                    {
                        if (c.KerbalRef.headTransform != null)
                        {
                            mfM = c.KerbalRef.headTransform.GetComponentInChildren <MeshFilter>();

                            /*MeshFilter[] mfs = c.KerbalRef.headTransform.GetComponentsInChildren<MeshFilter>();
                             * foreach (var mf in mfs)
                             * {
                             *  Debug.Log(mf);
                             *  mfM = mf;
                             *  break;
                             * }*/
                        }
                        if (mfM != null)
                        {
                            break;
                        }
                    }

                    Mesh m = FreeIva.Instantiate(mfM.mesh) as Mesh;
                    mfC.mesh = m;
                    Debug.Log("#Changed mesh");
                }
                else
                {
                    Debug.LogError("[Free IVA] TestSphere.dae not found at " + modelPath);
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("[Free IVA] Error Loading mesh: " + ex.Message + ", " + ex.StackTrace);
            }
        }
Example #8
0
        public void Unbuckle()
        {
            _previousPos = Vector3.zero;
            FreeIva.EnableInternals();
            UpdateActiveKerbal();
            FreeIva.InitialPart = FreeIva.CurrentPart;
            OriginalSeat        = ActiveKerbal.seat;

            HideCurrentKerbal(true);

            // InternalSpace.Instance is the InternalCamera's parent normally.
            InternalCamera.Instance.transform.parent = KerbalCollider.transform;

            InputLockManager.SetControlLock(ControlTypes.ALL_SHIP_CONTROLS, "FreeIVA");
            //ActiveKerbal.flightLog.AddEntry("Unbuckled");
            ScreenMessages.PostScreenMessage("Unbuckled", 1f, ScreenMessageStyle.LOWER_CENTER);
            KerbalCollider.collider.enabled = true;
            buckled = false;
        }
Example #9
0
        public override void Open(bool open)
        {
            if (ClosedRenderer != null)
            {
                ClosedRenderer.enabled = !open;
            }
            else
            {
                Debug.Log("# ClosedRenderer was null");
            }
            if (OpenRenderer != null)
            {
                OpenRenderer.enabled = open;
            }
            else
            {
                Debug.Log("# OpenRenderer was null");
            }
            HideOnOpen(open);
            FreeIva.SetRenderQueues(FreeIva.CurrentPart);

            if (Collider != null)
            {
                Collider.Enable(!open);
            }

            if (open)
            {
                if (HatchOpenSound != null && HatchOpenSound.audio != null)
                {
                    HatchOpenSound.audio.Play();
                }
            }
            else
            {
                if (HatchCloseSound != null && HatchCloseSound.audio != null)
                {
                    HatchCloseSound.audio.Play();
                }
            }
        }
Example #10
0
        public void Activate(bool activate)
        {
            IsActive = !IsActive;

            AnimationState animationState = Animation[AnimationName];

            if (IsActive ^ animationState.speed > 0)
            {
                animationState.speed = -animationState.speed;
            }
            if (animationState.speed > 0)
            {
                animationState.normalizedTime = 0f;
            }
            else
            {
                animationState.normalizedTime = 1f;
            }
            Animation.clip     = animationState.clip; // This animation player could be used for multiple clips.
            Animation.enabled  = true;
            Animation.wrapMode = WrapMode.Once;
            Animation.Play();

            FreeIva.SetRenderQueues(FreeIva.CurrentPart);

            if (IsActive)
            {
                if (ActivateSound != null && ActivateSound.audio != null)
                {
                    ActivateSound.audio.Play();
                }
            }
            else
            {
                if (DeactivateSound != null && DeactivateSound.audio != null)
                {
                    DeactivateSound.audio.Play();
                }
            }
        }
Example #11
0
        private void UpdateActiveKerbal()//bool nextKerbal) TODO !!!
        {
            ActiveKerbal = CameraManager.Instance.IVACameraActiveKerbal.protoCrewMember;
            if (ActiveKerbal.KerbalRef != null && ActiveKerbal.KerbalRef.InPart != null)
            {
                FreeIva.UpdateCurrentPart(ActiveKerbal.KerbalRef.InPart);
            }
            return;
            // TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Test if the above (new to 1.1) is working, if so delete the below).

            /*try
             * {
             *  // TODO: Find a way of detecting a viewpoint switch ('V' in IVA).
             *  List<ProtoCrewMember> vesselCrew = FlightGlobals.fetch.activeVessel.GetVesselCrew();
             *
             *  // TODO: There has to be a better way of doing this.
             *  // Attempt to find the active crew member by searching for the one with the hidden head.
             *  foreach (ProtoCrewMember c in vesselCrew)
             *  {
             *      if (nextKerbal && c == ActiveKerbal)
             *          continue;
             *      if (c.KerbalRef.headTransform != null)
             *      {
             *          Renderer[] rs = c.KerbalRef.headTransform.GetComponentsInChildren<Renderer>();
             *          if (rs.Length > 0 && !rs[0].isVisible) // Normally the left eye
             *          {
             *              Debug.Log("Updating active kerbal from " + (ActiveKerbal == null ? "null" : ActiveKerbal.name) + " to " + c.name);
             *              ActiveKerbal = c;
             *              if (ActiveKerbal.KerbalRef != null && ActiveKerbal.KerbalRef.InPart != null)
             *                  FreeIva.UpdateCurrentPart(ActiveKerbal.KerbalRef.InPart);
             *              break;
             *          }
             *      }
             *  }
             * }
             * catch (Exception ex)
             * {
             *  Debug.LogError("[FreeIVA] Error updating active kerbal: " + ex.Message + ", " + ex.StackTrace);
             * }*/
        }
Example #12
0
        //private bool _reseatingCrew = false;
        public void Buckle()
        {
            if (TargetedSeat == null)
            {
                return;
            }

            Debug.Log(ActiveKerbal.name + " is entering seat " + TargetedSeat.transform.name + " in part " + FreeIva.CurrentPart);

            //InitialPart.RemoveCrewmember(ActiveKerbal); // Don't do this on unbuckle or we lose the InternalCamera.

            /*TargetedSeat.part.AddCrewmemberAt(ActiveKerbal, TargetedSeatIndex);
             * CurrentPart.SpawnCrew();*/

            HideCurrentKerbal(false);

            if (FreeIva.InitialPart != FreeIva.CurrentPart)
            {
                GameEvents.onCrewTransferred.Fire(new GameEvents.HostedFromToAction <ProtoCrewMember, Part>(ActiveKerbal, FreeIva.InitialPart, FreeIva.CurrentPart));
                GameEvents.onVesselChange.Fire(FlightGlobals.ActiveVessel);

                /*InitialPart.SpawnCrew();
                 * CurrentPart.SpawnCrew();
                 * InitialPart.RegisterCrew();
                 * CurrentPart.RegisterCrew();
                 * FlightGlobals.ActiveVessel.SpawnCrew();*/
            }
            //_reseatingCrew = true;
            FreeIva.EnableInternals();

            KerbalCollider.collider.enabled = false;
            // InternalSpace.Instance is the InternalCamera's parent normally.
            InternalCamera.Instance.transform.parent = InternalSpace.Instance.transform;

            InputLockManager.RemoveControlLock("FreeIVA");
            //ActiveKerbal.flightLog.AddEntry("Buckled");
            ScreenMessages.PostScreenMessage("Buckled", 1f, ScreenMessageStyle.LOWER_CENTER);
            buckled = true;
        }
Example #13
0
        //Transform _internalCameraParent = null;

        public void Unbuckle()
        {
            _previousPos = Vector3.zero;
            FreeIva.EnableInternals();
            UpdateActiveKerbal();
            FreeIva.InitialPart = FreeIva.CurrentPart;
            OriginalSeat        = ActiveKerbal.seat;

            HideCurrentKerbal(true);

            KerbalIva.transform.position = InternalCamera.Instance.transform.position;
            // The Kerbal's eye transform is the InternalCamera's parent normally, not InternalSpace.Instance as previously thought.
            InternalCamera.Instance.transform.parent = KerbalIva.transform;

            InputLockManager.SetControlLock(ControlTypes.ALL_SHIP_CONTROLS, "FreeIVA");
            //ActiveKerbal.flightLog.AddEntry("Unbuckled");
            ScreenMessages.PostScreenMessage("Unbuckled", 1f, ScreenMessageStyle.LOWER_CENTER);
            KerbalIva.GetComponentCached <Collider>(ref KerbalCollider).enabled = true;
            buckled = false;

            InitialiseFpsControls();
            DisablePartHighlighting(true);
        }
Example #14
0
        public void Open(bool open)
        {
            IvaGameObject.renderer.enabled = open;
            MeshRenderer[] meshRenderers = Part.internalModel.GetComponentsInChildren <MeshRenderer>();
            foreach (var hideProp in HideWhenOpen)
            {
                foreach (MeshRenderer mr in meshRenderers)
                {
                    if (mr.name.Equals(hideProp.Value) && mr.transform != null)
                    {
                        float error = Vector3.Distance(mr.transform.position, hideProp.Key);
                        if (error < 0.15)
                        {
                            Debug.Log("# Toggling " + mr.name);
                            mr.enabled = !open;
                            break;
                        }
                    }
                }
            }
            FreeIva.SetRenderQueues(FreeIva.CurrentPart);

            if (Collider != null)
            {
                Collider.Enable(!open);
            }

            if (open)
            {
                HatchOpenSound.audio.Play();
            }
            else
            {
                HatchCloseSound.audio.Play();
            }
        }