feat: implement core movement, combat, weapon management, and networking systems
This commit is contained in:
@@ -5,6 +5,7 @@ signal player_disconnected(id: int)
|
||||
signal connection_failed
|
||||
signal connection_succeeded
|
||||
signal match_state_updated
|
||||
signal match_ended
|
||||
signal stats_updated
|
||||
signal killfeed_event(victim: String, killer: String, weapon: String, v_color: String, k_color: String)
|
||||
|
||||
@@ -17,6 +18,7 @@ var player_stats: Dictionary = {}
|
||||
|
||||
var match_active: bool = false
|
||||
var match_time_remaining: float = 0.0
|
||||
var match_duration_setting: float = 300.0
|
||||
var current_gamemode: String = "Deathmatch"
|
||||
var current_scene_path: String = ""
|
||||
|
||||
@@ -94,9 +96,6 @@ func _on_peer_connected(id: int) -> void:
|
||||
print("Player connected: ", id)
|
||||
if not connected_players.has(id):
|
||||
connected_players.append(id)
|
||||
|
||||
# If server, we wait for the client to register themselves via RPC
|
||||
pass
|
||||
|
||||
func _on_peer_disconnected(id: int) -> void:
|
||||
print("Player disconnected: ", id)
|
||||
@@ -130,15 +129,24 @@ func register_player(username: String) -> void:
|
||||
if multiplayer.is_server():
|
||||
var sender_id = multiplayer.get_remote_sender_id()
|
||||
_init_player_stats(sender_id, username)
|
||||
player_connected.emit(sender_id)
|
||||
|
||||
# Sync everyone's stats
|
||||
rpc("sync_player_stats", player_stats)
|
||||
|
||||
# If a match is active, force the late-joiner to load the level
|
||||
if match_active:
|
||||
rpc_id(sender_id, "rpc_load_level", current_scene_path)
|
||||
rpc_id(sender_id, "sync_match_state", match_active, match_time_remaining, current_gamemode)
|
||||
else:
|
||||
player_connected.emit(sender_id)
|
||||
|
||||
# Sync everyone's stats
|
||||
rpc("sync_player_stats", player_stats)
|
||||
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
func client_ready_for_spawn() -> void:
|
||||
if multiplayer.is_server():
|
||||
var sender_id = multiplayer.get_remote_sender_id()
|
||||
if sender_id == 0:
|
||||
sender_id = 1
|
||||
player_connected.emit(sender_id)
|
||||
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func update_username(new_name: String) -> void:
|
||||
@@ -170,7 +178,7 @@ func rpc_load_level(scene_path: String) -> void:
|
||||
current_scene_path = scene_path
|
||||
if multiplayer.is_server():
|
||||
match_active = true
|
||||
match_time_remaining = 300.0 # 5 minutes
|
||||
match_time_remaining = match_duration_setting
|
||||
rpc("sync_match_state", match_active, match_time_remaining, current_gamemode)
|
||||
get_tree().change_scene_to_file(scene_path)
|
||||
|
||||
@@ -181,9 +189,16 @@ func _process(delta: float) -> void:
|
||||
if match_time_remaining <= 0:
|
||||
match_time_remaining = 0
|
||||
match_active = false
|
||||
if multiplayer.is_server() or multiplayer.multiplayer_peer is OfflineMultiplayerPeer:
|
||||
rpc("rpc_end_match")
|
||||
# We emit this so HUDs can update their timers smoothly
|
||||
match_state_updated.emit()
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func rpc_end_match() -> void:
|
||||
match_active = false
|
||||
match_ended.emit()
|
||||
|
||||
# --- PING SYSTEM ---
|
||||
func _on_ping_timer() -> void:
|
||||
if multiplayer.is_server():
|
||||
|
||||
Reference in New Issue
Block a user