feat: Implement core game mechanics including player, enemies, bullets, HUD, and level setup.

This commit is contained in:
2025-11-21 13:18:53 +01:00
commit 245e3e141d
39 changed files with 823 additions and 0 deletions

44
scripts/bullet.gd Normal file
View 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)