public override void OnStart(StartState state) { base.OnStart(state); if(state == StartState.None) return; //get controlled modules foreach(string module_name in ControlledModules.Split(' ')) { if(!part.Modules.Contains(module_name)) { Utils.Log("HangarGenericInflatable.OnStart: {0} does not contain {1} module.", part.name, module_name); continue; } List<IControllableModule> modules = new List<IControllableModule>(); foreach(PartModule pm in part.Modules) { if(pm.moduleName == module_name) { var controllableModule = pm as IControllableModule; if(controllableModule != null) { modules.Add(controllableModule); if(State != AnimatorState.Opened) controllableModule.Enable(false); } else Utils.Log("HangarGenericInflatable.OnStart: {0} is not a ControllableModule. Skipping it.", pm.moduleName); } } controlled_modules.AddRange(modules); } //get animated nodes foreach(string node_name in AnimatedNodes.Split(' ')) { Transform node_transform = part.FindModelTransform(node_name); if(node_transform == null) { Utils.Log("HangarGenericInflatable.OnStart: no transform '{0}' in {1}", node_name, part.name); continue; } AttachNode node = part.findAttachNode(node_name); if(node == null) node = part.srfAttachNode.id == node_name? part.srfAttachNode : null; if(node == null) { Utils.Log("HangarGenericInflatable.OnStart: no node '{0}' in {1}", node_name, part.name); continue; } var a_node = new AnimatedNode(node, node_transform, part); animated_nodes.Add(a_node); } //calculate prefab metric prefab = part.partInfo.partPrefab; prefab_metric = new Metric(prefab); //get compressed gas for the first time if(CompressedGas < 0) CompressedGas = InflatableVolume; //load compressor if(CompressorConfig != null) { compressor = new GasCompressor(part); compressor.Load(CompressorConfig); } //forbid surface attachment for the inflatable part.attachRules.allowSrfAttach = false; UpdatePart(); //update GUI and set the flag ToggleEvents(); StartCoroutine(UpdateStatus()); gui_state = this.DeactivateGUI(); just_loaded = true; }
public override void OnStart(StartState state) { base.OnStart(state); if(state == StartState.None) return; //get sound effects if(CompressorSound != string.Empty) { Utils.createFXSound(part, fxSndCompressor, CompressorSound, true); fxSndCompressor.audio.volume = GameSettings.SHIP_VOLUME * SoundVolume; } //get controlled modules foreach(string module_name in ControlledModules.Split(' ')) { if(module_name == "") continue; if(!part.Modules.Contains(module_name)) { this.Log("OnStart: {0} does not contain {1} module.", part.name, module_name); continue; } var modules = new List<IControllableModule>(); foreach(PartModule pm in part.Modules) { if(pm.moduleName == module_name) { var controllableModule = pm as IControllableModule; if(controllableModule != null) { modules.Add(controllableModule); if(State != AnimatorState.Opened) controllableModule.Enable(false); } else this.Log("OnStart: {0} is not a ControllableModule. Skipping it.", pm.moduleName); } } controlled_modules.AddRange(modules); } //get animated nodes foreach(string node_name in AnimatedNodes.Split(' ')) { if(node_name == "") continue; Transform node_transform = part.FindModelTransform(node_name); if(node_transform == null) { this.Log("OnStart: no transform '{0}' in {1}", node_name, part.name); continue; } AttachNode node = part.findAttachNode(node_name); if(node == null) node = part.srfAttachNode.id == node_name? part.srfAttachNode : null; if(node == null) { this.Log("OnStart: no node '{0}' in {1}", node_name, part.name); continue; } var a_node = new AnimatedNode(node, node_transform, part); animated_nodes.Add(a_node); } //calculate prefab metric prefab = part.partInfo.partPrefab; prefab_metric = new Metric(prefab); //get compressed gas for the first time if(CompressedGas < 0) CompressedGas = InflatableVolume; init_compressor(); //ignore DragMultiplier as Drag is changed with volume DragMultiplier = 1f; //prevent accidental looping of animation Loop = false; //update part, GUI and set the flag UpdatePart(); ToggleEvents(); StartCoroutine(SlowUpdate()); isEnabled = false; just_loaded = true; }
public override void OnStart(StartState state) { base.OnStart(state); if (state == StartState.None) { return; } //get controlled modules foreach (string module_name in ControlledModules.Split(' ')) { if (!part.Modules.Contains(module_name)) { Utils.Log("HangarGenericInflatable.OnStart: {0} does not contain {1} module.", part.name, module_name); continue; } List <IControllableModule> modules = new List <IControllableModule>(); foreach (PartModule pm in part.Modules) { if (pm.moduleName == module_name) { var controllableModule = pm as IControllableModule; if (controllableModule != null) { modules.Add(controllableModule); if (State != AnimatorState.Opened) { controllableModule.Enable(false); } } else { Utils.Log("HangarGenericInflatable.OnStart: {0} is not a ControllableModule. Skipping it.", pm.moduleName); } } } controlled_modules.AddRange(modules); } //get animated nodes foreach (string node_name in AnimatedNodes.Split(' ')) { Transform node_transform = part.FindModelTransform(node_name); if (node_transform == null) { Utils.Log("HangarGenericInflatable.OnStart: no transform '{0}' in {1}", node_name, part.name); continue; } AttachNode node = part.findAttachNode(node_name); if (node == null) { node = part.srfAttachNode.id == node_name? part.srfAttachNode : null; } if (node == null) { Utils.Log("HangarGenericInflatable.OnStart: no node '{0}' in {1}", node_name, part.name); continue; } var a_node = new AnimatedNode(node, node_transform, part); animated_nodes.Add(a_node); } //calculate prefab metric prefab = part.partInfo.partPrefab; prefab_metric = new Metric(prefab); //get compressed gas for the first time if (CompressedGas < 0) { CompressedGas = InflatableVolume; } //load compressor if (CompressorConfig != null) { compressor = new GasCompressor(part); compressor.Load(CompressorConfig); } //forbid surface attachment for the inflatable part.attachRules.allowSrfAttach = false; UpdatePart(); //update GUI and set the flag ToggleEvents(); StartCoroutine(UpdateStatus()); gui_state = this.DeactivateGUI(); just_loaded = true; }
public override void OnStart(StartState state) { base.OnStart(state); if (state == StartState.None) { return; } //init compressor if (Compressor.Valid) { Compressor.Init(part); if (CompressorSound != string.Empty) { Utils.createFXSound(part, fxSndCompressor, CompressorSound, true); fxSndCompressor.audio.volume = GameSettings.SHIP_VOLUME * SoundVolume; } } //get controlled modules if (!string.IsNullOrEmpty(ControlledModules)) { foreach (string module_name in Utils.ParseLine(ControlledModules, Utils.Delimiters)) { if (module_name == "") { continue; } if (!part.Modules.Contains(module_name)) { this.Log("OnStart: {} does not contain {} module.", part.name, module_name); continue; } var modules = new List <IControllableModule>(); foreach (PartModule pm in part.Modules) { if (pm.moduleName == module_name) { var controllableModule = pm as IControllableModule; if (controllableModule != null) { modules.Add(controllableModule); if (State != AnimatorState.Opened) { controllableModule.Enable(false); } } else { this.Log("OnStart: {} is not a ControllableModule. Skipping it.", pm.moduleName); } } } controlled_modules.AddRange(modules); } } //get animated nodes foreach (string node_name in Utils.ParseLine(AnimatedNodes, Utils.Delimiters)) { if (node_name == "") { continue; } Transform node_transform = part.FindModelTransform(node_name); if (node_transform == null) { this.Log("OnStart: no transform '{}' in {}", node_name, part.name); continue; } AttachNode node = part.FindAttachNode(node_name); if (node == null) { node = part.srfAttachNode.id == node_name ? part.srfAttachNode : null; } if (node == null) { this.Log("OnStart: no node '{}' in {}", node_name, part.name); continue; } var a_node = new AnimatedNode(node, node_transform, part); animated_nodes.Add(a_node); } //calculate prefab metric prefab = part.partInfo.partPrefab; prefab_metric = new Metric(prefab); //get compressed gas for the first time if (CompressedGas < 0 && (state == StartState.Editor || vessel != null && vessel.staticPressurekPa > 1e-6)) { CompressedGas = InflatableVolume; } //prevent accidental looping of animation Loop = false; //update part, GUI and set the flag UpdatePart(); ToggleEvents(); StartCoroutine(SlowUpdate()); StartCoroutine(FirstTimeUpdateNodes()); isEnabled = false; }