void ValidateTimeLine( RoleParameters rp, LifeSceneTimeLine timeLine)
    {
        // at least 1 sync point
        if( timeLine.mainTimeline == null )
        {
            timeLine.mainTimeline = new LifeSceneRoleTimeLine();
            timeLine.mainTimeline.sequence = new TimeLineItem[0];
        }
        if( timeLine.mainTimeline.sequence.Length == 0 )
        {
            ArrayUtility.Add(ref timeLine.mainTimeline.sequence, new TimeLineItem( CreateUID() ));
        }
        // remove timeline not associated with a role
        timeLine.timeLineForRoles = timeLine.timeLineForRoles.Where(tl => rp.Roles.Contains( tl.roleName) ).ToArray();
        // check each role has a timeLine
        foreach (string role in rp.Roles)
        {
            LifeSceneRoleTimeLine tl = timeLine.FindTimeLineForRole(role);
            // add one if none exists
            if (tl == null)
            {
                tl = new LifeSceneRoleTimeLine();
                tl.roleName = role;
                ArrayUtility.Add(ref timeLine.timeLineForRoles, tl);
            }
            if( tl.sequence == null )
                tl.sequence = new TimeLineItem[0];

            if( tl.sequence.Length == 0 )
            {
                foreach ( TimeLineItem main in timeLine.mainTimeline.sequence)
                {
                    TimeLineItem item;
                    if (main.kind == TimeLineItem.Kind.Syncro)
                        item = new TimeLineItem(main.syncID);
                    else
                        item = new TimeLineItem();
                    ArrayUtility.Add(ref tl.sequence, item);
                }
            }
        }
    }