コード例 #1
0
        /// <summary>
        /// Ejects the Kerbal from the capsule
        /// </summary>
        private void GoEject()
        {
            print("Go eject...");
            InternalSeat commandSeat = part.internalModel.seats[0];

            if (commandSeat.taken == true)
            {
                activeKerbal = commandSeat.kerbalRef;
                commandSeat.DespawnCrew();
                FlightEVA.SpawnEVA(activeKerbal);

                bool test = FlightGlobals.ActiveVessel;

                currentKerbalEVA = FlightGlobals.ActiveVessel.GetComponent <KerbalEVA>();
                print("OK...");

                if (currentKerbalEVA.OnALadder)
                {
                    print("On ladder...");
                    currentKerbalEVA.OnVesselGoOffRails(FlightGlobals.ActiveVessel);
                }

                CameraManager.Instance.SetCameraFlight();
                activeKerbal = null;
            }
        }
コード例 #2
0
ファイル: KerbalIva.cs プロジェクト: EvansJahja/FreeIVA
 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;
 }
コード例 #3
0
            internal InternalSeat toSeat;    /**< Unused for now */

            public TransferCrewMember(ProtoCrewMember f_kerbal, Part f_fromPart = null, Part f_toPart = null)
            {
                kerbal          = f_kerbal;
                partSource      = f_fromPart;
                fromSeat        = kerbal.seat;
                partDestination = f_toPart;
                toSeat          = null;
            }
コード例 #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;
        }
コード例 #5
0
ファイル: TransferCrew.cs プロジェクト: cmheisel/ShipManifest
 /// <summary>
 /// Adds a crew member to a specific Part, into a specific Seat, if provided.
 /// </summary>
 /// <param name="pKerbal"></param>
 /// <param name="part"></param>
 /// <param name="seat"></param>
 internal static void AddCrewMember(ProtoCrewMember pKerbal, Part part, InternalSeat seat = null)
 {
     if (seat != null)
     {
         part.AddCrewmemberAt(pKerbal, part.internalModel.seats.IndexOf(seat));
     }
     else
     {
         part.AddCrewmember(pKerbal);
     }
 }
コード例 #6
0
        /// <summary>
        /// Begins the EVA for the active kerbal. Based on Mihara's Internal Module code for EVA.
        /// https://github.com/Mihara/RasterPropMonitor/blob/master/RasterPropMonitor/Auxiliary%20modules/JSIInternalEVAHatch.cs
        /// </summary>
        private void GoEva()
        {
            InternalSeat commandSeat = part.internalModel.seats[0];

            if (commandSeat.taken == true)
            {
                activeKerbal = commandSeat.kerbalRef;
                commandSeat.DespawnCrew();
                FlightEVA.SpawnEVA(activeKerbal);
                CameraManager.Instance.SetCameraFlight();
                activeKerbal = null;
            }
        }
コード例 #7
0
ファイル: KerbalIva.cs プロジェクト: EvansJahja/FreeIVA
        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;
        }
コード例 #8
0
        List <InternalSeat> VesselSeats(Vessel vessel, bool withPlaceholder, out bool hasOnlyPlaceholder)
        {
            int _index = 0;

            hasOnlyPlaceholder = true;
            List <Part>         _parts  = vessel.parts;
            List <InternalSeat> _result = new List <InternalSeat>();

            for (int _i = _parts.Count - 1; _i >= 0; --_i)
            {
                Part _part = _parts[_i];
                if (_part.internalModel != null)
                {
                    if (_part.internalModel.internalName != "Placeholder" || withPlaceholder)
                    {
                        hasOnlyPlaceholder = false;
                        List <InternalSeat> _seats = _part.internalModel.seats;
                        for (int _j = _seats.Count - 1; _j >= 0; --_j)
                        {
                            InternalSeat _seat = _seats[_j];
                            if (_seat.taken && _seat.kerbalRef != null)
                            {
                                Kerbal _kerbal = _seat.kerbalRef;
                                if (_kerbal.state == Kerbal.States.ALIVE || _kerbal.state == Kerbal.States.NO_SIGNAL)
                                {
                                    if (_part.partInfo.category == PartCategories.Pods)
                                    {
                                        _result.Insert(_index, _seat);
                                        _index++;
                                    }
                                    else
                                    {
                                        _result.Add(_seat);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(_result);
        }
コード例 #9
0
        // TODO: Replace this with clickable interaction colliders.
        public void TargetSeats()
        {
            float closestDistance = Settings.MaxInteractDistance;

            TargetedSeat      = null;
            TargetedSeatIndex = -1;
            if (FreeIva.CurrentPart.internalModel == null)
            {
                return;
            }

            for (int i = 0; i < FreeIva.CurrentPart.internalModel.seats.Count; i++)
            {
                if (FreeIva.CurrentPart.internalModel.seats[i].taken && !FreeIva.CurrentPart.internalModel.seats[i].crew.Equals(ActiveKerbal))
                {
                    continue;
                }

                if (FreeIva.CurrentPart.internalModel.seats[i].seatTransform == null)
                {
                    continue; // Some parts were originally designed to have more seats, but later had their transforms removed without changing the seat count.
                }
                if (IsTargeted(FreeIva.CurrentPart.internalModel.seats[i].seatTransform.position))
                {
                    float distance = Vector3.Distance(FreeIva.CurrentPart.internalModel.seats[i].seatTransform.position,
                                                      InternalCamera.Instance.transform.position);
                    if (distance < closestDistance)
                    {
                        TargetedSeat      = FreeIva.CurrentPart.internalModel.seats[i];
                        TargetedSeatIndex = i;
                        closestDistance   = distance;
                    }
                }
            }

            if (TargetedSeat != null)
            {
                ScreenMessages.PostScreenMessage("Enter seat [" + Settings.UnbuckleKey + "]", 0.1f, ScreenMessageStyle.LOWER_CENTER);
            }
        }
コード例 #10
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);
        }
コード例 #11
0
ファイル: KerbalIva.cs プロジェクト: EvansJahja/FreeIVA
        public void TargetSeats()
        {
            float closestDistance = MaxInteractDistance;

            TargetedSeat      = null;
            TargetedSeatIndex = -1;
            if (FreeIva.CurrentPart.internalModel == null)
            {
                return;
            }

            for (int i = 0; i < FreeIva.CurrentPart.internalModel.seats.Count; i++)
            {
                if (FreeIva.CurrentPart.internalModel.seats[i].taken && !FreeIva.CurrentPart.internalModel.seats[i].crew.Equals(ActiveKerbal))
                {
                    continue;
                }

                if (IsTargeted(FreeIva.CurrentPart.internalModel.seats[i].seatTransform.position))
                {
                    float distance = Vector3.Distance(FreeIva.CurrentPart.internalModel.seats[i].seatTransform.position,
                                                      InternalCamera.Instance.transform.position);
                    if (distance < closestDistance)
                    {
                        TargetedSeat      = FreeIva.CurrentPart.internalModel.seats[i];
                        TargetedSeatIndex = i;
                        closestDistance   = distance;
                    }
                }
            }

            if (TargetedSeat != null)
            {
                ScreenMessages.PostScreenMessage("Enter seat [" + Settings.UnbuckleKey + "] (Not working yet)", 0.1f, ScreenMessageStyle.LOWER_CENTER);
            }
        }
コード例 #12
0
ファイル: KerbalIva.cs プロジェクト: Charon77/FreeIVA
 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;
 }
コード例 #13
0
 private void setseatstaticoverlay(InternalSeat seat)
 {
     try
     {
         if (seat.kerbalRef != null)
         {
             seat.kerbalRef.staticOverlayDuration = 0f;
             seat.kerbalRef.state = Kerbal.States.ALIVE;
         }
     }
     catch (Exception ex)
     {
         Utilities.Log("DeepFreezer Error attempting to change staticoverlayduration");
         Utilities.Log(ex.Message);
     }
 }
コード例 #14
0
        // this is called when a crew transfer has completed. For catching stock Xfers. Because Ship Manifest Xfers will avoid these scenarios.
        private void OnCrewTransferred(GameEvents.HostedFromToAction<ProtoCrewMember, Part> fromToAction)
        {
            Utilities.Log_Debug("DeepFreezer", "OnCrewTransferred Fired From: " + fromToAction.from.name + " To: " + fromToAction.to.name + " Host: " + fromToAction.host.name);
            //Ship Manifest Transfers checked
            crewXferSMActive = false;
            crewXferSMStock = false;

            if (DFInstalledMods.SMInstalled)
            {
                Utilities.Log_Debug("DeepFreezer", "Check SMxfer running what kind and store it");
                ShipManifest.ICrewTransfer SMObject = null;
                SMObject = GetSMXfer();
                //If IsStockXfer = true than a StockXfer is running under SM control
                //When it finishes, SM will revert the Xfer and then run a normal SM CrewXfer.
                //So While the Stock Xfer is running we ignore this OnCrewTransferred event.
                //If SM does not have OverrideStockCrewXfer = true than it will ignore the event, so we bypass this
                // IF and the next IF and do a stock Xfer processing further down.
                this.Log_Debug("SMStockXfer?=" + SMObject.IsStockXfer);
                this.Log_Debug("SMXfer?=" + SMObject.CrewXferActive);
                this.Log_Debug("SMseat2seat?=" + SMObject.IsSeat2SeatXfer);
                this.Log_Debug("OverrideStock?=" + SMObject.OverrideStockCrewXfer);
                crewXferSMTimeDelay = SMObject.CrewXferDelaySec;
                if (SMObject.IsStockXfer || (!SMObject.CrewXferActive && SMObject.OverrideStockCrewXfer))
                {
                    //we need to just check one thing, that if this a xfer to the part that isn't FULL of frozen kerbals.
                    //If it is we must take over and revert.
                    this.Log_Debug("Partfull=" + PartFull);
                    this.Log_Debug("to part is this part=" + fromToAction.to + " - " + this.part);
                    if (FreezerSpace == 0 && fromToAction.to == this.part)  // If there is no available seats for this Kerbal we kick them back out.
                    {
                        _crewXferTOActive = true; // Set a flag to know a Xfer has started and we check when it is finished in
                        savecryopodstatepersistent();
                        saveexternaldoorstatepersistent();
                        Utilities.Log_Debug("DeepFreezer", "CrewXfer PartFull transfer them back, part is full - attempt to cancel stock xfer");
                        ScreenMessages.PostScreenMessage("Cannot enter this freezer, part is full", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                        // Remove the transfer message that stock displayed.
                        var message = new ScreenMessage(string.Empty, 15f, ScreenMessageStyle.LOWER_CENTER);
                        var messages = FindObjectOfType<ScreenMessages>();
                        if (messages != null)
                        {
                            var messagesToRemove = messages.activeMessages.Where(x => x.startTime == message.startTime && x.style == ScreenMessageStyle.LOWER_CENTER).ToList();
                            foreach (var m in messagesToRemove)
                                ScreenMessages.RemoveMessage(m);
                        }
                        xferisfromEVA = false;
                        xferfromPart = fromToAction.from;
                        xferfromSeat = fromToAction.host.seat;
                        xfertoPart = fromToAction.to;
                        xfercrew = fromToAction.host;
                        setseatstaticoverlay(xfercrew.seat);
                        xferbackwhenFull = true;
                        return;
                    }

                    Utilities.Log_Debug("Stock Xfer is running with Ship Manifest Override, so we ignore the Stock Xfer");
                    return;
                }

                //This is a normal Ship Manifest Crew Xfer or an over-riden Stock Crew Xfer from SM
                if (SMObject.CrewXferActive)
                {
                    Utilities.Log_Debug("SMXfer is running");
                    FlightEVA.fetch.DisableInterface();
                    savecryopodstatepersistent();
                    saveexternaldoorstatepersistent();
                    crewXferSMActive = SMObject.CrewXferActive;
                    //crewXferSMStock = SMObject.IsStockXfer;
                    if (SMObject.FromPart == this.part)
                    {
                        removeFreezeEvent(fromToAction.host.name);
                        _crewXferFROMActive = true;  // Set a flag to know a Xfer has started and we check when it is finished in
                        xferfromPart = SMObject.FromPart;
                        xfertoPart = SMObject.ToPart;
                        xfercrew = fromToAction.host;
                        if (xfercrew.KerbalRef != null)
                        {
                            Utilities.reinvigerateIVAKerbalAnimations(xfercrew.KerbalRef);
                        }
                        timecrewXferFROMfired = Time.time;
                    }
                    if (SMObject.ToPart == this.part)
                    {
                        _crewXferTOActive = true; // Set a flag to know a Xfer has started and we check when it is finished in
                        xferfromPart = SMObject.FromPart;
                        xfertoPart = SMObject.ToPart;
                        xfercrew = fromToAction.host;
                        xfertoSeat = SMObject.ToSeat;
                        setseatstaticoverlay(SMObject.ToSeat);
                        timecrewXferTOfired = Time.time;
                    }
                    return;
                }
                else
                {
                    Utilities.Log_Debug("No SMXfer running");
                }
            }

            //Stock Transfers only past here, or no Stock Xfer override is active within SM. So it must be stock
            savecryopodstatepersistent();
            saveexternaldoorstatepersistent();
            if (fromToAction.from == this.part)  // if the Xfer is FROM this part
            {
                Utilities.Log_Debug("DeepFreezer", "crewXferFROMActive");
                FlightEVA.fetch.DisableInterface();
                removeFreezeEvent(fromToAction.host.name);  // Remove the Freeze Event for the crewMember leaving the part
                if (fromToAction.to.Modules.Cast<PartModule>().Any(x => x is KerbalEVA)) // Kerbal is going EVA
                {
                    return;
                }
                _crewXferFROMActive = true;  // Set a flag to know a Xfer has started and we check when it is finished in
                xferfromPart = fromToAction.from;
                xfertoPart = fromToAction.to;
                xfercrew = fromToAction.host;
                if (xfercrew.KerbalRef != null)
                {
                    Utilities.reinvigerateIVAKerbalAnimations(xfercrew.KerbalRef);
                }
                timecrewXferFROMfired = Time.time;
                return;
            }

            if (fromToAction.to == this.part)  // if the Xfer is TO this part
            {
                Utilities.Log_Debug("DeepFreezer", "crewXferTOActive");
                FlightEVA.fetch.DisableInterface();
                _crewXferTOActive = true; // Set a flag to know a Xfer has started and we check when it is finished in

                if (fromToAction.from.Modules.Cast<PartModule>().Any(x => x is KerbalEVA)) // Kerbal is entering from EVA
                {
                    Utilities.Log_Debug("DeepFreezer", "CrewXfer xferisfromEVA = true");
                    xferisfromEVA = true;
                    xferfromPart = null;
                    xferfromSeat = null;
                    xfertoPart = fromToAction.to;
                    xfercrew = fromToAction.host;
                    Utilities.Log_Debug("CrewXFER host seatidx=" + xfercrew.seatIdx);
                    foreach (FrznCrewMbr lst in _StoredCrewList)
                    {
                        Utilities.Log_Debug("CrewXFER Frozen Crew SeatIdx= " + lst.SeatIdx + ",Seattaken=" + this.part.internalModel.seats[lst.SeatIdx].taken);
                    }
                }
                else
                {
                    Utilities.Log_Debug("DeepFreezer", "CrewXfer xferisfromEVA = false");
                    xferisfromEVA = false;
                    xferfromPart = fromToAction.from;
                    xferfromSeat = fromToAction.host.seat;
                    xfertoPart = fromToAction.to;
                    xfercrew = fromToAction.host;
                    setseatstaticoverlay(xfercrew.seat);
                }
                if (PartFull)  // If there is no free seats for this Kerbal we kick them back out.
                {
                    Utilities.Log_Debug("DeepFreezer", "CrewXfer PartFull transfer them back, part is full - attempt to cancel stock xfer");
                    ScreenMessages.PostScreenMessage("Cannot enter this freezer, part is full", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                    // Remove the transfer message that stock displayed.
                    var message = new ScreenMessage(string.Empty, 15f, ScreenMessageStyle.LOWER_CENTER);
                    var messages = FindObjectOfType<ScreenMessages>();
                    if (messages != null)
                    {
                        var messagesToRemove = messages.activeMessages.Where(x => x.startTime == message.startTime && x.style == ScreenMessageStyle.LOWER_CENTER).ToList();
                        foreach (var m in messagesToRemove)
                            ScreenMessages.RemoveMessage(m);
                    }
                    xferbackwhenFull = true;
                }
                timecrewXferTOfired = Time.time;
                Utilities.Log_Debug("DeepFreezer", "crewXferTOActive end");
            }
        }
コード例 #15
0
        protected void restoreCrew(ProtoCrewMember[] crewList, ConfigNode nodeDivas)
        {
            ProtoCrewMember crew;
            int             seatIndex       = 0;
            InternalSeat    destinationSeat = null;

            string[]       seatAssignments = nodeDivas.GetValues("seat");
            InternalSeat[] internalSeats   = this.part.internalModel.seats.ToArray();

            Dictionary <string, InternalSeat> seats = new Dictionary <string, InternalSeat>();

            //Map the seats
            if (seatAssignments == null || seatAssignments.Length == 0)
            {
                return;
            }
            for (int index = 0; index < internalSeats.Length; index++)
            {
                seats.Add(internalSeats[index].seatTransformName, internalSeats[index]);
            }

            //Clear the seat list and build it back based upon the seat assignment order.
            //That way the game will put kerbals in the correct spots when the part is occupied.
            this.part.internalModel.seats.Clear();
            for (int index = 0; index < seatAssignments.Length; index++)
            {
                destinationSeat = seats[seatAssignments[index]];
                this.part.internalModel.seats.Add(destinationSeat);
            }

            //Make sure we have a crew list
            if (crewList == null)
            {
                Debug.Log("No crew to restore, part was unoccupied, exiting");
                return;
            }

            //Disable CrewHatchController
            CrewHatchController.fetch.DisableInterface();

            //Assign crew to seats
            for (int index = 0; index < crewList.Length; index++)
            {
                crew = crewList[index];

                //Get a new seat assignment
                destinationSeat = seats[seatAssignments[seatIndex]];
                seatIndex      += 1;

                //If we've run out of seat's that's bad...
                if (destinationSeat == null)
                {
                    Debug.Log("Not enough seats to restore the crew!!!");
                    break;
                }

                //Add kerbal to new seat
                this.part.AddCrewmemberAt(crew, this.part.internalModel.seats.IndexOf(destinationSeat));
                this.part.vessel.SpawnCrew();
                this.part.RegisterCrew();
                GameEvents.onVesselChange.Fire(this.part.vessel);

                Debug.Log("crew " + crew.KerbalRef.crewMemberName + " seated at " + crew.seat.seatTransformName);

                //Move inventory?
            }

            //It takes time for KSP to catch up. Give the game a bit of time...
            spawnTimer  = true;
            timeStamp   = DateTime.Now;
            elapsedTime = 0;
        }
コード例 #16
0
ファイル: KerbalIva.cs プロジェクト: Charon77/FreeIVA
        public void TargetSeats()
        {
            float closestDistance = MaxInteractDistance;
            TargetedSeat = null;
            TargetedSeatIndex = -1;
            if (FreeIva.CurrentPart.internalModel == null)
                return;

            for (int i = 0; i < FreeIva.CurrentPart.internalModel.seats.Count; i++)
            {
                if (FreeIva.CurrentPart.internalModel.seats[i].taken && !FreeIva.CurrentPart.internalModel.seats[i].crew.Equals(ActiveKerbal))
                    continue;

                if (IsTargeted(FreeIva.CurrentPart.internalModel.seats[i].seatTransform.position))
                {
                    float distance = Vector3.Distance(FreeIva.CurrentPart.internalModel.seats[i].seatTransform.position,
                        InternalCamera.Instance.transform.position);
                    if (distance < closestDistance)
                    {
                        TargetedSeat = FreeIva.CurrentPart.internalModel.seats[i];
                        TargetedSeatIndex = i;
                        closestDistance = distance;
                    }
                }
            }

            if (TargetedSeat != null)
                ScreenMessages.PostScreenMessage("Enter seat [" + Settings.UnbuckleKey + "] (Not working yet)", 0.1f, ScreenMessageStyle.LOWER_CENTER);
        }
コード例 #17
0
ファイル: KerbalIva.cs プロジェクト: Charon77/FreeIVA
        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;
        }