I am working on the shooting and projectiles mechanism within my game and want to have the bullets explode upon impact. As of the moment I do seem to have the bullets "exploding" and hitting multiple targets at once, however through examination on the debug screen, it seems that all of the bullets have their explosion area collision shape changed whenever any one makes impact with a body. I am not sure why this is. I wanted to see if there is a more effective method to have the bullets explode only on impact.
extends Area2D
export (int) var speed
export (int) var damage
export (float) var lifetime
var explosionRadius
var velocity = Vector2()
func start(_position, _direction):
position = _position
rotation = _direction.angle()
$Timer.wait_time = lifetime
velocity = _direction *speed
$Timer.start()
func _process(delta):
position += velocity * delta
func _ready():
$Explosion/CollisionShape2D.shape.radius = 0
func explode():
$Explosion/CollisionShape2D.shape.radius = explosionRadius
queue_free()
func _on_Bullet_body_entered(body):
if body.has_method("takeDmg") and body.alive == true:
body.takeDmg(damage)
explode()
func _on_Timer_timeout():
explode()
func _on_Bullet_area_entered(_area):
queue_free()
func _on_Explosion_body_entered(body):
$Particles2D.emitting = true
if body.has_method("takeDmg") and body.alive == true:
body.takeDmg(damage)
func _on_Explosion_body_exited(body):
$Explosion/CollisionShape2D.shape.radius = 0
This is the current code for my setup. It sets the explosion areas shapes to 0 at the start and increases the size of the radius when the bullet makes impact , it then checks if bodies within the area can take damage and ~~~~if they can then it calls the take damage function on that body.