/// <summary>
 /// 添加技能
 /// </summary>
 /// <param name="self"></param>
 /// <param name="configId"></param>
 /// <returns></returns>
 public static SkillAbility AddSkill(this CombatUnitComponent self, int configId)
 {
     if (!self.IdSkillMap.ContainsKey(configId))
     {
         var skill = self.AddChild <SkillAbility, int>(configId);
         self.IdSkillMap.Add(configId, skill.Id);
     }
     return(self.GetChild <SkillAbility>(self.IdSkillMap[configId]));
 }
 public static bool TryGetSkillAbility(this CombatUnitComponent self, int configId, out SkillAbility skill)
 {
     if (self.IdSkillMap.ContainsKey(configId))
     {
         skill = self.GetChild <SkillAbility>(self.IdSkillMap[configId]);
         return(true);
     }
     skill = null;
     return(false);
 }
Exemple #3
0
 public void Clear()
 {
     Position = Vector3.zero;
     Rotation = Quaternion.identity;
     From     = null;
     To       = null;
     CostId.Clear();
     Cost.Clear();
     Ability = null;
     StepPara.Clear();
 }
 public override void Awake(CombatUnitComponent self, List <int> skills)
 {
     self.AddComponent <SpellComponent>();//技能施法组件
     for (int i = 0; i < skills.Count; i++)
     {
         self.AddSkill(skills[i]);
     }
     self.AddComponent <BuffComponent>();         //buff容器组件
     self.AddComponent <MoveAndSpellComponent>(); //移动过去施法组件
     EventSystem.Instance.Publish(new EventType.AfterCombatUnitComponentCreate
     {
         CombatUnitComponent = self
     });
 }
Exemple #5
0
        /// <summary>
        /// 释放对目标技能
        /// </summary>
        /// <param name="self"></param>
        /// <param name="spellSkill"></param>
        /// <param name="targetEntity"></param>
        public static void SpellWithTarget(this SpellComponent self, SkillAbility spellSkill, CombatUnitComponent targetEntity)
        {
            if (!self.Enable)
            {
                return;
            }
            if (self.CurSkillConfigId != 0)
            {
                return;
            }
            if (!spellSkill.CanUse())
            {
                return;
            }

            self.CurSkillConfigId = spellSkill.ConfigId;
            var nowpos  = self.GetParent <CombatUnitComponent>().unit.Position;
            var nowpos2 = targetEntity.unit.Position;

            if (Vector2.Distance(new Vector2(nowpos.x, nowpos.z), new Vector2(nowpos2.x, nowpos2.z)) >
                spellSkill.SkillConfig.PreviewRange[0])
            {
                return;
            }
            self.Para         = new SkillPara();
            self.Para.From    = self.GetParent <CombatUnitComponent>();
            self.Para.Ability = spellSkill;
            self.Para.To      = targetEntity;

            self.GetSkill().LastSpellTime = TimeHelper.ServerNow();
            self.PlayNextSkillStep(0);
        }
        /// <summary>
        /// 释放对目标技能
        /// </summary>
        /// <param name="self"></param>
        /// <param name="spellSkill"></param>
        /// <param name="targetEntity"></param>
        public static void SpellWithTarget(this MoveAndSpellComponent self, SkillAbility spellSkill, CombatUnitComponent targetEntity)
        {
            if (!spellSkill.CanUse())
            {
                return;
            }
            if (self.Skill != null && self.Skill != spellSkill)//换新技能释放了
            {
                self.Skill  = null;
                self.Target = null;
                TimerComponent.Instance.Remove(ref self.TimerId);
                return;
            }

            var unit   = self.GetParent <CombatUnitComponent>().unit;
            var nowpos = unit.Position;
            var point  = targetEntity.unit.Position;

            if (Vector2.Distance(new Vector2(nowpos.x, nowpos.z), new Vector2(point.x, point.z)) >
                spellSkill.SkillConfig.PreviewRange[0])
            {
                self.MoveTo(unit, point);
                if (self.Skill == null)
                {
                    self.Skill   = spellSkill;
                    self.Target  = targetEntity;
                    self.TimerId = TimerComponent.Instance.NewFrameTimer(TimerType.MoveAndSpellSkill, self);
                }

                return;
            }

            if (self.Skill != null)
            {
                self.Skill  = null;
                self.Target = null;
                TimerComponent.Instance.Remove(ref self.TimerId);
                unit.Stop(0);
            }
#if SERVER //单机去掉
            self.Parent.GetComponent <SpellComponent>().SpellWithTarget(spellSkill, targetEntity);
#else
            spellSkill.UseSkill(Vector3.zero, targetEntity.Id);
#endif
        }