Esempio n. 1
0
 IEnumerator QueueGetPathAgain()
 {
     while (queueNavmeshAround)
     {
         if (properties != null)
         {
             PathFinder.QueueGraph(
                 new Bounds(positionVector3, new Vector3(queueNavmeshAroundSize, 0, queueNavmeshAroundSize)),
                 properties);
         }
         yield return(new WaitForSeconds(queueNavmeshAroundCooldown));
     }
 }
Esempio n. 2
0
        private void ImportantButtons()
        {
            //properties
            settings.targetProperties = (AgentProperties)EditorGUILayout.ObjectField(new GUIContent("Properties", "Build navmesh using this properties"), settings.targetProperties, typeof(AgentProperties), false);

            //sellected chunks
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("start x:", GUILayout.MaxWidth(45));
            settings.startX = EditorGUILayout.IntField(settings.startX);
            EditorGUILayout.LabelField("z:", GUILayout.MaxWidth(15));
            settings.startZ = EditorGUILayout.IntField(settings.startZ);
            if (!sellectStart)
            {
                if (GUILayout.Button("sellect"))
                {
                    sellectStart = true;
                }
            }
            else
            {
                GUILayout.Label("click");
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("size x:", GUILayout.MaxWidth(45));
            settings.sizeX = EditorGUILayout.IntField(settings.sizeX);
            EditorGUILayout.LabelField("z:", GUILayout.MaxWidth(15));
            settings.sizeZ = EditorGUILayout.IntField(settings.sizeZ);

            if (!sellectEnd)
            {
                if (GUILayout.Button("Sellect"))
                {
                    sellectEnd = true;
                }
            }
            else
            {
                GUILayout.Label("Click");
            }
            EditorGUILayout.EndHorizontal();


            //upper row of cool buttons
            GUILayout.BeginHorizontal();
            if (GUILayout.Button(new GUIContent("Build", "Build navmesh in sellected area")))
            {
                if (settings.targetProperties == null)
                {
                    Debug.LogWarning("forgot to add properties");
                    return;
                }

                PathFinder.QueueGraph(
                    settings.startX,
                    settings.startZ,
                    settings.targetProperties,
                    settings.sizeX,
                    settings.sizeZ);
            }


            if (GUILayout.Button(new GUIContent("Remove", "Remove navmesh from sellected area. Only target area will be removed.")))
            {
                PathFinder.RemoveGraph(
                    settings.startX,
                    settings.startZ,
                    settings.targetProperties,
                    settings.sizeX,
                    settings.sizeZ,
                    _redoRemovedGraphs);
            }
            _redoRemovedGraphs = GUILayout.Toggle(_redoRemovedGraphs, new GUIContent("", "Queue removed again? If true then we refresh sellected chunks"), GUILayout.MaxWidth(18));


            if (GUILayout.Button(new GUIContent("Clear", "Remove all NavMesh. Also stop all work")))
            {
                PathFinder.ClearAll();
                Debuger_K.ClearChunksDebug();
            }
            GUILayout.EndHorizontal();

            //net row of cool buttons about serialization
            GUILayout.BeginHorizontal();
            if (GUILayout.Button(new GUIContent("Save", "Save all current navmesh into SceneNavmeshData. If it not exist then suggest to create one and pass reference to it into scene helper.")))
            {
                PathFinder.SaveCurrentSceneData();
            }
            if (GUILayout.Button(new GUIContent("Load", "Load current SceneNavmeshData from scene helper")))
            {
                PathFinder.LoadCurrentSceneData();
            }
            if (GUILayout.Button(new GUIContent("Delete", "Remove all serialized data from current NavMesh data. Scriptable object remain in project")))
            {
                PathFinder.ClearCurrentData();
            }
            GUILayout.EndHorizontal();
        }
Esempio n. 3
0
        private void ImportantButtons()
        {
            //properties

            EditorGUI.BeginChangeCheck();
            bool someBool = EditorGUILayout.Foldout(drawBuilder.boolValue, drawBuilderContent);

            if (EditorGUI.EndChangeCheck())
            {
                drawBuilder.boolValue = someBool;
            }



            if (drawBuilder.boolValue)
            {
                float rightOffset      = 30;
                float singleLineHeight = EditorGUIUtility.singleLineHeight;

                EditorGUILayout.PropertyField(targetProperties, targetPropertiesContent);

                //sellected chunks
                #region sellector
                Rect buildAreaRect = GUILayoutUtility.GetRect(Screen.width - rightOffset, singleLineHeight * 3);

                Rect baLeftRect  = new Rect(buildAreaRect.x, buildAreaRect.y + singleLineHeight, buildAreaRect.width * 0.5f, buildAreaRect.height - singleLineHeight);
                Rect baRightRect = new Rect(buildAreaRect.x + (buildAreaRect.width * 0.5f), buildAreaRect.y + singleLineHeight, buildAreaRect.width * 0.5f, buildAreaRect.height - singleLineHeight);

                GUI.Box(buildAreaRect, buildAreaString);
                //GUI.Box(baLeftRect, string.Empty);
                //GUI.Box(baRightRect, string.Empty);

                AreaPointer areaPointer = settings.areaPointer;

                float tLabelSize = 40;
                float tRemainSize = Mathf.Max(baRightRect.width - tLabelSize, 0);
                int   pStartX, pStartZ, pSizeX, pSizeZ;
                Rect  rectStartLablel = new Rect(baRightRect.x, baRightRect.y, tLabelSize, singleLineHeight);
                Rect  rectStartX      = new Rect(baRightRect.x + tLabelSize, baRightRect.y, tRemainSize * 0.5f, singleLineHeight);
                Rect  rectStartZ      = new Rect(baRightRect.x + tLabelSize + (tRemainSize * 0.5f), baRightRect.y, tRemainSize * 0.5f, singleLineHeight);

                Rect rectSizeLablel = new Rect(baRightRect.x, baRightRect.y + singleLineHeight, tLabelSize, singleLineHeight);
                Rect rectSizeX      = new Rect(baRightRect.x + tLabelSize, baRightRect.y + singleLineHeight, tRemainSize * 0.5f, singleLineHeight);
                Rect rectSizeZ      = new Rect(baRightRect.x + tLabelSize + (tRemainSize * 0.5f), baRightRect.y + singleLineHeight, tRemainSize * 0.5f, singleLineHeight);

                EditorGUIUtility.labelWidth = tLabelSize;
                EditorGUI.LabelField(rectStartLablel, "Start");
                EditorGUI.LabelField(rectSizeLablel, "Size");

                EditorGUIUtility.labelWidth = 15;
                EditorGUI.BeginChangeCheck();
                pStartX = EditorGUI.IntField(rectStartX, startXContent, areaPointer.roundStartX);
                pStartZ = EditorGUI.IntField(rectStartZ, startZContent, areaPointer.roundStartZ);
                pSizeX  = EditorGUI.IntField(rectSizeX, sizeXContent, areaPointer.roundSizeX);
                pSizeZ  = EditorGUI.IntField(rectSizeZ, sizeZContent, areaPointer.roundSizeZ);
                if (EditorGUI.EndChangeCheck())
                {
                    settings.areaPointer = new AreaPointer(pStartX, pStartZ, pStartX + pSizeX, pStartZ + pSizeZ, settings.areaPointer.y);
                }
                EditorGUIUtility.labelWidth = LABEL_WIDTH;

                if (sellectorMove)
                {
                    GUI.Box(new Rect(baLeftRect.x, baLeftRect.y, baLeftRect.width, singleLineHeight), "Move");
                }
                else
                {
                    if (GUI.Button(new Rect(baLeftRect.x, baLeftRect.y, baLeftRect.width, singleLineHeight), "Move"))
                    {
                        sellectorMove = true;
                    }
                }

                if (GUI.Button(new Rect(baLeftRect.x, baLeftRect.y + singleLineHeight, baLeftRect.width, singleLineHeight), "Reset"))
                {
                    settingsDrawer.ResetAreaPointer();
                }


                #endregion

                GUILayout.Space(5);

                //control buttons
                #region control buttons
                Rect things = GUILayoutUtility.GetRect(Screen.width - rightOffset, singleLineHeight * 4);

                Rect left  = new Rect(things.x, things.y, things.width * 0.5f, things.height);
                Rect right = new Rect(things.x + (things.width * 0.5f), things.y, things.width * 0.5f, things.height);

                GUI.Box(left, leftBoxContent);
                GUI.Box(right, rightBoxContent);

                #region navmesh building
                Rect rectBuild = new Rect(left.x, left.y + singleLineHeight, left.width, singleLineHeight);

                if (GUI.Button(rectBuild, buildContent))
                {
                    if (settings.targetProperties != null)
                    {
                        PathFinder.QueueGraph(
                            settings.areaPointer.roundStartX,
                            settings.areaPointer.roundStartZ,
                            settings.targetProperties,
                            settings.areaPointer.roundSizeX,
                            settings.areaPointer.roundSizeZ);
                    }
                    else
                    {
                        Debug.LogWarning(forgotToAddPropertiesWarning);
                    }
                }


                GUIContent targetRemoveContent = settings.removeAndRebuild ? removeAndRebuildContent : removeContent;

                Rect rectRemove       = new Rect(left.x, left.y + (singleLineHeight * 2), left.width - singleLineHeight, singleLineHeight);
                Rect rectRemoveToggle = new Rect(left.x + (left.width - singleLineHeight), left.y + (singleLineHeight * 2), singleLineHeight, singleLineHeight);

                if (GUI.Button(rectRemove, targetRemoveContent))
                {
                    if (settings.targetProperties != null)
                    {
                        PathFinder.RemoveGraph(
                            settings.areaPointer.roundStartX,
                            settings.areaPointer.roundStartZ,
                            settings.targetProperties,
                            settings.areaPointer.roundSizeX,
                            settings.areaPointer.roundSizeZ,
                            settings.removeAndRebuild);
                    }
                    else
                    {
                        Debug.LogWarning(forgotToAddPropertiesWarning);
                    }
                }

                EditorGUI.BeginChangeCheck();
                someBool = GUI.Toggle(rectRemoveToggle, settings.removeAndRebuild, rebuildToggleContent);
                if (EditorGUI.EndChangeCheck())
                {
                    settings.removeAndRebuild = someBool;
                }

                Rect rectClear = new Rect(left.x, left.y + (singleLineHeight * 3), left.width, singleLineHeight);

                if (GUI.Button(rectClear, clearContent))
                {
                    PathFinder.ClearAllWork();
                    Debuger_K.ClearChunksDebug();
                }
                #endregion

                if (GUI.Button(new Rect(right.x, right.y + singleLineHeight, right.width, singleLineHeight), saveContent))
                {
                    PathFinder.SaveCurrentSceneData();
                }
                if (GUI.Button(new Rect(right.x, right.y + (singleLineHeight * 2), right.width, singleLineHeight), loadContent))
                {
                    PathFinder.LoadCurrentSceneData();
                }
                if (GUI.Button(new Rect(right.x, right.y + (singleLineHeight * 3), right.width, singleLineHeight), deleteContent))
                {
                    PathFinder.ClearCurrenSceneData();
                }
                #endregion
            }
        }