protected void nautListRow(Tabs currentTab, ProtoCrewMember student) { GUIStyle style = HighLogic.Skin.label; ActiveCourse currentCourse = null; if (activeMap.ContainsKey(student)) { currentCourse = activeMap[student]; } bool onSelectedCourse = selectedCourse != null && currentCourse != null && currentCourse.id == selectedCourse.id; if (onSelectedCourse) { style = boldLabel; } bool selectedForCourse = selectedCourse != null && selectedCourse.Students.Contains(student); GUILayout.BeginHorizontal(); try { GUILayout.Label(String.Format("{0} {1}", student.trait.Substring(0, 1), student.experienceLevel), GUILayout.Width(24)); if (currentCourse == null && selectedCourse != null && (selectedForCourse || selectedCourse.MeetsStudentReqs(student))) { if (toggleButton(student.name, selectedForCourse, GUILayout.Width(144))) { if (selectedForCourse) { selectedCourse.RemoveStudent(student); } else { selectedCourse.AddStudent(student); } } } else if (currentTab == Tabs.Training) { if (GUILayout.Button(student.name, GUILayout.Width(144))) { selectedNaut = student; } } else { GUILayout.Label(student.name, GUILayout.Width(144)); } string course, complete, retires; if (currentCourse == null) { if (student.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) { course = "(in-flight)"; complete = KSPUtil.PrintDate(student.inactiveTimeEnd, false); } else if (student.inactive) { course = "(inactive)"; complete = KSPUtil.PrintDate(student.inactiveTimeEnd, false); } else { course = "(free)"; complete = "(n/a)"; } } else { course = currentCourse.name; complete = KSPUtil.PrintDate(currentCourse.CompletionTime(), false); } GUILayout.Label(course, GUILayout.Width(96)); GUILayout.Label(complete, GUILayout.Width(80)); if (CrewHandler.Instance.KerbalRetireTimes.ContainsKey(student.name)) { retires = CrewHandler.Instance.RetirementEnabled ? KSPUtil.PrintDate(CrewHandler.Instance.KerbalRetireTimes[student.name], false) : "(n/a)"; } else { retires = "(unknown)"; } GUILayout.Label(retires, GUILayout.Width(80)); if (currentCourse != null) { if (currentCourse.seatMin > 1) { if (GUILayout.Button("X", GUILayout.ExpandWidth(false))) { cancelCourse(currentCourse); } } else { if (GUILayout.Button("X", GUILayout.ExpandWidth(false))) { leaveCourse(currentCourse, student); } } if (KACWrapper.APIReady && GUILayout.Button(nautRowAlarmBtnContent, GUILayout.ExpandWidth(false))) { // CrewHandler processes trainings every 3600 seconds. Need to account for that to set up accurate KAC alarms. double completeUT = currentCourse.CompletionTime(); double timeDiff = completeUT - CrewHandler.Instance.NextUpdate; double timesChRun = Math.Ceiling(timeDiff / CrewHandler.UpdateInterval); double alarmUT = CrewHandler.Instance.NextUpdate + timesChRun * CrewHandler.UpdateInterval; string alarmTxt = $"{currentCourse.name} - {student.name}"; KACWrapper.KAC.CreateAlarm(KACWrapper.KACAPI.AlarmTypeEnum.Crew, alarmTxt, alarmUT); } } } finally { GUILayout.EndHorizontal(); } }
protected void RenderNautListRow(UITab currentTab, ProtoCrewMember student) { ActiveCourse currentCourse = null; bool StockAlarmEnabled = HighLogic.CurrentGame.Parameters.CustomParams <LRTRSettings>().StockAlarmClockEnabled; if (_activeMap.ContainsKey(student)) { currentCourse = _activeMap[student]; } bool selectedForCourse = _selectedCourse != null && _selectedCourse.Students.Contains(student); GUILayout.BeginHorizontal(); try { GUILayout.Label($"{student.trait.Substring(0, 1)} {student.experienceLevel}", GUILayout.Width(24)); if (currentCourse == null && _selectedCourse != null && (selectedForCourse || _selectedCourse.MeetsStudentReqs(student))) { var c = new GUIContent(student.name, "Select for course"); if (RenderToggleButton(c, selectedForCourse, GUILayout.Width(144))) { if (selectedForCourse) { _selectedCourse.RemoveStudent(student); } else { _selectedCourse.AddStudent(student); } } } else if (currentTab == UITab.Training) { if (GUILayout.Button(student.name, HighLogic.Skin.button, GUILayout.Width(144))) { _selectedNaut = student; } } else { GUILayout.Label(student.name, GUILayout.Width(144)); } string course, complete, retires; bool isInactive = false; if (currentCourse == null) { if (student.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) { course = "(in-flight)"; complete = "(n/a)"; } else if (student.inactive) { course = "(inactive)"; complete = KSPUtil.PrintDate(student.inactiveTimeEnd, false); isInactive = true; } else { course = "(free)"; complete = "(n/a)"; } } else { course = currentCourse.name; complete = KSPUtil.PrintDate(currentCourse.CompletionTime(), false); } GUILayout.Label(course, GUILayout.Width(96)); GUILayout.Label(complete, GUILayout.Width(80)); if (CrewHandler.Instance.KerbalRetireTimes.ContainsKey(student.name)) { retires = CrewHandler.Instance.RetirementEnabled ? KSPUtil.PrintDate(CrewHandler.Instance.KerbalRetireTimes[student.name], false) : "(n/a)"; } else { retires = "(unknown)"; } GUILayout.Label(retires, GUILayout.Width(80)); if (currentCourse != null) { if (currentCourse.seatMin > 1) { if (GUILayout.Button(new GUIContent("X", "Cancel course"), HighLogic.Skin.button, GUILayout.ExpandWidth(false))) { CancelCourse(currentCourse); } } else { if (GUILayout.Button(new GUIContent("X", "Remove from course"), HighLogic.Skin.button, GUILayout.ExpandWidth(false))) { LeaveCourse(currentCourse, student); } } if ((KACWrapper.APIReady || StockAlarmEnabled) && GUILayout.Button(_nautRowAlarmBtnContent, HighLogic.Skin.button, GUILayout.ExpandWidth(false))) { CreateCourseFinishAlarm(student, currentCourse, StockAlarmEnabled); } } else if ((KACWrapper.APIReady || StockAlarmEnabled) && isInactive && GUILayout.Button(_nautRowAlarmBtnContent, HighLogic.Skin.button, GUILayout.ExpandWidth(false))) { CreateReturnToDutyAlarm(student, StockAlarmEnabled); } } catch (Exception ex) { Debug.LogException(ex); } GUILayout.EndHorizontal(); }
public void nautTab() { updateActiveMap(); GUILayout.BeginHorizontal(); try { GUILayout.FlexibleSpace(); GUILayout.Label(selectedNaut.name); GUILayout.FlexibleSpace(); } finally { GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); try { GUILayout.Label($"{selectedNaut.trait} {selectedNaut.experienceLevel.ToString():D}"); if (CrewHandler.Instance.RetirementEnabled && CrewHandler.Instance.KerbalRetireTimes.ContainsKey(selectedNaut.name)) { GUILayout.Space(8); GUILayout.Label($"Retires NET {KSPUtil.PrintDate(CrewHandler.Instance.KerbalRetireTimes[selectedNaut.name], false)}", rightLabel); } } finally { GUILayout.EndHorizontal(); } double nlt = CrewHandler.Instance.GetLatestRetireTime(selectedNaut); if (nlt > 0) { GUILayout.BeginHorizontal(); GUILayout.Label(string.Empty, GUILayout.ExpandWidth(true)); GUILayout.Label($"Retires NLT {KSPUtil.PrintDate(nlt, false)}", rightLabel); GUILayout.EndHorizontal(); } if (activeMap.ContainsKey(selectedNaut)) { ActiveCourse currentCourse = activeMap[selectedNaut]; GUILayout.BeginHorizontal(); try { GUILayout.Label($"Studying {currentCourse.name} until {KSPUtil.PrintDate(currentCourse.CompletionTime(), false)}"); if (currentCourse.seatMin > 1) { if (GUILayout.Button("Cancel", GUILayout.ExpandWidth(false))) { cancelCourse(currentCourse); } } else { if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { leaveCourse(currentCourse, selectedNaut); } } } finally { GUILayout.EndHorizontal(); } } GUILayout.Label(CrewHandler.Instance.GetTrainingString(selectedNaut)); }
public void RenderNautTab() { UpdateActiveCourseMap(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label(_selectedNaut.name); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); try { GUILayout.Label($"{_selectedNaut.trait} {_selectedNaut.experienceLevel.ToString():D}"); if (CrewHandler.Instance.RetirementEnabled && CrewHandler.Instance.KerbalRetireTimes.ContainsKey(_selectedNaut.name)) { GUILayout.Space(8); GUILayout.Label($"Retires NET {KSPUtil.PrintDate(CrewHandler.Instance.KerbalRetireTimes[_selectedNaut.name], false)}", RightLabel); } } catch (Exception ex) { Debug.LogException(ex); } GUILayout.EndHorizontal(); double nlt = CrewHandler.Instance.GetLatestRetireTime(_selectedNaut); if (nlt > 0) { GUILayout.BeginHorizontal(); GUILayout.Label(string.Empty, GUILayout.ExpandWidth(true)); GUILayout.Label($"Retires NLT {KSPUtil.PrintDate(nlt, false)}", RightLabel); GUILayout.EndHorizontal(); } if (_activeMap.ContainsKey(_selectedNaut)) { ActiveCourse currentCourse = _activeMap[_selectedNaut]; GUILayout.BeginHorizontal(); try { GUILayout.Label($"Studying {currentCourse.name} until {KSPUtil.PrintDate(currentCourse.CompletionTime(), false)}"); if (currentCourse.seatMin > 1) { if (GUILayout.Button("Cancel", HighLogic.Skin.button, GUILayout.ExpandWidth(false))) { CancelCourse(currentCourse); } } else { if (GUILayout.Button("Remove", HighLogic.Skin.button, GUILayout.ExpandWidth(false))) { LeaveCourse(currentCourse, _selectedNaut); } } } catch (Exception ex) { Debug.LogException(ex); } GUILayout.EndHorizontal(); } GUILayout.Label(CrewHandler.Instance.GetTrainingString(_selectedNaut)); }