public static ExperimentState FromStrimg(string stateString) { ExperimentState newState = new ExperimentState(); StateEnum state = (StateEnum)int.Parse(stateString); newState.CurrentState = state; return newState; }
public override void OnLoad(ConfigNode node) { base.OnLoad(node); if (node.HasValue("state")) { state = ExperimentState.FromStrimg(node.GetValue("state")); } else { state = new ExperimentState(); state.CurrentState = ExperimentState.StateEnum.IDLE; } if (!node.HasValue("analysisTimeRemaining")) { analysisTimeRemaining = analysisTime; } if (!node.HasValue("lastMET")) { if (this.vessel != null) lastMET = (float)this.vessel.missionTime; } // Load bare conditions if present if (node.HasNode("condition")) { LogFormatted_DebugOnly("RealScience: OnLoad: Loading conditions..."); if (conditions == null) conditions = new List<IScienceCondition>(); conditions.Clear(); foreach(ConfigNode conditionNode in node.GetNodes("condition")) { if (conditionNode.HasValue("conditionType")) { string conditionType = conditionNode.GetValue("conditionType"); LogFormatted_DebugOnly("RealScience: OnLoad: Creating condition of type: " + conditionType); RealScienceCondition newCondition = null; System.Runtime.Remoting.ObjectHandle conditionObj = null; conditionObj = Activator.CreateInstance(null, "RealScience.Conditions.RealScienceCondition_" + conditionType); if (conditionObj == null) LogFormatted_DebugOnly("RealScience: OnLoad: Failed to create Condition ObjectHandle"); else newCondition = (RealScienceCondition)conditionObj.Unwrap(); if (newCondition != null) { newCondition.Load(conditionNode); conditions.Add(newCondition); } else LogFormatted_DebugOnly("RealScience: OnLoad: Failed to create Condition instance"); } } } // otherwise load groups else if (node.HasNode("conditionGroup")) { if (conditionGroups == null) conditionGroups = new List<RealScienceConditionGroup>(); conditionGroups.Clear(); foreach(ConfigNode groupNode in node.GetNodes("conditionGroup")) { RealScienceConditionGroup group = new RealScienceConditionGroup(); group.Load(groupNode); conditionGroups.Add(group); } } loaded = true; }
public override void Start() { // We need to re-load our data from the prefab Part prefab = this.part.partInfo.partPrefab; foreach (PartModule pm in prefab.Modules) { RealScienceExperiment modulePrefab = pm as RealScienceExperiment; if (modulePrefab != null) { experimentName = modulePrefab.experimentName; experimentTitle = modulePrefab.experimentTitle; description = modulePrefab.description; discipline = modulePrefab.discipline; requiredData = modulePrefab.requiredData; maximumData = modulePrefab.maximumData; analysisTime = modulePrefab.analysisTime; scienceValue = modulePrefab.scienceValue; scienceValuePerData = modulePrefab.scienceValuePerData; researchDataRate = modulePrefab.researchDataRate; multiFlight = modulePrefab.multiFlight; autoAnalyze = modulePrefab.autoAnalyze; autoTransmit = modulePrefab.autoTransmit; dataSize = modulePrefab.dataSize; dataPerPacket = modulePrefab.dataPerPacket; canFailAtAnyTime = modulePrefab.canFailAtAnyTime; transmitValue = modulePrefab.transmitValue; conditions = modulePrefab.conditions; conditionGroups = modulePrefab.conditionGroups; } } // In case OnLoad never happened, we need to properly intialize our values if (!loaded) { analysisTimeRemaining = analysisTime; lastMET = (float)this.vessel.missionTime; state = new ExperimentState(); state.CurrentState = ExperimentState.StateEnum.IDLE; } if (transmitValue < 1f) GameEvents.onVesselSituationChange.Add(OnVesselSituationChange); }
public EvalState Evaluate(Part part, float deltaTime, ExperimentState state) { if (groupType.ToLower() == "or") { foreach (IScienceCondition condition in conditions) { EvalState eval = condition.Evaluate(part, deltaTime, state); if (eval == EvalState.INVALID) { Debug.Log(String.Format("RealScience: Group: Evaluate: {0} is not valid", condition.Name)); continue; } if (eval == EvalState.VALID) { dataRateModifier *= condition.DataRateModifier; maximumDataModifier *= condition.MaximumDataModifier; maximumDataBonus += condition.MaximumDataBonus; return EvalState.VALID; } return eval; } return EvalState.INVALID; } else { foreach (IScienceCondition condition in conditions) { EvalState eval = condition.Evaluate(part, deltaTime, state); if (eval == EvalState.VALID) { dataRateModifier *= condition.DataRateModifier; maximumDataModifier *= condition.MaximumDataModifier; maximumDataBonus += condition.MaximumDataBonus; } else if (eval == EvalState.INVALID) { Debug.Log(String.Format("RealScience: Group: Evaluate: {0} is not valid", condition.Name)); return eval; } else return eval; } return EvalState.VALID; } }