예제 #1
0
    private void DrawDictionary(string title, ref string[] keys, Action <int> setArrayLengths, Action <int> drawArrayValueForIndex)
    {
        GUILayout.BeginHorizontal();
        GUILayout.Label(title);

        int newLength = keys.Length;

        if (GUILayout.Button("Add", GUILayout.Width(80)))
        {
            newLength++;
        }
        if (keys.Length > 0 && GUILayout.Button("Remove", GUILayout.Width(80)))
        {
            newLength--;
        }

        GUILayout.EndHorizontal();

        if (newLength != keys.Length)
        {
            EditorGUIUtils.SetArrayLength(ref keys, newLength);
            setArrayLengths(newLength);
        }

        for (int i = 0; i < keys.Length; i++)
        {
            GUILayout.BeginVertical(GUI.skin.box);
            EditorGUI.indentLevel++;
            {
                if (keys[i] == null)
                {
                    keys[i] = string.Empty;
                }

                string key = keys[i];
                if (!showState.ContainsKey(key))
                {
                    showState[key] = true;
                }

                showState[key] = EditorGUILayout.Foldout(showState[key], key);
                if (showState[key])
                {
                    drawArrayValueForIndex(i);
                }
            }
            EditorGUI.indentLevel--;
            GUILayout.EndVertical();
        }
    }
예제 #2
0
    public override void OnInspectorGUI()
    {
        EditorGUILayout.PropertyField(serializedObject.FindProperty("OverrideInitEnabled"));
        if (worldObject.OverrideInitEnabled)
        {
            this.DrawPropertySection("Initial Enabled Overrides", ref showInitiallyEnabled, "OnInitialState", "OnInitiallyEnabled", "OnInitiallyDisabled");
        }
        this.DrawPropertySection("Enabled", ref showEnabled, "OnEnabledChanged", "OnEnabled", "OnDisabled");
        EditorGUILayout.PropertyField(serializedObject.FindProperty("OverrideInitOperating"));
        if (worldObject.OverrideInitOperating)
        {
            this.DrawPropertySection("Initial Operating Overrides", ref showInitiallyEnabled, "OnInitialOperatingState", "OnInitiallyEnabledOperating", "OnInitiallyDisabledOperating");
        }
        this.DrawPropertySection("Operating", ref showOperating, "OnOperatingChanged", "OnEnableOperating", "OnDisableOperating");
        this.DrawPropertySection("Using", ref showUsing, "OnUsingChanged", "OnEnableUsing", "OnDisableUsing");

        #region State Toggle Events
        this.DrawDictionary(
            "Boolean State Events",
            ref worldObject.States,
            (int newLength) =>
        {
            EditorGUIUtils.SetArrayLength(ref worldObject.States, newLength);
            EditorGUIUtils.SetArrayLength(ref worldObject.OnStateChangedEvents, newLength);
            EditorGUIUtils.SetArrayLength(ref worldObject.OnStateEnabledEvents, newLength);
            EditorGUIUtils.SetArrayLength(ref worldObject.OnStateDisabledEvents, newLength);
        },
            (int i) =>
        {
            DrawArrayElement("Event Name", "States", i);
            DrawArrayElement("Changed", "OnStateChangedEvents", i);
            DrawArrayElement("Enabled", "OnStateEnabledEvents", i);
            DrawArrayElement("Disabled", "OnStateDisabledEvents", i);
        });
        #endregion

        #region String State Events
        this.DrawDictionary(
            "String State Events",
            ref worldObject.StringStates,
            (int newLength) =>
        {
            EditorGUIUtils.SetArrayLength(ref worldObject.StringStates, newLength);
            EditorGUIUtils.SetArrayLength(ref worldObject.OnStringStateChanged, newLength);
        },
            (int i) =>
        {
            DrawArrayElement("Event Name", "StringStates", i);
            DrawArrayElement("Handler", "OnStringStateChanged", i);
        });
        #endregion

        #region Float State Events
        this.DrawDictionary(
            "Float State Events",
            ref worldObject.FloatStates,
            (int newLength) =>
        {
            EditorGUIUtils.SetArrayLength(ref worldObject.FloatStates, newLength);
            EditorGUIUtils.SetArrayLength(ref worldObject.OnFloatStateChanged, newLength);
        },
            (int i) =>
        {
            DrawArrayElement("Event Name", "FloatStates", i);
            DrawArrayElement("Handler", "OnFloatStateChanged", i);
        });
        #endregion

        #region One Off Events
        this.DrawDictionary(
            "Stateless Events",
            ref worldObject.Events,
            (int newLength) =>
        {
            EditorGUIUtils.SetArrayLength(ref worldObject.Events, newLength);
            EditorGUIUtils.SetArrayLength(ref worldObject.EventHandlers, newLength);
        },
            (int i) =>
        {
            DrawArrayElement("Event Name", "Events", i);
            DrawArrayElement("Handler", "EventHandlers", i);
        });
        #endregion

        worldObject.interactable = EditorGUILayout.Toggle("Interactable", worldObject.interactable);

        if (worldObject.hasOccupancy = EditorGUILayout.Toggle("Has Occupancy", worldObject.hasOccupancy))
        {
            worldObject.occupancyOffset = EditorGUILayout.Vector3Field("Occupancy Offset", worldObject.occupancyOffset);
            if (worldObject.overrideOccupancy = EditorGUILayout.Toggle("Override Occupancy", worldObject.overrideOccupancy))
            {
                worldObject.size = EditorGUILayout.Vector3Field("Override Size", worldObject.size);
            }
        }

#if ECO_DEV
        ShowInternalDebugTools();
#else
        Shader.EnableKeyword("NO_CURVE"); // mod kit doesn't have curve helper
#endif


        serializedObject.ApplyModifiedProperties();
    }