eNEMIES!!!!!!!!!

Enemys and enemy spawner

- Press N to spawn wave
- Press H to togglt hitboxs
This commit is contained in:
Twirpytherobot
2025-11-29 20:39:30 +00:00
parent b606563f4d
commit 689181ac30
10 changed files with 699 additions and 79 deletions
+30 -2
View File
@@ -6,6 +6,8 @@ extends Node3D
@onready var players_container: Node3D = $PlayersContainer
@onready var weapons_container: Node3D = $WeaponsContainer
@onready var enemies_container: Node3D = $EnemiesContainer
@onready var enemy_spawner: EnemySpawner = $EnemySpawner
@onready var player_spawn_points: Node3D = $PlayerSpawnPoints
@onready var menu: Control = $Menu
@onready var main_menu: VBoxContainer = $Menu/MainContainer/MainMenu
@export var player_scene: PackedScene
@@ -17,6 +19,8 @@ var _weapon_spawn_counter: int = 0
var _active_weapons: Dictionary = {} # weapon_id -> WorldWeapon reference
# Track if we've already initialized to prevent double-spawning
var _multiplayer_initialized: bool = false
# Track next spawn point for round-robin spawning (server-side only)
var _next_spawn_index: int = 0
# multiplayer chat
@onready var message: LineEdit = $MultiplayerChat/VBoxContainer/HBoxContainer/Message
@@ -342,8 +346,22 @@ func _spawn_player_local(id: int, spawn_pos: Vector3):
# rpc("sync_player_position", id, player.position)
func get_spawn_point() -> Vector3:
var spawn_point = Vector2.from_angle(randf() * 2 * PI) * 10 # spawn radius
return Vector3(spawn_point.x, 0, spawn_point.y)
# Use PlayerSpawnPoint container if available
if player_spawn_points and player_spawn_points.get_child_count() > 0:
var spawn_children = player_spawn_points.get_children()
# Use round-robin to distribute players across spawn points
var spawn_index = _next_spawn_index % spawn_children.size()
_next_spawn_index = (spawn_index + 1) % spawn_children.size()
var spawn_node = spawn_children[spawn_index]
print("[Level] Using spawn point ", spawn_index, " at ", spawn_node.global_position)
return spawn_node.global_position
else:
# Fallback to random circle spawn if no spawn points defined
print("[Level] Warning: No PlayerSpawnPoint container found, using fallback random spawn")
var spawn_point = Vector2.from_angle(randf() * 2 * PI) * 10 # spawn radius
return Vector3(spawn_point.x, 0, spawn_point.y)
func _remove_player(id):
if not multiplayer.is_server() or not players_container.has_node(str(id)):
@@ -388,6 +406,16 @@ func _input(event):
toggle_chat()
elif event is InputEventKey and event.keycode == KEY_ENTER:
_on_send_pressed()
elif event is InputEventKey and event.keycode == KEY_N and event.pressed:
# Start next wave (server only, press N)
if multiplayer.is_server() and enemy_spawner:
enemy_spawner.start_next_wave()
print("[Level] Starting wave via N key")
elif event is InputEventKey and event.keycode == KEY_H and event.pressed:
# Toggle hitbox/hurtbox debug visualization
HitBox.debug_visible = not HitBox.debug_visible
HurtBox.debug_visible = not HurtBox.debug_visible
print("[Level] Hitbox/Hurtbox debug visibility: ", HitBox.debug_visible)
func _on_send_pressed() -> void:
var trimmed_message = message.text.strip_edges()