public TimelineObj(string skillId, TimelineModel model, SkillCom ower) { this.skillId = skillId; this.model = model; this.ower = ower; this._timeScale = 1.00f; }
public AddDamageInfo(SkillCom attacker, SkillCom target, DamageModel model, float angle) { this.attacker = attacker; this.target = target; this.model = model; this.angle = angle; }
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); } } }
public override void Execute(AoeObj aoe, List <ActorObj> actors) { for (int i = 0; i < actors.Count; i++) { SkillCom targetCom = LCECS.ECSLocate.ECS.GetEntity(actors[i].Uid).GetCom <SkillCom>(); SkillLocate.Damage.AddDamage(aoe.ower, targetCom, damage); } }
/// <summary> /// 创建Buff对象 /// </summary> /// <param name="originer">Buff创建者(可以为空)</param> /// <param name="model">Buff配置数据</param> /// <param name="ower">Buff携带者</param> /// <param name="duration">持续时间</param> /// <param name="stack">Buff层数</param> /// <param name="permanent">是不是永久Buff</param> /// <param name="buffParam">Buff参数</param> public BuffObj(SkillCom originer, BuffModel model, SkillCom ower, float duration, int stack, bool permanent = false) { this.originer = originer; this.model = model; this.ower = ower; this.duration = duration; this.stack = stack; this.isPermanent = permanent; }
private void UpdateBuff(SkillCom skillCom) { float deltaTime = SkillLocate.DeltaTime; //技能冷却 for (int i = 0; i < skillCom.Skills.Count; i++) { SkillObj skillObj = skillCom.Skills[i]; skillObj.coldDown -= deltaTime; } //更新Buff for (int i = 0; i < skillCom.Buffs.Count; i++) { BuffObj buffObj = skillCom.Buffs[i]; //持续时间 if (buffObj.isPermanent == false) buffObj.duration -= deltaTime; //存在时间 buffObj.timeElapsed += deltaTime; //检测OnTick if (buffObj.model.tickTime > 0) { //为了精度*1000 if (Mathf.RoundToInt(buffObj.timeElapsed * 1000) % Mathf.RoundToInt(buffObj.model.tickTime * 1000) == 0) { ExecuteBuffTick(buffObj); buffObj.tickCnt += 1; } } //检测移除 if (buffObj.duration <= 0 || buffObj.stack <= 0) { ExecuteBuffRemove(buffObj); skillCom.RemoveBuff(buffObj); } } }
/// <summary> /// 执行函数 /// </summary> /// <param name="buff">buff对象</param> /// <param name="damageInfo">伤害信息</param> /// <param name="attacker">攻击者</param> public abstract void Execute(BuffObj buff, AddDamageInfo damageInfo, SkillCom attacker);
/// <summary> /// 执行函数 /// </summary> /// <param name="buff">Buff对象</param> /// <param name="damageInfo">伤害信息</param> /// <param name="target">被击杀目标</param> public abstract void Execute(BuffObj buff, AddDamageInfo damageInfo, SkillCom target);
public override void Execute(BulletObj bullet, ActorObj actor) { SkillCom targetCom = LCECS.ECSLocate.ECS.GetEntity(actor.Uid).GetCom <SkillCom>(); SkillLocate.Damage.AddDamage(bullet.ower, targetCom, damage); }
public override void Execute(BulletObj bullet, ActorObj actor) { SkillCom targetCom = LCECS.ECSLocate.ECS.GetEntity(actor.Uid).GetCom <SkillCom>(); SkillLocate.Skill.CreateBuff(bullet.ower, targetCom, addBuff); }
protected override void HandleComs(List<BaseCom> comList) { SkillCom skillCom = GetCom<SkillCom>(comList[0]); UpdateBuff(skillCom); }