internal parameterUIObject(parameterContainer p) { container = p; if (container.Level >= 4) { return; } for (int i = 0; i < p.ParameterCount; i++) { parameterContainer c = p.getParameter(i); if (c == null) { continue; } if (string.IsNullOrEmpty(c.Title)) { continue; } subParams.Add(new parameterUIObject(c)); } }
public void AddParameter() { if (container == null) { return; } for (int i = paramList.Count - 1; i >= 0; i--) { parameterUIObject p = paramList[i]; p = null; } paramList.Clear(); for (int i = 0; i < container.FirstLevelParameterCount; i++) { parameterContainer pC = container.getParameterLevelOne(i); if (pC == null) { continue; } paramList.Add(new parameterUIObject(pC)); } UpdateContractUI(); }
public contractUIObject(contractContainer c, contractMission m) { container = c; mission = m; _showParams = true; _order = null; _agencyLogo = container.RootAgent.Logo; _agencyName = container.RootAgent.Name; _difficulty = (int)container.Root.Prestige; _id = container.ID; for (int i = 0; i < c.FirstLevelParameterCount; i++) { parameterContainer p = c.getParameterLevelOne(i); if (p == null) { continue; } if (string.IsNullOrEmpty(p.Title)) { continue; } paramList.Add(new parameterUIObject(p)); } }
private void refreshList(Contract c) { window.refreshContracts(false); if (c == null) { return; } if (c.ContractState != Contract.State.Active) { return; } contractContainer cc = contractParser.getActiveContract(c.ContractGuid); if (cc == null) { return; } if (cc.Initialized) { return; } for (int i = 0; i < cc.ParameterCount; i++) { parameterContainer p = cc.getParameterFull(i); if (p == null) { continue; } customStartup(p); } cc.Initialized = true; }
private void customStartup(parameterContainer p) { Type t = p.CParam.GetType(); GameScenes s = HighLogic.LoadedScene; try { if (t == typeof(ReachDestination) && s == GameScenes.FLIGHT && FlightGlobals.ActiveVessel != null) { if (p.CParam.State == ParameterState.Incomplete && ((ReachDestination)p.CParam).checkVesselDestination(FlightGlobals.ActiveVessel)) { MethodInfo m = (typeof(ContractParameter)).GetMethod("SetComplete", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke(p.CParam, null); } else if (p.CParam.State == ParameterState.Complete && !((ReachDestination)p.CParam).checkVesselDestination(FlightGlobals.ActiveVessel)) { MethodInfo m = (typeof(ContractParameter)).GetMethod("SetIncomplete", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke(p.CParam, null); } } else if (t == typeof(ReachSituation) && s == GameScenes.FLIGHT && FlightGlobals.ActiveVessel != null) { if (p.CParam.State == ParameterState.Incomplete && ((ReachSituation)p.CParam).checkVesselSituation(FlightGlobals.ActiveVessel)) { MethodInfo m = (typeof(ContractParameter)).GetMethod("SetComplete", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke(p.CParam, null); } else if (p.CParam.State == ParameterState.Complete && !((ReachSituation)p.CParam).checkVesselSituation(FlightGlobals.ActiveVessel)) { MethodInfo m = (typeof(ContractParameter)).GetMethod("SetIncomplete", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke(p.CParam, null); } } else if (t == typeof(SpecificOrbitParameter) && s == GameScenes.FLIGHT) { ((SpecificOrbitParameter)p.CParam).SetupRenderer(); } else if (t == typeof(VesselSystemsParameter) && s == GameScenes.FLIGHT) { VesselSystemsParameter sys = (VesselSystemsParameter)p.CParam; MethodInfo m = (typeof(VesselSystemsParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke(sys, null); if (!sys.requireNew) { return; } Vessel v = FlightGlobals.ActiveVessel; if (v == null) { return; } if (v.situation != Vessel.Situations.PRELAUNCH) { return; } uint launchID = v.Parts.Min(r => r.launchID); sys.launchID = launchID; } else if (t == typeof(SurveyWaypointParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(SurveyWaypointParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((SurveyWaypointParameter)p.CParam, null); if (p.Way == null) { return; } var waypoints = WaypointManager.Instance().Waypoints; if (waypoints.Contains(p.Way)) { return; } WaypointManager.AddWaypoint(p.Way); } else if (t == typeof(StationaryPointParameter) && s == GameScenes.FLIGHT) { if (p.Way == null) { return; } var waypoints = WaypointManager.Instance().Waypoints; if (waypoints.Contains(p.Way)) { return; } WaypointManager.AddWaypoint(p.Way); } else if (t == typeof(AsteroidParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(AsteroidParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((AsteroidParameter)p.CParam, null); } else if (t == typeof(CrewCapacityParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(CrewCapacityParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((CrewCapacityParameter)p.CParam, null); } else if (t == typeof(CrewTraitParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(CrewTraitParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((CrewTraitParameter)p.CParam, null); } else if (t == typeof(KerbalDestinationParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(KerbalDestinationParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((KerbalDestinationParameter)p.CParam, null); } else if (t == typeof(KerbalTourParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(KerbalTourParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((KerbalTourParameter)p.CParam, null); } else if (t == typeof(KerbalGeeAdventureParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(KerbalGeeAdventureParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((KerbalGeeAdventureParameter)p.CParam, null); } else if (t == typeof(LocationAndSituationParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(LocationAndSituationParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((LocationAndSituationParameter)p.CParam, null); } else if (t == typeof(MobileBaseParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(MobileBaseParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((MobileBaseParameter)p.CParam, null); } else if (t == typeof(PartRequestParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(PartRequestParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((PartRequestParameter)p.CParam, null); } else if (t == typeof(ProgressTrackingParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(ProgressTrackingParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((ProgressTrackingParameter)p.CParam, null); } else if (t == typeof(ResourceExtractionParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(ResourceExtractionParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((ResourceExtractionParameter)p.CParam, null); } else if (t == typeof(VesselDestinationParameter) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(VesselDestinationParameter)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((VesselDestinationParameter)p.CParam, null); } else if (t == typeof(RecoverKerbal) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(RecoverKerbal)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((RecoverKerbal)p.CParam, null); } else if (t == typeof(RecoverPart) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(RecoverPart)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((RecoverPart)p.CParam, null); } else if (t == typeof(AcquirePart) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(AcquirePart)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((AcquirePart)p.CParam, null); } else if (t == typeof(AcquireCrew) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(AcquireCrew)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((AcquireCrew)p.CParam, null); } else if (t == typeof(PartTest) && s == GameScenes.FLIGHT) { MethodInfo m = (typeof(PartTest)).GetMethod("OnRegister", BindingFlags.NonPublic | BindingFlags.Instance); if (m == null) { return; } m.Invoke((PartTest)p.CParam, null); if (((PartTest)p.CParam).hauled) { return; } AvailablePart targetPart = ((PartTest)p.CParam).tgtPartInfo; if (targetPart == null) { return; } for (int i = FlightGlobals.VesselsLoaded.Count - 1; i >= 0; i--) { Vessel v = FlightGlobals.VesselsLoaded[i]; if (v == null) { continue; } for (int j = v.Parts.Count - 1; j >= 0; j--) { Part part = v.Parts[j]; if (part == null) { continue; } if (part.partInfo != targetPart) { continue; } var mods = part.FindModulesImplementing <ModuleTestSubject>(); for (int k = 0; k < mods.Count; k++) { ModuleTestSubject test = mods[k]; if (test == null) { continue; } test.Events["RunTestEvent"].active = true; } } } } } catch (Exception e) { LogFormatted("Error while forcing Contract Parameter activation:\n{0}", e); } }
//Change parameter title GUIStyle based on its current state private GUIStyle paramState(parameterContainer cP) { switch (cP.CParam.State) { case ParameterState.Complete: return contractSkins.paramCompleted; case ParameterState.Failed: return contractSkins.paramFailed; default: if (cP.Level == 0) return contractSkins.paramText; else return contractSkins.paramSub; } }
private void buildParameterLabel(parameterContainer cP, contractContainer c, int level, int id, int size, ref Rect r) { string paramTitle = cP.Title; bool active = cP.CParam.State == ParameterState.Incomplete; bool greenState = cP.CParam.State == ParameterState.Complete || cP.CParam.State == ParameterState.Incomplete; bool redState = cP.CParam.State == ParameterState.Incomplete || cP.CParam.State == ParameterState.Failed; GUIStyle pStyle = paramState(cP); GUILayout.BeginHorizontal(); GUILayout.Space(5 + (level * 5)); r.x = 5 + (level * 5); r.y += r.height; //Note icon button if (active && !string.IsNullOrEmpty(cP.Notes(useCustomNotes))) { r.x -= 2; r.y += 4; r.width = 12 + (size * 2); r.height = 14 + (size * 4); if (!cP.ShowNote) { if (GUI.Button(r, new GUIContent(contractSkins.noteIcon, "Show Note"), contractSkins.texButtonSmall)) cP.ShowNote = !cP.ShowNote; } else { if (GUI.Button(r, new GUIContent(contractSkins.noteIconOff, "Hide Note"), contractSkins.texButtonSmall)) cP.ShowNote = !cP.ShowNote; } GUILayout.Space(12 + size * 2); } /* FIXME - Disabled For Now; Need to Figure Out Changes Made In 0.90 */ //Editor part icon button //if (cP.part != null && HighLogic.LoadedSceneIsEditor) //{ // if (GUILayout.Button(new GUIContent(contractSkins.partIcon, "Preview Part"), contractSkins.texButtonSmall, GUILayout.MaxWidth(18 + contractScenario.Instance.windowSize * 4), GUILayout.MaxHeight(18 + contractScenario.Instance.windowSize * 4))) // { // EditorLogic.fetch.Unlock(lockID); // editorLocked = false; // EditorPartList.Instance.RevealPart(cP.part, true); // } // GUILayout.Space(-3); //} //Contract parameter title if (!string.IsNullOrEmpty(cP.Notes(useCustomNotes))) GUILayout.Box(paramTitle, pStyle, GUILayout.MaxWidth(208 - (level * 5) + size * 28)); else GUILayout.Box(paramTitle, pStyle, GUILayout.MaxWidth(220 - (level * 5) + size * 30)); r = GUILayoutUtility.GetLastRect(); GUILayout.EndHorizontal(); //Parameter reward info if (WindowRect.width >= 270 + (size * 30)) { if (r.yMin >= (scroll.y - 20) && r.yMax <= (scroll.y + WindowRect.height - (30 + size * 6))) { Rect rewardsRect = r; rewardsRect.x = 230 + (size * 30); rewardsRect.y += 4; scaledContent(ref rewardsRect, cP.FundsRewString, cP.FundsPenString, Currency.Funds, size, greenState, redState); scaledContent(ref rewardsRect, cP.SciRewString, "", Currency.Science, size, greenState, redState); scaledContent(ref rewardsRect, cP.RepRewString, cP.RepPenString, Currency.Reputation, size, greenState, redState); } } //Display note if (!string.IsNullOrEmpty(cP.Notes(useCustomNotes)) && cP.ShowNote && active) { GUILayout.Space(-6); GUILayout.Box(cP.Notes(useCustomNotes), GUILayout.MaxWidth(320 + size * 60)); r.height += GUILayoutUtility.GetLastRect().height; } if (level < 4) { foreach (parameterContainer sP in cP.ParamList) { if (sP.Level == level + 1 && !string.IsNullOrEmpty(sP.Title)) { if (active) buildParameterLabel(sP, c, level + 1, id, size, ref r); } } } }