Exemple #1
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);
        }
Exemple #2
0
        /// <summary>
        /// 释放对点技能
        /// </summary>
        /// <param name="self"></param>
        /// <param name="spellSkill"></param>
        /// <param name="point"></param>
        public static void SpellWithPoint(this SpellComponent self, SkillAbility spellSkill, Vector3 point)
        {
            if (!self.Enable)
            {
                return;
            }
            if (self.CurSkillConfigId != 0)
            {
                return;
            }
            if (!spellSkill.CanUse())
            {
                return;
            }
            self.CurSkillConfigId = spellSkill.ConfigId;
            var nowpos = self.GetParent <CombatUnitComponent>().unit.Position;

            if (Vector2.Distance(new Vector2(nowpos.x, nowpos.z), new Vector2(point.x, point.z)) >
                spellSkill.SkillConfig.PreviewRange[0])
            {
                var dir = new Vector3(point.x - nowpos.x, 0, point.z - nowpos.z).normalized;
                point = nowpos + dir * spellSkill.SkillConfig.PreviewRange[0];
            }
            self.Para          = new SkillPara();
            self.Para.Position = point;
            self.Para.From     = self.GetParent <CombatUnitComponent>();
            self.Para.Ability  = spellSkill;

            self.GetSkill().LastSpellTime = TimeHelper.ServerNow();
            self.PlayNextSkillStep(0);
        }
Exemple #3
0
        /// <summary>
        /// 释放方向技能
        /// </summary>
        /// <param name="self"></param>
        /// <param name="spellSkill"></param>
        /// <param name="point"></param>
        public static void SpellWithDirect(this SpellComponent self, SkillAbility spellSkill, Vector3 point)
        {
            if (!self.Enable)
            {
                return;
            }
            if (self.CurSkillConfigId != 0)
            {
                return;
            }
            if (!spellSkill.CanUse())
            {
                return;
            }
            self.CurSkillConfigId = spellSkill.ConfigId;
            var nowpos = self.GetParent <CombatUnitComponent>().unit.Position;

            point = new Vector3(point.x, nowpos.y, point.z);
            var Rotation = Quaternion.LookRotation(point - nowpos, Vector3.up);

            self.Para          = new SkillPara();
            self.Para.Position = point;
            self.Para.Rotation = Rotation;
            self.Para.From     = self.GetParent <CombatUnitComponent>();
            self.Para.Ability  = spellSkill;

            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
        }