internal static CinemaActorEvent CreateActorEvent(ActorItemTrack track, Type type, string name, float firetime)
    {
        GameObject item = new GameObject(name);
        item.transform.parent = track.transform;
        CinemaActorEvent actorEvent = item.AddComponent(type) as CinemaActorEvent;

        actorEvent.Firetime = firetime;

        return actorEvent;
    }
    internal static CinemaActorAction CreateActorAction(ActorItemTrack track, Type type, string name, float firetime)
    {
        GameObject item = new GameObject(name);
        item.transform.parent = track.transform;
        CinemaActorAction action = item.AddComponent(type) as CinemaActorAction;

        SortedDictionary<float, CinemaActorAction> sortedActions = new SortedDictionary<float, CinemaActorAction>();
        foreach (CinemaActorAction a in track.ActorActions)
        {
            sortedActions.Add(a.Firetime, a);
        }

        float latestTime = 0;
        float length = DEFAULT_ACTOR_ACTION_LENGTH;
        foreach (CinemaActorAction a in sortedActions.Values)
        {
            if (latestTime >= a.Firetime)
            {
                latestTime = Mathf.Max(latestTime, a.Firetime + a.Duration);
            }
            else
            {
                length = a.Firetime - latestTime;
                break;
            }
        }

        action.Firetime = latestTime;
        action.Duration = length;

        return action;

    }