/// <summary> /// Checks whether the given vessel meets the condition, and completes the contract parameter as necessary. /// </summary> /// <param name="vessel">The vessel to check.</param> protected virtual void CheckVessel(Vessel vessel, bool forceStateChange = false) { // No vessel to check. if (vessel == null) { return; } LoggingUtil.LogVerbose(this, "-> CheckVessel(" + vessel.id + ")"); if (IsIgnoredVesselType(vessel.vesselType)) { LoggingUtil.LogVerbose(this, "<- CheckVessel"); return; } VesselParameterGroup vpg = GetParameterGroupHost(); if (CanCheckVesselMeetsCondition(vessel)) { // Using VesselParameterGroup logic if (vpg != null) { // Set the craft specific state bool stateChanged = SetState(vessel, VesselMeetsCondition(vessel) ? Contracts.ParameterState.Complete : Contracts.ParameterState.Incomplete) || forceStateChange; // Update the group if (stateChanged) { vpg.UpdateState(vessel); } } // Logic applies only to active vessel else if (vessel.isActiveVessel) { if (VesselMeetsCondition(vessel)) { SetState(ParameterState.Complete); if (!allowStateReset) { Disable(); } } else { SetState(ParameterState.Incomplete); } } // Special handling for parameter delegates if (ChildChanged) { LoggingUtil.LogVerbose(this, "Firing onParameterChange due to ChildChanged = true"); ContractConfigurator.OnParameterChange.Fire(this.Root, this); ChildChanged = false; } } LoggingUtil.LogVerbose(this, "<- CheckVessel"); }
protected virtual void OnFlightReady() { CheckVessel(FlightGlobals.ActiveVessel); // Set parameters properly on first load if (FlightGlobals.ActiveVessel != null) { VesselParameterGroup vpg = GetParameterGroupHost(); if (vpg != null) { vpg.UpdateState(FlightGlobals.ActiveVessel); } } }