public override void OnInspectorGUI()
    {
        var evt = (iTweenEvent)target;

        values = evt.Values;
        var keys = values.Keys.ToArray();

        foreach (var key in keys)
        {
            propertiesEnabled[key] = true;
            if (typeof(Vector3OrTransform) == EventParamMappings.mappings[evt.type][key])
            {
                var val = new Vector3OrTransform();

                if (null == values[key] || typeof(Transform) == values[key].GetType())
                {
                    if (null == values[key])
                    {
                        val.transform = null;
                    }
                    else
                    {
                        val.transform = (Transform)values[key];
                    }
                    val.selected = Vector3OrTransform.transformSelected;
                }
                else if (typeof(Vector3) == values[key].GetType())
                {
                    val.vector   = (Vector3)values[key];
                    val.selected = Vector3OrTransform.vector3Selected;
                }

                values[key] = val;
            }
            if (typeof(Vector3OrTransformArray) == EventParamMappings.mappings[evt.type][key])
            {
                var val = new Vector3OrTransformArray();

                if (null == values[key] || typeof(Transform[]) == values[key].GetType())
                {
                    if (null == values[key])
                    {
                        val.transformArray = null;
                    }
                    else
                    {
                        val.transformArray = (Transform[])values[key];
                    }
                    val.selected = Vector3OrTransformArray.transformSelected;
                }
                else if (typeof(Vector3[]) == values[key].GetType())
                {
                    val.vectorArray = (Vector3[])values[key];
                    val.selected    = Vector3OrTransformArray.vector3Selected;
                }
                else if (typeof(string) == values[key].GetType())
                {
                    val.pathName = (string)values[key];
                    val.selected = Vector3OrTransformArray.iTweenPathSelected;
                }

                values[key] = val;
            }
        }

        GUILayout.Label(string.Format("iTween Event Editor v{0}", iTweenEvent.VERSION));
        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Name");
        evt.tweenName = EditorGUILayout.TextField(evt.tweenName);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        evt.showIconInInspector = GUILayout.Toggle(evt.showIconInInspector, " Show Icon In Scene");
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        evt.playAutomatically = GUILayout.Toggle(evt.playAutomatically, " Play Automatically");
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Initial Start Delay (delay begins once the iTweenEvent is played)");
        evt.delay = EditorGUILayout.FloatField(evt.delay);
        GUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Event Type");
        evt.type = (iTweenEvent.TweenType)EditorGUILayout.EnumPopup(evt.type);
        GUILayout.EndHorizontal();

        if (evt.type != previousType)
        {
            foreach (var key in EventParamMappings.mappings[evt.type].Keys)
            {
                propertiesEnabled[key] = false;
            }
            evt.Values   = new Dictionary <string, object>();
            previousType = evt.type;
            return;
        }

        var properties = EventParamMappings.mappings[evt.type];

        foreach (var pair in properties)
        {
            var key = pair.Key;

            GUILayout.BeginHorizontal();

            if (EditorGUILayout.BeginToggleGroup(key, propertiesEnabled[key]))
            {
                propertiesEnabled[key] = true;

                GUILayout.BeginVertical();

                if (typeof(string) == pair.Value)
                {
                    values[key] = EditorGUILayout.TextField(values.ContainsKey(key) ? (string)values[key] : "");
                }
                else if (typeof(float) == pair.Value)
                {
                    values[key] = EditorGUILayout.FloatField(values.ContainsKey(key) ? (float)values[key] : 0);
                }
                else if (typeof(int) == pair.Value)
                {
                    values[key] = EditorGUILayout.IntField(values.ContainsKey(key) ? (int)values[key] : 0);
                }
                else if (typeof(bool) == pair.Value)
                {
                    GUILayout.BeginHorizontal();
                    var currentValueString = (values.ContainsKey(key) ? (bool)values[key] : false).ToString();
                    currentValueString = currentValueString.Substring(0, 1).ToUpper() + currentValueString.Substring(1);
                    var index = EditorGUILayout.Popup(trueFalseOptions.IndexOf(currentValueString), trueFalseOptions.ToArray());
                    GUILayout.EndHorizontal();
                    values[key] = bool.Parse(trueFalseOptions[index]);
                }
                else if (typeof(GameObject) == pair.Value)
                {
                    values[key] = EditorGUILayout.ObjectField(values.ContainsKey(key) ? (GameObject)values[key] : null, typeof(GameObject), true);
                }
                else if (typeof(Vector3) == pair.Value)
                {
                    values[key] = EditorGUILayout.Vector3Field("", values.ContainsKey(key) ? (Vector3)values[key] : Vector3.zero);
                }
                else if (typeof(Vector3OrTransform) == pair.Value)
                {
                    if (!values.ContainsKey(key))
                    {
                        values[key] = new Vector3OrTransform();
                    }
                    var val = (Vector3OrTransform)values[key];

                    val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransform.choices, 2);

                    if (Vector3OrTransform.vector3Selected == val.selected)
                    {
                        val.vector = EditorGUILayout.Vector3Field("", val.vector);
                    }
                    else
                    {
                        val.transform = (Transform)EditorGUILayout.ObjectField(val.transform, typeof(Transform), true);
                    }
                    values[key] = val;
                }
                else if (typeof(Vector3OrTransformArray) == pair.Value)
                {
                    if (!values.ContainsKey(key))
                    {
                        values[key] = new Vector3OrTransformArray();
                    }
                    var val = (Vector3OrTransformArray)values[key];
                    val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransformArray.choices, Vector3OrTransformArray.choices.Length);

                    if (Vector3OrTransformArray.vector3Selected == val.selected)
                    {
                        if (null == val.vectorArray)
                        {
                            val.vectorArray = new Vector3[0];
                        }
                        var elements = val.vectorArray.Length;
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Number of points");
                        elements = EditorGUILayout.IntField(elements);
                        GUILayout.EndHorizontal();
                        if (elements != val.vectorArray.Length)
                        {
                            var resizedArray = new Vector3[elements];
                            val.vectorArray.CopyTo(resizedArray, 0);
                            val.vectorArray = resizedArray;
                        }
                        for (var i = 0; i < val.vectorArray.Length; ++i)
                        {
                            val.vectorArray[i] = EditorGUILayout.Vector3Field("", val.vectorArray[i]);
                        }
                    }
                    else if (Vector3OrTransformArray.transformSelected == val.selected)
                    {
                        if (null == val.transformArray)
                        {
                            val.transformArray = new Transform[0];
                        }
                        var elements = val.transformArray.Length;
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Number of points");
                        elements = EditorGUILayout.IntField(elements);
                        GUILayout.EndHorizontal();
                        if (elements != val.transformArray.Length)
                        {
                            var resizedArray = new Transform[elements];
                            val.transformArray.CopyTo(resizedArray, 0);
                            val.transformArray = resizedArray;
                        }
                        for (var i = 0; i < val.transformArray.Length; ++i)
                        {
                            val.transformArray[i] = (Transform)EditorGUILayout.ObjectField(val.transformArray[i], typeof(Transform), true);
                        }
                    }
                    else if (Vector3OrTransformArray.iTweenPathSelected == val.selected)
                    {
                        var index = 0;
                        var paths = (GameObject.FindObjectsOfType(typeof(iTweenPath)) as iTweenPath[]);
                        if (0 == paths.Length)
                        {
                            val.pathName = "";
                            GUILayout.Label("No paths are defined");
                        }
                        else
                        {
                            for (var i = 0; i < paths.Length; ++i)
                            {
                                if (paths[i].pathName == val.pathName)
                                {
                                    index = i;
                                }
                            }
                            index = EditorGUILayout.Popup(index, (GameObject.FindObjectsOfType(typeof(iTweenPath)) as iTweenPath[]).Select(path => path.pathName).ToArray());

                            val.pathName = paths[index].pathName;
                        }
                    }
                    values[key] = val;
                }
                else if (typeof(iTween.LoopType) == pair.Value)
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.LoopType)values[key] : iTween.LoopType.none);
                }
                else if (typeof(iTween.EaseType) == pair.Value)
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.EaseType)values[key] : iTween.EaseType.linear);
                }
                else if (typeof(iTween.NumberFormat) == pair.Value) //------omid-------
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.NumberFormat)values[key] : iTween.NumberFormat.Simple);
                }
                else if (typeof(AudioSource) == pair.Value)
                {
                    values[key] = (AudioSource)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (AudioSource)values[key] : null, typeof(AudioSource), true);
                }
                else if (typeof(AudioClip) == pair.Value)
                {
                    values[key] = (AudioClip)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (AudioClip)values[key] : null, typeof(AudioClip), true);
                }
                else if (typeof(Text) == pair.Value) //-----omid------
                {
                    values[key] = (Text)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (Text)values[key] : null, typeof(Text), true);
                }
                else if (typeof(Color) == pair.Value)
                {
                    values[key] = EditorGUILayout.ColorField(values.ContainsKey(key) ? (Color)values[key] : Color.white);
                }
                else if (typeof(Space) == pair.Value)
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (Space)values[key] : Space.Self);
                }

                GUILayout.EndVertical();
            }
            else
            {
                propertiesEnabled[key] = false;
                values.Remove(key);
            }

            EditorGUILayout.EndToggleGroup();
            GUILayout.EndHorizontal();
            EditorGUILayout.Separator();
        }

        keys = values.Keys.ToArray();

        foreach (var key in keys)
        {
            if (values[key] != null && values[key].GetType() == typeof(Vector3OrTransform))
            {
                var val = (Vector3OrTransform)values[key];
                if (Vector3OrTransform.vector3Selected == val.selected)
                {
                    values[key] = val.vector;
                }
                else
                {
                    values[key] = val.transform;
                }
            }
            else if (values[key] != null && values[key].GetType() == typeof(Vector3OrTransformArray))
            {
                var val = (Vector3OrTransformArray)values[key];
                if (Vector3OrTransformArray.vector3Selected == val.selected)
                {
                    values[key] = val.vectorArray;
                }
                else if (Vector3OrTransformArray.transformSelected == val.selected)
                {
                    values[key] = val.transformArray;
                }
                else if (Vector3OrTransformArray.iTweenPathSelected == val.selected)
                {
                    values[key] = val.pathName;
                }
            }
        }

        evt.Values   = values;
        previousType = evt.type;
    }
Esempio n. 2
0
    private void DrawDataInspector(iTweenData data)
    {
        this.mInspectorScrollPos = GUILayout.BeginScrollView(this.mInspectorScrollPos);

        var evt = data;

        if (data.type == iTweenData.TweenType.MoveTo)
        {
            if (!data.Values.ContainsKey("islocal"))
            {
                data.Values["islocal"] = true;
            }
        }
        mModifyValues = evt.Values;
        var keys = mModifyValues.Keys.ToArray();

        foreach (var key in keys)
        {
            if (typeof(Vector3OrTransform) == EventParamMappings.mappings[evt.type][key])
            {
                var val = new Vector3OrTransform();

                if (null == mModifyValues[key] || typeof(Transform) == mModifyValues[key].GetType())
                {
                    if (null == mModifyValues[key])
                    {
                        val.transform = null;
                    }
                    else
                    {
                        val.transform = (Transform)mModifyValues[key];
                    }
                    val.selected = Vector3OrTransform.transformSelected;
                }
                else if (typeof(Vector3) == mModifyValues[key].GetType())
                {
                    val.vector   = (Vector3)mModifyValues[key];
                    val.selected = Vector3OrTransform.vector3Selected;
                }

                mModifyValues[key] = val;
            }
            if (typeof(Vector3OrTransformArray) == EventParamMappings.mappings[evt.type][key])
            {
                var val = new Vector3OrTransformArray();

                if (null == mModifyValues[key] || typeof(Transform[]) == mModifyValues[key].GetType())
                {
                    if (null == mModifyValues[key])
                    {
                        val.transformArray = null;
                    }
                    else
                    {
                        val.transformArray = (Transform[])mModifyValues[key];
                    }
                    val.selected = Vector3OrTransformArray.transformSelected;
                }
                else if (typeof(Vector3[]) == mModifyValues[key].GetType())
                {
                    val.vectorArray = (Vector3[])mModifyValues[key];
                    val.selected    = Vector3OrTransformArray.vector3Selected;
                }
                else if (typeof(string) == mModifyValues[key].GetType())
                {
                    val.pathName = (string)mModifyValues[key];
                    val.selected = Vector3OrTransformArray.iTweenPathSelected;
                }

                mModifyValues[key] = val;
            }
        }


        GUILayout.BeginHorizontal();
        GUILayout.Label("Name(全是小写)");
        var name = EditorGUILayout.TextField(evt.tweenName);

        evt.tweenName = name.ToLower();
        GUILayout.EndHorizontal();



        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Event Type");
        var prevType = evt.type;

        evt.type = (iTweenData.TweenType)EditorGUILayout.EnumPopup(evt.type);
        if (prevType != evt.type)
        {
            evt.Values.Clear();
        }
        GUILayout.EndHorizontal();

        var properties = EventParamMappings.mappings[evt.type];

        #region custom add
        if (this.isBatch)
        {
            var newProperties = new Dictionary <string, Type>();
            foreach (KeyValuePair <string, Type> pair in properties)
            {
                if (pair.Key != "time" && pair.Key != "delay" && pair.Key != "name")
                {
                    newProperties.Add(pair.Key, pair.Value);
                }
            }
            properties = newProperties;
        }
        #endregion

        foreach (var pair in properties)
        {
            var key = pair.Key;
            GUILayout.BeginHorizontal();

            bool toggle = mModifyValues.ContainsKey(key);
            toggle = EditorGUILayout.BeginToggleGroup(key, toggle);

            if (toggle)
            {
                GUILayout.BeginVertical();

                if (typeof(string) == pair.Value)
                {
                    #region custom add

                    if (key == "oncomplete")
                    {
                        if (!mModifyValues.ContainsKey("oncomplete"))
                        {
                            mModifyValues[key] = "OniTweenGroupComplete";
                        }
                    }

                    #endregion

                    mModifyValues[key] = EditorGUILayout.TextField(mModifyValues.ContainsKey(key) ? (string)mModifyValues[key] : "");
                }
                else if (typeof(float) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.FloatField(mModifyValues.ContainsKey(key) ? (float)mModifyValues[key] : 0);
                }
                else if (typeof(int) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.IntField(mModifyValues.ContainsKey(key) ? (int)mModifyValues[key] : 0);
                }
                else if (typeof(bool) == pair.Value)
                {
                    GUILayout.BeginHorizontal();
                    var currentValueString = (mModifyValues.ContainsKey(key) ? (bool)mModifyValues[key] : false).ToString();
                    currentValueString = currentValueString.Substring(0, 1).ToUpper() + currentValueString.Substring(1);
                    var index = EditorGUILayout.Popup(trueFalseOptions.IndexOf(currentValueString), trueFalseOptions.ToArray());
                    GUILayout.EndHorizontal();
                    mModifyValues[key] = bool.Parse(trueFalseOptions[index]);
                }
                else if (typeof(GameObject) == pair.Value)
                {
                    #region custom add

                    if (key == "oncompletetarget")
                    {
                        if (!mModifyValues.ContainsKey("oncompletetarget"))
                        {
                            mModifyValues[key] = this.mTweenGroup.gameObject;
                        }
                    }

                    #endregion
                    mModifyValues[key] = EditorGUILayout.ObjectField(mModifyValues.ContainsKey(key) ? (GameObject)mModifyValues[key] : null, typeof(GameObject), true);
                }
                else if (typeof(Vector3) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.Vector3Field("", mModifyValues.ContainsKey(key) ? (Vector3)mModifyValues[key] : Vector3.zero);
                }

                #region custom add

                else if (typeof(AnimationCurve) == pair.Value)
                {
                    mModifyValues[key] =
                        EditorGUILayout.CurveField(mModifyValues.ContainsKey(key)
                            ? (AnimationCurve)mModifyValues[key]
                            : new AnimationCurve());
                }
                else if (typeof(iTweenData.NumberFormat) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.EnumPopup(mModifyValues.ContainsKey(key) ? (iTweenData.NumberFormat)mModifyValues[key] : iTweenData.NumberFormat.NOPoint);
                }
                #endregion
                else if (typeof(Vector3OrTransform) == pair.Value)
                {
                    if (!mModifyValues.ContainsKey(key))
                    {
                        mModifyValues[key] = new Vector3OrTransform();
                    }
                    var val = (Vector3OrTransform)mModifyValues[key];

                    val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransform.choices, 2);

                    GUILayout.BeginHorizontal();
                    if (Vector3OrTransform.vector3Selected == val.selected)
                    {
                        if (GUILayout.Button("SetTargetPos"))
                        {
                            val.vector = evt.DefaultTarget.transform.localPosition;
                        }
                        if (GUILayout.Button("SetTargetScale"))
                        {
                            val.vector = evt.DefaultTarget.transform.localScale;
                        }
                        if (GUILayout.Button("SetTargetAngle"))
                        {
                            val.vector = evt.DefaultTarget.transform.localEulerAngles;
                        }
                        val.vector = EditorGUILayout.Vector3Field("", val.vector);
                    }
                    else
                    {
                        val.transform = (Transform)EditorGUILayout.ObjectField(val.transform, typeof(Transform), true);
                    }
                    GUILayout.EndHorizontal();
                    mModifyValues[key] = val;
                }
                else if (typeof(Vector3OrTransformArray) == pair.Value)
                {
                    if (!mModifyValues.ContainsKey(key))
                    {
                        mModifyValues[key] = new Vector3OrTransformArray();
                    }
                    var val = (Vector3OrTransformArray)mModifyValues[key];
                    val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransformArray.choices, Vector3OrTransformArray.choices.Length);

                    if (Vector3OrTransformArray.vector3Selected == val.selected)
                    {
                        if (null == val.vectorArray)
                        {
                            val.vectorArray = new Vector3[0];
                        }
                        var elements = val.vectorArray.Length;
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Number of points");
                        elements = EditorGUILayout.IntField(elements);
                        GUILayout.EndHorizontal();
                        if (elements != val.vectorArray.Length)
                        {
                            var resizedArray = new Vector3[elements];
                            val.vectorArray.CopyTo(resizedArray, 0);
                            val.vectorArray = resizedArray;
                        }
                        for (var i = 0; i < val.vectorArray.Length; ++i)
                        {
                            val.vectorArray[i] = EditorGUILayout.Vector3Field("", val.vectorArray[i]);
                        }
                    }
                    else if (Vector3OrTransformArray.transformSelected == val.selected)
                    {
                        if (null == val.transformArray)
                        {
                            val.transformArray = new Transform[0];
                        }
                        var elements = val.transformArray.Length;
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Number of points");
                        elements = EditorGUILayout.IntField(elements);
                        GUILayout.EndHorizontal();
                        if (elements != val.transformArray.Length)
                        {
                            var resizedArray = new Transform[elements];
                            val.transformArray.CopyTo(resizedArray, 0);
                            val.transformArray = resizedArray;
                        }
                        for (var i = 0; i < val.transformArray.Length; ++i)
                        {
                            val.transformArray[i] = (Transform)EditorGUILayout.ObjectField(val.transformArray[i], typeof(Transform), true);
                        }
                    }
                    else if (Vector3OrTransformArray.iTweenPathSelected == val.selected)
                    {
                        var index = 0;
                        var paths = (GameObject.FindObjectsOfType(typeof(iTweenPath)) as iTweenPath[]);
                        if (0 == paths.Length)
                        {
                            val.pathName = "";
                            GUILayout.Label("No paths are defined");
                        }
                        else
                        {
                            for (var i = 0; i < paths.Length; ++i)
                            {
                                if (paths[i].pathName == val.pathName)
                                {
                                    index = i;
                                }
                            }
                            index = EditorGUILayout.Popup(index, (GameObject.FindObjectsOfType(typeof(iTweenPath)) as iTweenPath[]).Select(path => path.pathName).ToArray());

                            val.pathName = paths[index].pathName;
                        }
                    }
                    mModifyValues[key] = val;
                }
                else if (typeof(iTween.LoopType) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.EnumPopup(mModifyValues.ContainsKey(key) ? (iTween.LoopType)mModifyValues[key] : iTween.LoopType.none);
                }
                else if (typeof(iTween.EaseType) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.EnumPopup(mModifyValues.ContainsKey(key) ? (iTween.EaseType)mModifyValues[key] : iTween.EaseType.linear);
                }
                else if (typeof(AudioSource) == pair.Value)
                {
                    mModifyValues[key] = (AudioSource)EditorGUILayout.ObjectField(mModifyValues.ContainsKey(key) ? (AudioSource)mModifyValues[key] : null, typeof(AudioSource), true);
                }
                else if (typeof(AudioClip) == pair.Value)
                {
                    mModifyValues[key] = (AudioClip)EditorGUILayout.ObjectField(mModifyValues.ContainsKey(key) ? (AudioClip)mModifyValues[key] : null, typeof(AudioClip), true);
                }
                else if (typeof(Color) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.ColorField(mModifyValues.ContainsKey(key) ? (Color)mModifyValues[key] : Color.white);
                }
                else if (typeof(Space) == pair.Value)
                {
                    mModifyValues[key] = EditorGUILayout.EnumPopup(mModifyValues.ContainsKey(key) ? (Space)mModifyValues[key] : Space.Self);
                }

                GUILayout.EndVertical();
            }
            else
            {
                //                propertiesEnabled[key] = false;
                mModifyValues.Remove(key);
            }

            EditorGUILayout.EndToggleGroup();
            GUILayout.EndHorizontal();
            EditorGUILayout.Separator();
        }

        keys = mModifyValues.Keys.ToArray();

        foreach (var key in keys)
        {
            if (mModifyValues[key] != null && mModifyValues[key].GetType() == typeof(Vector3OrTransform))
            {
                var val = (Vector3OrTransform)mModifyValues[key];
                if (Vector3OrTransform.vector3Selected == val.selected)
                {
                    mModifyValues[key] = val.vector;
                }
                else
                {
                    mModifyValues[key] = val.transform;
                }
            }
            else if (mModifyValues[key] != null && mModifyValues[key].GetType() == typeof(Vector3OrTransformArray))
            {
                var val = (Vector3OrTransformArray)mModifyValues[key];
                if (Vector3OrTransformArray.vector3Selected == val.selected)
                {
                    mModifyValues[key] = val.vectorArray;
                }
                else if (Vector3OrTransformArray.transformSelected == val.selected)
                {
                    mModifyValues[key] = val.transformArray;
                }
                else if (Vector3OrTransformArray.iTweenPathSelected == val.selected)
                {
                    mModifyValues[key] = val.pathName;
                }
            }
        }

        GUILayout.EndScrollView();
    }
	public override void OnInspectorGUI() {
		var evt = (iTweenEvent)target;
		values = evt.Values;
		var keys = values.Keys.ToArray();
		
		foreach(var key in keys) {
			propertiesEnabled[key] = true;
			if(typeof(Vector3OrTransform) == EventParamMappings.mappings[evt.type][key]) {
				var val = new Vector3OrTransform();
				
				if(null == values[key] || typeof(Transform) == values[key].GetType()) {
					if(null == values[key]) {
						val.transform = null;
					}
					else {
						val.transform = (Transform)values[key];
					}
					val.selected = Vector3OrTransform.transformSelected;
				}
				else if(typeof(Vector3) == values[key].GetType()) {
					val.vector = (Vector3)values[key];
					val.selected = Vector3OrTransform.vector3Selected;
				}
				
				values[key] = val;
			}
			if(typeof(Vector3OrTransformArray) == EventParamMappings.mappings[evt.type][key]) {
				var val = new Vector3OrTransformArray();
				
				if(null == values[key] || typeof(Transform[]) == values[key].GetType()) {
					if(null == values[key]) {
						val.transformArray = null;
					}
					else {
						val.transformArray = (Transform[])values[key];
					}
					val.selected = Vector3OrTransformArray.transformSelected;
				}
				else if(typeof(Vector3[]) == values[key].GetType()) {
					val.vectorArray = (Vector3[])values[key];
					val.selected = Vector3OrTransformArray.vector3Selected;
				}
				else if(typeof(string) == values[key].GetType()) {
					val.pathName = (string)values[key];
					val.selected = Vector3OrTransformArray.iTweenPathSelected;
				}
				
				values[key] = val;
			}
		}
		
		GUILayout.Label(string.Format("iTween Event Editor v{0}", iTweenEvent.VERSION));
		EditorGUILayout.Separator();
 		
		GUILayout.BeginHorizontal();
			GUILayout.Label("Name");
			evt.tweenName = EditorGUILayout.TextField(evt.tweenName);
		GUILayout.EndHorizontal();
		
		GUILayout.BeginHorizontal();
			evt.showIconInInspector = GUILayout.Toggle(evt.showIconInInspector, " Show Icon In Scene");
		GUILayout.EndHorizontal();
		
		GUILayout.BeginHorizontal();
			evt.playAutomatically = GUILayout.Toggle(evt.playAutomatically, " Play Automatically");
		GUILayout.EndHorizontal();
		
		GUILayout.BeginHorizontal();
		GUILayout.Label("Initial Start Delay (delay begins once the iTweenEvent is played)");
		evt.delay = EditorGUILayout.FloatField(evt.delay);
		GUILayout.EndHorizontal();
		
		EditorGUILayout.Separator();
		
		GUILayout.BeginHorizontal();
			GUILayout.Label("Event Type");
			evt.type = (iTweenEvent.TweenType)EditorGUILayout.EnumPopup(evt.type);
		GUILayout.EndHorizontal();
		
		if(evt.type != previousType) {
			foreach(var key in EventParamMappings.mappings[evt.type].Keys) {
				propertiesEnabled[key] = false;
			}
			evt.Values = new Dictionary<string, object>();
			previousType = evt.type;
			return;
		}
		
		var properties = EventParamMappings.mappings[evt.type];
		foreach(var pair in properties) {
			var key = pair.Key;
			
			GUILayout.BeginHorizontal(); //HORT 1
			
			if(EditorGUILayout.BeginToggleGroup(key, propertiesEnabled[key])) 
			{
				propertiesEnabled[key] = true;
				
				GUILayout.BeginVertical(); //VERT1
			
				if(typeof(string) == pair.Value) {
					values[key] = EditorGUILayout.TextField(values.ContainsKey(key) ? (string)values[key] : "");
				}
				else if(typeof(float) == pair.Value) {
					values[key] = EditorGUILayout.FloatField(values.ContainsKey(key) ? (float)values[key] : 0);
				}
				else if(typeof(int) == pair.Value) {
					values[key] = EditorGUILayout.IntField(values.ContainsKey(key) ? (int)values[key] : 0);
				}
				else if(typeof(bool) == pair.Value) {
					GUILayout.BeginHorizontal(); //HORT 2
					var currentValueString = (values.ContainsKey(key) ? (bool)values[key] : false).ToString();
					currentValueString = currentValueString.Substring(0, 1).ToUpper() + currentValueString.Substring(1);					
					var index = EditorGUILayout.Popup(trueFalseOptions.IndexOf(currentValueString), trueFalseOptions.ToArray());
					GUILayout.EndHorizontal();  //HORT2
					values[key] = bool.Parse(trueFalseOptions[index]);
				}
				else if(typeof(GameObject) == pair.Value) {
					values[key] = EditorGUILayout.ObjectField(values.ContainsKey(key) ? (GameObject)values[key] : null, typeof(GameObject), true);
				}
				else if(typeof(Vector3) == pair.Value) {
					values[key] = EditorGUILayout.Vector3Field("", values.ContainsKey(key) ? (Vector3)values[key] : Vector3.zero);
				}
				else if(typeof(Vector3OrTransform) == pair.Value) {
					if(!values.ContainsKey(key)) {
						values[key] = new Vector3OrTransform();
					}
					var val = (Vector3OrTransform)values[key];
					
					val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransform.choices, 2);
	
					if(Vector3OrTransform.vector3Selected == val.selected) {
						val.vector = EditorGUILayout.Vector3Field("", val.vector);
					}
					else {
						val.transform = (Transform)EditorGUILayout.ObjectField(val.transform, typeof(Transform), true);
					}
					values[key] = val;
				}
				else if(typeof(Vector3OrTransformArray) == pair.Value) {
					if(!values.ContainsKey(key)) {
						values[key] = new Vector3OrTransformArray();
					}
					var val = (Vector3OrTransformArray)values[key];
					val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransformArray.choices, Vector3OrTransformArray.choices.Length);

					if(Vector3OrTransformArray.vector3Selected == val.selected) {
						if(null == val.vectorArray) {
							val.vectorArray = new Vector3[0];
						}
						var elements = val.vectorArray.Length;
						GUILayout.BeginHorizontal();
							GUILayout.Label("Number of points");
							elements = EditorGUILayout.IntField(elements);
						GUILayout.EndHorizontal();
						if(elements != val.vectorArray.Length) {
							var resizedArray = new Vector3[elements];
							val.vectorArray.CopyTo(resizedArray, 0);
							val.vectorArray = resizedArray;
						}
						for(var i = 0; i < val.vectorArray.Length; ++i) {
							val.vectorArray[i] = EditorGUILayout.Vector3Field("", val.vectorArray[i]);
						}
					}
					else if(Vector3OrTransformArray.transformSelected == val.selected) {
						if(null == val.transformArray) {
							val.transformArray = new Transform[0];
						}
						var elements = val.transformArray.Length;
						GUILayout.BeginHorizontal();
							GUILayout.Label("Number of points");
							elements = EditorGUILayout.IntField(elements);
						GUILayout.EndHorizontal();
						if(elements != val.transformArray.Length) {
							var resizedArray = new Transform[elements];
							val.transformArray.CopyTo(resizedArray, 0);
							val.transformArray = resizedArray;
						}
						for(var i = 0; i < val.transformArray.Length; ++i) {
							val.transformArray[i] = (Transform)EditorGUILayout.ObjectField(val.transformArray[i], typeof(Transform), true);
						}
					}
					else if(Vector3OrTransformArray.iTweenPathSelected == val.selected) {
						var index = 0;
						var paths = (GameObject.FindObjectsOfType(typeof(iTweenPath)) as iTweenPath[]);
						if(0 == paths.Length) {
							val.pathName = "";
							GUILayout.Label("No paths are defined");
						}
						else {
							for(var i = 0; i < paths.Length; ++i) {
								if(paths[i].pathName == val.pathName) {
									index = i;
								}
							}
							index = EditorGUILayout.Popup(index, (GameObject.FindObjectsOfType(typeof(iTweenPath)) as iTweenPath[]).Select(path => path.pathName).ToArray());	
							
							val.pathName = paths[index].pathName;
						}
					}
					values[key] = val;
				}
				else if(typeof(iTween.LoopType) == pair.Value) {
					values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.LoopType)values[key] : iTween.LoopType.none);
				}
				else if(typeof(iTween.EaseType) == pair.Value) {
					values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.EaseType)values[key] : iTween.EaseType.linear);
				}
				else if(typeof(AudioSource) == pair.Value) {
					values[key] = (AudioSource)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (AudioSource)values[key] : null, typeof(AudioSource), true);
				}
				else if(typeof(AudioClip) == pair.Value) {
					values[key] = (AudioClip)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (AudioClip)values[key] : null, typeof(AudioClip), true);
				}
				else if(typeof(Color) == pair.Value) {
					values[key] = EditorGUILayout.ColorField(values.ContainsKey(key) ? (Color)values[key] : Color.white);
				}
				else if(typeof(Space) == pair.Value) {
					values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (Space)values[key] : Space.Self);
				}
				
				GUILayout.EndVertical();
			}
			else {
				propertiesEnabled[key] = false;
				values.Remove(key);
			}
			
			EditorGUILayout.EndToggleGroup();
			GUILayout.EndHorizontal();
			EditorGUILayout.Separator();
		}
		
		keys = values.Keys.ToArray();
		
		foreach(var key in keys) {
			if(values[key] != null && values[key].GetType() == typeof(Vector3OrTransform)) {
				var val = (Vector3OrTransform)values[key];
				if(Vector3OrTransform.vector3Selected == val.selected) {
					values[key] = val.vector;
				}
				else {
					values[key] = val.transform;
				}
			}
			else if(values[key] != null && values[key].GetType() == typeof(Vector3OrTransformArray)) {
				var val = (Vector3OrTransformArray)values[key];
				if(Vector3OrTransformArray.vector3Selected == val.selected) {
					values[key] = val.vectorArray;
				}
				else if(Vector3OrTransformArray.transformSelected == val.selected) {
					values[key] = val.transformArray;
				}
				else if(Vector3OrTransformArray.iTweenPathSelected == val.selected) {
					values[key] = val.pathName;
				}
			}
		}
		
		evt.Values = values;
		previousType = evt.type;
	}
Esempio n. 4
0
    public override void OnInspectorGUI()
    {
        GUILayout.Space(10);
        GUI.color = Color.green;
        GUILayout.Label("iTween Path", "OL Titlemid");
        GUILayout.Space(10);
        GUI.color = Color.white;
        //path name:
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Path Name");
        _target.pathName = EditorGUILayout.TextField(_target.pathName);
        EditorGUILayout.EndHorizontal();

        if (_target.pathName == "")
        {
            _target.pathName = _target.initialName;
        }

        //path color:
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Path Color");
        _target.pathColor = EditorGUILayout.ColorField(_target.pathColor);
        EditorGUILayout.EndHorizontal();

        //exploration segment count control:
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Node Count");
        _target.nodeCount = Mathf.Clamp(EditorGUILayout.IntSlider(_target.nodeCount, 0, 10), 2, 100);
        EditorGUILayout.EndHorizontal();


        //add node?
        if (_target.nodeCount > _target.nodes.Count)
        {
            for (int i = 0; i < _target.nodeCount - _target.nodes.Count; i++)
            {
                _target.nodes.Add(Vector3.zero);
            }
        }

        //remove node?
        if (_target.nodeCount < _target.nodes.Count)
        {
            if (EditorUtility.DisplayDialog("Remove path node?", "Shortening the node list will permantently destory parts of your path. This operation cannot be undone.", "OK", "Cancel"))
            {
                int removeCount = _target.nodes.Count - _target.nodeCount;
                _target.nodes.RemoveRange(_target.nodes.Count - removeCount, removeCount);
            }
            else
            {
                _target.nodeCount = _target.nodes.Count;
            }
        }

        //node display:
        //EditorGUI.indentLevel = 4;
        for (int i = 0; i < _target.nodes.Count; i++)
        {
            _target.nodes[i] = EditorGUILayout.Vector3Field("Node " + (i + 1), _target.nodes[i]);
        }

        //update and redraw:
        if (GUI.changed)
        {
            EditorUtility.SetDirty(_target);
        }


        var evt = (iTweenEvent)target;

        values = evt.Values;
        var keys = values.Keys.ToArray();

        foreach (var key in keys)
        {
            propertiesEnabled[key] = true;
            if (typeof(Vector3OrTransform) == EventParamMappings.mappings[evt.type][key])
            {
                var val = new Vector3OrTransform();

                if (null == values[key] || typeof(Transform) == values[key].GetType())
                {
                    if (null == values[key])
                    {
                        val.transform = null;
                    }
                    else
                    {
                        val.transform = (Transform)values[key];
                    }
                    val.selected = Vector3OrTransform.transformSelected;
                }
                else if (typeof(Vector3) == values[key].GetType())
                {
                    val.vector   = (Vector3)values[key];
                    val.selected = Vector3OrTransform.vector3Selected;
                }

                values[key] = val;
            }
            if (typeof(Vector3OrTransformArray) == EventParamMappings.mappings[evt.type][key])
            {
                var val = new Vector3OrTransformArray();

                if (null == values[key] || typeof(Transform[]) == values[key].GetType())
                {
                    if (null == values[key])
                    {
                        val.transformArray = null;
                    }
                    else
                    {
                        val.transformArray = (Transform[])values[key];
                    }
                    val.selected = Vector3OrTransformArray.transformSelected;
                }
                else if (typeof(Vector3[]) == values[key].GetType())
                {
                    val.vectorArray = (Vector3[])values[key];
                    val.selected    = Vector3OrTransformArray.vector3Selected;
                }
                else if (typeof(string) == values[key].GetType())
                {
                    val.pathName = (string)values[key];
                    val.selected = Vector3OrTransformArray.iTweenPathSelected;
                }

                values[key] = val;
            }
        }

        GUILayout.Space(10);
        GUI.color = Color.green;
        //GUILayout.Label(string.Format("iTween Event Editor v{0}", iTweenEvent.VERSION), "OL Titlemid");
        GUILayout.Label("iTween Event Editor", "OL Titlemid");
        GUILayout.Space(10);

        GUI.color = Color.white;

        GUILayout.BeginHorizontal();
        GUILayout.Label("Name");
        evt.tweenName = EditorGUILayout.TextField(evt.tweenName);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        evt.showIconInInspector = GUILayout.Toggle(evt.showIconInInspector, " Show Icon In Scene");
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        evt.playAutomatically = GUILayout.Toggle(evt.playAutomatically, " Play Automatically");
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Initial Start Delay");
        evt.delay = EditorGUILayout.FloatField(evt.delay);
        GUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Event Type");
        evt.type = (iTweenEvent.TweenType)EditorGUILayout.EnumPopup(evt.type);
        GUILayout.EndHorizontal();

        if (evt.type != previousType)
        {
            foreach (var key in EventParamMappings.mappings[evt.type].Keys)
            {
                propertiesEnabled[key] = false;
            }
            evt.Values   = new Dictionary <string, object>();
            previousType = evt.type;
            return;
        }

        var properties = EventParamMappings.mappings[evt.type];

        foreach (var pair in properties)
        {
            var key = pair.Key;

            GUILayout.BeginHorizontal();

            if (EditorGUILayout.BeginToggleGroup(key, propertiesEnabled[key]))
            {
                propertiesEnabled[key] = true;

                GUILayout.BeginVertical();

                if (typeof(string) == pair.Value)
                {
                    values[key] = EditorGUILayout.TextField(values.ContainsKey(key) ? (string)values[key] : "");
                }
                else if (typeof(float) == pair.Value)
                {
                    values[key] = EditorGUILayout.FloatField(values.ContainsKey(key) ? (float)values[key] : 0);
                }
                else if (typeof(int) == pair.Value)
                {
                    values[key] = EditorGUILayout.IntField(values.ContainsKey(key) ? (int)values[key] : 0);
                }
                else if (typeof(bool) == pair.Value)
                {
                    GUILayout.BeginHorizontal();
                    var currentValueString = (values.ContainsKey(key) ? (bool)values[key] : false).ToString();
                    currentValueString = currentValueString.Substring(0, 1).ToUpper() + currentValueString.Substring(1);
                    var index = EditorGUILayout.Popup(trueFalseOptions.IndexOf(currentValueString), trueFalseOptions.ToArray());
                    GUILayout.EndHorizontal();
                    values[key] = bool.Parse(trueFalseOptions[index]);
                }
                else if (typeof(GameObject) == pair.Value)
                {
                    values[key] = EditorGUILayout.ObjectField(values.ContainsKey(key) ? (GameObject)values[key] : null, typeof(GameObject), true);
                }
                else if (typeof(Vector3) == pair.Value)
                {
                    values[key] = EditorGUILayout.Vector3Field("", values.ContainsKey(key) ? (Vector3)values[key] : Vector3.zero);
                }
                else if (typeof(Vector3OrTransform) == pair.Value)
                {
                    if (!values.ContainsKey(key))
                    {
                        values[key] = new Vector3OrTransform();
                    }
                    var val = (Vector3OrTransform)values[key];

                    val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransform.choices, 2);

                    if (Vector3OrTransform.vector3Selected == val.selected)
                    {
                        val.vector = EditorGUILayout.Vector3Field("", val.vector);
                    }
                    else
                    {
                        val.transform = (Transform)EditorGUILayout.ObjectField(val.transform, typeof(Transform), true);
                    }
                    values[key] = val;
                }
                else if (typeof(Vector3OrTransformArray) == pair.Value)
                {
                    if (!values.ContainsKey(key))
                    {
                        values[key] = new Vector3OrTransformArray();
                    }
                    var val = (Vector3OrTransformArray)values[key];
                    val.selected = GUILayout.SelectionGrid(val.selected, Vector3OrTransformArray.choices, Vector3OrTransformArray.choices.Length);

                    if (Vector3OrTransformArray.vector3Selected == val.selected)
                    {
                        if (null == val.vectorArray)
                        {
                            val.vectorArray = new Vector3[0];
                        }
                        var elements = val.vectorArray.Length;
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Number of points");
                        elements = EditorGUILayout.IntField(elements);
                        GUILayout.EndHorizontal();
                        if (elements != val.vectorArray.Length)
                        {
                            var resizedArray = new Vector3[elements];
                            val.vectorArray.CopyTo(resizedArray, 0);
                            val.vectorArray = resizedArray;
                        }
                        for (var i = 0; i < val.vectorArray.Length; ++i)
                        {
                            val.vectorArray[i] = EditorGUILayout.Vector3Field("", val.vectorArray[i]);
                        }
                    }
                    else if (Vector3OrTransformArray.transformSelected == val.selected)
                    {
                        if (null == val.transformArray)
                        {
                            val.transformArray = new Transform[0];
                        }
                        var elements = val.transformArray.Length;
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Number of points");
                        elements = EditorGUILayout.IntField(elements);
                        GUILayout.EndHorizontal();
                        if (elements != val.transformArray.Length)
                        {
                            var resizedArray = new Transform[elements];
                            val.transformArray.CopyTo(resizedArray, 0);
                            val.transformArray = resizedArray;
                        }
                        for (var i = 0; i < val.transformArray.Length; ++i)
                        {
                            val.transformArray[i] = (Transform)EditorGUILayout.ObjectField(val.transformArray[i], typeof(Transform), true);
                        }
                    }
                    else if (Vector3OrTransformArray.iTweenPathSelected == val.selected)
                    {
                        var index = 0;
                        var paths = (GameObject.FindObjectsOfType(typeof(iTweenEvent)) as iTweenEvent[]);
                        if (0 == paths.Length)
                        {
                            val.pathName = "";
                            GUILayout.Label("No paths are defined");
                        }
                        else
                        {
                            for (var i = 0; i < paths.Length; ++i)
                            {
                                if (paths[i].pathName == val.pathName)
                                {
                                    index = i;
                                }
                            }
                            index = EditorGUILayout.Popup(index, (GameObject.FindObjectsOfType(typeof(iTweenEvent)) as iTweenEvent[]).Select(path => path.pathName).ToArray());

                            val.pathName = paths[index].pathName;
                        }
                    }
                    values[key] = val;
                }
                else if (typeof(iTween.LoopType) == pair.Value)
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.LoopType)values[key] : iTween.LoopType.none);
                }
                else if (typeof(iTween.EaseType) == pair.Value)
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (iTween.EaseType)values[key] : iTween.EaseType.linear);
                }
                else if (typeof(AudioSource) == pair.Value)
                {
                    values[key] = (AudioSource)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (AudioSource)values[key] : null, typeof(AudioSource), true);
                }
                else if (typeof(AudioClip) == pair.Value)
                {
                    values[key] = (AudioClip)EditorGUILayout.ObjectField(values.ContainsKey(key) ? (AudioClip)values[key] : null, typeof(AudioClip), true);
                }
                else if (typeof(Color) == pair.Value)
                {
                    values[key] = EditorGUILayout.ColorField(values.ContainsKey(key) ? (Color)values[key] : Color.white);
                }
                else if (typeof(Space) == pair.Value)
                {
                    values[key] = EditorGUILayout.EnumPopup(values.ContainsKey(key) ? (Space)values[key] : Space.Self);
                }

                GUILayout.EndVertical();
            }
            else
            {
                propertiesEnabled[key] = false;
                values.Remove(key);
            }

            EditorGUILayout.EndToggleGroup();
            GUILayout.EndHorizontal();
            EditorGUILayout.Separator();
        }

        keys = values.Keys.ToArray();

        foreach (var key in keys)
        {
            if (values[key] != null && values[key].GetType() == typeof(Vector3OrTransform))
            {
                var val = (Vector3OrTransform)values[key];
                if (Vector3OrTransform.vector3Selected == val.selected)
                {
                    values[key] = val.vector;
                }
                else
                {
                    values[key] = val.transform;
                }
            }
            else if (values[key] != null && values[key].GetType() == typeof(Vector3OrTransformArray))
            {
                var val = (Vector3OrTransformArray)values[key];
                if (Vector3OrTransformArray.vector3Selected == val.selected)
                {
                    values[key] = val.vectorArray;
                }
                else if (Vector3OrTransformArray.transformSelected == val.selected)
                {
                    values[key] = val.transformArray;
                }
                else if (Vector3OrTransformArray.iTweenPathSelected == val.selected)
                {
                    values[key] = val.pathName;
                }
            }
        }

        evt.Values   = values;
        previousType = evt.type;
    }