public override void OnLoad(ConfigNode node) { KerbalismContractsMain.fieldVisibilityInitialized = false; KerbalismContractsMain.KerbalismInitialized = false; bodyData.Clear(); EvaluationContext.Clear(); if (node.HasNode("BodyData")) { foreach (var body_node in node.GetNode("BodyData").GetNodes()) { var bd = new GlobalRadiationFieldStatus(body_node); if (bd != null && bd.index >= 0) { bodyData.Add(bd.index, bd); } } } RadiationFieldTracker.Load(node); ExperimentStateTracker.Load(node); EquipmentStates.Load(node); Imaging.ClearImagers(); }
internal static void Update(Vessel vessel, bool inner_belt, bool outer_belt, bool magnetosphere) { if (!Utils.IsVessel(vessel)) { return; } if (!states.ContainsKey(vessel.id)) { states.Add(vessel.id, new List <VesselRadiationFieldStatus>()); } // also update the global radiation field status GlobalRadiationFieldStatus bd = KerbalismContracts.Instance.BodyData(vessel.mainBody); var statesForVessel = states[vessel.id]; VesselRadiationFieldStatus state = statesForVessel.Find(s => s.bodyIndex == vessel.mainBody.flightGlobalsIndex); if (state == null) { statesForVessel.Add(new VesselRadiationFieldStatus(vessel.mainBody, inner_belt, outer_belt, magnetosphere)); } else { if (state.inner_belt != inner_belt) { state.inner_crossings++; bd.inner_crossings++; } if (state.outer_belt != outer_belt) { state.outer_crossings++; bd.outer_crossings++; } if (state.magnetosphere != magnetosphere) { state.magneto_crossings++; bd.magneto_crossings++; } state.inner_belt = inner_belt; state.outer_belt = outer_belt; state.magnetosphere = magnetosphere; } for (int i = listeners.Count - 1; i >= 0; i--) { listeners[i](vessel, state); } }