Ejemplo n.º 1
0
        public override void OnInitialize()
        {
            base.OnInitialize();
            if (generated != null &&
                !generated.generatedDataContainer)
            {
                generated.Destroy();
            }

            if (generated == null)
            {
                generated = ChiselGeneratedObjects.Create(gameObject);
            }

            if (colliderSettings == null)
            {
                colliderSettings = new ChiselGeneratedColliderSettings();
                colliderSettings.Reset();
            }

            if (renderSettings == null)
            {
                renderSettings = new ChiselGeneratedRenderSettings();
                renderSettings.Reset();
            }

#if UNITY_EDITOR
            if (uvGenerationSettings == null)
            {
                uvGenerationSettings = new SerializableUnwrapParam();
                UnityEditor.UnwrapParam defaults;
                UnityEditor.UnwrapParam.SetDefaults(out defaults);
                uvGenerationSettings.angleError       = defaults.angleError;
                uvGenerationSettings.areaError        = defaults.areaError;
                uvGenerationSettings.hardAngle        = defaults.hardAngle;
                uvGenerationSettings.packMarginPixels = defaults.packMargin * 256;
            }
#else
            if (generated != null && generated.meshRenderers != null)
            {
                foreach (var renderable in generated.renderables)
                {
                    renderable.meshRenderer.forceRenderingOff = true;
                    renderable.meshRenderer.enabled           = renderable.sharedMesh.vertexCount == 0;
                }
            }
#endif

            // Legacy solution
            if (!IsDefaultModel &&
                name == ChiselGeneratedComponentManager.kGeneratedDefaultModelName)
            {
                IsDefaultModel = true;
            }

            initialized = true;
        }
        static int FinishMeshUpdates(CSGTree tree,
                                     ref VertexBufferContents vertexBufferContents,
                                     ref Mesh.MeshDataArray meshDataArray,
                                     NativeList <ChiselMeshUpdate> colliderMeshUpdates,
                                     NativeList <ChiselMeshUpdate> debugHelperMeshes,
                                     NativeList <ChiselMeshUpdate> renderMeshes,
                                     JobHandle dependencies)
        {
            ChiselModel model = null;

            for (int m = 0; m < registeredModels.Count; m++)
            {
                if (!registeredModels[m])
                {
                    continue;
                }

                if (registeredModels[m].Node == tree)
                {
                    model = registeredModels[m];
                }
            }

            if (model == null)
            {
                if (meshDataArray.Length > 0)
                {
                    meshDataArray.Dispose();
                }
                meshDataArray = default;
                return(0);
            }

            if (!ChiselGeneratedObjects.IsValid(model.generated))
            {
                if (model.generated != null)
                {
                    model.generated.Destroy();
                }
                model.generated = ChiselGeneratedObjects.Create(model.gameObject);
            }

            var count = model.generated.FinishMeshUpdates(model, model.gameObject, ref meshDataArray, ref vertexBufferContents,
                                                          colliderMeshUpdates, debugHelperMeshes, renderMeshes,
                                                          dependencies);

            componentGenerator.Rebuild(model);
            PostUpdateModel?.Invoke(model);
            return(count);
        }
        public void Rebuild(ChiselModel model)
        {
            if (!model.IsInitialized)
            {
                model.OnInitialize();
            }

            if (!ChiselGeneratedObjects.IsValid(model.generated))
            {
                if (model.generated != null)
                {
                    model.generated.Destroy();
                }
                model.generated = ChiselGeneratedObjects.Create(model.gameObject);
            }

            UpdateModelFlags(model);
        }