using UnityEngine; public class PiercingEffect : BallEffectBase { private int _remainingPierceHits; private PiercingEffectDefinition Config => definition as PiercingEffectDefinition; public override void OnBallLaunched(BallScript ball) { _remainingPierceHits = Config != null ? Config.PierceHits : 0; } public override void OnBallReset(BallScript ball) { _remainingPierceHits = Config != null ? Config.PierceHits : 0; } public override void OnHitBlock(BallScript ball, blockScript block, Collision2D collision) { if (_remainingPierceHits == 0) return; if (_remainingPierceHits > 0) _remainingPierceHits--; // Override post-collision bounce and keep travelling in the incoming direction. Vector2 incoming = ball.GetPrePhysicsVelocity(); if (incoming.sqrMagnitude < 0.0001f) return; ball.Body.linearVelocity = incoming.normalized * ball.GetCurrentSpeed(); } }