feat: Implement core game mechanics including player, enemies, bullets, HUD, and level setup.
This commit is contained in:
74
scripts/turret.gd
Normal file
74
scripts/turret.gd
Normal file
@@ -0,0 +1,74 @@
|
||||
extends Node2D
|
||||
|
||||
@export var rotation_speed: float = 3.0
|
||||
@export var bullet_ap_scene: PackedScene = preload("res://scenes/bullet_ap.tscn")
|
||||
@export var bullet_he_scene: PackedScene = preload("res://scenes/bullet_he.tscn")
|
||||
@export var fire_rate: float = 0.5
|
||||
|
||||
@export var max_ammo_ap: int = 20
|
||||
@export var max_ammo_he: int = 10
|
||||
var ammo_ap: int
|
||||
var ammo_he: int
|
||||
|
||||
signal ammo_changed(ap, he)
|
||||
|
||||
enum AmmoType {AP, HE}
|
||||
var current_ammo_type: AmmoType = AmmoType.AP
|
||||
|
||||
var can_shoot: bool = true
|
||||
|
||||
func _ready():
|
||||
ammo_ap = max_ammo_ap
|
||||
ammo_he = max_ammo_he
|
||||
# Defer emit to ensure connections are ready
|
||||
call_deferred("emit_ammo_signal")
|
||||
|
||||
func emit_ammo_signal():
|
||||
ammo_changed.emit(ammo_ap, ammo_he)
|
||||
|
||||
func _process(delta):
|
||||
var mouse_pos = get_global_mouse_position()
|
||||
var target_angle = (mouse_pos - global_position).angle()
|
||||
|
||||
# Sanftes Nachdrehen
|
||||
var angle_diff = wrapf(target_angle - global_rotation, -PI, PI)
|
||||
global_rotation += clamp(angle_diff, -rotation_speed * delta, rotation_speed * delta)
|
||||
|
||||
if Input.is_key_pressed(KEY_1):
|
||||
current_ammo_type = AmmoType.AP
|
||||
if Input.is_key_pressed(KEY_2):
|
||||
current_ammo_type = AmmoType.HE
|
||||
|
||||
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and can_shoot:
|
||||
shoot()
|
||||
|
||||
func shoot():
|
||||
if current_ammo_type == AmmoType.AP:
|
||||
if ammo_ap > 0:
|
||||
ammo_ap -= 1
|
||||
else:
|
||||
return # Out of ammo
|
||||
elif current_ammo_type == AmmoType.HE:
|
||||
if ammo_he > 0:
|
||||
ammo_he -= 1
|
||||
else:
|
||||
return # Out of ammo
|
||||
|
||||
ammo_changed.emit(ammo_ap, ammo_he)
|
||||
|
||||
var bullet_scene = bullet_ap_scene if current_ammo_type == AmmoType.AP else bullet_he_scene
|
||||
var bullet = bullet_scene.instantiate()
|
||||
get_tree().root.add_child(bullet)
|
||||
bullet.global_position = global_position
|
||||
bullet.global_rotation = global_rotation
|
||||
|
||||
can_shoot = false
|
||||
await get_tree().create_timer(fire_rate).timeout
|
||||
can_shoot = true
|
||||
|
||||
func add_ammo(type_index: int, amount: int):
|
||||
if type_index == 0: # AP
|
||||
ammo_ap += amount
|
||||
elif type_index == 1: # HE
|
||||
ammo_he += amount
|
||||
ammo_changed.emit(ammo_ap, ammo_he)
|
||||
Reference in New Issue
Block a user