void LoadControllers(ConfigNode node) { ConfigNode[] controllerNodes = node.GetNodes(WaterfallConstants.ControllerNodeName); if (allControllers == null || allControllers.Count == 0) { Utils.Log(String.Format("[ModuleWaterfallFX]: Loading Controllers on moduleID {0}", moduleID), LogType.Modules); allControllers = new Dictionary <string, WaterfallController>(); foreach (ConfigNode controllerDataNode in controllerNodes) { string ctrlType = "throttle"; if (!controllerDataNode.TryGetValue("linkedTo", ref ctrlType)) { Utils.LogWarning(String.Format("[ModuleWaterfallFX]: Controller on moduleID {0} does not define linkedTo, setting throttle as default ", moduleID)); } if (ctrlType == "throttle") { ThrottleController tCtrl = new ThrottleController(controllerDataNode); allControllers.Add(tCtrl.name, tCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Throttle Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "atmosphere_density") { AtmosphereDensityController aCtrl = new AtmosphereDensityController(controllerDataNode); allControllers.Add(aCtrl.name, aCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Atmosphere Density Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "custom") { CustomController cCtrl = new CustomController(controllerDataNode); allControllers.Add(cCtrl.name, cCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Custom Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "rcs") { RCSController rcsCtrl = new RCSController(controllerDataNode); allControllers.Add(rcsCtrl.name, rcsCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded RCS Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "random") { RandomnessController rCtrl = new RandomnessController(controllerDataNode); allControllers.Add(rCtrl.name, rCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Randomness Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "light") { LightController lCtrl = new LightController(controllerDataNode); allControllers.Add(lCtrl.name, lCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Light Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "engineEvent") { EngineEventController eEvtCtrl = new EngineEventController(controllerDataNode); allControllers.Add(eEvtCtrl.name, eEvtCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Engine Event Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "mach") { MachController mCtrl = new MachController(controllerDataNode); allControllers.Add(mCtrl.name, mCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Mach Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "gimbal") { GimbalController gCtrl = new GimbalController(controllerDataNode); allControllers.Add(gCtrl.name, gCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Gimbal Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "thrust") { ThrustController tcCtrl = new ThrustController(controllerDataNode); allControllers.Add(tcCtrl.name, tcCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Thrust Curve Controller on moduleID {0}", moduleID), LogType.Modules); } } } }
/// <summary> /// Load alll CONTROLLERS, TEMPLATES and EFFECTS /// </summary> /// <param name="node"></param> /// public override void OnLoad(ConfigNode node) { base.OnLoad(node); Utils.Log($"[ModuleWaterfallFX]: OnLoad called with contents \n{node.ToString()}", LogType.Modules); ConfigNode[] controllerNodes = node.GetNodes(WaterfallConstants.ControllerNodeName); ConfigNode[] effectNodes = node.GetNodes(WaterfallConstants.EffectNodeName); ConfigNode[] templateNodes = node.GetNodes(WaterfallConstants.TemplateNodeName); if (initialized) { Utils.Log($"[ModuleWaterfallFX]: Already initialized, cleaning up effects", LogType.Modules); CleanupEffects(); } if (allControllers == null || allControllers.Count == 0) { Utils.Log(String.Format("[ModuleWaterfallFX]: Loading Controllers on moduleID {0}", moduleID), LogType.Modules); allControllers = new Dictionary <string, WaterfallController>(); foreach (ConfigNode controllerDataNode in controllerNodes) { string ctrlType = "throttle"; if (!controllerDataNode.TryGetValue("linkedTo", ref ctrlType)) { Utils.LogWarning(String.Format("[ModuleWaterfallFX]: Controller on moduleID {0} does not define linkedTo, setting throttle as default ", moduleID)); } if (ctrlType == "throttle") { ThrottleController tCtrl = new ThrottleController(controllerDataNode); allControllers.Add(tCtrl.name, tCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Throttle Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "atmosphere_density") { AtmosphereDensityController aCtrl = new AtmosphereDensityController(controllerDataNode); allControllers.Add(aCtrl.name, aCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Atmosphere Density Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "custom") { CustomController cCtrl = new CustomController(controllerDataNode); allControllers.Add(cCtrl.name, cCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Custom Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "rcs") { RCSController rcsCtrl = new RCSController(controllerDataNode); allControllers.Add(rcsCtrl.name, rcsCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded RCS Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "random") { RandomnessController rCtrl = new RandomnessController(controllerDataNode); allControllers.Add(rCtrl.name, rCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Randomness Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "light") { LightController rCtrl = new LightController(controllerDataNode); allControllers.Add(rCtrl.name, rCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Randomness Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "engineEvent") { EngineEventController rCtrl = new EngineEventController(controllerDataNode); allControllers.Add(rCtrl.name, rCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Engine Event Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "mach") { MachController rCtrl = new MachController(controllerDataNode); allControllers.Add(rCtrl.name, rCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Mach Controller on moduleID {0}", moduleID), LogType.Modules); } if (ctrlType == "gimbal") { GimbalController rCtrl = new GimbalController(controllerDataNode); allControllers.Add(rCtrl.name, rCtrl); Utils.Log(String.Format("[ModuleWaterfallFX]: Loaded Gimbal Controller on moduleID {0}", moduleID), LogType.Modules); } } } Utils.Log(String.Format("[ModuleWaterfallFX]: Loading Effects on moduleID {0}", moduleID), LogType.Modules); if (allFX == null) { allFX = new List <WaterfallEffect>(); } if (allTemplates == null) { allTemplates = new List <WaterfallEffectTemplate>(); } else { if (effectNodes.Length > 0 && allFX.Count > 0 || allFX.Count > 0 && templateNodes.Length > 0) { CleanupEffects(); allFX.Clear(); allTemplates.Clear(); } } foreach (ConfigNode fxDataNode in effectNodes) { allFX.Add(new WaterfallEffect(fxDataNode)); } Utils.Log(String.Format("[ModuleWaterfallFX]: Loading Template effects on moduleID {0}", moduleID), LogType.Modules); foreach (ConfigNode templateNode in templateNodes) { WaterfallEffectTemplate template = new WaterfallEffectTemplate(templateNode); allTemplates.Add(template); foreach (WaterfallEffect fx in template.allFX) { allFX.Add(fx); } Utils.Log($"[ModuleWaterfallFX]: Loaded effect template {template.templateName}", LogType.Modules); //string templateName = ""; //string overrideTransformName = ""; //Vector3 scaleOffset = Vector3.one; //Vector3 positionOffset = Vector3.zero; //Vector3 rotationOffset = Vector3.zero; //templateNode.TryGetValue("templateName", ref templateName); //templateNode.TryGetValue("overrideParentTransform", ref overrideTransformName); //templateNode.TryParseVector3("scale", ref scaleOffset); //templateNode.TryParseVector3("rotation", ref rotationOffset); //templateNode.TryParseVector3("position", ref positionOffset); //WaterfallTemplate template = WaterfallTemplates.GetTemplate(templateName); //foreach (WaterfallEffect fx in template.allFX) //{ // allFX.Add(new WaterfallEffect(fx, positionOffset, rotationOffset, scaleOffset, overrideTransformName)); //} //Utils.Log($"[ModuleWaterfallFX]: Loaded effect template {template.templateName}", LogType.Modules); } Utils.Log($"[ModuleWaterfallFX]: Finished loading {allTemplates.Count} templates", LogType.Modules); Utils.Log($"[ModuleWaterfallFX]: Finished loading {allFX.Count} effects", LogType.Modules); if (initialized) { Utils.Log($"[ModuleWaterfallFX]: Reinitializing", LogType.Modules); InitializeControllers(); ReinitializeEffects(); } }