feat: Implement core game mechanics including player, enemies, bullets, HUD, and level setup.
This commit is contained in:
44
scripts/bullet.gd
Normal file
44
scripts/bullet.gd
Normal file
@@ -0,0 +1,44 @@
|
||||
extends Area2D
|
||||
|
||||
@export var speed: float = 500.0
|
||||
@export var lifetime: float = 2.0
|
||||
@export var damage: float = 10.0
|
||||
@export_enum("AP", "HE") var ammo_type: int = 0
|
||||
@export var explosion_radius: float = 100.0
|
||||
var shooter_group: String = "player"
|
||||
|
||||
func _ready():
|
||||
# Connect collision signal
|
||||
body_entered.connect(_on_body_entered)
|
||||
|
||||
# Delete bullet after lifetime seconds
|
||||
await get_tree().create_timer(lifetime).timeout
|
||||
queue_free()
|
||||
|
||||
func _physics_process(delta):
|
||||
position += Vector2.RIGHT.rotated(rotation) * speed * delta
|
||||
|
||||
func _on_body_entered(body):
|
||||
if body.is_in_group(shooter_group):
|
||||
return
|
||||
|
||||
if ammo_type == 0: # AP
|
||||
if body.has_method("take_damage"):
|
||||
body.take_damage(damage)
|
||||
elif ammo_type == 1: # HE
|
||||
explode()
|
||||
|
||||
queue_free()
|
||||
|
||||
func explode():
|
||||
# Visual effect could go here
|
||||
# Find all potential targets
|
||||
# If shooter is player, target enemies. If shooter is enemy, target player.
|
||||
var target_group = "enemy" if shooter_group == "player" else "player"
|
||||
var targets = get_tree().get_nodes_in_group(target_group)
|
||||
|
||||
for target in targets:
|
||||
var distance = global_position.distance_to(target.global_position)
|
||||
if distance <= explosion_radius:
|
||||
if target.has_method("take_damage"):
|
||||
target.take_damage(damage)
|
||||
Reference in New Issue
Block a user