Fix simulation_server_stub Entity class conflict + ServerConfig load timing

- Renamed inner class Entity→StubEntity (Godot has native Entity class)
- Added await ServerConfig.config_loaded before reading map_list in server_main.gd
- Config loads via call_deferred, so _ready() must wait for signal
This commit is contained in:
2026-07-02 10:24:32 -04:00
parent 4a5264c5b0
commit db477b4c48
4 changed files with 59 additions and 6 deletions
+48
View File
@@ -0,0 +1,48 @@
{
"server": {
"server_name": "Tactical Shooter Server",
"description": "",
"bind_ip": "0.0.0.0",
"port": 34197,
"max_players": 16,
"password": "",
"tick_rate": 128
},
"game": {
"round_time_seconds": 600,
"warmup_time_seconds": 60,
"friendly_fire": false,
"ff_damage_multiplier": 0.5,
"gravity": -24.0,
"respawn_time_seconds": 5.0,
"spectate_enabled": true
},
"movement": {
"walk_speed": 5.0,
"sprint_speed": 7.0,
"crouch_speed": 2.0,
"jump_velocity": 6.0,
"acceleration": 20.0,
"air_acceleration": 4.0,
"friction": 8.0
},
"match": {
"win_limit": 3,
"time_limit_seconds": 0,
"map_rotation_mode": "sequence",
"maps": "test_range"
},
"rcon": {
"enabled": true,
"password": "",
"port": 34198
},
"logging": {
"log_level": "info",
"log_file": ""
},
"teams": {
"team_count": 2,
"players_per_team": 8
}
}
+4
View File
@@ -40,6 +40,10 @@ var _game_server: Node = null
# Lifecycle
# ---------------------------------------------------------------------------
func _ready() -> void:
# Wait for ServerConfig to finish (it loads via call_deferred)
if ServerConfig and ServerConfig.has_signal(&"config_loaded"):
await ServerConfig.config_loaded
# Config driven — ServerConfig singleton loaded at autoload time.
# Allow port override via env var for backwards compatibility
# (container/VPS deployments that set SERVER_PORT).
@@ -0,0 +1 @@
uid://5mvg6r8pob2u
+6 -6
View File
@@ -7,9 +7,9 @@
extends RefCounted
# ---------------------------------------------------------------------------
# Nested: Entity state data
# Nested: StubEntity state data
# ---------------------------------------------------------------------------
class Entity:
class StubEntity:
var id: int = -1
var peer_id: int = -1
var position: Vector3 = Vector3.ZERO
@@ -30,7 +30,7 @@ var _movement_config: Dictionary = {}
var _weapon_config: Dictionary = {}
var _history_depth: int = 64
var _next_entity_id: int = 1
var _entities: Dictionary = {} # entity_id → Entity
var _entities: Dictionary = {} # entity_id → StubEntity
# ---------------------------------------------------------------------------
# SimulationServer API
@@ -51,7 +51,7 @@ func set_history_depth(depth: int) -> void:
_history_depth = depth
func apply_input(entity_id: int, input_dict: Dictionary) -> void:
var e: Entity = _entities.get(entity_id)
var e: StubEntity = _entities.get(entity_id)
if e == null:
return
# Apply movement from input (simplified)
@@ -72,11 +72,11 @@ func fire_weapon(entity_id: int) -> void:
# Stub: log the event
pass
func get_entity(entity_id: int) -> Entity:
func get_entity(entity_id: int) -> StubEntity:
return _entities.get(entity_id)
func spawn_player_entity(peer_id: int, pos: Vector3) -> int:
var e = Entity.new()
var e = StubEntity.new()
e.id = _next_entity_id
e.peer_id = peer_id
e.position = pos