예제 #1
0
    private void Awake()
    {
        hitOverlapData = new OverlapCheckData(
            onEnter: overlap =>
        {
            if (overlap.CompareTag("Player"))
            {
                return;
            }

            AttackData attackDataPunch = weaponItem.Heavy_AttackData;
            attackDataPunch.damage
                = new FloatStat(baseValue: Mathf.Lerp(1, weaponItem.Heavy_AttackData.damage.Value, weaponItem.Heavy_CurChargeTime / weaponItem.Heavy_FullChargeTime));

            PlayerStats.Inst.DealDamage(attackDataPunch, overlap.gameObject,
                                        PlayerActions.WeaponHit,
                                        PlayerActions.MeleeHeavyHit);

            float kbDur = (weaponItem.Heavy_CurChargeTime / weaponItem.Heavy_FullChargeTime) * 0.25f;
            float kbPow = (weaponItem.Heavy_CurChargeTime / weaponItem.Heavy_FullChargeTime) * 10f;

            // TODO
            //StatusEffect_Knokback.Create(overlap.gameObject, ((Vector2)transform.right + Vector2.up).normalized, kbPow, kbDur);

            GameObject stunnedEffect = overlap.GetComponent <StatusEffect_Object>()?.StunnedObj;
            if (stunnedEffect != null)
            {
                StatusEffect_Stunned.Create(overlap.gameObject, stunnedEffect, kbDur);
            }
        });

        contactFilter = new ContactFilter2D {
            useTriggers = false
        };
    }
예제 #2
0
    private void Awake()
    {
        hitOverlapData = new OverlapCheckData(
            onEnter: overlap =>
        {
            if (overlap.CompareTag("Player"))
            {
                return;
            }

            PlayerStats.Inst.DealDamage(weaponItem.AttackData, overlap.gameObject,
                                        PlayerActions.WeaponHit,
                                        PlayerActions.MeleeBasicHit);
        });

        contactFilter = new ContactFilter2D {
            useTriggers = false
        };

        hitCheck_Start = new bool[hitCheck_RB.Length];
        hitCheck_End   = new bool[hitCheck_RB.Length];
        for (int i = 0; i < hitCheck_RB.Length; i++)
        {
            hitCheck_Start[i] = false;
            hitCheck_End[i]   = false;
        }
    }
예제 #3
0
    public static void OverlapCheckOnce(this OverlapCheckData data, Collider2D[] overlaps)
    {
        // Check Exit
        for (int i = data.prevOverlaps.Count - 1; i >= 0; i--)
        {
            if (Array.Exists(overlaps, col => col == data.prevOverlaps[i]))
            {
                continue;
            }

            data.onExit?.Invoke(overlaps[i]);
        }

        // Check Enter
        for (int i = 0; i < overlaps.Length; i++)
        {
            if (data.prevOverlaps.Contains(overlaps[i]))
            {
                continue;
            }

            data.prevOverlaps.Add(overlaps[i]);
            data.onEnter?.Invoke(overlaps[i]);
        }
    }
예제 #4
0
    public static void OverlapCheck(this OverlapCheckData data, List <Collider2D> overlaps)
    {
        if (overlaps.Count == 0)
        {
            data.Clear();
            return;
        }

        // Check Exit
        for (int i = data.prevOverlaps.Count - 1; i >= 0; i--)
        {
            if (overlaps.Exists(col => col == data.prevOverlaps[i]))
            {
                continue;
            }

            data.prevOverlaps.RemoveAt(i);
            data.onExit?.Invoke(overlaps[i]);
        }

        // Check Enter
        for (int i = 0; i < overlaps.Count; i++)
        {
            if (data.prevOverlaps.Contains(overlaps[i]))
            {
                continue;
            }

            data.prevOverlaps.Add(overlaps[i]);
            data.onEnter?.Invoke(overlaps[i]);
        }
    }
예제 #5
0
    protected override void InitEvents()
    {
        overlapCheckData = new OverlapCheckData(
            onEnter: overlap =>
        {
            // Deal Damage
            PlayerStats.Inst.DealDamage(flameDashAttackData, overlap.gameObject);
        });

        onDashing = this.NewPlayerActionEvent(() =>
        {
            // Check Overlap
            overlapCheckData.OverlapCheckOnce(Physics2D.OverlapBoxAll(GM.PlayerPos, damageSize, 0f, damageLayer));

            // Play Particle Effect
            flameParticle.Play();
        });

        onDashEnd = this.NewPlayerActionEvent(() =>
        {
            // Clear Overlap Data
            overlapCheckData.Clear();

            // Stop Particle Effect
            flameParticle.Stop();
        });
    }
예제 #6
0
    private void Awake()
    {
        contactFilter             = new ContactFilter2D();
        contactFilter.useTriggers = false;

        // Deal Damage
        hitOverlapData = new OverlapCheckData(
            onEnter: overlap =>
        {
            PlayerStats.Inst.DealDamage(weaponItem.Dash_AttackData, overlap.gameObject,
                                        PlayerActions.WeaponHit,
                                        PlayerActions.MeleeDashHit);
        });
    }
예제 #7
0
    private void Awake()
    {
        contactFilter             = new ContactFilter2D();
        contactFilter.useTriggers = false;

        hitOverlapData = new OverlapCheckData(
            onEnter: overlap =>
        {
            if (overlap.CompareTag("Player"))
            {
                return;
            }

            PlayerStats.Inst.DealDamage(weaponItem.AttackData, overlap.gameObject,
                                        PlayerActions.WeaponHit,
                                        PlayerActions.MeleeBasicHit);
        });
    }
    private void Awake()
    {
        contactFilter             = new ContactFilter2D();
        contactFilter.useTriggers = false;

        hitOverlapData = new OverlapCheckData(
            onEnter: overlap =>
        {
            if (overlap.CompareTag("Player"))
            {
                return;
            }

            AttackData attackDataPunch = weaponItem.Heavy_AttackData;
            attackDataPunch.damage
                = new FloatStat(baseValue: Mathf.Lerp(1, weaponItem.Heavy_AttackData.damage.Value, weaponItem.Heavy_CurChargeTime / weaponItem.Heavy_FullChargeTime));

            PlayerStats.Inst.DealDamage(attackDataPunch, overlap.gameObject,
                                        PlayerActions.WeaponHit,
                                        PlayerActions.MeleeHeavyHit);
        });
    }