Esempio n. 1
0
    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;
    }
Esempio n. 2
0
    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;
    }
Esempio n. 4
0
    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));
        }
    }
Esempio n. 5
0
    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);
    }