/// <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); }
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 }); }
/// <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 }