private void buildFairing() { fairingBase.clearProfile(); UVMap uvs = UVMap.GetUVMapGlobal(uvMap); fairingBase.outsideUV = uvs.getArea("outside"); fairingBase.insideUV = uvs.getArea("inside"); fairingBase.edgesUV = uvs.getArea("edges"); float halfHeight = currentHeight * 0.5f; fairingBase.addRing(-halfHeight, currentBottomDiameter * 0.5f); if (currentTopDiameter != currentBottomDiameter) { fairingBase.addRing(-halfHeight + currentTaperHeight, currentBottomDiameter * 0.5f); } if (currentHeight != currentTaperHeight || currentTopDiameter == currentBottomDiameter) { fairingBase.addRing(halfHeight, currentTopDiameter * 0.5f); } fairingBase.generateColliders = this.generateColliders; fairingBase.generateFairing(); fairingBase.setMaterial(fairingMaterial); fairingBase.setOpacity(HighLogic.LoadedSceneIsEditor && editorTransparency ? 0.25f : 1.0f); updateEnginePositionAndScale(); SSTUModInterop.onPartGeometryUpdate(part, true); SSTUStockInterop.fireEditorUpdate(); }
public override void OnStart(StartState state) { base.OnStart(state); ConfigNode node = SSTUStockInterop.getPartModuleConfig(part, this); techLimitMaxDiameter = SSTUStockInterop.getTechLimit(techLimitSet); if (diameter > techLimitMaxDiameter) { diameter = techLimitMaxDiameter; } fuelType = VolumeContainerLoader.getPreset(fuelPreset); float max = techLimitMaxDiameter < maxDiameter ? techLimitMaxDiameter : maxDiameter; this.updateUIFloatEditControl("height", minHeight, maxHeight, heightIncrement * 2, heightIncrement, heightIncrement * 0.05f, true, height); this.updateUIFloatEditControl("diameter", minDiameter, max, diameterIncrement * 2, diameterIncrement, diameterIncrement * 0.05f, true, diameter); locateTransforms(); updateModelScales(); updateModelPositions(); updateAttachNodes(false); //can just check if part has -any- resources? if it does, then don't touch it... if it does not, then put some there (as long as it is not the prefab...) if (!initializedResources && (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor)) { initializedResources = true; updatePartResources(); } updateEditorFields(); Fields["height"].uiControlEditor.onFieldChanged = onHeightUpdated; Fields["diameter"].uiControlEditor.onFieldChanged = onDiameterUpdated; }
public void invertEnginesEvent() { invertEngines = !invertEngines; updateEnginePositionAndScale(); this.forEachSymmetryCounterpart(module => { module.invertEngines = this.invertEngines; module.updateEnginePositionAndScale(); }); SSTUStockInterop.fireEditorUpdate(); }
private void updateEngineThrust() { float currentScale = getScale(); float thrustScalar = Mathf.Pow(currentScale, thrustScalePower); float maxThrust = engineThrust * thrustScalar; guiEngineThrust = maxThrust; ModuleEngines[] engines = part.GetComponents <ModuleEngines>(); foreach (ModuleEngines engine in engines) { SSTUStockInterop.updateEngineThrust(engine, engine.minThrust, maxThrust); } }
private void invertEnginesFromEditor(bool updateSymmetry) { invertEngines = !invertEngines; updateEnginePositionAndScale(); if (updateSymmetry) { SSTUInterstageDecoupler idc; foreach (Part p in part.symmetryCounterparts) { idc = part.GetComponent <SSTUInterstageDecoupler>(); idc.invertEngines = invertEngines; idc.updateEnginePositionAndScale(); } SSTUStockInterop.fireEditorUpdate(); } }
private void updateEngineThrust() { ModuleEngines engine = part.GetComponent <ModuleEngines>(); if (engine != null) { float scale = getEngineScale(); float thrustScalar = Mathf.Pow(scale, thrustScalePower); float thrustPerEngine = engineThrust * thrustScalar; float totalThrust = thrustPerEngine * numberOfEngines; guiEngineThrust = totalThrust; SSTUStockInterop.updateEngineThrust(engine, engine.minThrust, totalThrust); } else { print("Cannot update engine thrust -- no engine module found!"); guiEngineThrust = 0; } }
private void initialize() { if (initialized) { return; } initialized = true; ConfigNode node = SSTUStockInterop.getPartModuleConfig(part, this); ConfigNode[] textureNodes = node.GetNodes("TEXTURESET"); textureSetData = TextureSet.loadTextureSets(textureNodes); currentTextureSetData = Array.Find(textureSetData, m => m.setName == currentTextureSet); if (currentTextureSetData == null) { currentTextureSetData = textureSetData[0]; currentTextureSet = currentTextureSetData.setName; } int len = textureSetData.Length; string[] textureSetNames = new string[len]; for (int i = 0; i < len; i++) { textureSetNames[i] = textureSetData[i].setName; } this.updateUIChooseOptionControl("currentTextureSet", textureSetNames, textureSetNames, true, currentTextureSet); TextureData data = currentTextureSetData.textureDatas[0]; fairingMaterial = SSTUUtils.loadMaterial(data.diffuseTextureName, null, "KSP/Specular"); techLimitMaxDiameter = SSTUStockInterop.getTechLimit(techLimitSet); if (currentTopDiameter > techLimitMaxDiameter) { currentTopDiameter = techLimitMaxDiameter; } if (currentBottomDiameter > techLimitMaxDiameter) { currentBottomDiameter = techLimitMaxDiameter; } fuelType = VolumeContainerLoader.getPreset(fuelPreset); Transform modelBase = part.transform.FindRecursive("model"); setupEngineModels(modelBase); minHeight = engineHeight * getEngineScale(); Transform root = modelBase.FindOrCreate(baseTransformName); Transform collider = modelBase.FindOrCreate("InterstageFairingBaseCollider"); fairingBase = new InterstageDecouplerModel(root.gameObject, collider.gameObject, 0.25f, cylinderSides, numberOfPanels, wallThickness); updateEditorFields(); buildFairing(); updateNodePositions(false); if (!initializedResources && (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor)) { initializedResources = true; updateResources(); } updatePartMass(); updateEngineThrust(); }