示例#1
0
        // Helpers
        private SerializedProperty GetFieldProperty(int index, StateFieldInfo field)
        {
            SerializedProperty serializedField = fields.GetArrayElementAtIndex(index);

            switch (field.fieldType)
            {
            case FieldType.INT:
                return(serializedField.FindPropertyRelative("intValue"));

            case FieldType.FLOAT:
                return(serializedField.FindPropertyRelative("floatValue"));

            case FieldType.STRING:
                return(serializedField.FindPropertyRelative("stringValue"));

            case FieldType.BOOLEAN:
                return(serializedField.FindPropertyRelative("boolValue"));

            case FieldType.VECTOR2:
                return(serializedField.FindPropertyRelative("vector2Value"));

            case FieldType.VECTOR3:
                return(serializedField.FindPropertyRelative("vector3Value"));

            case FieldType.LAYERMASK:
                return(serializedField.FindPropertyRelative("layerMaskValue"));

            case FieldType.UNITY:
                return(serializedField.FindPropertyRelative("unityObjectValue"));

            case FieldType.OBJECT:
                return(serializedField.FindPropertyRelative("objectValue"));
            }

            return(null);
        }
示例#2
0
        private void DrawField(StateFieldInfo info)
        {
            foreach (object attribute in info.info.GetCustomAttributes(true))
            {
                if (attribute is HeaderAttribute header)
                {
                    EditorGUILayout.LabelField(header.header, EditorStyles.boldLabel);
                }
            }

            switch (info.fieldType)
            {
            case FieldType.INT:
                info.intValue = EditorGUILayout.DelayedIntField(info.name, info.intValue);
                break;

            case FieldType.FLOAT:
                info.floatValue = EditorGUILayout.DelayedFloatField(info.name, info.floatValue);
                break;

            case FieldType.STRING:
                info.stringValue = EditorGUILayout.DelayedTextField(info.name, info.stringValue);
                break;

            case FieldType.BOOLEAN:
                info.boolValue = EditorGUILayout.Toggle(info.name, info.boolValue);
                break;

            case FieldType.VECTOR3:
                info.vector3Value = EditorGUILayout.Vector3Field(info.name, info.vector3Value);
                break;

            case FieldType.VECTOR2:
                info.vector2Value = EditorGUILayout.Vector2Field(info.name, info.vector2Value);
                break;

            case FieldType.UNITY:
                info.unityObjectValue = EditorGUILayout.ObjectField(info.name, info.unityObjectValue, typeof(Object), false);
                break;

            case FieldType.LAYERMASK:
                LayerMask tempMask = EditorGUILayout.MaskField(
                    info.name,
                    InternalEditorUtility.LayerMaskToConcatenatedLayersMask(info.layerMaskValue),
                    InternalEditorUtility.layers);

                info.layerMaskValue = InternalEditorUtility.ConcatenatedLayersMaskToLayerMask(tempMask);
                break;

            case FieldType.OBJECT:

                break;

            case FieldType.INVALID:
                string invalidFormat = string.Format("Invalid field type of {0} with the name {1}", info.type, info.name);
                EditorGUILayout.HelpBox(invalidFormat, MessageType.Warning, true);
                break;

            default:
                break;
            }
        }
示例#3
0
        // State GUI
        private void DrawState(StateInfo state)
        {
            if (state == null)
            {
                return;
            }

            stateAsset = EditorUtil.GetAssetFromName(state.name);

            if (stateAsset == null)
            {
                stateAsset = EditorUtil.GetAssetFromName("State");
            }

            EditorGUILayout.Space();

            GUIStyle skin = new GUIStyle(GUI.skin.window)
            {
                padding = new RectOffset(2, 0, 0, 0),
                margin  = new RectOffset(0, 0, 0, 0),
            };

            //Draw all catergories in order for hiearchial type display
            if (stateAsset != null)
            {
                EditorGUILayout.InspectorTitlebar(true, stateAsset, false);
            }

            List <string> names = new List <string> ();

            //Toggle for convenience
            EditorGUI.indentLevel++;
            {
                for (int i = 0; i < state.fields.Count; i++)
                {
                    StateFieldInfo field = state.fields[i];
                    string         name  = field.info.DeclaringType.Name;

                    // Draw based on what the declaring type is
                    if (!names.Contains(name))
                    {
                        bool isScriptName = i == 0;

                        if (!isScriptName)
                        {
                            EditorGUILayout.Space();
                        }

                        if (isScriptName)
                        {
                            EditorGUILayout.BeginHorizontal();
                            {
                                EditorGUILayout.LabelField(name, EditorStyles.boldLabel);
                                EditorGUILayout.ObjectField(stateAsset, typeof(MonoScript), false);
                            }
                            EditorGUILayout.EndHorizontal();
                        }
                        else
                        {
                            EditorGUILayout.LabelField(name, EditorStyles.boldLabel);
                        }

                        names.Add(name);
                    }

                    DrawField(state.fields[i]);
                }

                EditorGUILayout.Space();
            }
            EditorGUI.indentLevel--;

            EditorUtility.SetDirty(Target);
        }