private void GenerateValueObjectClass(string typeName)
        {
            var template = Resources.Load <TextAsset>(templatePath);

            if (template == null)
            {
                DisplayFailure("The wizard could not find the correct class template.");
                return;
            }

            var code = template.text;

            code = ParseTemplate(code, typeName);
            TextAsset createdAsset;

            try
            {
                createdAsset = SodaEditorHelpers.CreateTextFile(code, GenerateFilename(typeName));
            }
            catch (IOException e)
            {
                DisplayFailure(e.Message);
                return;
            }

            Close();

            EditorUtility.DisplayDialog("Success", successMessage, "OK");

            EditorApplication.projectChanged += () => Selection.activeObject = createdAsset;
        }
        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
        {
            var lines = 1;

            var useLocalProperty = property.FindPropertyRelative("useLocal");
            var useLocal         = useLocalProperty.boolValue;

            if (useLocal)
            {
                var localValueProperty = property.FindPropertyRelative("localValue");
                if (localValueProperty.isExpanded)
                {
                    lines = SodaEditorHelpers.GetNumberOfPropertyChildren(localValueProperty) + 1;
                }
            }

            return(lines * (EditorGUIUtility.singleLineHeight + 2));
        }
示例#3
0
        public override void OnInspectorGUI()
        {
            SodaEditorHelpers.DisplayInspectorSubtitle("GameEvent");

            var descriptionProperty     = serializedObject.FindProperty("description");
            var onRaiseGloballyProperty = serializedObject.FindProperty("onRaiseGlobally");

            serializedObject.Update();
            serializedObject.DisplayAllPropertiesExcept(false, descriptionProperty, onRaiseGloballyProperty);

            EditorGUILayout.PropertyField(descriptionProperty);
            GUILayout.Space(16);

            GUI.enabled = !Application.isPlaying;
            EditorGUILayout.PropertyField(onRaiseGloballyProperty);
            GUI.enabled = true;

            DisplayDebugCheckbox();
            serializedObject.ApplyModifiedProperties();

            GUI.enabled = Application.isPlaying;

            GameEvent gameEventTarget = (GameEvent)target;

            if (GUILayout.Button("Raise"))
            {
                gameEventTarget.Raise();
            }

            if (Application.isPlaying)
            {
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Responding Objects");
                if (targets.Length == 1)
                {
                    SodaEventDrawer.DisplayListeners(gameEventTarget.onRaise);
                }
                else
                {
                    EditorGUILayout.HelpBox("Cannot display when multiple GameEvents are selected.", MessageType.Warning);
                }
            }
        }
示例#4
0
        public override void OnInspectorGUI()
        {
            SodaEditorHelpers.DisplayInspectorSubtitle(subtitle);

            var originalValueProperty = serializedObject.FindProperty("originalValue");
            var descriptionProperty   = serializedObject.FindProperty("description");

            serializedObject.Update();

            if (originalValueProperty != null)
            {
                SodaEditorHelpers.DisplayExpandablePropertyField(originalValueProperty);
            }
            else
            {
                EditorGUILayout.HelpBox("The type of the value this GlobalVariable is representing does not seem to be serializable.", MessageType.Error);
            }

            serializedObject.DisplayAllPropertiesExcept(false, originalValueProperty, descriptionProperty);

            EditorGUILayout.PropertyField(descriptionProperty);

            serializedObject.ApplyModifiedProperties();

            if (Application.isPlaying)
            {
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Objects responding to onChangeValue event");
                if (targets.Length == 1)
                {
                    var globalVariableTarget = (GlobalVariableBase)target;
                    SodaEventDrawer.DisplayListeners(globalVariableTarget.GetOnChangeEvent());
                }
                else
                {
                    EditorGUILayout.HelpBox("Cannot display when multiple GlobalVariables are selected.", MessageType.Warning);
                }
            }
        }
示例#5
0
        public override void OnInspectorGUI()
        {
            LazyOnEnable();

            SodaEditorHelpers.DisplayInspectorSubtitle(target.GetType().Name);

            var descriptionProperty = serializedObject.FindProperty("description");

            serializedObject.Update();
            serializedObject.DisplayAllPropertiesExcept(false, descriptionProperty);
            EditorGUILayout.PropertyField(descriptionProperty);
            serializedObject.ApplyModifiedProperties();

            if (Application.isPlaying)
            {
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Monitoring Objects");
                SodaEventDrawer.DisplayListeners(((RuntimeSetBase)target).GetOnElementCountChangeEvent(), this);

                EditorGUILayout.Space();
                DisplayElements();
            }
        }
示例#6
0
        public override void OnInspectorGUI()
        {
            SodaEditorHelpers.DisplayInspectorSubtitle("GameEvent");

            var gameEventBaseTarget = (GameEventBase)target;

            var descriptionProperty          = serializedObject.FindProperty("description");
            var parameterDescriptionProperty = serializedObject.FindProperty("parameterDescription");
            var onRaiseGloballyProperty      = serializedObject.FindProperty("onRaiseGlobally");

            if (onRaiseGloballyProperty == null)
            {
                onRaiseGloballyProperty = serializedObject.FindProperty("_onRaiseGlobally");
            }

            serializedObject.Update();
            if (parameterDescriptionProperty != null)
            {
                serializedObject.DisplayAllPropertiesExcept(false, descriptionProperty, parameterDescriptionProperty, onRaiseGloballyProperty);
            }
            else
            {
                serializedObject.DisplayAllPropertiesExcept(false, descriptionProperty, onRaiseGloballyProperty);
            }

            EditorGUILayout.PropertyField(descriptionProperty);
            if (parameterDescriptionProperty != null)
            {
                EditorGUILayout.PropertyField(parameterDescriptionProperty,
                                              new GUIContent("Parameter Description (" + gameEventBaseTarget.GetParameterType().Name + ")"));
            }
            GUILayout.Space(16);

            GUI.enabled = !Application.isPlaying;
            EditorGUILayout.PropertyField(onRaiseGloballyProperty);
            GUI.enabled = true;

            DisplayDebugCheckbox();
            serializedObject.ApplyModifiedProperties();

            GUI.enabled = Application.isPlaying;

            var gameEventTarget = target as GameEvent;

            if (!gameEventTarget)
            {
                EditorGUILayout.HelpBox("Cannot raise a parameterized GameEvent via inspector.", MessageType.Info);
                GUI.enabled = false;
            }

            if (GUILayout.Button("Raise"))
            {
                gameEventTarget.Raise();
            }
            GUI.enabled = true;

            if (Application.isPlaying)
            {
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Responding Objects", EditorStyles.boldLabel);
                if (targets.Length == 1)
                {
                    var onRaiseWithParameter = GetOnRaiseWithParameterEvent(gameEventBaseTarget);
                    if (onRaiseWithParameter != null)
                    {
                        SodaEventDrawer.DisplayListeners(onRaiseWithParameter);
                        EditorGUILayout.LabelField("Responding Objects (ignoring parameter)", EditorStyles.boldLabel);
                    }
                    SodaEventDrawer.DisplayListeners(gameEventBaseTarget.onRaise);
                }
                else
                {
                    EditorGUILayout.HelpBox("Cannot display when multiple GameEvents are selected.", MessageType.Warning);
                }
            }
        }
示例#7
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            var serializedObject = property.serializedObject;
            var target           = serializedObject.targetObject;

            var diipAttribute = (DisplayInsteadInPlaymodeAttribute)attribute;

            InitializeIfNeeded(target);

            if (Application.isPlaying)
            {
                if (replacementProperty != null || replacementField != null)
                {
                    property.isExpanded = false;

                    var playmodeLabel = new GUIContent(label);
                    if (target is ScriptableObject)
                    {
                        playmodeLabel.image = playmodeIcon;
                        // Tooltips are, by design, not displayed in play mode.

                        /*
                         * var originalTooltip = !string.IsNullOrEmpty(label.tooltip) ? label.tooltip + "\n\n" : "";
                         * playmodeLabel.tooltip = originalTooltip + tooltip;
                         */
                    }

                    if (replacementProperty != null)
                    {
                        playmodeLabel.text = formattedInspectorPropertyName;
                        var value = replacementProperty.GetValue(target, null);
                        SodaEditorHelpers.DisplayValueField(position, playmodeLabel, ref value, replacementProperty.PropertyType);
                        replacementProperty.SetValue(target, value, null);
                    }
                    else
                    {
                        playmodeLabel.text = formattedInspectorPropertyName;
                        var value = replacementField.GetValue(target);
                        SodaEditorHelpers.DisplayValueField(position, playmodeLabel, ref value, replacementField.FieldType);
                        replacementField.SetValue(target, value);
                    }
                }
                else
                {
                    GUI.enabled = false;
                    EditorGUI.PropertyField(position, property, label);
                    GUI.enabled = true;
                }
            }
            else
            {
                var editmodeLabel = new GUIContent(label);
                if (target is ScriptableObject)
                {
                    editmodeLabel.text  = formattedInspectorPropertyName;
                    editmodeLabel.image = playmodeIconOff;
                    var attributeTooltip = !string.IsNullOrEmpty(diipAttribute.tooltip) ? diipAttribute.tooltip + "\n\n" : "";
                    editmodeLabel.tooltip = attributeTooltip + tooltip;
                }
                EditorGUI.PropertyField(position, property, editmodeLabel);
            }
        }