/// <summary> /// 普通攻击的入口函数 /// </summary> public static void NormalAttackWork(FightUnit attacker, FightUnit target, NormalAttack skill) { if (target == null || target.health == 0 || attacker == null || attacker.health == 0) { return; } switch ((SkillCurve)skill.attack.curve) { case SkillCurve.None: case SkillCurve.Melee: NormalAttackDamage(attacker, target, skill, skill.curHitEffect); break; case SkillCurve.Directional: GameObject obj = ProjectileMove.CreateProjectile(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.curFlyEffect.speed, target.Body, delegate(SpecialEffect fx) { if (attacker != null && target != null) { NormalAttackDamage(attacker, target, skill, fx); } }); obj.GetComponent <ProjectileMove>().hitEffect = skill.curHitEffect; skill.StartCoroutine(skill.DisplayFlyEffect(obj.transform)); break; case SkillCurve.Parabola: Vector3 targetPos; bool isHeroSkill = attacker.parentGroup.group == FightGroup.GroupType.Mine; if (skill.flyEffect.distance > 0) { targetPos = attacker.mTrans.localPosition + (isHeroSkill? -1 : 1) * Vector3.right * skill.flyEffect.distance; } else { targetPos = target.mTrans.localPosition + target.Body.localPosition; } GameObject obj_1 = ProjectileMove.CreateProjectile(skill.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.curFlyEffect.speed, skill.curFlyEffect.height, targetPos, delegate(SpecialEffect fx) { if (attacker != null && target != null) { NormalAttackDamage(attacker, target, skill, fx); } }); obj_1.GetComponent <ProjectileMove>().hitEffect = skill.curHitEffect; if (!isHeroSkill) { obj_1.AddComponent <DragRecord>(); } break; } }
/// <summary> /// 绝技的入口函数,涉及到有弹道,回调 /// </summary> public static void UniqueSkillWork(FightUnit attacker, FightUnit target, UniqueSkill skill) { switch ((SkillCurve)skill.specialSkill.curve) { case SkillCurve.None: case SkillCurve.Melee: UniqueSkillSelect(attacker, target, skill); break; case SkillCurve.Directional: GameObject obj = ProjectileMove.CreateProjectile(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, target.Body, delegate(SpecialEffect fx) { UniqueSkillSelect(attacker, target, skill); }); skill.StartCoroutine(skill.DisplayFlyEffect(obj.transform)); break; case SkillCurve.Parabola: Vector3 targetPos; bool isHeroSkill = attacker.parentGroup.group == FightGroup.GroupType.Mine; if (skill.flyEffect.distance > 0) { targetPos = attacker.mTrans.localPosition + (isHeroSkill ? -1 : 1) * Vector3.right * skill.flyEffect.distance; } else { targetPos = target.mTrans.localPosition + target.Body.localPosition; } GameObject obj_1 = ProjectileMove.CreateProjectile(skill.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, skill.flyEffect.height, targetPos, delegate(SpecialEffect fx) { UniqueSkillSelect(attacker, target, skill); }); if (!isHeroSkill) { obj_1.AddComponent <DragRecord>(); } skill.StartCoroutine(skill.DisplayFlyEffect(obj_1.transform)); break; case SkillCurve.Magica: if (skill.dmgEffect == null) { return; } if (skill.dmgEffect.target == 4 || skill.dmgEffect.target == 5) { skill.StartCoroutine(UniqueSkillMagic_Whole(attacker, target, skill)); } else { UniqueSkillSelect(attacker, target, skill); } break; case SkillCurve.LineAoe: bool isRight = (attacker.parentGroup.group == FightGroup.GroupType.Mine && !attacker.isConfused) || (attacker.parentGroup.group == FightGroup.GroupType.Enemy && attacker.isConfused); GameObject obj_2 = LineAoeMove.CreateLineAoe(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, isRight, delegate(FightUnit unit) { UniqueSkillDamage(attacker, unit, skill); }); skill.StartCoroutine(skill.DisplayFlyEffect(obj_2.transform)); break; } }