示例#1
0
    public override void OnInspectorGUI()
    {
        GUILayout.BeginHorizontal();
        NodeCreator nodeCreator = (NodeCreator)target;
        GUIStyle    redText     = new GUIStyle(GUI.skin.button);

        redText.normal.textColor = lightRed;
        if (GUILayout.Button("Clear Nodes", redText))
        {
            nodeCreator.ClearNodes();
        }
        if (GUILayout.Button("Bake Nodes"))
        {
            nodeCreator.BakeNodes();
        }
        GUILayout.EndHorizontal();

        DrawDefaultInspector();

        EditorGUILayout.Separator();

        int totalNodes = nodeCreator.GetNodesAmount();

        EditorGUILayout.LabelField($"Total Nodes: {totalNodes}");
        GUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Starting Node");
        currentIndexString = EditorGUILayout.TextField(currentIndexString);
        int index;

        if (int.TryParse(currentIndexString, out index))
        {
            currentIndex = index;
        }
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Nodes Amount To Show");
        nodesAmountString = EditorGUILayout.TextField(nodesAmountString);
        int amount;

        if (int.TryParse(nodesAmountString, out amount))
        {
            nodesAmount = amount;
        }
        GUILayout.EndHorizontal();

        showNodes = EditorGUILayout.Foldout(showNodes, "Show Nodes");

        GUIStyle colorText = new GUIStyle(GUI.skin.label);

        if (showNodes)
        {
            int upToNode = (currentIndex + nodesAmount) < totalNodes? (currentIndex + nodesAmount) : totalNodes;
            for (int i = currentIndex; i < upToNode; i++)
            {
                Node currentNode = nodeCreator.GetNode(i);
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField($"Node {i}:");
                EditorGUILayout.PrefixLabel("Highlight:");
                currentNode.highlighted = EditorGUILayout.Toggle(currentNode.highlighted);
                GUILayout.EndHorizontal();
                EditorGUILayout.Vector3Field("Position", currentNode.position);
                GUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Occupied:");
                EditorGUILayout.Toggle(currentNode.occupied);
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                for (int j = 0; j < (int)Directions.Count; j++)
                {
                    colorText.normal.textColor = (currentNode.adjacent[j] >= 0)? lightGreen : lightRed;
                    EditorGUILayout.LabelField(((Directions)j).ToString(), colorText, GUILayout.Width(120));
                }
                GUILayout.EndHorizontal();
                EditorGUILayout.Separator();
            }
        }
    }