///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawGeneralOptions
        /// # Draw the basic general options
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void DrawGeneralOptions()
        {
            if (systemMode == cSystemMode.edition)
            {
                configSaver.parameters.showBasicGeneralOptions = EditorGUILayout.Foldout(configSaver.parameters.showBasicGeneralOptions, new GUIContent("General options", "Show general options"));

                if (configSaver.parameters.showBasicGeneralOptions)
                {
                    EditorBasicFunctions.DrawEditorBox("General options", Color.yellow, position);

                    // basic actions only in edition mode?
                    configSaver.parameters.showBasicActionsAlways = EditorGUILayout.Toggle(new GUIContent("Basic actions always", "Attach created decal to hit object"), configSaver.parameters.showBasicActionsAlways);

                    // advanced actions only in edition mode?
                    configSaver.parameters.showAdvancedActionsAlways = EditorGUILayout.Toggle(new GUIContent("Advanced actions always", "Attach created decal to hit object"), configSaver.parameters.showAdvancedActionsAlways);

                    // show help?
                    configSaver.parameters.hideBasicHelp = EditorGUILayout.Toggle(new GUIContent("Hide basic help", "Hide basic help"), configSaver.parameters.hideBasicHelp);

                    // insert mode
                    EditorGUILayout.Separator();
                    insertMode = (cInsertMode)EditorGUILayout.EnumPopup(new GUIContent("Insert mode", "Select the way to insert decals or prefabs using keyboard and mouse"), insertMode, new GUILayoutOption[] { GUILayout.Width(0.81f * position.width) });


                    EditorGUILayout.Separator();
                    EditorGUILayout.Separator();
                    EditorBasicFunctions.DrawLineSeparator();
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawProjectedDecalsMode
        /// # Draw al gui buttons, checboxes, ... to handle and insert projected decals in scene
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void DrawProjectedDecalsMode()
        {
            Material actualMaterial = EditorBasicFunctions.DrawProjectedDecalElements(projectedDecalPrefab, true, position, configSaver);

            if (actualMaterial)
            {
                EditorBasicFunctions.DrawEditorBox(actualMaterial.name, Color.yellow, position);
            }
            else
            {
                EditorBasicFunctions.DrawEditorBox("No projected decal selected to put!", Color.gray, position);
            }
        }
		///////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>
		/// DrawEditionMode
		/// # Draw al gui buttons, checboxes, ... to handle edition mode
		/// </summary>
		///////////////////////////////////////////////////////////////////////////////////////////////////////
		void DrawEditionMode ()
		{				
			if (!configSaver.parameters.hideBasicHelp)
			{
				EditorBasicFunctions.DrawEditorBox ("Use 'Edit Mode' to edit decals or objects, to clean scripts in the scene or to create new decals", Color.yellow, position);
			}

			EditorGUILayout.Separator ();
						
					
			EditorBasicFunctions.DrawEditorBox ("Edit the scene!", Color.white, position);	
			
			EditorGUILayout.Separator ();

			GameObject actualSelectedObject = Selection.activeGameObject;
			
			
			if (actualSelectedObject)
			{														
				GenericMeshDecal actualDecal = actualSelectedObject.GetComponent ("GenericMeshDecal") as GenericMeshDecal;
				GenericObject actualObject = actualSelectedObject.GetComponent ("GenericObject") as GenericObject;
				
				if (actualDecal)
				{
					EditorBasicFunctions.DrawEditorBox ("Selected decal: " + actualSelectedObject.name, Color.yellow, position);
										
					var editor = Editor.CreateEditor (actualDecal);
					editor.OnInspectorGUI ();            
				}
				else if (actualObject)
				{
					EditorBasicFunctions.DrawEditorBox ("Selected object: " + actualSelectedObject.name, Color.yellow, position);	
				}
				else
				{
					EditorBasicFunctions.DrawEditorBox ("Not editable object: " + actualSelectedObject.name, Color.gray, position);	
				}
			}
			else
			{
				EditorBasicFunctions.DrawEditorBox ("Nothing selected!", Color.black, position);	
			}
		}
Ejemplo n.º 4
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// OnGUI
        /// # Handle OnGUI
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void OnGUI()
        {
            // resize
            if (resizeIfNeeded && ((position.width != 320) || (position.height != 280)))
            {
                resizeIfNeeded = false;

                Rect actualPosition = position;

                actualPosition.width  = 320;
                actualPosition.height = 280;

                position = actualPosition;
            }


            DirectoryInfo actualDirInfo = new DirectoryInfo(BasicDefines.MAIN_PATH + "Paintable/MeshDecals/Materials/");

            if ((fadeFolderNameList.Count <= 0) || (cutOutFolderNameList.Count <= 0))
            {
                for (int i = 0; i < actualDirInfo.GetDirectories().Count(); i++)
                {
                    string actualName = actualDirInfo.GetDirectories() [i].Name;
                    //Debug.Log(actualName);

                    if (actualName.Length > 1)
                    {
                        if ((actualName.Length > 7) && actualName.Substring(0, 7) == "[Fade] ")
                        {
                            fadeFolderNameList.Add(actualDirInfo.GetDirectories() [i].Name);
                        }
                        else
                        {
                            cutOutFolderNameList.Add(actualDirInfo.GetDirectories() [i].Name);
                        }
                    }
                }
            }

            GUILayout.BeginArea(new Rect(0.0f * position.width, 0, position.width, position.height));

            // title
            EditorGUILayout.Separator();
            EditorBasicFunctions.DrawEditorBox("Create a new decal", Color.yellow, position);
            EditorGUILayout.Separator();


            // type
            GUILayout.BeginHorizontal();

            GUILayout.Label("Mode");
            createDecalType = (cCreateDecalType)EditorGUILayout.EnumPopup(createDecalType);

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            EditorGUILayout.Separator();
            EditorGUILayout.Separator();


            // texture albedo
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Albedo", new GUILayoutOption[] { GUILayout.Width(100) });
            createDecalTexture_albedo = EditorGUILayout.ObjectField(createDecalTexture_albedo, typeof(Texture), true, new GUILayoutOption[] { GUILayout.Width(200) }) as Texture;

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            // texture normal
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Normal", new GUILayoutOption[] { GUILayout.Width(100) });
            createDecalTexture_normal = EditorGUILayout.ObjectField(createDecalTexture_normal, typeof(Texture), true, new GUILayoutOption[] { GUILayout.Width(200) }) as Texture;

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();



            // texture albedo
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Emission", new GUILayoutOption[] { GUILayout.Width(100) });
            createDecalTexture_emission = EditorGUILayout.ObjectField(createDecalTexture_emission, typeof(Texture), true, new GUILayoutOption[] { GUILayout.Width(200) }) as Texture;

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();



            // decal name
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Decal name", new GUILayoutOption[] { GUILayout.Width(100) });
            createDecalName = EditorGUILayout.TextArea(createDecalName, new GUILayoutOption[] { GUILayout.Width(200) });

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            // folder
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();

            GUILayout.Label("Folder");

            switch (createDecalType)
            {
            case cCreateDecalType.fade:
            {
                actualCreateDecalFadeFolderIndex = EditorGUILayout.Popup(actualCreateDecalFadeFolderIndex, fadeFolderNameList.ToArray(), new GUILayoutOption[] { GUILayout.Width(200) });
            }
            break;

            case cCreateDecalType.cutout:
            {
                actualCreateDecalCutOutFolderIndex = EditorGUILayout.Popup(actualCreateDecalCutOutFolderIndex, cutOutFolderNameList.ToArray(), new GUILayoutOption[] { GUILayout.Width(200) });
            }
            break;
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            // create button
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            if (GUILayout.Button("CREATE", new GUILayoutOption[] { GUILayout.Height(32) }))
            {
                if (createDecalTexture_albedo)
                {
                    CreateNewDecal();
                    Close();
                }
                else
                {
                    EditorUtility.DisplayDialog("ERROR", "You need a texture to create a decal", "OK");
                }
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            GUILayout.EndArea();
        }
Ejemplo n.º 5
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawObjectsMode
        /// # Draw al gui buttons, checboxes, ... to handle and insert objects in scene
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void DrawObjectsMode()
        {
            EditorBasicFunctions.DrawEditorBox("Insert objects: Options", Color.white, position);

            if (!configSaver.parameters.hideBasicHelp)
            {
                EditorBasicFunctions.DrawEditorBox(EditorBasicFunctions.GetInsertModeHelpString() + " objects", Color.yellow, position);
            }

            EditorGUILayout.Separator();

            configSaver.parameters.showPrefabConfigOptions = EditorGUILayout.Foldout(configSaver.parameters.showPrefabConfigOptions, new GUIContent("Show prefab configuration options", "Show prefab configuration options"));

            if (!configSaver.parameters.showPrefabConfigOptions)
            {
            }
            else
            {
                EditorBasicFunctions.DrawEditorBox("Configuration", Color.yellow, position);

                EditorGUILayout.Separator();

                attachObjectToCollisionObject = EditorGUILayout.Toggle(new GUIContent("Attach to father", "Attach created object to hit object"), attachObjectToCollisionObject);
                EditorGUILayout.Separator();

                extraNormalOffset = EditorGUILayout.Slider(new GUIContent("Extra normal offset", "Set the extra offset using hit normal"), extraNormalOffset, -10, 10, new GUILayoutOption[] { GUILayout.Width(0.81f * position.width) });
                extraNormalOffset = Mathf.Clamp(extraNormalOffset, -10, 10);

                pivotMode = (cPivotMode)EditorGUILayout.EnumPopup(new GUIContent("Pivot mode", "Select the pivot mode to positionate prefab using hit normal"), pivotMode, new GUILayoutOption[] { GUILayout.Width(0.81f * position.width) });
                EditorGUILayout.Separator();
                EditorGUILayout.Separator();

                objectScaleRange   = EditorGUILayout.Vector2Field(new GUIContent("Scale range", "Randomize object scale between 2 values"), objectScaleRange, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                objectScaleRange.x = Mathf.Clamp(objectScaleRange.x, 0.01f, 10);
                objectScaleRange.y = Mathf.Clamp(objectScaleRange.y, 0.01f, 10);

                EditorGUILayout.Separator();

                objectRotationRangeX   = EditorGUILayout.Vector2Field(new GUIContent("Rotation range X", "Randomize object rotation in X axis between 2 values"), objectRotationRangeX, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                objectRotationRangeX.x = Mathf.Clamp(objectRotationRangeX.x, 0, 360);
                objectRotationRangeX.y = Mathf.Clamp(objectRotationRangeX.y, 0, 360);

                objectRotationRangeY   = EditorGUILayout.Vector2Field(new GUIContent("Rotation range Y", "Randomize object rotation in Y axis between 2 values"), objectRotationRangeY, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                objectRotationRangeY.x = Mathf.Clamp(objectRotationRangeY.x, 0, 360);
                objectRotationRangeY.y = Mathf.Clamp(objectRotationRangeY.y, 0, 360);

                objectRotationRangeZ   = EditorGUILayout.Vector2Field(new GUIContent("Rotation range Z", "Randomize object rotation in Z axis between 2 values"), objectRotationRangeZ, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                objectRotationRangeZ.x = Mathf.Clamp(objectRotationRangeZ.x, 0, 360);
                objectRotationRangeZ.y = Mathf.Clamp(objectRotationRangeZ.y, 0, 360);

                EditorGUILayout.Separator();
                EditorGUILayout.Separator();
            }

            EditorBasicFunctions.DrawEditorBox("Choose prefab!", Color.white, position);

            genericObject = EditorBasicFunctions.DrawPrefabList(genericObject, position);

            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            if (genericObject)
            {
                EditorBasicFunctions.DrawEditorBox(genericObject.name, Color.yellow, position);
            }
            else
            {
                EditorBasicFunctions.DrawEditorBox("No object selected to put!", Color.gray, position);
            }
        }
Ejemplo n.º 6
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// OnGUI
        /// # Handle OnGUI
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void OnGUI()
        {
            // resize
            if (resizeIfNeeded && ((position.width != 320) || (position.height != 280)))
            {
                resizeIfNeeded = false;

                Rect actualPosition = position;

                actualPosition.width  = 320;
                actualPosition.height = 280;

                position = actualPosition;
            }

            GUILayout.BeginArea(new Rect(0.0f * position.width, 0, position.width, position.height));

            // title
            EditorGUILayout.Separator();
            EditorBasicFunctions.DrawEditorBox("Merge decals", Color.yellow, position);
            EditorGUILayout.Separator();

            deleteOldDecals = EditorGUILayout.Toggle(new GUIContent("Delete old decals", "Delete selected decals once the new gameobject is created"), deleteOldDecals);


            // decal name
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();

            EditorGUILayout.LabelField(new GUIContent("Merged name", "Once merge the name of the create gameobject"), new GUILayoutOption[] { GUILayout.Width(100) });
            mergedObjectName = EditorGUILayout.TextArea(mergedObjectName, new GUILayoutOption[] { GUILayout.Width(200) });

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            // create button
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            // merge selected
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            if (GUILayout.Button(new GUIContent("MERGE SELECTED", "Merge actual selected decals"), new GUILayoutOption[] { GUILayout.Height(32) }))
            {
                MergeActualSelectedDecals();
                Close();
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            // merge all
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();
            EditorGUILayout.Separator();

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            if (GUILayout.Button(new GUIContent("MERGE ALL", "Merge all decals in the scene. Use with cauttion!"), new GUILayoutOption[] { GUILayout.Height(32) }))
            {
                MergeAllDecals();
                Close();
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();


            GUILayout.EndArea();
        }
Ejemplo n.º 7
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawEditionMode
        /// # Draw al gui buttons, checboxes, ... to handle edition mode
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void DrawExtraOptions()
        {
            bool drawThis = true;

            if (systemMode != cSystemMode.edition)
            {
                drawThis = false;
            }

            if (drawThis)
            {
                configSaver.parameters.showExtraOptions = EditorGUILayout.Foldout(configSaver.parameters.showExtraOptions, new GUIContent("Extra options", "Show extra options"));

                if (configSaver.parameters.showExtraOptions)
                {
                    EditorBasicFunctions.DrawEditorBox("Extra options", Color.yellow, position);

                    if (splineDecalModeEnabled)
                    {
                        if (!configSaver.parameters.hideBasicHelp)
                        {
                            EditorGUILayout.HelpBox("You can insert new waypoints using actual selected insert mode. Once you create waypoints just select one decal to make it to follow a path", MessageType.Info);
                        }

                        EditorGUILayout.Separator();

                        closedWaypointSpline = EditorGUILayout.Toggle(new GUIContent("Closed spline", "Close the spline to finish in the initial point"), closedWaypointSpline);
                        loopWaypointSpline   = EditorGUILayout.Toggle(new GUIContent("Loop spline", "Update position in a cotinuous loop"), loopWaypointSpline);

                        EditorGUILayout.Separator();

                        // build spline decal
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorTextButton("BUILD SPLINE DECAL", "Create a spline decal using actual waypoints", position))
                        {
                            List <WayPoint> wayPointList = new List <WayPoint> ();
                            List <Object>   objectList   = GameObject.FindObjectsOfType(typeof(WayPoint)).ToList();

                            for (int i = 0; i < objectList.Count; i++)
                            {
                                wayPointList.Add(objectList [i] as WayPoint);
                            }

                            wayPointList = wayPointList.OrderBy(x => x.index).ToList();

                            if (wayPointList.Count >= 2)
                            {
                                if (Selection.gameObjects.Count() == 1)
                                {
                                    GenericPathFollower actualPathFollower = Selection.gameObjects [0].GetComponent <GenericPathFollower> ();

                                    if (!actualPathFollower)
                                    {
                                        actualPathFollower = Selection.gameObjects [0].gameObject.AddComponent <GenericPathFollower> ();
                                    }

                                    actualPathFollower.Create(wayPointList, closedWaypointSpline, loopWaypointSpline);
                                }
                                else
                                {
                                    EditorUtility.DisplayDialog("WARNING", "Please, select one object only", "OK");
                                }
                            }
                            else
                            {
                                EditorUtility.DisplayDialog("WARNING", "Please, insert at least two waypoints", "OK");
                            }
                        }

                        // remove waypoints
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorTextButton("REMOVE ALL WAYPOINTS", "Remove all waypoins in scene", position))
                        {
                            GameObject wpContainer = GameObject.Find("_DECAL_WAYPOINTS");
                            DestroyImmediate(wpContainer);

                            List <WayPoint> wayPointList = new List <WayPoint> ();
                            List <Object>   objectList   = GameObject.FindObjectsOfType(typeof(WayPoint)).ToList();

                            for (int i = 0; i < objectList.Count; i++)
                            {
                                wayPointList.Add(objectList [i] as WayPoint);
                            }

                            foreach (WayPoint wp in wayPointList)
                            {
                                DestroyImmediate(wp.gameObject);
                            }
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();

                        EditorGUILayout.Separator();


                        // leave spline decal mode
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorTextButton("LEAVE", "Leave spline decal mode", position))
                        {
                            splineDecalModeEnabled = false;
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }
                    else
                    {
                        EditorGUILayout.Separator();

                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorTextButton("SPLINE DECAL MODE", "Go to spline decal mode", position))
                        {
                            splineDecalModeEnabled = true;
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }


                    EditorGUILayout.Separator();

                    EditorBasicFunctions.DrawLineSeparator();
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawAdvancedButtons
        /// # Draw all advanced buttons
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void DrawAdvancedButtons()
        {
            bool drawThis = true;

            if (!configSaver.parameters.showAdvancedActionsAlways && (systemMode != cSystemMode.edition))
            {
                drawThis = false;
            }

            if (drawThis)
            {
                configSaver.parameters.showAdvancedActions = EditorGUILayout.Foldout(configSaver.parameters.showAdvancedActions, new GUIContent("Advanced actions", "Show advanced actions"));

                if (configSaver.parameters.showAdvancedActions)
                {
                    EditorBasicFunctions.DrawEditorBox("Advanced actions", Color.yellow, position);

                    EditorGUILayout.Separator();
                    EditorGUILayout.Separator();

                    float buttonsScale = position.width / 6;

                    if (cleanAlSceneScriptsConfirmationMode)
                    {
                        EditorBasicFunctions.DrawEditorBox("Do you really want to clean all the scripts?", Color.white, position);

                        // clean all scripts
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorButton("NoButton", "Don't clean", new Vector2(buttonsScale, buttonsScale), true, false, false, true))
                        {
                            cleanAlSceneScriptsConfirmationMode = false;
                        }

                        EditorBasicFunctions.GetEditorButton("EmptyButton", "", new Vector2(buttonsScale, buttonsScale), false, true, true, true);
                        EditorBasicFunctions.GetEditorButton("EmptyButton", "", new Vector2(buttonsScale, buttonsScale), false, true, true, true);

                        if (EditorBasicFunctions.GetEditorButton("YesButton", "Continue cleaning", new Vector2(buttonsScale, buttonsScale), true, false, false, true))
                        {
                            CleanAllSceneScriptsAction();
                            cleanAlSceneScriptsConfirmationMode = false;
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }
                    else
                    {
                        // clean all scripts
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorTextButton("CLEAN SCRIPTS", "Clean all the scripts in the scene, for example to use without this editor extension in the system", position))
                        {
                            cleanAlSceneScriptsConfirmationMode = true;
                        }

                        // create new decal
                        if (EditorBasicFunctions.GetEditorTextButton("CREATE DECAL", "Create a new decal just selecting textures, type and folder", position))
                        {
                            CreateDecalWindow window = ScriptableObject.CreateInstance <CreateDecalWindow>();
                            window.name = "Create new decal";
#if UNITY_5_0
                            window.title = window.name;
#else
                            window.titleContent = new GUIContent(window.name);
#endif
                            window.Show();
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();

                        EditorGUILayout.Separator();

                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();


                        // lock all future time lockable decals
                        if (EditorBasicFunctions.GetEditorTextButton("LOCK DECALS", "Mark all 'futureTimeLockableShape' decals as locked", position))
                        {
                            foreach (GenericMeshDecal actualDecal in GameObject.FindObjectsOfType <GenericMeshDecal>())
                            {
                                if (actualDecal.futureTimeLockableShape)
                                {
                                    actualDecal.lockedShapeAlways = true;
                                }
                            }
                        }

                        // merge decals
                        if (EditorBasicFunctions.GetEditorTextButton("MERGE DECALS", "Merge all selected decals into single one mesh", position))
                        {
                            MergeDecalWindow window = ScriptableObject.CreateInstance <MergeDecalWindow>();
                            window.name = "Merge new decal";
#if UNITY_5_0
                            window.title = window.name;
#else
                            window.titleContent = new GUIContent(window.name);
#endif
                            window.Show();
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Separator();
                    EditorGUILayout.Separator();
                    EditorBasicFunctions.DrawLineSeparator();
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawBasicButtons
        /// # Draw all basic buttons
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        void DrawBasicButtons()
        {
            bool drawThis = true;

            if (!configSaver.parameters.showBasicActionsAlways && (systemMode != cSystemMode.edition))
            {
                drawThis = false;
            }

            if (drawThis)
            {
                configSaver.parameters.showBasicActions = EditorGUILayout.Foldout(configSaver.parameters.showBasicActions, new GUIContent("Basic actions", "Show basic actions"));

                if (configSaver.parameters.showBasicActions)
                {
                    EditorBasicFunctions.DrawEditorBox("Basic actions", Color.yellow, position);

                    float buttonsScale = position.width / 5;

                    if (deleteAllConfirmationMode)
                    {
                        EditorBasicFunctions.DrawEditorBox("Do you really want to delete all?", Color.white, position);

                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorButton("NoButton", "Don't delete", new Vector2(buttonsScale, buttonsScale), true, false, false, true))
                        {
                            deleteAllConfirmationMode = false;
                        }

                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorButton("YesButton", "Continue deleting", new Vector2(buttonsScale, buttonsScale), true, false, false, true))
                        {
                            DeleteAllAction();
                            deleteAllConfirmationMode = false;
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }
                    else
                    {
                        EditorGUILayout.Separator();
                        EditorGUILayout.Separator();

                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorButton("DeleteAllButton", "Delete all created objects of every mode, in edit mode delete all created objects of all modes", new Vector2(buttonsScale, buttonsScale), true, false, false, true))
                        {
                            deleteAllConfirmationMode = true;
                        }

                        GUILayout.FlexibleSpace();

                        if (EditorBasicFunctions.GetEditorButton("DeleteLastButton", "Delete last created object of every mode, in edit mode delete last create object of all modes", new Vector2(buttonsScale, buttonsScale), true, false, false, true))
                        {
                            DeleteLastAction();
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Separator();
                    EditorGUILayout.Separator();
                    EditorBasicFunctions.DrawLineSeparator();
                }
            }
        }
Ejemplo n.º 10
0
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 /// <summary>
 /// DrawActualVersion
 /// # Draw actual ADAOPS version
 /// </summary>
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 public static void DrawActualVersion(Rect position)
 {
     EditorBasicFunctions.DrawEditorBox("ADAOPS [v" + BasicDefines.VERSION + "]", Color.white, position);
 }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawMeshDecalElements
        /// # Draw all mesh decal elements
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        public static Material DrawMeshDecalElements(GenericMeshDecal decal, bool comeFromEditor, Rect position, ConfigSaver configSaver)
        {
            if (decal)
            {
                EditorBasicFunctions.DrawEditorBox("Insert mesh decals: Options", Color.white, position);

                if ((configSaver != null) && !configSaver.parameters.hideBasicHelp)
                {
                    EditorBasicFunctions.DrawEditorBox(GetInsertModeHelpString() + " mesh decals", Color.yellow, position);
                }

                EditorGUILayout.Separator();

                bool showConfigOptions = true;

                if (configSaver != null)
                {
                    configSaver.parameters.showMeshDecalsConfigOptions = EditorGUILayout.Foldout(configSaver.parameters.showMeshDecalsConfigOptions, new GUIContent("Show mesh decals configuration options", "Show mesh decals configuration options"));

                    showConfigOptions = configSaver.parameters.showMeshDecalsConfigOptions;
                }

                if (!showConfigOptions)
                {
                }
                else
                {
                    EditorBasicFunctions.DrawEditorBox("Configuration", Color.yellow, position);

                    EditorGUILayout.Separator();

                    decal.attachToCollisionObject = EditorGUILayout.Toggle(new GUIContent("Attach to father", "Attach created decal to hit object"), decal.attachToCollisionObject);

                    if (comeFromEditor)
                    {
                        decal.futureTimeLockableShape = EditorGUILayout.Toggle(new GUIContent("Future time lockable shape", "It this is checked you can use the button called 'Lock all future time lockable decals' in advance options to lock all 'futureTimeLockableShape' checked on decals, Use with caution"), decal.futureTimeLockableShape);
                        decal.addCollider             = EditorGUILayout.Toggle(new GUIContent("Add collider", "Add a collider to be detected for the next decals, Use with caution"), decal.addCollider);
                        planarMeshDecals = EditorGUILayout.Toggle(new GUIContent("Simple planar", "Do the decal to be a simple plane, it's performance friendly"), planarMeshDecals);
                        EditorGUILayout.Separator();

                        decal.scaleRange   = EditorGUILayout.Vector2Field(new GUIContent("Scale range", "Randomize decal scale between 2 values"), decal.scaleRange, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                        decal.scaleRange.x = Mathf.Clamp(decal.scaleRange.x, 0.01f, 10);
                        decal.scaleRange.y = Mathf.Clamp(decal.scaleRange.y, 0.01f, 10);

                        EditorGUILayout.Separator();

                        decal.rotationRange   = EditorGUILayout.Vector2Field(new GUIContent("Rotation range", "Randomize decal rotation between 2 values"), decal.rotationRange, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                        decal.rotationRange.x = Mathf.Clamp(decal.rotationRange.x, 0, 360);
                        decal.rotationRange.y = Mathf.Clamp(decal.rotationRange.y, 0, 360);
                    }
                    else
                    {
                        decal.lockedShapeAlways = EditorGUILayout.Toggle(new GUIContent("Lock shape always", "Lock shape always"), decal.lockedShapeAlways);

                        decal.lockedShapeInRuntime = EditorGUILayout.Toggle(new GUIContent("Lock shape in runtime", "Lock shape in runtime"), decal.lockedShapeInRuntime);

                        decal.planarDecal = EditorGUILayout.Toggle(new GUIContent("A Simple planar", "Do the decal to be a simple plane, it's performance friendly"), decal.planarDecal);
                        EditorGUILayout.Separator();
                    }

                    EditorGUILayout.Separator();

                    decal.angleLimit = EditorGUILayout.Slider(new GUIContent("Collision angle limit", "For not planar decals, max angle between hit objects"), decal.angleLimit, 1, 180);
                    decal.angleLimit = Mathf.Clamp(decal.angleLimit, 1, 180);

                    decal.distanceFromHit = EditorGUILayout.Slider(new GUIContent("Distance from hit", "Distance in the hit normal from hit object"), decal.distanceFromHit, 0.001f, 1);
                    decal.distanceFromHit = Mathf.Clamp(decal.distanceFromHit, 0.001f, 1);

                    EditorGUILayout.Separator();
                    EditorGUILayout.Separator();
                }

                EditorBasicFunctions.DrawEditorBox("Choose mesh decal!", Color.white, position);
                EditorGUILayout.Separator();
                EditorGUILayout.Separator();

                decal.material = EditorBasicFunctions.ShowObjectField <Material> ("Actual selected material ", decal.material);

                decal.material = EditorBasicFunctions.DrawMeshDecalMaterialList(decal.material, Screen.width);

                EditorGUILayout.Separator();
                EditorGUILayout.Separator();

                if (decal.material)
                {
                    List <Sprite> spriteListFromTexture = EditorBasicFunctions.GetSpriteListFromTexture(decal.material.mainTexture);

                    if (spriteListFromTexture.Count > 0)
                    {
                        decal.sprite = spriteListFromTexture [0];
                    }

                    if (!comeFromEditor)
                    {
                        //EditorGUILayout.Separator ();
                        //EditorGUILayout.Separator ();

                        EditorBasicFunctions.DrawEditorBox("Info", Color.white, position);

                        //decal.affectedLayers = EditorBasicFunctions.LayerMaskField ("Affected Layers", decal.affectedLayers);

                        decal.showAffectedObject = EditorGUILayout.Foldout(decal.showAffectedObject, "Affected Objects");

                        if (decal.showAffectedObject && (decal.affectedObjects != null))
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Space(15);
                            GUILayout.BeginVertical();

                            foreach (GameObject go in decal.affectedObjects)
                            {
                                EditorGUILayout.ObjectField(go, typeof(GameObject), true);
                            }
                            GUILayout.EndVertical();
                            GUILayout.EndHorizontal();
                        }

                        EditorGUILayout.Separator();
                    }


                    return(decal.material);
                }
            }


            return(null);
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// DrawProjectedDecalElements
        /// # Draw all projected decal elements
        /// </summary>
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        public static Material DrawProjectedDecalElements(GenericProjectorDecal decal, bool comeFromEditor, Rect position, ConfigSaver configSaver)
        {
            if (decal)
            {
                EditorBasicFunctions.DrawEditorBox("Insert projected decals: Options", Color.white, position);

                if (!configSaver.parameters.hideBasicHelp)
                {
                    EditorBasicFunctions.DrawEditorBox("NOTE: Projected decals are experimental, they work but not perfectly!\n" + GetInsertModeHelpString() + " them", Color.yellow, position);
                }

                EditorGUILayout.Separator();

                configSaver.parameters.showProjectedDecalsConfigOptions = EditorGUILayout.Foldout(configSaver.parameters.showProjectedDecalsConfigOptions, new GUIContent("Show projected decals configuration options", "Show projected decals configuration options"));

                if (!configSaver.parameters.showProjectedDecalsConfigOptions)
                {
                    EditorGUILayout.Separator();
                }
                else
                {
                    EditorBasicFunctions.DrawEditorBox("Configuration", Color.yellow, position);

                    EditorGUILayout.Separator();

                    decal.attachToCollisionObject = EditorGUILayout.Toggle(new GUIContent("Attach to father", "Attach created decal to hit object"), decal.attachToCollisionObject);

                    if (comeFromEditor)
                    {
                        EditorGUILayout.Separator();

                        decal.scaleRange   = EditorGUILayout.Vector2Field(new GUIContent("Scale range", "Randomize decal scale between 2 values"), decal.scaleRange, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                        decal.scaleRange.x = Mathf.Clamp(decal.scaleRange.x, 0.01f, 10);
                        decal.scaleRange.y = Mathf.Clamp(decal.scaleRange.y, 0.01f, 10);

                        EditorGUILayout.Separator();

                        decal.rotationRange   = EditorGUILayout.Vector2Field(new GUIContent("Rotation range", "Randomize decal rotation between 2 values"), decal.rotationRange, new GUILayoutOption[] { GUILayout.Width(0.5f * position.width) });
                        decal.rotationRange.x = Mathf.Clamp(decal.rotationRange.x, 0, 360);
                        decal.rotationRange.y = Mathf.Clamp(decal.rotationRange.y, 0, 360);
                    }

                    EditorGUILayout.Separator();
                    EditorGUILayout.Separator();
                }

                EditorBasicFunctions.DrawEditorBox("Choose projected decal!", Color.white, position);
                EditorGUILayout.Separator();
                EditorGUILayout.Separator();

                decal.material = EditorBasicFunctions.ShowObjectField <Material> ("Actual selected material ", decal.material);

                decal.material = EditorBasicFunctions.DrawProjectedDecalMaterialList(decal.material, Screen.width);

                EditorGUILayout.Separator();
                EditorGUILayout.Separator();

                if (decal.material)
                {
                    List <Sprite> spriteListFromTexture = EditorBasicFunctions.GetSpriteListFromTexture(decal.material.mainTexture);

                    if (spriteListFromTexture.Count > 0)
                    {
                        decal.sprite = spriteListFromTexture [0];
                    }

                    if (!comeFromEditor)
                    {
                        EditorBasicFunctions.DrawEditorBox("Info", Color.white, position);

                        EditorGUILayout.Separator();
                    }

                    return(decal.material);
                }
            }


            return(null);
        }