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();
        }
Beispiel #2
0
        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();
        }