public SynchronizedVariable(VariableSynchronizer.SynchronizationType synchronizationType, bool setVariable, Behavior behavior, string variableName, bool global, Component targetComponent, string targetName, bool targetGlobal)
 {
     this.synchronizationType = synchronizationType;
     this.setVariable         = setVariable;
     this.behavior            = behavior;
     this.variableName        = variableName;
     this.global          = global;
     this.targetComponent = targetComponent;
     this.targetName      = targetName;
     this.targetGlobal    = targetGlobal;
 }
        public override void OnInspectorGUI()
        {
            VariableSynchronizer variableSynchronizer = this.target as VariableSynchronizer;

            if (variableSynchronizer == null)
            {
                return;
            }
            GUILayout.Space(5f);
            variableSynchronizer.UpdateInterval = (UpdateIntervalType)EditorGUILayout.EnumPopup("Update Interval", variableSynchronizer.UpdateInterval, new GUILayoutOption[0]);
            if (variableSynchronizer.UpdateInterval == UpdateIntervalType.SpecifySeconds)
            {
                variableSynchronizer.UpdateIntervalSeconds = EditorGUILayout.FloatField("Seconds", variableSynchronizer.UpdateIntervalSeconds, new GUILayoutOption[0]);
            }
            GUILayout.Space(5f);
            GUI.enabled = (!Application.isPlaying);
            this.DrawSharedVariableSynchronizer(this.sharedVariableSynchronizer, null);
            if (string.IsNullOrEmpty(this.sharedVariableSynchronizer.targetName))
            {
                this.DrawSynchronizedVariables(variableSynchronizer);
                return;
            }
            EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
            EditorGUILayout.LabelField("Direction", new GUILayoutOption[]
            {
                GUILayout.MaxWidth(146f)
            });
            if (GUILayout.Button(BehaviorDesignerUtility.LoadTexture((!this.setVariable) ? "RightArrowButton.png" : "LeftArrowButton.png", true, this), BehaviorDesignerUtility.ButtonGUIStyle, new GUILayoutOption[]
            {
                GUILayout.Width(22f)
            }))
            {
                this.setVariable = !this.setVariable;
            }
            EditorGUILayout.EndHorizontal();
            EditorGUI.BeginChangeCheck();
            this.synchronizationType = (VariableSynchronizer.SynchronizationType)EditorGUILayout.EnumPopup("Type", this.synchronizationType, new GUILayoutOption[0]);
            if (EditorGUI.EndChangeCheck())
            {
                this.targetSynchronizer = new VariableSynchronizerInspector.Synchronizer();
            }
            if (this.targetSynchronizer == null)
            {
                this.targetSynchronizer = new VariableSynchronizerInspector.Synchronizer();
            }
            if (this.sharedVariableValueType == null && !string.IsNullOrEmpty(this.sharedVariableValueTypeName))
            {
                this.sharedVariableValueType = TaskUtility.GetTypeWithinAssembly(this.sharedVariableValueTypeName);
            }
            switch (this.synchronizationType)
            {
            case VariableSynchronizer.SynchronizationType.BehaviorDesigner:
                this.DrawSharedVariableSynchronizer(this.targetSynchronizer, this.sharedVariableValueType);
                break;

            case VariableSynchronizer.SynchronizationType.Property:
                this.DrawPropertySynchronizer(this.targetSynchronizer, this.sharedVariableValueType);
                break;

            case VariableSynchronizer.SynchronizationType.Animator:
                this.DrawAnimatorSynchronizer(this.targetSynchronizer);
                break;

            case VariableSynchronizer.SynchronizationType.PlayMaker:
                this.DrawPlayMakerSynchronizer(this.targetSynchronizer, this.sharedVariableValueType);
                break;

            case VariableSynchronizer.SynchronizationType.uFrame:
                this.DrawuFrameSynchronizer(this.targetSynchronizer, this.sharedVariableValueType);
                break;
            }
            if (string.IsNullOrEmpty(this.targetSynchronizer.targetName))
            {
                GUI.enabled = (false);
            }
            if (GUILayout.Button("Add", new GUILayoutOption[0]))
            {
                VariableSynchronizer.SynchronizedVariable item = new VariableSynchronizer.SynchronizedVariable(this.synchronizationType, this.setVariable, this.sharedVariableSynchronizer.component as Behavior, this.sharedVariableSynchronizer.targetName, this.sharedVariableSynchronizer.global, this.targetSynchronizer.component, this.targetSynchronizer.targetName, this.targetSynchronizer.global);
                variableSynchronizer.SynchronizedVariables.Add(item);
                EditorUtility.SetDirty(variableSynchronizer);
                this.sharedVariableSynchronizer = new VariableSynchronizerInspector.Synchronizer();
                this.targetSynchronizer         = new VariableSynchronizerInspector.Synchronizer();
            }
            GUI.enabled = (true);
            this.DrawSynchronizedVariables(variableSynchronizer);
        }