private void refreshLoadedVesselRosterPartOnly(Dictionary <string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ActivityLevel vesselDefaultActivityLevel = getDefaultActivityLevel(vessel); foreach (Part part in vessel.Parts) { if (part.CrewCapacity == 0) { continue; } ActivityLevel bestPartActivityLevel = vesselDefaultActivityLevel; // check all modules on the part in case we have multiple KeepFit modules for some reason foreach (KeepFitPartModule kfModule in part.FindModulesImplementing <KeepFitPartModule>()) { ActivityLevel partActivityLevel = kfModule.activityLevel; if (partActivityLevel > bestPartActivityLevel) { bestPartActivityLevel = partActivityLevel; } } foreach (ProtoCrewMember partCrewMember in part.protoModuleCrew) { updateRosters(roster, vesselRecord, partCrewMember.name, bestPartActivityLevel, true); } } }
private void refreshLoadedVesselRosterCLS(Dictionary <string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ActivityLevel vesselDefaultActivityLevel = getDefaultActivityLevel(vessel); ConnectedLivingSpace.ICLSAddon cls = module.GetCLS(); foreach (ConnectedLivingSpace.ICLSSpace space in cls.Vessel.Spaces) { ActivityLevel spaceBestActivityLevel = vesselDefaultActivityLevel; foreach (ConnectedLivingSpace.ICLSPart part in space.Parts) { if (part.Part.CrewCapacity == 0) { continue; } // check all modules on the part in case we have multiple KeepFit modules for some reason foreach (KeepFitPartModule kfModule in part.Part.FindModulesImplementing <KeepFitPartModule>()) { ActivityLevel partActivityLevel = kfModule.activityLevel; if (partActivityLevel > spaceBestActivityLevel) { spaceBestActivityLevel = partActivityLevel; } } foreach (ConnectedLivingSpace.ICLSKerbal partCrewMember in space.Crew) { updateRosters(roster, vesselRecord, partCrewMember.Kerbal.name, spaceBestActivityLevel, true); } } } }
private void refreshNonLoadedVesselRoster(Dictionary <string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ActivityLevel defaultActivityLevel = getDefaultActivityLevel(vessel); foreach (ProtoPartSnapshot part in vessel.protoVessel.protoPartSnapshots) { foreach (ProtoCrewMember crewMember in part.protoModuleCrew) { updateRosters(roster, vesselRecord, crewMember.name, defaultActivityLevel, false); } } }
private void refreshLoadedVesselRoster(Dictionary <string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ConnectedLivingSpace.ICLSAddon cls = module.GetCLS(); if (cls != null && gameConfig.applyCLSLimitsIfAvailable && vessel == FlightGlobals.ActiveVessel && cls.Vessel != null) { refreshLoadedVesselRosterCLS(roster, vesselRecord, vessel); } else if (gameConfig.useBestPartOnVessel) { refreshLoadedVesselRosterWholeVessel(roster, vesselRecord, vessel); } else { refreshLoadedVesselRosterPartOnly(roster, vesselRecord, vessel); } }
private void refreshLoadedVesselRoster(Dictionary <string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { foreach (Part part in vessel.Parts) { if (part.CrewCapacity == 0) { continue; } bool hasSeat = false; bool hasCommandModule = false; ActivityLevel partActivityLevel = getDefaultActivityLevel(vessel); foreach (PartModule module in part.Modules) { if (module is KerbalSeat) { hasSeat = true; } else if (module is ModuleCommand) { hasCommandModule = true; } else if (module is KeepFitPartModule) { KeepFitPartModule keepFitPartModule = (KeepFitPartModule)module; if (keepFitPartModule.activityLevel > partActivityLevel) { partActivityLevel = keepFitPartModule.activityLevel; } } } foreach (ProtoCrewMember partCrewMember in part.protoModuleCrew) { updateRosters(roster, vesselRecord, partCrewMember.name, partActivityLevel, true); } } }
private KeepFitCrewMember updateRosters(Dictionary <string, KeepFitCrewMember> roster, KeepFitVesselRecord vessel, string name, ActivityLevel activityLevel, bool activityLevelReliable) { this.Log_DebugOnly("updateRosters", "updating crewMember[{0}] activityLevel[{1}]]", name, activityLevel); KeepFitCrewMember keepFitCrewMember = null; roster.TryGetValue(name, out keepFitCrewMember); if (keepFitCrewMember != null) { this.Log_DebugOnly("updateRosters", "crewMember[{0}] was in the old roster", name); } else { this.Log_DebugOnly("updateRosters", "crewMember[{0}] wasn't in the old roster", name); // not in the old roster - add him to the new one ... keepFitCrewMember = new KeepFitCrewMember(name, false); keepFitCrewMember.fitnessLevel = gameConfig.initialFitnessLevel; keepFitCrewMember.activityLevel = activityLevel; roster[name] = keepFitCrewMember; } if (activityLevelReliable) { keepFitCrewMember.activityLevel = activityLevel; } vessel.crew[name] = keepFitCrewMember; this.Log_DebugOnly("updateRosters", "crewMan[{0}] activityLevel[{1}]", name, activityLevel); return(keepFitCrewMember); }
internal void DrawVesselInfo(int windowHandle, KeepFitVesselRecord vessel, bool showExpandToggle, ref bool expanded, bool showAllCrewExpanded) { GUILayout.BeginHorizontal(); GUILayout.Label(vessel.name, uiResources.styleBarText); GUILayout.Label("Crew - (" + vessel.crew.Count() + ")"); GUILayout.FlexibleSpace(); if (showExpandToggle && DrawChevron(expanded)) { expanded = !expanded; } GUILayout.EndHorizontal(); if (expanded) { GUILayout.BeginHorizontal(); GUILayout.Space(4); GUILayout.BeginVertical(); DrawCrew(windowHandle, vessel.crew.Values, true, showAllCrewExpanded); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } }
private void refreshNonLoadedVesselRoster(Dictionary<string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ActivityLevel defaultActivityLevel = getDefaultActivityLevel(vessel); foreach (ProtoPartSnapshot part in vessel.protoVessel.protoPartSnapshots) { foreach (ProtoCrewMember crewMember in part.protoModuleCrew) { updateRosters(roster, vesselRecord, crewMember.name, defaultActivityLevel, false); } } }
private KeepFitCrewMember updateRosters(Dictionary<string, KeepFitCrewMember> roster, KeepFitVesselRecord vessel, string name, ActivityLevel activityLevel, bool activityLevelReliable) { this.Log_DebugOnly("updateRosters", "updating crewMember[{0}] activityLevel[{1}]]", name, activityLevel); KeepFitCrewMember keepFitCrewMember = null; roster.TryGetValue(name, out keepFitCrewMember); if (keepFitCrewMember != null) { this.Log_DebugOnly("updateRosters", "crewMember[{0}] was in the old roster", name); } else { this.Log_DebugOnly("updateRosters", "crewMember[{0}] wasn't in the old roster", name); // not in the old roster - add him to the new one ... keepFitCrewMember = new KeepFitCrewMember(name, false); keepFitCrewMember.fitnessLevel = gameConfig.initialFitnessLevel; keepFitCrewMember.activityLevel = activityLevel; roster[name] = keepFitCrewMember; } if (activityLevelReliable) { keepFitCrewMember.activityLevel = activityLevel; } vessel.crew[name] = keepFitCrewMember; this.Log_DebugOnly("updateRosters", "crewMan[{0}] activityLevel[{1}]", name, activityLevel); return keepFitCrewMember; }
internal void RefreshRoster() { this.Log_DebugOnly("RefreshRoster", "."); if (gameConfig == null) { //this.Log_DebugOnly("RefreshRoster", "No gameConfig - bailing"); return; } Dictionary<string, KeepFitCrewMember> roster = gameConfig.roster.crew; gameConfig.roster.available.crew.Clear(); gameConfig.roster.assigned.crew.Clear(); gameConfig.roster.vessels.Clear(); // first go through all the crew in the system roster - find all the ones not doing anything, // and get them working for a living { KerbalRoster crewRoster = HighLogic.CurrentGame.CrewRoster; foreach (ProtoCrewMember crewMember in crewRoster.Crew) { switch (crewMember.rosterStatus) { case ProtoCrewMember.RosterStatus.Available: // you're sat on your arse in the crew building, so you can get down to the gym updateRosters(roster, gameConfig.roster.available, crewMember.name, ActivityLevel.EXERCISING, true); break; case ProtoCrewMember.RosterStatus.Assigned: // in flight - do this so we don't lose track of kerbals in the non-flight windows // (until i sort out how to get all current vessels outside of flight updateRosters(roster, gameConfig.roster.assigned, crewMember.name, ActivityLevel.UNKNOWN, false); break; case ProtoCrewMember.RosterStatus.Dead: case ProtoCrewMember.RosterStatus.Missing: default: //roster.Remove(crewMember.name); break; } } } // then go through the vessels in the system - find out what activitylevel each crewmember gets // and update their stored activityLevel foreach (Vessel vessel in (FlightGlobals.fetch == null ? FlightGlobals.Vessels : FlightGlobals.fetch.vessels)) { if (IsUnmanned(vessel)) { continue; } KeepFitVesselRecord vesselRecord = new KeepFitVesselRecord(vessel.vesselName, vessel.id.ToString()); gameConfig.roster.vessels[vessel.id.ToString()] = vesselRecord; if (!vessel.loaded) { refreshNonLoadedVesselRoster(roster, vesselRecord, vessel); } else { refreshLoadedVesselRoster(roster, vesselRecord, vessel); } } }
private void refreshLoadedVesselRosterPartOnly(Dictionary<string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ActivityLevel vesselDefaultActivityLevel = getDefaultActivityLevel(vessel); foreach (Part part in vessel.Parts) { if (part.CrewCapacity == 0) { continue; } ActivityLevel bestPartActivityLevel = vesselDefaultActivityLevel; // check all modules on the part in case we have multiple KeepFit modules for some reason foreach (KeepFitPartModule kfModule in part.FindModulesImplementing<KeepFitPartModule>()) { ActivityLevel partActivityLevel = kfModule.activityLevel; if (partActivityLevel > bestPartActivityLevel) { bestPartActivityLevel = partActivityLevel; } } foreach (ProtoCrewMember partCrewMember in part.protoModuleCrew) { updateRosters(roster, vesselRecord, partCrewMember.name, bestPartActivityLevel, true); } } }
private void refreshLoadedVesselRosterCLS(Dictionary<string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ActivityLevel vesselDefaultActivityLevel = getDefaultActivityLevel(vessel); ConnectedLivingSpace.ICLSAddon cls = module.GetCLS(); foreach (ConnectedLivingSpace.ICLSSpace space in cls.Vessel.Spaces) { ActivityLevel spaceBestActivityLevel = vesselDefaultActivityLevel; foreach (ConnectedLivingSpace.ICLSPart part in space.Parts) { if (part.Part.CrewCapacity == 0) { continue; } // check all modules on the part in case we have multiple KeepFit modules for some reason foreach (KeepFitPartModule kfModule in part.Part.FindModulesImplementing<KeepFitPartModule>()) { ActivityLevel partActivityLevel = kfModule.activityLevel; if (partActivityLevel > spaceBestActivityLevel) { spaceBestActivityLevel = partActivityLevel; } } foreach (ConnectedLivingSpace.ICLSKerbal partCrewMember in space.Crew) { updateRosters(roster, vesselRecord, partCrewMember.Kerbal.name, spaceBestActivityLevel, true); } } } }
private void refreshLoadedVesselRoster(Dictionary<string, KeepFitCrewMember> roster, KeepFitVesselRecord vesselRecord, Vessel vessel) { ConnectedLivingSpace.ICLSAddon cls = module.GetCLS(); if (cls != null && gameConfig.applyCLSLimitsIfAvailable && vessel == FlightGlobals.ActiveVessel && cls.Vessel != null) { refreshLoadedVesselRosterCLS(roster, vesselRecord, vessel); } else if (gameConfig.useBestPartOnVessel) { refreshLoadedVesselRosterWholeVessel(roster, vesselRecord, vessel); } else { refreshLoadedVesselRosterPartOnly(roster, vesselRecord, vessel); } }
internal void DrawVesselInfo(int windowHandle, KeepFitVesselRecord vessel, bool showExpandToggle, ref bool expanded, bool showAllCrewExpanded) { GUILayout.BeginHorizontal(); GUILayout.Label(vessel.name, uiResources.styleBarText); GUILayout.Label("Crew - (" + vessel.crew.Count() + ")"); GUILayout.FlexibleSpace(); if (showExpandToggle && DrawChevron(expanded)) { expanded = !expanded; } GUILayout.EndHorizontal(); if (expanded) { GUILayout.BeginHorizontal(); GUILayout.Space(4); GUILayout.BeginVertical(); DrawCrew(windowHandle, vessel.crew.Values, true, showAllCrewExpanded); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } }
internal void RefreshRoster() { this.Log_DebugOnly("RefreshRoster", "."); if (gameConfig == null) { //this.Log_DebugOnly("RefreshRoster", "No gameConfig - bailing"); return; } Dictionary <string, KeepFitCrewMember> roster = gameConfig.roster.crew; gameConfig.roster.available.crew.Clear(); gameConfig.roster.assigned.crew.Clear(); gameConfig.roster.vessels.Clear(); // first go through all the crew in the system roster - find all the ones not doing anything, // and get them working for a living { KerbalRoster crewRoster = HighLogic.CurrentGame.CrewRoster; foreach (ProtoCrewMember crewMember in crewRoster.Crew) { switch (crewMember.rosterStatus) { case ProtoCrewMember.RosterStatus.Available: // you're sat on your arse in the crew building, so you can get down to the gym updateRosters(roster, gameConfig.roster.available, crewMember.name, ActivityLevel.EXERCISING, true); break; case ProtoCrewMember.RosterStatus.Assigned: // in flight - do this so we don't lose track of kerbals in the non-flight windows // (until i sort out how to get all current vessels outside of flight updateRosters(roster, gameConfig.roster.assigned, crewMember.name, ActivityLevel.UNKNOWN, false); break; case ProtoCrewMember.RosterStatus.Dead: case ProtoCrewMember.RosterStatus.Missing: default: //roster.Remove(crewMember.name); break; } } } // then go through the vessels in the system - find out what activitylevel each crewmember gets // and update their stored activityLevel foreach (Vessel vessel in (FlightGlobals.fetch == null ? FlightGlobals.Vessels : FlightGlobals.fetch.vessels)) { if (IsUnmanned(vessel)) { continue; } KeepFitVesselRecord vesselRecord = new KeepFitVesselRecord(vessel.vesselName, vessel.id.ToString()); gameConfig.roster.vessels[vessel.id.ToString()] = vesselRecord; if (!vessel.loaded) { refreshNonLoadedVesselRoster(roster, vesselRecord, vessel); } else { refreshLoadedVesselRoster(roster, vesselRecord, vessel); } } }