Exemplo n.º 1
0
        public override void OnInspectorGUI()
        {
            if (!Event.current.IsUseful())
            {
                return;
            }
            EditorUI.Reset();
            Events.Add("On Components Changed", DataBehaviourEditor.CheckDependents);
            Events.Add("On Attributes Ready", DataBehaviourEditor.CheckDependents);
            var    target         = DataBehaviourEditor.current = (DataBehaviour)this.target;
            bool   targetsMissing = false;
            string message        = "";

            foreach (var warning in target.warnings)
            {
                warning.DrawHelp("Warning");
            }
            foreach (var dependent in target.dependents)
            {
                if (dependent.exists)
                {
                    continue;
                }
                if (!target.IsEnabled())
                {
                    break;
                }
                message = dependent.message;
                if (dependent.target.IsNull() && (dependent.dynamicTarget.IsNull() || dependent.dynamicTarget.Call <GameObject>("Get").IsNull()))
                {
                    targetsMissing = true;
                    continue;
                }
                if (!dependent.target.IsNull() || (!dependent.dynamicTarget.IsNull() && !dependent.dynamicTarget.Call <GameObject>("Get").IsNull()))
                {
                    string targetName = dependent.dynamicTarget.IsNull() ? dependent.target.name : dependent.dynamicTarget.Call <GameObject>("Get").name;
                    if (!dependent.scriptName.IsEmpty())
                    {
                        targetName = dependent.scriptName;
                    }
                    message = message.Replace("[target]", targetName);
                }
                if (!dependent.types.IsNull())
                {
                    string names = "";
                    foreach (var type in dependent.types)
                    {
                        names += type.Name + " or ";
                    }
                    message = message.Replace("[type]", names.Trim(" or "));
                }
                if (!Application.isPlaying)
                {
                    GUI.enabled = !dependent.processing;
                    message.DrawHelp("Warning");
                    GUI.enabled = true;
                    if (!dependent.processing)
                    {
                        Rect area = GUILayoutUtility.GetLastRect();
                        EditorGUIUtility.AddCursorRect(area, MouseCursor.Link);
                        if (area.Clicked(0) && dependent.method != null)
                        {
                            dependent.method();
                        }
                    }
                    Call.Delay(this.Repaint, 0.25f);
                }
            }
            if (!Application.isPlaying && targetsMissing)
            {
                message = "One or more target fields are missing.";
                message.DrawHelp("Warning");
            }
            base.OnInspectorGUI();
        }
Exemplo n.º 2
0
 static bool HasExpression(DataBehaviour m)
 => !string.IsNullOrEmpty(m.Expression);