/// <summary>
        /// constructor taking a serializable task
        /// </summary>
        public Task(TaskList tl, SerializableTask task)
        {
            TaskDelay   = task.TaskDelay;
            TaskList    = tl;
            GameObject  = task.GameObject;
            TaskName    = task.TaskName;
            Description = task.Description;
            GOName      = task.GOName;

            foreach (var taskEvent in task.TaskEvents)
            {
                switch (taskEvent.TypeName)
                {
                case "TransformTaskEvent":
                {
                    TaskEvent newTaskEvent = new TransformTaskEvent(taskEvent);
                    newTaskEvent.Task = this;
                    this.TaskEvents.Add(newTaskEvent);
                }
                break;

                case "AnimationTaskEvent":
                {
                    TaskEvent newTaskEvent = new AnimationTaskEvent(taskEvent);
                    newTaskEvent.Task = this;
                    this.TaskEvents.Add(newTaskEvent);
                }
                break;
                }
            }
        }
        /// <summary>
        /// constructor, takes an actual taskevent and serialize it into its internal structure
        /// called during serialization
        /// </summary>
        public SerializableTaskEvent(TaskEvent taskEvent)
        {
            if (taskEvent != null)
            {
                TypeName = taskEvent.GetType().Name;
                switch (TypeName)
                {
                case "TransformTaskEvent":
                {
                    TransformTaskEvent castedEvent = taskEvent as TransformTaskEvent;
                    StartPos      = castedEvent.StartPos;
                    EndPos        = castedEvent.EndPos;
                    StartRotation = castedEvent.StartRotation;
                    EndRotation   = castedEvent.EndRotation;
                    Duration      = castedEvent.Duration;
                } break;

                case "AnimationTaskEvent":
                {
                    AnimationTaskEvent castedEvent = taskEvent as AnimationTaskEvent;
                    GameObject          = castedEvent.GameObject;
                    AnimatorParam       = castedEvent.AnimatorParam;
                    AnimatorParamValue  = castedEvent.AnimatorParamValue;
                    ModifyAnimatorParam = castedEvent.ModifyAnimatorParam;
                    AnimatorLayer       = castedEvent.AnimatorLayer;
                    AnimatorLayerAmount = castedEvent.AnimatorLayerAmount;
                    ModifyAnimatorLayer = castedEvent.ModifyAnimatorLayer;
                }
                break;
                }
            }
        }
        public void DisplayAnimationTaskEventIOfTask(Task t, int index)
        {
            AnimationTaskEvent tte = t.TaskEvents[index] as AnimationTaskEvent;

            GUILayout.BeginHorizontal();
            GUILayout.Label("Model Controller", GUILayout.Width(100));
            tte.GameObject = (GameObject)EditorGUILayout.ObjectField(tte.GameObject, typeof(GameObject), true);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Parameter", GUILayout.Width(100));
            tte.AnimatorParam = EditorGUILayout.TextField(tte.AnimatorParam);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Value", GUILayout.Width(100));
            tte.AnimatorParamValue = EditorGUILayout.FloatField(tte.AnimatorParamValue);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Modify Parameter", GUILayout.Width(100));
            tte.ModifyAnimatorParam = EditorGUILayout.Toggle(tte.ModifyAnimatorParam);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Layer", GUILayout.Width(100));
            tte.AnimatorLayer = EditorGUILayout.TextField(tte.AnimatorLayer);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Amount", GUILayout.Width(100));
            tte.AnimatorLayerAmount = EditorGUILayout.FloatField(tte.AnimatorLayerAmount);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Modify Layer", GUILayout.Width(100));
            tte.ModifyAnimatorLayer = EditorGUILayout.Toggle(tte.ModifyAnimatorLayer);
            GUILayout.EndHorizontal();
        }