What is an efficient way to have my bullets explode on impact?
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.