Example #1
0
 public TimelineObj(string skillId, TimelineModel model, SkillCom ower)
 {
     this.skillId    = skillId;
     this.model      = model;
     this.ower       = ower;
     this._timeScale = 1.00f;
 }
Example #2
0
 public AddDamageInfo(SkillCom attacker, SkillCom target, DamageModel model, float angle)
 {
     this.attacker = attacker;
     this.target   = target;
     this.model    = model;
     this.angle    = angle;
 }
Example #3
0
        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);
                }
            }
        }
Example #4
0
 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);
     }
 }
Example #5
0
 /// <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;
 }
Example #6
0
 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);
         }
     }
 }
Example #7
0
 /// <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);
Example #8
0
 /// <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);
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
 protected override void HandleComs(List<BaseCom> comList)
 {
     SkillCom skillCom = GetCom<SkillCom>(comList[0]);
     UpdateBuff(skillCom);
 }