Salah satu cara yang relatif sederhana untuk melakukan ini adalah dengan menarik sinar dari pusat ledakan ke pusat setiap entitas di mana DISTANCE(explosion,entity) < exlosion.max_radius
(pseudo-code).
Untuk setiap entitas, ikuti ray ini, mengurangi kerusakan basis saat Anda pergi. Setiap kali Anda menekan objek, kurangi nilai pertanggungannya dari kerusakan (pada dasarnya memperpendek sinar).
Ketika sinar menyentuh entitas, kerusakan apa pun yang tersisa adalah kerusakan ledakan Anda.
Untuk pendekatan ini, Anda mungkin menginginkan kerusakan pangkalan yang cukup tinggi yang berkurang dengan cepat dengan jarak (berbanding terbalik dengan kuadrat jarak harus dilakukan dengan baik).
Pendekatan lain adalah menggambar sektor yang sepenuhnya mengandung entitas; tapi tidak lebih luas; dan semua jalan keluar untuk .max_radius
. Kurangi dari area sektor ini area yang dicakup oleh setiap penutup antara ledakan dan entitas, dikalikan dengan nilai sampulnya. Area yang tersisa adalah kerusakan ledakan Anda.
Satu efek samping yang rapi dari hal ini adalah bahwa semakin dekat entitas dengan ledakan, semakin luas sektor yang didapat, dan semakin banyak kerusakan yang Anda ambil (saat Anda menghitung semua area sektor tersebut, dan hanya mengurangi area tutupan antara entitas dan ledakan.
Ini juga bisa berguna untuk memperlakukan penutup sebagai entitas; dan cukup kurangi kerusakan yang diambil oleh entitas yang lebih dekat dari entitas yang lebih jauh, tetapi itu mungkin menjadi sulit.
Tidak diragukan lagi ada pendekatan yang bahkan lebih elegan dan pintar, tetapi mungkin membutuhkan beberapa kalkulus yang cukup jahat. Selalu begitu.