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 }; }
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; } }
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]); } }
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]); } }
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(); }); }
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); }); }
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); }); }