Exemple #1
0
    public override void OnInspectorGUI()
    {
        NodeGrid grid = (NodeGrid)target;

        if (!init)
        {
            width  = grid.Width;
            height = grid.Height;
        }


        grid.NodePrefab                 = EditorGUILayout.ObjectField("Node Prefab", grid.NodePrefab, typeof(GameObject), false) as GameObject;
        grid.PathBaseMaterial           = EditorGUILayout.ObjectField("Base Material", grid.PathBaseMaterial, typeof(Material), false) as Material;
        grid.PathNotTraversableMaterial = EditorGUILayout.ObjectField("Not Traversable Material", grid.PathNotTraversableMaterial, typeof(Material), false) as Material;
        grid.PathCheckedMaterial        = EditorGUILayout.ObjectField("Checked Material", grid.PathCheckedMaterial, typeof(Material), false) as Material;
        grid.PathGoalMaterial           = EditorGUILayout.ObjectField("Goal Material", grid.PathGoalMaterial, typeof(Material), false) as Material;
        grid.PathFinalMaterial          = EditorGUILayout.ObjectField("Final Path Material", grid.PathFinalMaterial, typeof(Material), false) as Material;
        grid.PathStartMaterial          = EditorGUILayout.ObjectField("Start Material", grid.PathStartMaterial, typeof(Material), false) as Material;
        width  = Mathf.Max(EditorGUILayout.DelayedIntField("X Dimension:", width), 1);
        height = Mathf.Max(EditorGUILayout.DelayedIntField("Y Dimension:", height), 1);

        if (width != grid.Width || height != grid.Height)
        {
            grid.AlterSize(width, height);

            EditorUtility.SetDirty(target);
        }

        EditorGUILayout.BeginHorizontal();
        {
            grid.StartX = EditorGUILayout.IntField("Start Node:", grid.StartX);
            grid.StartY = EditorGUILayout.IntField(grid.StartY);
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        {
            grid.EndX = EditorGUILayout.IntField("End Node:", grid.EndX);
            grid.EndY = EditorGUILayout.IntField(grid.EndY);
        }
        EditorGUILayout.EndHorizontal();

        // Draw all the traversability check boxes
        traversabilityPosition = EditorGUILayout.BeginScrollView(traversabilityPosition);
        {
            EditorGUILayout.LabelField("Traversability");
            EditorGUILayout.BeginVertical();
            {
                for (int i = 0; i < grid.Height; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    {
                        for (int j = 0; j < grid.Width; j++)
                        {
                            grid.GetNode(j, i).Traversable = EditorGUILayout.Toggle(grid.GetNode(j, i).Traversable);
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
            }
            EditorGUILayout.EndVertical();
        }
        EditorGUILayout.EndScrollView();

        // Draw all the text boxes for travel cost
        travelCostPosition = EditorGUILayout.BeginScrollView(travelCostPosition);
        {
            EditorGUILayout.LabelField("Travel Cost");
            EditorGUILayout.BeginVertical();
            {
                for (int i = 0; i < grid.Height; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    {
                        for (int j = 0; j < grid.Width; j++)
                        {
                            if (grid.GetNode(j, i).Traversable)
                            {
                                grid.GetNode(j, i).TravelCost = EditorGUILayout.IntField(grid.GetNode(j, i).TravelCost);
                            }
                            else
                            {
                                GUI.enabled = false;
                                grid.GetNode(j, i).TravelCost = EditorGUILayout.IntField(grid.GetNode(j, i).TravelCost);
                                GUI.enabled = true;
                            }
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
            }
            EditorGUILayout.EndVertical();
        }
        EditorGUILayout.EndScrollView();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }