Exemple #1
0
        void Preferences()
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile)
            {
                profile.renderingPipeline = (Slicer2D.Settings.RenderingPipeline)EditorGUILayout.EnumPopup("Rendering Pipeline", profile.renderingPipeline);

                profile.garbageCollector = EditorGUILayout.Toggle("Garbage Collector", profile.garbageCollector);
                if (profile.garbageCollector)
                {
                    profile.garbageCollectorSize = EditorGUILayout.FloatField("Garbage Collector Size", profile.garbageCollectorSize);
                }

                profile.explosionPieces = (int)EditorGUILayout.Slider("Explosion Pieces", profile.explosionPieces, 1, 30);

                profile.componentsCopy = (Slicer2D.Settings.InstantiationMethod)EditorGUILayout.EnumPopup("Instatiation Method", profile.componentsCopy);

                profile.triangulation = (Slicer2D.Settings.Triangulation)EditorGUILayout.EnumPopup("Triangulation", profile.triangulation);

                profile.batching = (Slicer2D.Settings.Batching)EditorGUILayout.EnumPopup("Batching", profile.batching);

                profile.centerOfSliceTransform = (Slicer2D.Settings.CenterOfSliceTransform)EditorGUILayout.EnumPopup("Center Of Slice", profile.centerOfSliceTransform);

                if (GUILayout.Button("Default Settings"))
                {
                    profile.garbageCollector     = true;
                    profile.garbageCollectorSize = 0.005f;

                    profile.componentsCopy = Slicer2D.Settings.InstantiationMethod.Default;
                    profile.triangulation  = Slicer2D.Settings.Triangulation.Default;
                    profile.batching       = Slicer2D.Settings.Batching.Default;
                }

                if (GUI.changed && EditorApplication.isPlaying == false)
                {
                    EditorUtility.SetDirty(profile);
                }

                EditorGUILayout.HelpBox("Settings marked as 'default' will use local component setting", MessageType.Info);

                EditorGUILayout.HelpBox("Garbage Collector: When enabled, very small unuseful slices are removed", MessageType.None);
                EditorGUILayout.HelpBox("Instatiation Method: Performance mode would increase performance about 25%, however cannot be used in certain cases", MessageType.None);
                EditorGUILayout.HelpBox("Triangulation: The more reliable triangulation method, the slower most likely it performs. Simple shapes could use less complicated triangulation", MessageType.None);
                EditorGUILayout.HelpBox("Batching: when enabled, sliced parts of the object will use same material instance as it's origin (Improves Performance)", MessageType.None);
            }
            else
            {
                EditorGUILayout.HelpBox("Slicer2D Settings Profile Not Found!", MessageType.Error);
            }
        }
        public void SetTriangulation(Sliceable2D script)
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile == null || profile.triangulation == Slicer2D.Settings.Triangulation.Default)
            {
                script.materialSettings.triangulation = (PolygonTriangulator2D.Triangulation)EditorGUILayout.EnumPopup("Triangulation", script.materialSettings.triangulation);
            }
            else
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.EnumPopup("Triangulation", Slicer2D.Settings.GetTriangulation(script.materialSettings.triangulation));
                EditorGUI.EndDisabledGroup();
            }
        }
        public void SetBatching(Sliceable2D script)
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile == null || profile.batching == Slicer2D.Settings.Batching.Default)
            {
                script.materialSettings.batchMaterial = EditorGUILayout.Toggle("Batch Material", script.materialSettings.batchMaterial);
            }
            else
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.Toggle("Batch Material", Slicer2D.Settings.GetBatching(script.materialSettings.batchMaterial));
                EditorGUI.EndDisabledGroup();
            }
        }
        public void SetComponentsCopy(Sliceable2D script)
        {
            Slicer2D.SettingsProfile profile = Slicer2D.Settings.GetProfile();

            if (profile == null || profile.componentsCopy == Slicer2D.Settings.InstantiationMethod.Default)
            {
                script.instantiateMethod = (Sliceable2D.InstantiationMethod)EditorGUILayout.EnumPopup("Instantiation Method", script.instantiateMethod);
            }
            else
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.EnumPopup("Instantiation", Slicer2D.Settings.GetComponentsCopy(script.instantiateMethod));
                EditorGUI.EndDisabledGroup();
            }
        }