Пример #1
0
    //----------------------------------------------------------------------------------------------

    private void Grid <T>
    (
        KDNav2D a_nav2D,
        Action <T> a_action,
        ref bool a_enabled,
        string a_typeOn,
        string a_typeOff,
        string a_key,
        Color a_color
    ) where T : KD2DArea
    {
        a_enabled = DrawHeader(a_enabled ? a_typeOn : a_typeOff, a_key, a_enabled, a_color);
        if (a_enabled)
        {
            BeginContents();
            if (a_nav2D.Areas.Exists(o => o.GetComponent <KD2DArea>() is T))
            {
                DrawNavigatorAreaGrid <T>(a_nav2D, a_action);
            }
            else
            {
                GUILayout.Label
                (
                    "Not Areas added yet",
                    GUILayout.ExpandWidth(true),
                    GUILayout.Height(50)
                );
            }
            EndContents();
        }
    }
Пример #2
0
    //---------------------------------------------------------------------------------------------

    #endregion //Properties

    #region "Monobehaviour"

    private void Start()
    {
#if UNITY_EDITOR
        _color = Color.red;
#endif
        m_nav2D = FindObjectsOfType<KDNav2D>().First();
        StartCurrentState(Wait, KDAgentStates.Waiting, null);
        NearestTile = m_nav2D.NearestNodeToPosition(transform.position);
    }
Пример #3
0
    //---------------------------------------------------------------------------------------------

    #endregion //Properties

    #region "Monobehaviour"

    private void Start()
    {
#if UNITY_EDITOR
        _color = Color.red;
#endif
        m_nav2D = FindObjectsOfType <KDNav2D>().First();
        StartCurrentState(Wait, KDAgentStates.Waiting, null);
        NearestTile = m_nav2D.NearestNodeToPosition(transform.position);
    }
Пример #4
0
    //----------------------------------------------------------------------------------------------

    private static void Properties(KDNav2D a_navigator)
    {
        int falseNavigatorIndex = string.IsNullOrEmpty(a_navigator.TileLayerName) ?
                                  0 : InternalEditorUtility.layers.ToList().IndexOf(a_navigator.TileLayerName);

        a_navigator.TileLayerIndex = EditorGUILayout.Popup
                                     (
            "Layer Tiles",
            falseNavigatorIndex,
            InternalEditorUtility.layers.Where
            (
                a_layer => a_layer != LayerMask.LayerToName(a_navigator.gameObject.layer)
            ).ToArray()
                                     );

        a_navigator.TileLayerName  = InternalEditorUtility.layers[a_navigator.TileLayerIndex];
        a_navigator.TileLayerIndex = LayerMask.NameToLayer(a_navigator.TileLayerName);

        a_navigator.Resolution = 1 / EditorGUILayout.Slider
                                 (
            "Flood Resolution",
            1 / a_navigator.Resolution,
            1 / KDPathFinder.MAX_SIZE,
            1 / KDPathFinder.MIN_SIZE
                                 );

        a_navigator.SeparationFactor = EditorGUILayout.Slider
                                       (
            "Tile Separation",
            a_navigator.SeparationFactor,
            KDPathFinder.MIN_SEPARATION,
            KDPathFinder.MAX_SEPARATION
                                       );

        a_navigator.Seed = (GameObject)EditorGUILayout.ObjectField
                           (
            "The Seed",
            a_navigator.Seed,
            typeof(GameObject),
            true
                           );

        a_navigator.RepathAfterTile = EditorGUILayout.Toggle
                                      (
            "Path After Step",
            a_navigator.RepathAfterTile
                                      );

        a_navigator.Areas.RemoveAll(a_obstacle => a_obstacle == null);
    }
Пример #5
0
    //----------------------------------------------------------------------------------------------

    private static void MainButtons(KDNav2D a_navigator)
    {
        GUILayout.BeginHorizontal("", GUILayout.Height(25));
        {
            GUILayout.Label("A* Seed");
            if (GUILayout.Button("Adjust/Move", EditorStyles.miniButton))
            {
                a_navigator.Remove();
                Selection.objects = new Object[] { a_navigator.Seed };
            }
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal("", GUILayout.Height(25));
        {
            GUILayout.Label("Navigation");
            if (GUILayout.Button("Bake", EditorStyles.miniButtonLeft))
            {
                int desnity = a_navigator.Bake();
                Debug.Log("Baked Finished with " + desnity + " nodes");
                Selection.objects = new Object[] { null };
            }

            if (GUILayout.Button("Clear", EditorStyles.miniButtonRight))
            {
                a_navigator.Remove();
            }
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal("", GUILayout.Height(25));
        {
            GUILayout.Label("Add");

            if (GUILayout.Button("Obstacle", EditorStyles.miniButtonLeft))
            {
                a_navigator.AddArea <KD2DObstacle>("Obstacle 2D");
            }

            if (GUILayout.Button("Penalty Zone", EditorStyles.miniButtonRight))
            {
                a_navigator.AddArea <KD2DZone>("Zone 2D");
            }
        }
        GUILayout.EndHorizontal();
    }
Пример #6
0
    //----------------------------------------------------------------------------------------------

    protected void DrawNavigatorAreaGrid <T>
    (
        KDNav2D a_nav2D,
        Action <T> a_action
    ) where T : KD2DArea
    {
        GUILayout.Space(10f);
        GameObject removed = null;

        var typeAreas = a_nav2D.Areas.Where
                        (
            o => o.GetComponent <KD2DArea>() is T
                        ).ToArray();

        var i = 0;

        foreach (var obstacle in typeAreas)
        {
            var obstacleComponent = obstacle.GetComponent <T>();
            GUILayout.BeginHorizontal();
            {
                obstacleComponent.LinkedObject = (GameObject)EditorGUILayout.ObjectField
                                                 (
                    "Linked To",
                    obstacleComponent.LinkedObject,
                    typeof(GameObject),
                    true
                                                 );
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal("", GUILayout.Height(25));
            {
                if (a_action != null)
                {
                    a_action(obstacleComponent);
                }

                if (GUILayout.Button("Edit", EditorStyles.miniButtonLeft))
                {
                    Selection.objects = new Object[] { obstacle }
                }
                ;

                if (obstacleComponent.LinkedObject != null &&
                    GUILayout.Button("Select Linked", EditorStyles.miniButtonMid))
                {
                    Selection.objects = new Object[] { obstacleComponent.LinkedObject };
                }

                if (GUILayout.Button("Delete", EditorStyles.miniButtonRight))
                {
                    removed = obstacle.gameObject;
                }
            }
            GUILayout.EndHorizontal();

            if (i++ < typeAreas.Length - 1)
            {
                GuiLine();
            }
        }

        if (removed)
        {
            a_nav2D.Areas.Remove(removed);
            Undo.DestroyObjectImmediate(removed);
        }
    }
Пример #7
0
    //----------------------------------------------------------------------------------------------

    private void Init()
    {
        m_navigationArea = m_navigationArea ?? transform.parent.GetComponent <PolygonCollider2D>();
        m_navigator      = m_navigator ?? transform.parent.GetComponent <KDNav2D>();
    }
Пример #8
0
    //----------------------------------------------------------------------------------------------

    private void Init()
    {
        m_navigationArea = m_navigationArea ?? transform.parent.GetComponent<PolygonCollider2D>();
        m_navigator = m_navigator ?? transform.parent.GetComponent<KDNav2D>();
    }