/// <summary> /// Update this track since the last frame. /// </summary> /// <param name="time">The new running time.</param> /// <param name="deltaTime">The deltaTime since last update.</param> public override void UpdateTrack(float time, float deltaTime) { float previousTime = base.elapsedTime; base.UpdateTrack(time, deltaTime); //GetActors(ref _actorList); List <TimelineItem> items = GetAllTimelineItems(); for (int i = 0; i < items.Count; i++) { // Check if it is an actor event. CinemaActorEvent cinemaEvent = items[i] as CinemaActorEvent; if (cinemaEvent != null) { if ((previousTime < cinemaEvent.Firetime && time >= cinemaEvent.Firetime) || (cinemaEvent.Firetime == 0f && previousTime <= cinemaEvent.Firetime && time > cinemaEvent.Firetime)) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { cinemaEvent.Trigger(_actorList[j].gameObject); } } } else if (previousTime >= cinemaEvent.Firetime && base.elapsedTime <= cinemaEvent.Firetime) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { cinemaEvent.Reverse(_actorList[j].gameObject); } } } } CinemaActorAction action = items[i] as CinemaActorAction; if (action != null) { var actionScene = action.GetCutScene(); if (((previousTime < action.Firetime || previousTime <= 0f) && base.elapsedTime >= action.Firetime) && base.elapsedTime < action.EndTime) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { action.Trigger(_actorList[j].gameObject); } } } else if (previousTime <= action.EndTime && base.elapsedTime >= action.EndTime) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { action.End(_actorList[j].gameObject); } } } else if (previousTime >= action.Firetime && previousTime < action.EndTime && base.elapsedTime <= action.Firetime) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { action.ReverseTrigger(_actorList[j].gameObject); } } } else if (((previousTime > action.EndTime || (actionScene != null && previousTime >= actionScene.Duration)) && (base.elapsedTime > action.Firetime) && (base.elapsedTime <= action.EndTime))) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { action.ReverseEnd(_actorList[j].gameObject); } } } else if ((base.elapsedTime > action.Firetime) && (base.elapsedTime <= action.EndTime)) { for (int j = 0; j < _actorList.Count; j++) { if (_actorList[j] != null) { float runningTime = time - action.Firetime; action.UpdateTime(_actorList[j].gameObject, runningTime, deltaTime); } } } } } }