Example #1
0
        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));
            }
        }
Example #4
0
        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;
        }
Example #5
0
        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);
                    }
                }
            }
        }