protected override bool RecomputeOverriddenParameters(MyEntity thrustEntity, FuelTypeData fuelData)
        {
            var thruster = thrustEntity as MyThrust;
            if (thruster == null)
                return false;

            if (!IsOverridden(thruster))
                return false;

            var thrustOverride = thruster.ThrustOverride * -thruster.ThrustForwardVector * CalculateForceMultiplier(thrustEntity, m_lastPlanetaryInfluence, m_lastPlanetaryInfluenceHasAtmosphere);
            var thrustOverridePower = thruster.ThrustOverride / thruster.ThrustForce.Length() * thruster.MaxPowerConsumption;

            if (fuelData.ThrustsByDirection[thruster.ThrustForwardVector].Contains(thrustEntity))
            {
                fuelData.ThrustOverride += thrustOverride;
                fuelData.ThrustOverridePower += thrustOverridePower;
            }

            return true;
        }
        public override void OnStart(StartState state)
        {
            base.OnStart(state);
            ConfigNode node = SSTUConfigNodeUtils.parseConfigNode(configNodeData);
            ConfigNode[] limitNodes = node.GetNodes("TECHLIMIT");
            int len = limitNodes.Length;
            techLimits = new TechLimitHeightDiameter[len];
            for (int i = 0; i < len; i++) { techLimits[i] = new TechLimitHeightDiameter(limitNodes[i]); }

            updateTechLimits();
            if (radius * 2 > techLimitMaxDiameter) { radius = techLimitMaxDiameter * 0.5f; }
            if (height > techLimitMaxHeight) { height = techLimitMaxHeight; }

            fuelType = new FuelTypeData(node.GetNode("FUELTYPE"));

            GameEvents.onEditorShipModified.Add(new EventData<ShipConstruct>.OnEvent(onEditorVesselModified));
            locateTransforms();
            updateModelPositions();
            updateModelScales();

            if (!initializedResources && (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor))
            {
                initializedResources = true;
                updatePartResources();
            }
            updateEngineThrust();

            restoreEditorFields();
        }
 protected override bool RecomputeOverriddenParameters(MyEntity thrustEntity, FuelTypeData fuelData)
 {
     return false;
 }
        private void initialize()
        {
            if (initialized) { return; }
            initialized = true;
            fairingMaterial = SSTUUtils.loadMaterial(diffuseTextureName, String.Empty, "KSP/Specular");
            ConfigNode node = SSTUConfigNodeUtils.parseConfigNode(configNodeData);
            techLimits = TechLimitHeightDiameter.loadTechLimits(node.GetNodes("TECHLIMIT"));
            outsideUV = new UVArea(node.GetNode("UVMAP", "name", "outside"));
            insideUV = new UVArea(node.GetNode("UVMAP", "name", "inside"));
            edgesUV = new UVArea(node.GetNode("UVMAP", "name", "edges"));
            updateTechLimits();

            fuelType = new FuelTypeData(node.GetNode("FUELTYPE"));

            Transform modelBase = part.transform.FindRecursive("model");

            setupEngineModels(modelBase);

            Transform root = modelBase.FindOrCreate(baseTransformName);
            Transform collider = modelBase.FindOrCreate("InterstageFairingBaseCollider");
            fairingBase = new InterstageDecouplerModel(root.gameObject, collider.gameObject, 0.25f, cylinderSides, numberOfPanels, wallThickness);
            buildFairing();
            updateNodePositions(false);
            updateEditorFields();

            if (!initializedResources && (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor))
            {
                initializedResources = true;
                updateResources();
            }
            updatePartMass();
            updateEngineThrust();
            updateGuiFields();
        }