using UnityEngine; public abstract class BallEffectBase : MonoBehaviour { [SerializeField] protected BallEffectDefinition definition; public BallEffectDefinition Definition => definition; public virtual void SetDefinition(BallEffectDefinition newDefinition) { definition = newDefinition; } // Called after the ball is launched from the paddle. public virtual void OnBallLaunched(BallScript ball) { } // Called when a ball is reset by the DeathZone. public virtual void OnBallReset(BallScript ball) { } // Movement hook called every FixedUpdate while the ball is launched. public virtual void ModifyVelocity(BallScript ball, ref Vector2 velocity, float deltaTime) { } // Damage hook: receives current damage, returns modified damage. public virtual float ModifyBlockDamage(BallScript ball, blockScript block, Collision2D collision, float currentDamage) { return currentDamage; } // Called after a block hit has been processed. public virtual void OnHitBlock(BallScript ball, blockScript block, Collision2D collision) { } }