void Owner_Damaged(BaseCharacter source, BaseCharacter target, DamageCalculator.DamageInfo info) { if (info.type != DamageCalculator.DamageType.Normal) { return; } var abilityInfo = source.caster.Get(index); if (abilityInfo.isUse) { return; } int attackCnt = abilityInfo.amount[0]; if (++abilityInfo.usableAmount[0] < attackCnt) { abilityInfo.isUse = false; return; } else { abilityInfo.usableAmount[0] = 0; } source.StartCoroutine(Protected(source, abilityInfo)); }
IEnumerator Spell(BaseCharacter owner, AbilityInfo info, Vector3 position) { owner.Audio.play(LoadManager.Instance.GetSFXData(SFXType.BossSkill).clip, 1F, 0F, 1F); owner.caster.abilityCast = true; info.isUse = true; owner.Order = order; owner.SetAnim( ); owner.Anim_Event = false; while (owner.Anim_Event == false) { if (owner.Order != order || owner.IsDeath) { break; } yield return(null); } int cnt = info.amount[0]; LayerMask layerMask = GameLayerHelper.Layer(GameLayer.Actor); var col = new Collider2D[MAX_COUNT]; var actors = Physics2D.OverlapCircleNonAlloc(position, Range, col, layerMask); List <BaseCharacter> targets = new List <BaseCharacter> ( ); for (int i = 0; i < actors; ++i) { BaseCharacter character = col[i].GetComponentInParent <BaseCharacter> ( ); if (character == null || character.Equals(owner) || owner.Owner.IsAlliance(character.Owner) || character.IsDeath) { continue; } targets.Insert(Random.Range(0, targets.Count + 1), character); } GameObject vfx = LoadManager.Instance.GetVFX(VFXType.BossSkill); foreach (var t in targets) { Instantiate(vfx, t.Position, Quaternion.identity); DamageCalculator.DamageInfo damageInfo = new DamageCalculator.DamageInfo(DamageCalculator.DamageType.Magic); damageInfo.damage = 99999999; owner.damageCalculator.Damaged(t, damageInfo); if (--cnt == 0) { break; } } if (owner.Order == order || owner.Order == AbilityOrder.Idle) { owner.Order = AbilityOrder.Idle; owner.AddAnim( ); } info.isUse = false; owner.caster.abilityCast = false; }
private void Owner_Damaged(BaseCharacter source, BaseCharacter target, DamageCalculator.DamageInfo info) { if (info.type != DamageCalculator.DamageType.Normal) { return; } var abilityInfo = source.caster.Get(index); if (abilityInfo.isUse) { return; } abilityInfo.isUse = true; int cnt = abilityInfo.amount[0]; LayerMask layerMask = GameLayerHelper.Layer(GameLayer.Actor); var col = new Collider2D[MAX_COUNT]; var actors = Physics2D.OverlapCircleNonAlloc(target.Position, Range, col, layerMask); List <BaseCharacter> targets = new List <BaseCharacter> ( ); for (int i = 0; i < actors; ++i) { BaseCharacter character = col[i].GetComponentInParent <BaseCharacter> ( ); if (character == null || character.Equals(source) || character.Equals(target) || source.Owner.IsAlliance(character.Owner) || character.IsDeath) { continue; } targets.Insert(Random.Range(0, targets.Count + 1), character); } GameObject vfx = LoadManager.Instance.GetVFX(VFXType.BossSkill); foreach (var t in targets) { Instantiate(vfx, t.Position, Quaternion.identity); source.damageCalculator.Damaged(t, info); if (--cnt == 0) { break; } } abilityInfo.isUse = false; }
IEnumerator Attack(BaseCharacter owner, AbilityInfo info, IActor target) { BaseCharacter targetCharacter = target as BaseCharacter; info.cooltime = owner.status.Get(ActorStatus.AtkCoolTime, true, true, true); owner.Order = order; owner.SetAnim( ); owner.OnAttack(targetCharacter); owner.Anim_Event = false; while (owner.Anim_Event == false) { if (owner.Order != order || owner.IsDeath) { break; } yield return(null); } if (targetCharacter == null || targetCharacter.IsDeath) { owner.StartCoroutine(info.UpdateCoolTime( )); yield break; } Vector2 forward = new Vector3(owner.Forward, 0F); float delta = Mathf.Cos(90F * Mathf.Deg2Rad); Vector2 dir = targetCharacter.Center - owner.Center; float dot = Vector2.Dot(forward, dir.normalized); if (dot > delta) { DamageCalculator.DamageInfo damageInfo = new DamageCalculator.DamageInfo(DamageCalculator.DamageType.Normal); damageInfo.damage = (int)owner.status.Get(ActorStatus.Atk, true, true, true); owner.damageCalculator.Damaged(targetCharacter, damageInfo); } if (owner.Order == order || owner.Order == AbilityOrder.Idle) { owner.Order = AbilityOrder.Idle; owner.AddAnim( ); } owner.StartCoroutine(info.UpdateCoolTime( )); }
void Owner_Damaged(BaseCharacter source, BaseCharacter target, DamageCalculator.DamageInfo info) { if (info.type != DamageCalculator.DamageType.Normal) { return; } var abilityInfo = source.caster.Get(index); if (abilityInfo.isUse) { return; } abilityInfo.isUse = true; int attackCnt = abilityInfo.amount[1]; if (++abilityInfo.usableAmount[0] < attackCnt) { abilityInfo.isUse = false; return; } else { abilityInfo.usableAmount[0] = 0; } float atk = info.damage * (abilityInfo.amount[0] * 0.01f); info.trueDamage += atk; source.Audio.play(LoadManager.Instance.GetSFXData(SFXType.UndeadSkill).clip, 1F, 0F, 1F); GameObject vfx = LoadManager.Instance.GetVFX(VFXType.UndeadSkill); Instantiate(vfx, target.Center, Quaternion.identity); abilityInfo.isUse = false; }
public void RecordScore(BaseCharacter source, BaseCharacter target, DamageCalculator.DamageInfo info) { score += (int)RaidBoss.damageCalculator.Formula(info); }