ExplosiveHitEffect.cs 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. using UnityEngine;
  2. public class ExplosiveHitEffect : BallEffectBase
  3. {
  4. private ExplosiveHitEffectDefinition Config => definition as ExplosiveHitEffectDefinition;
  5. public override void OnHitBlock(BallScript ball, blockScript hitBlock, Collision2D collision)
  6. {
  7. ExplosiveHitEffectDefinition config = Config;
  8. if (config == null)
  9. return;
  10. Vector2 center = collision.GetContact(0).point;
  11. blockScript[] blocks = FindObjectsByType<blockScript>(FindObjectsSortMode.None);
  12. for (int i = 0; i < blocks.Length; i++)
  13. {
  14. blockScript block = blocks[i];
  15. if (block == null)
  16. continue;
  17. float distance = Vector2.Distance(center, block.transform.position);
  18. if (distance > config.Radius)
  19. continue;
  20. float t = Mathf.Clamp01(distance / config.Radius);
  21. float splashDamage = Mathf.Lerp(config.MaxDamageAtCenter, config.MinDamageAtEdge, t);
  22. block.ApplyDamage(splashDamage);
  23. }
  24. }
  25. }