PiercingEffect.cs 1009 B

123456789101112131415161718192021222324252627282930313233
  1. using UnityEngine;
  2. public class PiercingEffect : BallEffectBase
  3. {
  4. private int _remainingPierceHits;
  5. private PiercingEffectDefinition Config => definition as PiercingEffectDefinition;
  6. public override void OnBallLaunched(BallScript ball)
  7. {
  8. _remainingPierceHits = Config != null ? Config.PierceHits : 0;
  9. }
  10. public override void OnBallReset(BallScript ball)
  11. {
  12. _remainingPierceHits = Config != null ? Config.PierceHits : 0;
  13. }
  14. public override void OnHitBlock(BallScript ball, blockScript block, Collision2D collision)
  15. {
  16. if (_remainingPierceHits == 0)
  17. return;
  18. if (_remainingPierceHits > 0)
  19. _remainingPierceHits--;
  20. // Override post-collision bounce and keep travelling in the incoming direction.
  21. Vector2 incoming = ball.GetPrePhysicsVelocity();
  22. if (incoming.sqrMagnitude < 0.0001f)
  23. return;
  24. ball.Body.linearVelocity = incoming.normalized * ball.GetCurrentSpeed();
  25. }
  26. }