private void UpdateTimeline(SkillCom skillCom) { IReadOnlyList <TimelineObj> timelines = skillCom.Timelines; if (timelines == null || timelines.Count <= 0) { return; } for (int i = 0; i < timelines.Count; i++) { TimelineObj timeline = timelines[i]; //记录运行时长 float wasTimeElapsed = timeline.timeElapsed; timeline.timeElapsed = wasTimeElapsed + SkillLocate.DeltaTime * timeline.timeScale; //已经完成 if (timeline.isFinish) { skillCom.RemoveTimeline(timeline); return; } //判断跳转点 if (timeline.model.goToNode != null) { if (timeline.model.goToNode.atDuration >= wasTimeElapsed && timeline.model.goToNode.atDuration < timeline.timeElapsed) { timeline.timeElapsed = timeline.model.goToNode.gotoDuration; continue; } } //执行节点函数 for (int j = 0; j < timeline.model.nodes.Count; j++) { TimelineFunc timelineFunc = timeline.model.nodes[j]; if (timelineFunc.timeStart >= wasTimeElapsed && timelineFunc.timeStart < timeline.timeElapsed) { timelineFunc.Enter(timeline); } timelineFunc.Tick(timeline); float endTime = timelineFunc.timeStart + timelineFunc.timeContinue; if (endTime >= wasTimeElapsed && endTime < timeline.timeElapsed) { timelineFunc.Exit(timeline); } } //判断是否结束 if (timeline.timeElapsed >= timeline.model.duration) { timeline.isFinish = true; skillCom.RemoveTimeline(timeline); } } }
/// <summary> /// 执行函数 /// </summary> /// <param name="buff">buff对象</param> /// <param name="skill">技能对象</param> /// <param name="timeline">技能表现</param> public abstract TimelineObj Execute(BuffObj buff, SkillObj skill, TimelineObj timeline);