Ejemplo n.º 1
0
            /// <summary>
            /// This converts the actualFrozenKerbals actual object to a new dictionary for consumption
            /// </summary>
            /// <param name="actualFrozenKerbals"></param>
            /// <returns>
            /// Dictionary&lt;string, KerbalInfo&gt; of Frozen Kerbals
            /// </returns>
            private Dictionary <string, KerbalInfo> ExtractFrozenKerbalDict(object actualFrozenKerbals)
            {
                Dictionary <string, KerbalInfo> dictToReturn = new Dictionary <string, KerbalInfo>();

                try
                {
                    // SM - Replaced foreach with enumerator for performance (foreach = bad in Unity)
                    IEnumerator frnKbls = ((IDictionary)actualFrozenKerbals).GetEnumerator();
                    while (frnKbls.MoveNext())
                    {
                        if (frnKbls.Current == null)
                        {
                            continue;
                        }
                        Type           typeitem       = frnKbls.Current.GetType();
                        PropertyInfo[] itemprops      = typeitem.GetProperties(BindingFlags.Instance | BindingFlags.Public);
                        string         itemkey        = (string)itemprops[0].GetValue(frnKbls.Current, null);
                        object         itemvalue      = itemprops[1].GetValue(frnKbls.Current, null);
                        KerbalInfo     itemkerbalinfo = new KerbalInfo(itemvalue);
                        dictToReturn[itemkey] = itemkerbalinfo;
                    }
                }
                catch (Exception ex)
                {
                    LogFormatted("Unable to extract FrozenKerbals Dictionary: {0}", ex.Message);
                }
                return(dictToReturn);
            }
        protected override void OnLoad(ConfigNode configNode)
        {
            base.OnLoad(configNode);

            foreach (ConfigNode child in configNode.GetNodes("KERBAL_INFO"))
            {
                KerbalInfo kerb = new KerbalInfo();
                kerbalInfo.Add(kerb);

                kerb.kerbal = ConfigNodeUtil.ParseValue<Kerbal>(child, "kerbal");
                kerb.kerbalType = ConfigNodeUtil.ParseValue<ProtoCrewMember.KerbalType?>(child, "kerbalType", null);
                kerb.trait = ConfigNodeUtil.ParseValue<string>(child, "trait", null);
            }
        }
Ejemplo n.º 3
0
        protected override void OnLoad(ConfigNode configNode)
        {
            base.OnLoad(configNode);

            foreach (ConfigNode child in configNode.GetNodes("KERBAL_INFO"))
            {
                KerbalInfo kerb = new KerbalInfo();
                kerbalInfo.Add(kerb);

                kerb.kerbal     = ConfigNodeUtil.ParseValue <Kerbal>(child, "kerbal");
                kerb.kerbalType = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType?>(child, "kerbalType", null);
                kerb.trait      = ConfigNodeUtil.ParseValue <string>(child, "trait", null);
            }
        }
Ejemplo n.º 4
0
            /// <summary>
            /// This converts the actualFrozenKerbals actual object to a new dictionary for consumption
            /// </summary>
            /// <param name="actualFrozenKerbals"></param>
            /// <returns>Dictionary <string, KerbalInfo> of Frozen Kerbals</returns>
            private Dictionary <string, KerbalInfo> ExtractFrozenKerbalDict(Object actualFrozenKerbals)
            {
                Dictionary <string, KerbalInfo> DictToReturn = new Dictionary <string, KerbalInfo>();

                try
                {
                    foreach (var item in (IDictionary)actualFrozenKerbals)
                    {
                        var            typeitem       = item.GetType();
                        PropertyInfo[] itemprops      = typeitem.GetProperties(BindingFlags.Instance | BindingFlags.Public);
                        string         itemkey        = (string)itemprops[0].GetValue(item, null);
                        object         itemvalue      = (object)itemprops[1].GetValue(item, null);
                        KerbalInfo     itemkerbalinfo = new KerbalInfo(itemvalue);
                        DictToReturn[itemkey] = itemkerbalinfo;
                    }
                }
                catch (Exception ex)
                {
                    LogFormatted("Unable to extract FrozenKerbals Dictionary: {0}", ex.Message);
                }
                return(DictToReturn);
            }
Ejemplo n.º 5
0
        private void ThawKerbalStep4(String frozenkerbal)
        {
            Utilities.Log_Debug("ThawKerbalConfirm start for " + frozenkerbal);
            machine_hum.Stop(); //stop sound effects
            StoredCharge = 0;   // Discharge all EC stored

            ProtoCrewMember kerbal = HighLogic.CurrentGame.CrewRoster.Crew.FirstOrDefault(a => a.name == frozenkerbal);

            if (!AddKerbal(kerbal, ToThawKerbalSeat))
            {
                ThawKerbalAbort(frozenkerbal);
                return;
            }
            if (partHasStripLights && DeepFreeze.Instance.DFsettings.StripLightsActive)
            {
                stopStripLightFlash(ToThawKerbalSeat);
            }
            foreach (Animator anim in kerbal.KerbalRef.gameObject.GetComponentsInChildren<Animator>())
            {
                if (anim.name == "kbIVA@idle")
                {
                     Utilities.Log_Debug("Animator " + anim.name + " for " + kerbal.KerbalRef.name + " turned off");
                    anim.enabled = false;
                }
            }
            ToThawKerbal = ""; // Set the Active Thaw Kerbal to null
            IsThawActive = false; // Turn the Freezer actively thawing mode off
            ThawStepInProgress = 0;
            skipThawStep1 = false;
            ScreenMessages.PostScreenMessage(frozenkerbal + " thawed out", 5.0f, ScreenMessageStyle.UPPER_CENTER);
            if (emergencyThawInProgress)
            {
                ScreenMessages.PostScreenMessage(frozenkerbal + " was thawed out due to lack of Electrical Charge to run cryogenics", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                Debug.Log("DeepFreezer - kerbal " + frozenkerbal + " was thawed out due to lack of Electrical charge to run cryogenics");
                DeepFreeze.Instance.setComatoseKerbal(kerbal, ProtoCrewMember.KerbalType.Tourist);

                // Update the saved frozen kerbals dictionary
                KerbalInfo kerbalInfo = new KerbalInfo(Planetarium.GetUniversalTime());
                kerbalInfo.vesselID = CrntVslID;
                kerbalInfo.vesselName = CrntVslName;
                kerbalInfo.experienceTraitName = kerbal.experienceTrait.Title;
                kerbalInfo.type = ProtoCrewMember.KerbalType.Tourist;
                kerbalInfo.status = ProtoCrewMember.RosterStatus.Assigned;
                if (partHasInternals)
                {
                    kerbalInfo.seatName = ToFrzeKerbalXformNme;
                    kerbalInfo.seatIdx = ToFrzeKerbalSeat;
                }
                else
                {
                    kerbalInfo.seatName = "Unknown";
                    kerbalInfo.seatIdx = -1;
                }
                kerbalInfo.partID = CrntPartID;
                 Utilities.Log_Debug("Adding New Comatose Crew to dictionary");
                try
                {
                    if (!DeepFreeze.Instance.DFgameSettings.KnownFrozenKerbals.ContainsKey(kerbal.name))
                    {
                        DeepFreeze.Instance.DFgameSettings.KnownFrozenKerbals.Add(kerbal.name, kerbalInfo);
                    }
                    if (DeepFreeze.Instance.DFsettings.debugging) DeepFreeze.Instance.DFgameSettings.DmpKnownFznKerbals();
                }
                catch (Exception ex)
                {
                     Utilities.Log("Unable to add to knownfrozenkerbals comatose crewmember " + kerbal.name);
                     Utilities.Log("Err: " + ex);
                    ScreenMessages.PostScreenMessage("DeepFreezer mechanical failure", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                }
            }
            Debug.Log("Thawed out: " + frozenkerbal);
            UpdateCounts(); // Update the Crew counts
            removeThawEvent(frozenkerbal); // Remove the Thaw Event for this kerbal.
            ding_ding.Play();
            OpenPodAnimPlaying = false;
            onvslchgInternal = true;
            if (DFInstalledMods.IskerbalismInstalled) // IF Kerbalism Installed, add tracking.
            {
                Utilities.Log_Debug("kerbalism installed track kerbal=" + frozenkerbal);
                try
                {
                    KBDisableKerbal(frozenkerbal, false);
                }
                catch (Exception ex)
                {
                    Utilities.Log("DeepFreeze Exception attempting to track a kerbal in Kerbalism. Report this error on the Forum Thread.");
                    Utilities.Log("DeepFreeze Err: " + ex);
                }
            }
            CrewHatchController.fetch.EnableInterface();
            GameEvents.onVesselChange.Fire(vessel);
            GameEvents.onVesselWasModified.Fire(vessel);
            Utilities.Log_Debug("ThawKerbalConfirm End");
        }
Ejemplo n.º 6
0
 //Removes a frozen kerbal from the vessel.
 private bool RemoveKerbal(ProtoCrewMember kerbal, int SeatIndx)
 {
     try
     {
          Utilities.Log_Debug("RemoveKerbal " + kerbal.name + " seat " + SeatIndx);
         FrznCrewMbr tmpcrew = _StoredCrewList.Find(a => a.CrewName == kerbal.name);  // Find the thawed kerbal in the frozen kerbal list.
         if (tmpcrew == null)
         {
             FrznCrewMbr frzncrew = new FrznCrewMbr(kerbal.name, SeatIndx, vessel.id, vessel.name);
              Utilities.Log_Debug("Adding _StoredCrewList entry");
             _StoredCrewList.Add(frzncrew);
         }
         else
         {
              Utilities.Log("Found Kerbal in the stored frozen crew list for this part.");
              Utilities.Log("Crewmember:" + tmpcrew.CrewName + " Seat:" + tmpcrew.SeatIdx);
         }
         // Update the saved frozen kerbals dictionary
         KerbalInfo kerbalInfo = new KerbalInfo(Planetarium.GetUniversalTime());
         kerbalInfo.vesselID = CrntVslID;
         kerbalInfo.vesselName = CrntVslName;
         kerbalInfo.type = ProtoCrewMember.KerbalType.Unowned;
         kerbalInfo.status = ProtoCrewMember.RosterStatus.Dead;
         if (partHasInternals)
         {
             kerbalInfo.seatName = part.internalModel.seats[SeatIndx].seatTransformName;
             kerbalInfo.seatIdx = SeatIndx;
         }
         else
         {
             kerbalInfo.seatName = "Unknown";
             kerbalInfo.seatIdx = -1;
         }
         kerbalInfo.partID = CrntPartID;
         kerbalInfo.experienceTraitName = kerbal.experienceTrait.Title;
          Utilities.Log_Debug("Adding New Frozen Crew to dictionary");
         try
         {
             if (!DeepFreeze.Instance.DFgameSettings.KnownFrozenKerbals.ContainsKey(kerbal.name))
             {
                 DeepFreeze.Instance.DFgameSettings.KnownFrozenKerbals.Add(kerbal.name, kerbalInfo);
             }
             if (DeepFreeze.Instance.DFsettings.debugging) DeepFreeze.Instance.DFgameSettings.DmpKnownFznKerbals();
         }
         catch (Exception ex)
         {
              Utilities.Log("Unable to add to knownfrozenkerbals frozen crewmember " + kerbal.name);
              Utilities.Log("Err: " + ex);
             ScreenMessages.PostScreenMessage("DeepFreezer mechanical failure", 5.0f, ScreenMessageStyle.UPPER_CENTER);
             return false;
         }
         if (partHasInternals && ExternalDoorActive)
             Utilities.setHelmetshaders(kerbal.KerbalRef, true);
         // remove the CrewMember from the part crewlist and unregister their traits, because they are frozen, and this is the only way to trick the game.
         kerbal.UnregisterExperienceTraits(part);
         part.protoModuleCrew.Remove(kerbal);
         if (partHasInternals)
         {
             if (part.internalModel.seats[SeatIndx].kerbalRef != kerbal.KerbalRef)
             {
                 part.internalModel.seats[SeatIndx].kerbalRef = kerbal.KerbalRef;
                 setseatstaticoverlay(part.internalModel.seats[SeatIndx]);
             }
             part.internalModel.seats[SeatIndx].taken = true; // Set their seat to Taken, because they are really still there. :)
             seatTakenbyFrznKerbal[SeatIndx] = true;
         }
         // Set our newly frozen Popsicle, er Kerbal, to Unowned type (usually a Crew) and Dead status.
         kerbal.type = ProtoCrewMember.KerbalType.Unowned;
         kerbal.rosterStatus = ProtoCrewMember.RosterStatus.Dead;
         if (kerbal.KerbalRef != null)
         {
             //Remove them from the GUIManager Portrait cams.
             DFPortraits.DestroyPortrait(kerbal.KerbalRef);
         }
         return true;
     }
     catch (Exception ex)
     {
         Debug.Log("Remove Kerbal " + kerbal.name + " for DeepFreeze failed");
         Debug.Log("Err: " + ex);
         return false;
     }
 }
Ejemplo n.º 7
0
 private void ChkUnknownFrozenKerbals()
 {
     // Check the roster list for any unknown dead kerbals (IE: Frozen) that were not in the save file and add them.
     //unknownkerbals.Clear();
     unknownkerbals = HighLogic.CurrentGame.CrewRoster.Unowned.ToList();
     if (unknownkerbals != null)
     {
         Utilities.Log("There are " + unknownkerbals.Count + " unknownKerbals in the game roster.");
         foreach (ProtoCrewMember CrewMember in unknownkerbals)
         {
             if (CrewMember.rosterStatus == ProtoCrewMember.RosterStatus.Dead)
             {
                 if (!DeepFreeze.Instance.DFgameSettings.KnownFrozenKerbals.ContainsKey(CrewMember.name))
                 {
                     // Update the saved frozen kerbals dictionary
                     KerbalInfo kerbalInfo = new KerbalInfo(Planetarium.GetUniversalTime());
                     kerbalInfo.vesselID = Guid.Empty;
                     kerbalInfo.vesselName = "";
                     kerbalInfo.type = CrewMember.type;
                     kerbalInfo.status = CrewMember.rosterStatus;
                     //kerbalInfo.seatName = "Unknown";
                     kerbalInfo.seatIdx = 0;
                     kerbalInfo.partID = 0;
                     kerbalInfo.experienceTraitName = CrewMember.experienceTrait.Title;
                     try
                     {
                         Utilities.Log("Adding dead unknown kerbal " + CrewMember.name + " AKA FROZEN kerbal to DeepFreeze List");
                         DeepFreeze.Instance.DFgameSettings.KnownFrozenKerbals.Add(CrewMember.name, kerbalInfo);
                     }
                     catch (Exception ex)
                     {
                         Utilities.Log("Add of dead unknown kerbal " + CrewMember.name + " failed " + ex);
                     }
                 }
             }
         }
     }
 }