internal void ModelChangedHandler(bool pushNodes) { if (validateNose || validateMount) { ValidateModules(); } ValidateLength(); UpdateModulePositions(); UpdateTankVolume(lengthWidth); UpdateDimensions(); UpdateModelMeshes(); UpdateAttachNodes(pushNodes); UpdateAvailableVariants(); //UpdateFairing(true); UpdateDragCubes(); if (scaleMass) { UpdateMass(); } if (scaleCost) { UpdateCost(); } ROLStockInterop.UpdatePartHighlighting(part); if (HighLogic.LoadedSceneIsEditor) { GameEvents.onEditorShipModified.Fire(EditorLogic.fetch.ship); } }
internal void ModelChangedHandler(bool pushNodes) { stl = SolarTechLimit.GetTechLevel(techLevel); retractable = stl.retractable && solarPanelType != "static"; UpdateModulePositions(); startFSM(); UpdateAttachNodes(pushNodes); UpdateAvailableVariants(); UpdateDragCubes(); UpdateMassAndCost(); RecalculateStats(); ROLStockInterop.UpdatePartHighlighting(part); if (HighLogic.LoadedSceneIsEditor) { ROLStockInterop.FireEditorUpdate(); } }
/// <summary> /// Updates part highlight renderer list, sends message to ModuleROTFlagDecal to update its renderer, /// sends message to FAR to update voxels, or if createDefaultCube==true will re-render the 'default' stock drag cube for the part<para/> /// Should be called anytime the model geometry in a part is changed -- either models added/deleted, procedural meshes updated. Other methods exist for pure drag-cube updating in ROLStockInterop. /// </summary> /// <param name="part"></param> /// <param name="createDefaultCube"></param> public static void OnPartGeometryUpdate(Part part, bool createDefaultCube) { if (!HighLogic.LoadedSceneIsEditor && !HighLogic.LoadedSceneIsFlight) { return; } //noop on prefabs ROLStockInterop.UpdatePartHighlighting(part); part.airlock = LocateAirlock(part); PartGeometryUpdate(part); if (createDefaultCube && (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight)) { ROLStockInterop.UpdatePartDragCube(part); } if (IsFARInstalled()) { part.SendMessage("GeometryPartModuleRebuildMeshData"); } if (HighLogic.LoadedSceneIsEditor && part.parent == null && part != EditorLogic.RootPart) //likely the part under the cursor; this fixes problems with modular parts not wanting to attach to stuff { part.gameObject.SetLayerRecursive(1, 2097152); //1<<21 = Part Triggers get skipped by the relayering (hatches, ladders, ??) } }