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; }
public override void RegisterInput( ) { var manager = InputManager.Instance.MainInputActions; if (manager.Main.enabled) { return; } InputManager.Instance.layerMask = GameLayerHelper.Layer(GameLayer.Actor); manager.Main.Enable( ); }
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 FindEnemy() { while (pawn.IsDeath == false) { var col = new Collider2D[FIND_ENEMY_MAX]; LayerMask layerMask = GameLayerHelper.Layer(GameLayer.Actor); var actors = Physics2D.OverlapCircleNonAlloc(pawn.Center, AttackDistance, col, layerMask); holdCharacters.Clear( ); for (int i = 0; i < actors; ++i) { BaseCharacter character = col[i].transform.GetComponentInParent <BaseCharacter> ( ); if (character == null || character.Equals(pawn) || character.IsDeath) { continue; } holdCharacters.Add(character); } yield return(new WaitForSeconds(FIND_ENEMY_TICK)); } }
public List <BaseCharacter> AttackRange(float range, FilterType filter) { LayerMask layer = GameLayerHelper.Layer(GameLayer.Actor); var col = new Collider2D[OVERLAP_MAX_ACTOR]; var actors = Physics2D.OverlapCircleNonAlloc(Owner.Center, range, col, layer); List <BaseCharacter> targets = new List <BaseCharacter> ( ); for (int i = 0; i < actors; ++i) { BaseCharacter character = col[i].transform.GetComponentInParent <BaseCharacter> ( ); if (character == null || character.Equals(Owner)) { continue; } switch (filter) { case FilterType.Alliance: if (Owner.Owner.IsEnemy(character.Owner)) { continue; } break; case FilterType.Enemy: if (Owner.Owner.IsAlliance(character.Owner)) { continue; } break; } targets.Add(character); } return(targets); }