//---------------------------------------------------------------------------------------------- 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(); } }
//--------------------------------------------------------------------------------------------- #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); }
//--------------------------------------------------------------------------------------------- #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); }
//---------------------------------------------------------------------------------------------- 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); }
//---------------------------------------------------------------------------------------------- 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(); }
//---------------------------------------------------------------------------------------------- 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); } }
//---------------------------------------------------------------------------------------------- private void Init() { m_navigationArea = m_navigationArea ?? transform.parent.GetComponent <PolygonCollider2D>(); m_navigator = m_navigator ?? transform.parent.GetComponent <KDNav2D>(); }
//---------------------------------------------------------------------------------------------- private void Init() { m_navigationArea = m_navigationArea ?? transform.parent.GetComponent<PolygonCollider2D>(); m_navigator = m_navigator ?? transform.parent.GetComponent<KDNav2D>(); }