Beispiel #1
0
        protected void UpdateDelegates()
        {
            foreach (ContractParameter genericParam in this.GetAllDescendents())
            {
                ParameterDelegate <Vessel> param = genericParam as ParameterDelegate <Vessel>;
                if (param == null)
                {
                    continue;
                }

                string oldTitle = param.Title;
                if (matchingSubjects.Count == experiment.Count)
                {
                    if (param.ID.Contains("Destination:") || param.ID.Contains("Biome:") || param.ID.Contains("Situation:") ||
                        param.ID.Contains("Location:"))
                    {
                        param.ClearTitle();
                    }
                    else if (param.ID.Contains("Subject"))
                    {
                        string exp = param.ID.Remove(param.ID.IndexOf("Subject"));

                        param.SetTitle(matchingSubjects[exp].title);
                        param.SetState(ParameterState.Complete);
                    }
                }
                else
                {
                    if (param.ID.Contains("Subject"))
                    {
                        string exp = param.ID.Remove(param.ID.IndexOf("Subject"));
                        if (matchingSubjects.ContainsKey(exp))
                        {
                            param.SetTitle(matchingSubjects[exp].title);
                            param.SetState(ParameterState.Complete);
                        }
                        else
                        {
                            param.ClearTitle();
                        }
                    }
                    else
                    {
                        param.ResetTitle();
                    }
                }

                if (param.Title != oldTitle)
                {
                    ContractsWindow.SetParameterTitle(param, param.Title);
                    ContractConfigurator.OnParameterChange.Fire(Root, param);
                }
            }

            ContractsWindow.SetParameterTitle(this, GetTitle());
        }
        protected void CreateVesselListParameter()
        {
            if (vesselList.Any())
            {
                if (vesselList.Count() == 1)
                {
                    vesselListParam = new ParameterDelegate <Vessel>(hideVesselName ? "" : Localizer.Format("#cc.param.VesselParameterGroup.default", ContractVesselTracker.GetDisplayName(vesselList.First())), v =>
                    {
                        bool check = VesselCanBeConsidered(v);
                        if (!hideVesselName)
                        {
                            vesselListParam.SetTitle(Localizer.Format((FlightGlobals.ActiveVessel == v && trackedVessel != null ? "#cc.param.VesselParameterGroup.default" : "#cc.param.VesselParameterGroup.trackedVessel"),
                                                                      ContractVesselTracker.GetDisplayName(vesselList.First())));
                        }
                        return(check);
                    });
                    vesselListParam.Optional     = true;
                    vesselListParam.fakeOptional = true;

                    AddParameter(vesselListParam);
                }
                else
                {
                    vesselListParam = new ParameterDelegate <Vessel>(hideVesselName ? "" : Localizer.GetStringByTag("#cc.param.VesselParameterGroup.anyVesselListEmpty"), v =>
                    {
                        bool check = VesselCanBeConsidered(v);
                        if (!hideVesselName)
                        {
                            if (check)
                            {
                                vesselListParam.SetTitle(Localizer.Format("#cc.param.VesselParameterGroup.anyVesselList", ParameterDelegate <Vessel> .GetDelegateText(vesselListParam)));
                            }
                            else
                            {
                                Localizer.GetStringByTag("#cc.param.VesselParameterGroup.anyVesselListEmpty");
                            }
                        }
                        return(check);
                    });
                    vesselListParam.Optional     = true;
                    vesselListParam.fakeOptional = true;

                    foreach (string vessel in vesselList)
                    {
                        ContractParameter childParam = new ParameterDelegate <Vessel>(ContractVesselTracker.GetDisplayName(vessel), v => false);
                        vesselListParam.AddParameter(childParam);
                    }

                    AddParameter(vesselListParam);
                }
            }
        }
        protected void CreateVesselListParameter()
        {
            if (vesselList.Any())
            {
                if (vesselList.Count() == 1)
                {
                    vesselListParam = new ParameterDelegate <Vessel>(hideVesselName ? "" : "Vessel: " + ContractVesselTracker.GetDisplayName(vesselList.First()), v =>
                    {
                        bool check = VesselCanBeConsidered(v);
                        if (!hideVesselName)
                        {
                            vesselListParam.SetTitle((FlightGlobals.ActiveVessel == v && trackedVessel != null ? "" : "Tracked ") + "Vessel: " + ContractVesselTracker.GetDisplayName(vesselList.First()));
                        }
                        return(check);
                    });
                    vesselListParam.Optional     = true;
                    vesselListParam.fakeOptional = true;

                    AddParameter(vesselListParam);
                }
                else
                {
                    vesselListParam = new ParameterDelegate <Vessel>(hideVesselName ? "" : "Vessel: Any of the following:", v =>
                    {
                        bool check = VesselCanBeConsidered(v);
                        if (!hideVesselName)
                        {
                            vesselListParam.SetTitle("Vessel: Any of the following:" + (check ? " " + ParameterDelegate <Vessel> .GetDelegateText(vesselListParam) : ""));
                        }
                        return(check);
                    });
                    vesselListParam.Optional     = true;
                    vesselListParam.fakeOptional = true;

                    foreach (string vessel in vesselList)
                    {
                        ContractParameter childParam = new ParameterDelegate <Vessel>(ContractVesselTracker.GetDisplayName(vessel), v => false);
                        vesselListParam.AddParameter(childParam);
                    }

                    AddParameter(vesselListParam);
                }
            }
        }
        protected override void OnUpdate()
        {
            if (waiting && Planetarium.GetUniversalTime() > completionTime)
            {
                SetState(ParameterState.Complete);
                if (state == ParameterState.Complete)
                {
                    waiting = false;
                }
            }
            // Every time the clock ticks over, make an attempt to update the contract window
            // notes.  We do this because otherwise the window will only ever read the notes once,
            // so this is the only way to get our fancy timer to work.
            else if (waiting && trackedVessel != null)
            {
                if (Planetarium.GetUniversalTime() - lastUpdate > 1.0f)
                {
                    lastUpdate = Planetarium.GetUniversalTime();

                    // Force a call to GetTitle to update the contracts app
                    GetTitle();

                    if (durationParameter != null)
                    {
                        durationParameter.SetTitle(Localizer.Format("#cc.param.VesselParameterGroup.time", DurationUtil.StringValue(completionTime - Planetarium.GetUniversalTime())));
                    }
                }
            }
            else
            {
                if (durationParameter != null)
                {
                    durationParameter.SetTitle(Localizer.Format("#cc.param.VesselParameterGroup.duration", DurationUtil.StringValue(duration)));
                }
            }
        }