public void Initialize(ProtoCrewMember.Gender?gender = null, string name = null) { if (name != null) { this.name = name; _pcm = pcm; } if (gender != null) { this.gender = gender.Value; } else { this.gender = RandomGender(); } if (_pcm != null) { SetCrew(_pcm); } else { this.name = name ?? KerbalName(this.gender); experienceTrait = RandomExperienceTrait(); kerbalType = ProtoCrewMember.KerbalType.Crew; } }
public Kerbal(ProtoCrewMember.Gender gender, string name) { Initialize(gender, name); this.gender = gender; this.name = name; }
public override bool Load(ConfigNode configNode) { // Load base class bool valid = base.Load(configNode); if (configNode.HasValue("passengerName")) { LoggingUtil.LogWarning(this, "The passengerName and gender attributes are obsolete since Contract Configurator 1.9.0, use kerbal instead."); valid &= ConfigNodeUtil.ParseValue<List<string>>(configNode, "passengerName", x => passengerName = x, this, new List<string>()); valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender>(configNode, "gender", x => gender = x, this, Kerbal.RandomGender()); valid &= ConfigNodeUtil.ParseValue<string>(configNode, "experienceTrait", x => experienceTrait = x, this, Kerbal.RandomExperienceTrait()); legacy = true; } else { valid &= ConfigNodeUtil.ParseValue<List<Kerbal>>(configNode, "kerbal", x => kerbals = x, this, new List<Kerbal>()); legacy = false; } valid &= ConfigNodeUtil.ParseValue<int>(configNode, "count", x => count = x, this, 1, x => Validation.GE(x, 1)); valid &= ConfigNodeUtil.ParseValue<ProtoCrewMember.KerbalType>(configNode, "kerbalType", x => kerbalType = x, this, ProtoCrewMember.KerbalType.Tourist); return valid; }
public Head(Mesh mesh, Material material, string name, ProtoCrewMember.Gender gender) { this.name = name; this.mesh = mesh; this.material = material; this.gender = gender; }
public Skin(string name) { Name = name; Gender = Util.HasSuffix(name, 'f') ? Gender.Female : Gender.Male; Eyeless = Util.HasSuffix(name, 'e'); Excluded = Util.HasSuffix(name, 'x'); }
public void SelectKerbal() { if (kerbalSelected) { return; } kerbalSelected = true; // First, try to get a Kerbal that matches the name if (!string.IsNullOrEmpty(characterName)) { kerbal = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == characterName).FirstOrDefault(); } // Now grab from the active vessel else if (kerbal == null && FlightGlobals.ActiveVessel != null) { kerbal = FlightGlobals.ActiveVessel.GetVesselCrew().Where(pcm => !excludeName.Contains(pcm.name)).ElementAtOrDefault(crewIndex); if (kerbal != null) { characterName = kerbal.name; } } if (kerbal == null && string.IsNullOrEmpty(characterName)) { System.Random r = new System.Random(); gender = r.Next(2) == 0 ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female; characterName = Kerbal.KerbalName(gender); } }
public Kerbal(Kerbal k) { _pcm = k._pcm; name = k.name; gender = k.gender; experienceTrait = k.experienceTrait; kerbalType = k.kerbalType; }
public Kerbal(ProtoCrewMember.Gender gender, string name, string experienceTrait) { Initialize(gender, name); this.gender = gender; this.name = name; this.experienceTrait = experienceTrait; }
public override void OnLoad(ConfigNode configNode) { base.OnLoad(configNode); crewIndex = ConfigNodeUtil.ParseValue <int>(configNode, "crewIndex"); excludeName = ConfigNodeUtil.ParseValue <List <string> >(configNode, "excludeName", new List <string>()); gender = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(configNode, "gender", ProtoCrewMember.Gender.Male); }
public void SetCrew(ProtoCrewMember pcm) { this._pcm = pcm; gender = pcm.gender; name = pcm.name; experienceTrait = pcm.experienceTrait.TypeName; kerbalType = pcm.type; }
void crewWindow(int windowID) { GUILayout.Label("Create a crew: ", HighLogic.Skin.label); GUILayout.BeginHorizontal(); GUILayout.Label("Name: ", HighLogic.Skin.label); crewName = GUILayout.TextField(crewName, HighLogic.Skin.textField); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Gender: ", HighLogic.Skin.label); if (GUILayout.Button(genderButton.ToString(), HighLogic.Skin.button)) { if (genderButton == ProtoCrewMember.Gender.Male) { genderButton = ProtoCrewMember.Gender.Female; } else { genderButton = ProtoCrewMember.Gender.Male; } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("trait: ", HighLogic.Skin.label); if (GUILayout.Button(traitButton, HighLogic.Skin.button)) { if (traitButton == "Pilot") { traitButton = "Engineer"; } else { if (traitButton == "Scientist") { traitButton = "Pilot"; } else { traitButton = "Scientist"; } } } GUILayout.EndHorizontal(); if (GUILayout.Button("create your kerbal", HighLogic.Skin.button)) { for (int i = FlightGlobals.Vessels.Count - 1; i >= 0; --i) { Vessel station = FlightGlobals.Vessels[i]; if (station.vesselType == VesselType.Station) { setResourcesAmount(station); } } generateCrew(traitButton, genderButton); HighLogic.CurrentGame.Parameters.SpaceCenter.CanGoToMissionControl = true; } }
internal ProtoCustomVeteran(ConfigNode config) { name = config.GetValue("name"); gender = (ProtoCrewMember.Gender)ConfigNode.ParseEnum(typeof(ProtoCrewMember.Gender), config.GetValue("gender")); trait = config.GetValue("trait"); isBadass = bool.Parse(config.GetValue("isBadass")); courage = float.Parse(config.GetValue("courage")); stupidity = float.Parse(config.GetValue("stupidity")); }
public KerbalModel(ProtoCrewMember kerbal, bool isNew) { this.Kerbal = kerbal; Name = kerbal.name; Stupidity = kerbal.stupidity; Courage = kerbal.courage; Badass = kerbal.isBadass; Gender = kerbal.gender; Type = kerbal.type; IsNew = isNew; }
public ModKerbal(ProtoCrewMember kerbal, bool isNew) { this.Kerbal = kerbal; Name = kerbal.name; Stupidity = kerbal.stupidity; Courage = kerbal.courage; Badass = kerbal.isBadass; Title = kerbal.experienceTrait.Title; Gender = kerbal.gender; IsNew = isNew; }
public ModKerbal(ProtoCrewMember kerbal, bool isNew) { Kerbal = kerbal; Name = kerbal.name; Stupidity = kerbal.stupidity; Courage = kerbal.courage; Badass = kerbal.isBadass; Trait = kerbal.trait; Gender = kerbal.gender; IsNew = isNew; }
internal static void DisplaySelectGender() { GUILayout.BeginHorizontal(); var isMale = ProtoCrewMember.Gender.Male == Gender; GUILayout.Label("Gender:", GUILayout.Width(80)); isMale = GUILayout.Toggle(isMale, ProtoCrewMember.Gender.Male.ToString(), GUILayout.Width(70)); isMale = GUILayout.Toggle(!isMale, ProtoCrewMember.Gender.Female.ToString(), GUILayout.Width(80)); Gender = isMale ? ProtoCrewMember.Gender.Female : ProtoCrewMember.Gender.Male; GUILayout.EndHorizontal(); }
private bool ValidKerbal(ProtoCrewMember.Gender gender, string trait) { // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch (gender) { case ProtoCrewMember.Gender.Female when !allowFemales: case ProtoCrewMember.Gender.Male when !allowMales: return(false); } return(traits[trait]); }
public ModKerbal(ProtoCrewMember kerbal, bool isNew) { this.Kerbal = kerbal; Name = kerbal.name; Stupidity = kerbal.stupidity; Courage = kerbal.courage; Badass = kerbal.isBadass; Title = kerbal.experienceTrait.Title; Gender = kerbal.gender; Skill = kerbal.experienceLevel; Experience = kerbal.experience; IsNew = isNew; }
void generateCrew(string kerbalTrait, ProtoCrewMember.Gender gender) { ProtoCrewMember crew = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew); while (crew.trait != kerbalTrait) { crew = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew); } crew.ChangeName(crewName); crew.type = ProtoCrewMember.KerbalType.Crew; crew.gender = gender; crew.experienceLevel = 5; FlightLog flight = new FlightLog(); flight.AddEntry("Land,Eeloo"); flight.AddEntry("Land,Dres"); flight.AddEntry("Land,Pol"); flight.AddEntry("Land,Gilly"); flight.AddEntry("Land,Tylo"); flight.AddEntry("Land,Bop"); flight.AddEntry("Land,Vall"); flight.AddEntry("Land,Laythe"); crew.careerLog.AddFlight(); for (int i = flight.Entries.Count - 1; i >= 0; --i) { FlightLog.Entry entries = flight.Entries[i]; crew.careerLog.AddEntry(entries); } for (int i = FlightGlobals.Vessels.Count - 1; i >= 0; --i) { Vessel vessel = FlightGlobals.Vessels[i]; if (vessel.vesselName == "Kerbin Station") { for (int j = vessel.Parts.Count - 1; j >= 0; --j) { Part part = vessel.Parts[j]; if (part.protoModuleCrew.Count < part.CrewCapacity) { part.AddCrewmember(crew); part.Actions.part.SpawnIVA(); CameraManager.Instance.SetCameraMap(); CameraManager.Instance.SetCameraFlight(); break; } } break; } } }
internal static void UpdateTo(this ProtoCrewMember kerbal, string name, ProtoCrewMember.Gender gender, string trait, bool veteran, bool isBadass, float courage, float stupidity) { kerbal.NewName(name); kerbal.gender = gender; kerbal.type = veteran ? ProtoCrewMember.KerbalType.Crew : ProtoCrewMember.KerbalType.Applicant; KerbalRoster.SetExperienceTrait(kerbal, trait); kerbal.veteran = veteran; kerbal.isBadass = isBadass; kerbal.courage = courage; kerbal.stupidity = stupidity; if (HighLogic.CurrentGame != null && HighLogic.CurrentGame.Mode != Game.Modes.CAREER) { kerbal.experienceLevel = 5; kerbal.experience = 99999; } }
public string DefaultLastName(ProtoCrewMember.Gender gender) { if (!Settings.generateLastNames) { return("Kerman"); } string lastName = ""; if (femaleSurnamesExist && gender == ProtoCrewMember.Gender.Female) { if (flnames1.Length > 0) { lastName += flnames1[0]; } if (flnames2.Length > 0) { lastName += flnames2[0]; } if (flnames3.Length > 0) { lastName += flnames3[0]; } } else { if (lnames1.Length > 0) { lastName += lnames1[0]; } if (lnames2.Length > 0) { lastName += lnames2[0]; } if (lnames3.Length > 0) { lastName += lnames3[0]; } } if (string.IsNullOrEmpty(lastName)) { return("Kerman"); } return(lastName); }
private string MatchSuitToId(ProtoCrewMember.Gender gender, string suit) { string genderString = gender == ProtoCrewMember.Gender.Female ? "Female" : "Male"; for (int i = 0; i < SuitVariants.Count; i++) { SuitCombo sc = SuitVariants.ElementAt(i); if (sc.gender != genderString) { continue; } if (sc.name == suit) { return(sc.name); } } return(null); }
public static string KerbalName(ProtoCrewMember.Gender gender) { string defaultKerbalName = ""; do { defaultKerbalName = CrewGenerator.GetRandomName(gender, random); }while (nameCache.ContainsKey(defaultKerbalName)); string kerbalName = ""; do { kerbalName = DraftTwitchViewers.KerbalName(defaultKerbalName); }while (nameCache.ContainsKey(kerbalName)); nameCache.Add(kerbalName, 0); return(kerbalName); }
public static Kerbal Load(ConfigNode node) { string name = ConfigNodeUtil.ParseValue <string>(node, "name"); ProtoCrewMember crew = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == name).FirstOrDefault(); if (crew != null) { return(new Kerbal(crew)); } else { ProtoCrewMember.Gender gender = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(node, "gender", RandomGender()); string experienceTrait = ConfigNodeUtil.ParseValue <string>(node, "experienceTrait", RandomExperienceTrait()); ProtoCrewMember.KerbalType kerbalType = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Crew); Kerbal k = new Kerbal(gender, name, experienceTrait); k.kerbalType = kerbalType; return(k); } }
protected override void OnLoad(ConfigNode node) { base.OnLoad(node); count = Convert.ToInt32(node.GetValue("count")); removePassengers = ConfigNodeUtil.ParseValue <bool?>(node, "removePassengers", null) ?? true; // Legacy support from Contract Configurator 1.8.3 if (node.HasValue("potentialPassenger")) { List <string> passengerNames = ConfigNodeUtil.ParseValue <List <string> >(node, "potentialPassenger", new List <string>()); ProtoCrewMember.Gender gender = ConfigNodeUtil.ParseValue <ProtoCrewMember.Gender>(node, "gender", Kerbal.RandomGender()); ProtoCrewMember.KerbalType kerbalType = ConfigNodeUtil.ParseValue <ProtoCrewMember.KerbalType>(node, "kerbalType", ProtoCrewMember.KerbalType.Tourist); string experienceTrait = ConfigNodeUtil.ParseValue <string>(node, "experienceTrait", Kerbal.RandomExperienceTrait()); kerbals = passengerNames.Select(name => new Kerbal(gender, name, experienceTrait)).ToList(); foreach (Kerbal kerbal in kerbals) { kerbal.kerbalType = kerbalType; } } else { foreach (ConfigNode kerbalNode in node.GetNodes("KERBAL")) { kerbals.Add(Kerbal.Load(kerbalNode)); } } foreach (ConfigNode child in node.GetNodes("PASSENGER_DATA")) { ProtoCrewMember crew = ConfigNodeUtil.ParseValue <ProtoCrewMember>(child, "passenger"); bool loaded = ConfigNodeUtil.ParseValue <bool>(child, "loaded"); if (crew != null) { passengers[crew] = loaded; } } }
public bool SetTexture(string originalName, Texture2D texture) { switch (originalName) { case "kerbalHead": Gender = Gender.Male; Head = Head ?? texture; return(true); case "kerbalGirl_06_BaseColor": Gender = Gender.Female; Head = Head ?? texture; return(true); case "kerbal_armHands": Arms = Arms ?? texture; return(true); case "eyeballLeft": EyeballLeft = EyeballLeft ?? texture; return(true); case "eyeballRight": EyeballRight = EyeballRight ?? texture; return(true); case "pupilLeft": PupilLeft = PupilLeft ?? texture; return(true); case "pupilRight": PupilRight = PupilRight ?? texture; return(true); default: return(false); } }
private static void DisplayRosterListViewer() { try { string buttonToolTip = string.Empty; GUIStyle hdrlabelStyle = new GUIStyle(GUI.skin.label); hdrlabelStyle.fontStyle = FontStyle.Bold; GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.Label("", hdrlabelStyle, GUILayout.Width(5)); buttonToolTip = "Click to sort. Click again to sort the opposite direction."; if (GUILayout.Button(new GUIContent("Name", buttonToolTip), hdrlabelStyle, GUILayout.Width(150))) SortRosterList("Name"); Rect rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y); if (GUILayout.Button(new GUIContent("|Gender", buttonToolTip), hdrlabelStyle, GUILayout.Width(50))) SortRosterList("Gender"); rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y); if (GUILayout.Button(new GUIContent("|Profession", buttonToolTip), hdrlabelStyle, GUILayout.Width(75))) SortRosterList("Profession"); rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y); if (GUILayout.Button(new GUIContent("|Skill", buttonToolTip), hdrlabelStyle, GUILayout.Width(35))) SortRosterList("Skill"); rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y); if (GUILayout.Button(new GUIContent("|Experience", buttonToolTip), hdrlabelStyle, GUILayout.Width(75))) SortRosterList("Experience"); rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y); if (GUILayout.Button(new GUIContent("|Status", buttonToolTip), hdrlabelStyle, GUILayout.Width(200))) SortRosterList("Status"); rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 5 - ScrollViewerPosition.y); GUILayout.EndHorizontal(); ScrollViewerPosition = GUILayout.BeginScrollView(ScrollViewerPosition, RMStyle.ScrollStyle, GUILayout.Height(230), GUILayout.Width(680)); foreach (ProtoCrewMember kerbal in RMAddon.AllCrew) { if (CanDisplayKerbal(kerbal)) { GUIStyle labelStyle = null; if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Dead || kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Missing) labelStyle = RMStyle.LabelStyleRed; else if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) labelStyle = RMStyle.LabelStyleYellow; else labelStyle = RMStyle.LabelStyle; // What vessel is this Kerbal Assigned to? string rosterDetails = ""; if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) { foreach (Vessel thisVessel in FlightGlobals.Vessels) { List<ProtoCrewMember> crew = thisVessel.GetVesselCrew(); foreach (ProtoCrewMember crewMember in crew) { if (crewMember == kerbal) { rosterDetails = "Assigned - " + thisVessel.GetName().Replace("(unloaded)", ""); break; } } } } else if (InstalledMods.IsDFInstalled && kerbal.type == ProtoCrewMember.KerbalType.Unowned) { // This kerbal could be frozen. Lets find out... rosterDetails = GetFrozenDetials(kerbal); labelStyle = RMStyle.LabelStyleCyan; } else { // Since the kerbal has no vessel assignment, lets show what their status... rosterDetails = kerbal.rosterStatus.ToString(); } string buttonText = string.Empty; GUILayout.BeginHorizontal(); buttonText = kerbal.name; buttonToolTip = "Opens the Edit section for this kerbal."; GUIStyle btnStyle = (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) ? RMStyle.ButtonStyleLeft : RMStyle.ButtonToggledStyleLeft; if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), btnStyle, GUILayout.Width(160))) { if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) { SelectedKerbal = new ModKerbal(kerbal, false); SetProfessionFlag(); gender = SelectedKerbal.Gender; } else { SelectedKerbal = null; gender = ProtoCrewMember.Gender.Male; } } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips == true) ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 50 - ScrollViewerPosition.y); GUILayout.Label(kerbal.gender.ToString(), labelStyle, GUILayout.Width(50)); GUILayout.Label(kerbal.experienceTrait.Title, labelStyle, GUILayout.Width(75)); GUILayout.Label(kerbal.experienceLevel.ToString(), labelStyle, GUILayout.Width(35)); GUILayout.Label(kerbal.experience.ToString(), labelStyle, GUILayout.Width(75)); GUILayout.Label(rosterDetails, labelStyle, GUILayout.Width(240)); //if (!RMSettings.RealismMode || kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Available) // GUI.enabled = true; //else // GUI.enabled = false; //buttonText = (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) ? "Edit" : "Cancel"; //if (GUI.enabled) // buttonToolTip = (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) ? "Edit this Kerbal's characteristics" : "Cancel any changes to this Kerbal"; //else // buttonToolTip = "Kerbal is not available at this time.\r\nEditing is disabled"; //if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), GUILayout.Width(60))) //{ // if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) // { // SelectedKerbal = new ModKerbal(kerbal, false); // SetProfessionFlag(); // } // else // { // SelectedKerbal = null; // } //} //rect = GUILayoutUtility.GetLastRect(); //if (Event.current.type == EventType.Repaint && ShowToolTips == true) // ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 50 - ScrollViewerPosition.y); // if (HighLogic.LoadedScene != GameScenes.SPACECENTER && ((RMSettings.RealismMode && RMAddon.IsPreLaunch) || !RMSettings.RealismMode) && kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Available && FlightGlobals.ActiveVessel != null && !RMAddon.VesselIsFull(FlightGlobals.ActiveVessel)) // { // GUI.enabled = true; // buttonText = "Add"; // buttonToolTip = "Adds a kerbal to the Active Vessel,\r\nin the first available seat."; // } // else if ((kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Dead && kerbal.type != ProtoCrewMember.KerbalType.Unowned) || kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Missing) // { // GUI.enabled = true; // buttonText = "Respawn"; // buttonToolTip = "Brings a Kerbal back to life.\r\nWill then become available."; // } // else if (HighLogic.LoadedScene != GameScenes.SPACECENTER && ((RMSettings.RealismMode && RMAddon.IsPreLaunch) || !RMSettings.RealismMode) && kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned && FlightGlobals.ActiveVessel.GetVesselCrew().Contains(kerbal)) // { // GUI.enabled = true; // buttonText = "Remove"; // buttonToolTip = "Removes a Kerbal from the active vessel.\r\nWill then become available."; // } // else if (HighLogic.LoadedScene != GameScenes.SPACECENTER && (RMSettings.RealismMode && !RMAddon.IsPreLaunch) && kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Available) // { // GUI.enabled = false; // buttonText = "Add"; // buttonToolTip = "Add Disabled. Realism Settings are preventing this action.\r\nTo add a Kerbal, Change your realism Settings."; // } // else // { // GUI.enabled = false; // buttonText = "--"; // buttonToolTip = "Kerbal is not available (" + kerbal.rosterStatus + ").\r\nCurrent status does not allow any action."; // } // if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), GUILayout.Width(70))) // { // if (buttonText == "Add") // RMAddon.AddCrewMember(kerbal, FlightGlobals.ActiveVessel); // else if (buttonText == "Respawn") // RMAddon.RespawnKerbal(kerbal); // else if (buttonText == "Remove") // { // // get part... // Part part = RMAddon.FindKerbalPart(kerbal); // if (part != null) // RMAddon.RemoveCrewMember(kerbal, part); // } // } // rect = GUILayoutUtility.GetLastRect(); // if (Event.current.type == EventType.Repaint && ShowToolTips == true) // ToolTip = Utilities.SetActiveTooltip(rect, Position, GUI.tooltip, ref ToolTipActive, 30, 50 - ScrollViewerPosition.y); GUILayout.EndHorizontal(); GUI.enabled = true; } } GUILayout.EndVertical(); GUILayout.EndScrollView(); } catch (Exception ex) { Utilities.LogMessage(string.Format(" in RosterListViewer. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true); } }
public void Initialize(ProtoCrewMember.Gender? gender = null, string name = null) { if (name != null) { this.name = name; _pcm = pcm; } if (gender != null) { this.gender = gender.Value; } else { this.gender = RandomGender(); } if (_pcm != null) { SetCrew(_pcm); } else { this.name = name ?? KerbalName(this.gender); experienceTrait = RandomExperienceTrait(); kerbalType = ProtoCrewMember.KerbalType.Crew; } }
public bool Test(ProtoCrewMember pcm) { bool res = true; if (pcm == null) { Core.Log("ProtoCrewMember argument in Logic.Test is null!", LogLevel.Error); return(res); } Vessel v = Core.KerbalVessel(pcm); if (Situation != null) { if (v != null) { switch (Situation.ToLower()) { case "prelaunch": Op(ref res, v.situation == Vessel.Situations.PRELAUNCH); break; case "landed": Op(ref res, v.situation == Vessel.Situations.LANDED); break; case "splashed": Op(ref res, v.situation == Vessel.Situations.SPLASHED); break; case "ground": Op(ref res, (v.situation == Vessel.Situations.LANDED) || (v.situation == Vessel.Situations.SPLASHED)); break; case "flying": Op(ref res, v.situation == Vessel.Situations.FLYING); break; case "suborbital": Op(ref res, v.situation == Vessel.Situations.SUB_ORBITAL); break; case "orbiting": Op(ref res, v.situation == Vessel.Situations.ORBITING); break; case "escaping": Op(ref res, v.situation == Vessel.Situations.ESCAPING); break; case "in space": Op(ref res, (v.situation == Vessel.Situations.SUB_ORBITAL) || (v.situation == Vessel.Situations.ORBITING) || (v.situation == Vessel.Situations.ESCAPING)); break; } } else { Op(ref res, false); } } if (InSOI != null) { Op(ref res, v != null ? InSOI.Equals(v.mainBody.name, StringComparison.CurrentCultureIgnoreCase) : false); } if (KerbalStatus != null) { Op(ref res, KerbalStatus.Equals(pcm.rosterStatus.ToString(), StringComparison.CurrentCultureIgnoreCase)); } if (!Double.IsNaN(MissionTime)) { Op(ref res, v != null ? v.missionTime >= MissionTime : false); } if (Gender != null) { ProtoCrewMember.Gender g = pcm.gender; switch (Gender.ToLower()) { case "female": Op(ref res, g == ProtoCrewMember.Gender.Female); break; case "male": Op(ref res, g == ProtoCrewMember.Gender.Male); break; } } if (GenderPresent != null) { ProtoCrewMember.Gender g; switch (GenderPresent.ToLower()) { case "female": g = ProtoCrewMember.Gender.Female; break; case "male": g = ProtoCrewMember.Gender.Male; break; case "same": g = pcm.gender; break; case "other": g = pcm.gender == ProtoCrewMember.Gender.Female ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female; break; default: Core.Log("Unrecognized value for gender in 'genderPresent = " + GenderPresent + "'. Assuming 'other'."); goto case "other"; } bool found = false; if (v != null) { foreach (ProtoCrewMember crewmate in v.GetVesselCrew()) { if ((crewmate.gender == g) && (crewmate != pcm)) { found = true; break; } } } Op(ref res, found); } if (TraitPresent != null) { bool found = false; if (v != null) { foreach (ProtoCrewMember crewmate in v.GetVesselCrew()) { if ((crewmate.trait.ToLower() == TraitPresent.ToLower()) && (crewmate != pcm)) { found = true; break; } } } Op(ref res, found); } if (ConditionPresent != null) { bool found = false; if (v != null) { foreach (ProtoCrewMember crewmate in v.GetVesselCrew()) { if ((Core.KerbalHealthList[crewmate].HasCondition(ConditionPresent)) && (crewmate != pcm)) { found = true; break; } } } Op(ref res, found); } foreach (Logic l in Operands) { Op(ref res, l.Test(pcm)); } return(res ^ Inverse); }
public bool Test(ProtoCrewMember pcm) { Core.Log("Logic.Test('" + pcm.name + "')"); bool res = true; if (pcm == null) { Core.Log("ProtoCrewMember argument in Logic.Test is null!", Core.LogLevel.Error); return(res); } Vessel v = Core.KerbalVessel(pcm); if (Situation != null) { if (v != null) { Core.Log("Checking 'situation = " + Situation + "'. " + v.vesselName + " is " + v.situation); switch (Situation.ToLower()) { case "prelaunch": Op(ref res, v.situation == Vessel.Situations.PRELAUNCH); break; case "landed": Op(ref res, v.situation == Vessel.Situations.LANDED); break; case "splashed": Op(ref res, v.situation == Vessel.Situations.SPLASHED); break; case "ground": Op(ref res, (v.situation == Vessel.Situations.LANDED) || (v.situation == Vessel.Situations.SPLASHED)); break; case "flying": Op(ref res, v.situation == Vessel.Situations.FLYING); break; case "suborbital": Op(ref res, v.situation == Vessel.Situations.SUB_ORBITAL); break; case "orbiting": Op(ref res, v.situation == Vessel.Situations.ORBITING); break; case "escaping": Op(ref res, v.situation == Vessel.Situations.ESCAPING); break; case "in space": Op(ref res, (v.situation == Vessel.Situations.SUB_ORBITAL) || (v.situation == Vessel.Situations.ORBITING) || (v.situation == Vessel.Situations.ESCAPING)); break; } } else { Op(ref res, false); } } if (InSOI != null) { if (v != null) { Core.Log("Checking 'inSOI = " + InSOI + "' rule. " + pcm.name + " is in " + v.mainBody?.name + "'s SOI."); Op(ref res, InSOI.Equals(v.mainBody.name, StringComparison.CurrentCultureIgnoreCase)); } else { Core.Log("Checking 'inSOI = " + InSOI + "' rule. " + pcm.name + " is not in a vessel => this logic is false."); Op(ref res, false); } } if (KerbalStatus != null) { Core.Log("Checking 'kerbalStatus = " + KerbalStatus + "'. " + pcm.name + " is " + pcm.rosterStatus); Op(ref res, KerbalStatus.Equals(pcm.rosterStatus.ToString(), StringComparison.CurrentCultureIgnoreCase)); } if (!Double.IsNaN(MissionTime)) { Core.Log("Checking 'missionTime = " + MissionTime + "'. MET is " + v?.missionTime + "."); if (v != null) { Op(ref res, v.missionTime >= MissionTime); } else { Op(ref res, false); } } if (Gender != null) { ProtoCrewMember.Gender g = pcm.gender; Core.Log("Checking condition 'gender = " + Gender + "'. " + pcm.name + " is " + g); switch (Gender.ToLower()) { case "female": Op(ref res, g == ProtoCrewMember.Gender.Female); break; case "male": Op(ref res, g == ProtoCrewMember.Gender.Male); break; } } if (GenderPresent != null) { ProtoCrewMember.Gender g; switch (GenderPresent.ToLower()) { case "female": g = ProtoCrewMember.Gender.Female; break; case "male": g = ProtoCrewMember.Gender.Male; break; case "same": g = pcm.gender; break; case "other": g = pcm.gender == ProtoCrewMember.Gender.Female ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female; break; default: Core.Log("Unrecognized value for gender in 'genderPresent = " + GenderPresent + "'. Assuming 'other'."); goto case "other"; } Core.Log("Checking condition 'genderPresent = " + GenderPresent + "'. Looking for " + g + " crewmates."); bool found = false; if (v != null) { foreach (ProtoCrewMember crewmate in v.GetVesselCrew()) { if ((crewmate.gender == g) && (crewmate != pcm)) { found = true; break; } } } Core.Log(g + " crewmates " + (found ? "" : "not ") + "found."); Op(ref res, found); } if (TraitPresent != null) { Core.Log("Checking condition 'traitPresent = " + TraitPresent + "'."); bool found = false; if (v != null) { foreach (ProtoCrewMember crewmate in v.GetVesselCrew()) { if ((crewmate.trait.ToLower() == TraitPresent.ToLower()) && (crewmate != pcm)) { found = true; break; } } } Core.Log(TraitPresent + " crewmates " + (found ? "" : "not ") + "found."); Op(ref res, found); } if (ConditionPresent != null) { Core.Log("Checking condition 'conditionPresent = " + ConditionPresent + "'."); bool found = false; if (v != null) { foreach (ProtoCrewMember crewmate in v.GetVesselCrew()) { if ((Core.KerbalHealthList.Find(crewmate.name).HasCondition(ConditionPresent)) && (crewmate != pcm)) { found = true; break; } } } Core.Log("Crewmates with " + ConditionPresent + (found ? "" : " not") + " found."); Op(ref res, found); } foreach (Logic l in Operands) { Op(ref res, l.Test(pcm)); } return(res ^ Inverse); }
private void kHire() { ProtoCrewMember newKerb = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew); int loopcount = 0; ProtoCrewMember.Gender gender = (KGender == 0)? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female; string career = ""; switch (KCareer) { case 0: career = "Pilot"; break; case 1: career = "Scientist"; break; case 2: career = "Engineer"; break; default: break; // throw an error? } while ((newKerb.experienceTrait.Title != career) || (newKerb.gender != gender)) { HighLogic.CurrentGame.CrewRoster.Remove(newKerb); newKerb = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(ProtoCrewMember.KerbalType.Crew); loopcount++; } Debug.Log("KSI :: KIA MIA Stat is: " + KDead); Debug.Log("KSI :: " + newKerb.experienceTrait.TypeName + " " + newKerb.name + " has been created in: " + loopcount.ToString() + " loops."); newKerb.rosterStatus = ProtoCrewMember.RosterStatus.Available; newKerb.experience = 0; newKerb.experienceLevel = 0; newKerb.courage = KCourage / 100; newKerb.stupidity = KStupidity / 100; if (KFearless) { newKerb.isBadass = true; } Debug.Log("KSI :: Status set to Available, courage and stupidity set, fearless trait set."); if (KLevel == 1) { newKerb.flightLog.AddEntry("Orbit,Kerbin"); newKerb.flightLog.AddEntry("Suborbit,Kerbin"); newKerb.flightLog.AddEntry("Flight,Kerbin"); newKerb.flightLog.AddEntry("Land,Kerbin"); newKerb.flightLog.AddEntry("Recover"); newKerb.ArchiveFlightLog(); newKerb.experience = 2; newKerb.experienceLevel = 1; Debug.Log("KSI :: Level set to 1."); } if (KLevel == 2) { newKerb.flightLog.AddEntry("Orbit,Kerbin"); newKerb.flightLog.AddEntry("Suborbit,Kerbin"); newKerb.flightLog.AddEntry("Flight,Kerbin"); newKerb.flightLog.AddEntry("Land,Kerbin"); newKerb.flightLog.AddEntry("Recover"); newKerb.flightLog.AddEntry("Flyby,Mun"); newKerb.flightLog.AddEntry("Orbit,Mun"); newKerb.flightLog.AddEntry("Land,Mun"); newKerb.flightLog.AddEntry("Flyby,Minmus"); newKerb.flightLog.AddEntry("Orbit,Minmus"); newKerb.flightLog.AddEntry("Land,Minmus"); newKerb.ArchiveFlightLog(); newKerb.experience = 8; newKerb.experienceLevel = 2; Debug.Log("KSI :: Level set to 2."); } if (ACLevel == 5) { newKerb.experience = 9999; newKerb.experienceLevel = 5; Debug.Log("KSI :: Level set to 5 - Non-Career Mode default."); } GameEvents.onGUIAstronautComplexSpawn.Fire(); // Refreshes the AC so that new kerbal shows on the available roster. // GameEvents.OnCrewmemberHired.Fire(newKerb, HighLogic.CurrentGame.CrewRoster.GetActiveCrewCount()); // The previous line was commented out because it was charging the cost determined by my mod plus the stock game cost in the previous event. // This lead to even higher costs than if you weren't even using my mod... even if you could hire level 2 kerbals. \ if (HighLogic.CurrentGame.Mode == Game.Modes.CAREER) { double myFunds = Funding.Instance.Funds; Funding.Instance.AddFunds(-costMath(), TransactionReasons.CrewRecruited); Debug.Log("KSI :: Total Funds removed " + costMath()); } Debug.Log("KSI :: Hiring Function Completed."); }
public Kerbal(ProtoCrewMember.Gender gender) { Initialize(gender); }
public void SelectKerbal() { if (kerbalSelected) { return; } kerbalSelected = true; // First, try to get a Kerbal that matches the name if (!string.IsNullOrEmpty(characterName)) { kerbal = HighLogic.CurrentGame.CrewRoster.AllKerbals().Where(pcm => pcm.name == characterName).FirstOrDefault(); } // Now grab from the active vessel else if (kerbal == null && FlightGlobals.ActiveVessel != null) { kerbal = FlightGlobals.ActiveVessel.GetVesselCrew().Where(pcm => !excludeName.Contains(pcm.name)).ElementAtOrDefault(crewIndex); if (kerbal != null) { characterName = kerbal.name; } } if (kerbal == null && string.IsNullOrEmpty(characterName)) { System.Random r = new System.Random(); gender = r.Next(2) == 0 ? ProtoCrewMember.Gender.Male : ProtoCrewMember.Gender.Female; characterName = CrewGenerator.GetRandomName(gender); } }
private static void DisplayRosterViewer() { try { // We have changed to an Update refreshed list, so I've moved filtering and sorting to the beginning of the routine, instead of the end. FilterRosterList(FilteredBy); SortRosterList(RMAddon.AllCrewSort); DisplayRosterHeader(); _scrollViewerPosition = GUILayout.BeginScrollView(_scrollViewerPosition, RMStyle.ScrollStyle, GUILayout.Height(230), GUILayout.Width(680)); //foreach (ProtoCrewMember kerbal in RMAddon.AllCrew foreach (var rmkerbal in RMAddon.AllCrew) { var kerbal = rmkerbal.Value.Kerbal; var labelStyle = GetLabelStyle(kerbal, rmkerbal); // What vessel is this Kerbal Assigned to? var rosterDetails = ""; if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) { rosterDetails = RosterVesselDetails(rmkerbal.Value); } else if (InstalledMods.IsDfInstalled && kerbal.type == ProtoCrewMember.KerbalType.Unowned) { // This kerbal could be frozen. Lets find out... rosterDetails = GetFrozenDetials(kerbal); labelStyle = RMStyle.LabelStyleCyan; } else if (rmkerbal.Value.SalaryContractDispute) { // This kerbal is in contract dispute rosterDetails = rmkerbal.Value.Trait == "Tourist" ? "Contract Cancelled - Strike" : "Contract Dispute"; } else { // Since the kerbal has no vessel assignment, lets show what their status... rosterDetails = kerbal.rosterStatus.ToString(); } GUILayout.BeginHorizontal(); // Column Name (is a Button) var buttonText = kerbal.name; const string buttonToolTip = "Opens the Edit section for this kerbal."; var btnStyle = SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal ? RMStyle.ButtonStyleLeft : RMStyle.ButtonToggledStyleLeft; if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), btnStyle, GUILayout.Width(160))) { if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal) { //Find the RMKerbal entry for the selected kerbal. SelectedKerbal = RMLifeSpan.Instance.RMKerbals.AllrmKerbals.FirstOrDefault(a => a.Key == kerbal.name).Value; if (SelectedKerbal == null) //Didn't find the RMKerbal entry? Should never happen? Create a new one just in case. { SelectedKerbal = new RMKerbal(Planetarium.GetUniversalTime(), kerbal, true, false); RMLifeSpan.Instance.RMKerbals.AllrmKerbals.Add(kerbal.name, SelectedKerbal); } else { SelectedKerbal.IsNew = false; } SetProfessionFlag(); Gender = SelectedKerbal.Gender; DisplayMode = DisplayModes.Edit; } else { SelectedKerbal = null; DisplayMode = DisplayModes.Index; Gender = ProtoCrewMember.Gender.Male; } } var rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } // Column Gender GUILayout.Label(kerbal.gender.ToString(), labelStyle, GUILayout.Width(50)); if (RMLifeSpan.Instance.RMGameSettings.EnableAging) { var kerbalInfo = RMLifeSpan.Instance.RMKerbals.AllrmKerbals.FirstOrDefault(a => a.Key == kerbal.name); if (kerbalInfo.Key != null) { GUILayout.Label(kerbalInfo.Value.Age.ToString("##0"), labelStyle, GUILayout.Width(35)); } } // Column Salary GUILayout.Label(rmkerbal.Value.SalaryContractDispute ? rmkerbal.Value.RealTrait : kerbal.trait, labelStyle, GUILayout.Width(75)); // Column Skill level GUILayout.Label(kerbal.experienceLevel.ToString(), labelStyle, GUILayout.Width(35)); // column Experience GUILayout.Label(kerbal.experience.ToString(CultureInfo.InvariantCulture), labelStyle, GUILayout.Width(75)); // Column Status var statusWidth = GUILayout.Width(240); if (RMLifeSpan.Instance.RMGameSettings.EnableAging) { statusWidth = GUILayout.Width(200); } GUILayout.Label(rosterDetails, labelStyle, statusWidth); GUILayout.EndHorizontal(); GUI.enabled = true; } GUILayout.EndScrollView(); } catch (Exception ex) { Utilities.LogMessage(string.Format(" in RosterListViewer. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true); } }
public override void OnLoad(ConfigNode configNode) { base.OnLoad(configNode); crewIndex = ConfigNodeUtil.ParseValue<int>(configNode, "crewIndex"); excludeName = ConfigNodeUtil.ParseValue<List<string>>(configNode, "excludeName", new List<string>()); gender = ConfigNodeUtil.ParseValue<ProtoCrewMember.Gender>(configNode, "gender", ProtoCrewMember.Gender.Male); }
public void DodgeKerbals(ConfigNode inputNode, Guid protovesselID) { List <string> takenKerbals = new List <string>(); foreach (ConfigNode partNode in inputNode.GetNodes("PART")) { int crewIndex = 0; foreach (string currentKerbalName in partNode.GetValues("crew")) { if (kerbalToVessel.ContainsKey(currentKerbalName) ? kerbalToVessel[currentKerbalName] != protovesselID : false) { ProtoCrewMember newKerbal = null; ProtoCrewMember.Gender newKerbalGender = GetKerbalGender(currentKerbalName); string newExperienceTrait = null; if (HighLogic.CurrentGame.CrewRoster.Exists(currentKerbalName)) { ProtoCrewMember oldKerbal = HighLogic.CurrentGame.CrewRoster[currentKerbalName]; newKerbalGender = oldKerbal.gender; newExperienceTrait = oldKerbal.experienceTrait.TypeName; } foreach (ProtoCrewMember possibleKerbal in HighLogic.CurrentGame.CrewRoster.Crew) { bool kerbalOk = true; if (kerbalOk && kerbalToVessel.ContainsKey(possibleKerbal.name) && (takenKerbals.Contains(possibleKerbal.name) || kerbalToVessel[possibleKerbal.name] != protovesselID)) { kerbalOk = false; } if (kerbalOk && possibleKerbal.gender != newKerbalGender) { kerbalOk = false; } if (kerbalOk && newExperienceTrait != null && newExperienceTrait != possibleKerbal.experienceTrait.TypeName) { kerbalOk = false; } if (kerbalOk) { newKerbal = possibleKerbal; break; } } int kerbalTries = 0; while (newKerbal == null) { bool kerbalOk = true; ProtoCrewMember.KerbalType kerbalType = ProtoCrewMember.KerbalType.Crew; if (newExperienceTrait == "Tourist") { kerbalType = ProtoCrewMember.KerbalType.Tourist; } if (newExperienceTrait == "Unowned") { kerbalType = ProtoCrewMember.KerbalType.Unowned; } ProtoCrewMember possibleKerbal = HighLogic.CurrentGame.CrewRoster.GetNewKerbal(kerbalType); if (kerbalTries < 200 && possibleKerbal.gender != newKerbalGender) { kerbalOk = false; } if (kerbalTries < 100 && newExperienceTrait != null && newExperienceTrait != possibleKerbal.experienceTrait.TypeName) { kerbalOk = false; } if (kerbalOk) { newKerbal = possibleKerbal; } kerbalTries++; } DarkLog.Debug("Generated dodged kerbal with " + kerbalTries + " tries"); partNode.SetValue("crew", newKerbal.name, crewIndex); newKerbal.seatIdx = crewIndex; newKerbal.rosterStatus = ProtoCrewMember.RosterStatus.Assigned; takenKerbals.Add(newKerbal.name); } else { takenKerbals.Add(currentKerbalName); CreateKerbalIfMissing(currentKerbalName, protovesselID); HighLogic.CurrentGame.CrewRoster[currentKerbalName].rosterStatus = ProtoCrewMember.RosterStatus.Assigned; HighLogic.CurrentGame.CrewRoster[currentKerbalName].seatIdx = crewIndex; } crewIndex++; } } vesselToKerbal[protovesselID] = takenKerbals; foreach (string name in takenKerbals) { kerbalToVessel[name] = protovesselID; } }
internal static void DisplaySelectGender() { GUILayout.BeginHorizontal(); bool isMale = ProtoCrewMember.Gender.Male == gender ? true : false; GUILayout.Label("Gender:", GUILayout.Width(80)); isMale = GUILayout.Toggle(isMale, ProtoCrewMember.Gender.Male.ToString(), GUILayout.Width(70)); isMale = GUILayout.Toggle(!isMale, ProtoCrewMember.Gender.Female.ToString(), GUILayout.Width(80)); gender = isMale ? ProtoCrewMember.Gender.Female : ProtoCrewMember.Gender.Male; GUILayout.EndHorizontal(); }