diff options
| -rw-r--r-- | racing/load.gd | 6 | ||||
| -rw-r--r-- | racing/lobby.gd | 18 | ||||
| -rw-r--r-- | racing/manager.gd | 1 | ||||
| -rw-r--r-- | racing/multiplayer.gd | 52 |
4 files changed, 54 insertions, 23 deletions
| diff --git a/racing/load.gd b/racing/load.gd index 503aa3a..cd60c65 100644 --- a/racing/load.gd +++ b/racing/load.gd | |||
| @@ -2,6 +2,8 @@ extends "res://scripts/load.gd" | |||
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | func _load(): | 4 | func _load(): |
| 5 | global._print("Hooked Load Start") | ||
| 6 | |||
| 5 | disable_saving = true | 7 | disable_saving = true |
| 6 | 8 | ||
| 7 | var player = get_node("player") | 9 | var player = get_node("player") |
| @@ -54,8 +56,12 @@ func _load(): | |||
| 54 | "MeshInstance5" | 56 | "MeshInstance5" |
| 55 | ) | 57 | ) |
| 56 | 58 | ||
| 59 | global._print("Hooked Load Stop") | ||
| 60 | |||
| 57 | ._load() | 61 | ._load() |
| 58 | 62 | ||
| 63 | global._print("MP Loaded") | ||
| 64 | |||
| 59 | multiplayer.player_loaded() | 65 | multiplayer.player_loaded() |
| 60 | 66 | ||
| 61 | 67 | ||
| diff --git a/racing/lobby.gd b/racing/lobby.gd index 87647bb..933345e 100644 --- a/racing/lobby.gd +++ b/racing/lobby.gd | |||
| @@ -15,6 +15,7 @@ const MAX_PLAYERS = 250 | |||
| 15 | const PROTOCOL_VERSION = 2 | 15 | const PROTOCOL_VERSION = 2 |
| 16 | const RECIPIENT_BROADCAST_ALL = -1 | 16 | const RECIPIENT_BROADCAST_ALL = -1 |
| 17 | const LOBBY_MAP_NAME = "ll1_racing" | 17 | const LOBBY_MAP_NAME = "ll1_racing" |
| 18 | const VERSION = "0.0.2" | ||
| 18 | 19 | ||
| 19 | const LL1_AREAS = [ | 20 | const LL1_AREAS = [ |
| 20 | ["Starting Room", 0, 0, 0], | 21 | ["Starting Room", 0, 0, 0], |
| @@ -90,6 +91,9 @@ func _ready(): | |||
| 90 | 91 | ||
| 91 | global.add_child(race_manager) | 92 | global.add_child(race_manager) |
| 92 | 93 | ||
| 94 | var race_manager = global.get_node("RaceManager") | ||
| 95 | race_manager.held_messages.clear() | ||
| 96 | |||
| 93 | var _ignore = get_node("Panel/main_button").connect("pressed", self, "_main_button_pressed") | 97 | var _ignore = get_node("Panel/main_button").connect("pressed", self, "_main_button_pressed") |
| 94 | _ignore = get_node("Panel/return_button").connect("pressed", self, "_return_button_pressed") | 98 | _ignore = get_node("Panel/return_button").connect("pressed", self, "_return_button_pressed") |
| 95 | 99 | ||
| @@ -100,13 +104,14 @@ func _ready(): | |||
| 100 | dynamic_font.outline_size = 2 | 104 | dynamic_font.outline_size = 2 |
| 101 | get_node("Panel/ItemList").add_font_override("font", dynamic_font) | 105 | get_node("Panel/ItemList").add_font_override("font", dynamic_font) |
| 102 | 106 | ||
| 103 | get_node("Panel/title").text = "LINGO RACING LOBBY (%s)" % global.save_file | 107 | get_node("Panel/title").text = "LINGO RACING %s LOBBY (%s)" % [VERSION, global.save_file] |
| 104 | 108 | ||
| 105 | player_steam_id = Steam.getSteamID() | 109 | player_steam_id = Steam.getSteamID() |
| 106 | 110 | ||
| 107 | _ignore = Steam.connect("lobby_match_list", self, "_on_lobby_match_list") | 111 | _ignore = Steam.connect("lobby_match_list", self, "_on_lobby_match_list") |
| 108 | _ignore = Steam.connect("lobby_created", self, "_on_lobby_created") | 112 | _ignore = Steam.connect("lobby_created", self, "_on_lobby_created") |
| 109 | _ignore = Steam.connect("lobby_joined", self, "_on_lobby_joined") | 113 | _ignore = Steam.connect("lobby_joined", self, "_on_lobby_joined") |
| 114 | _ignore = Steam.connect("lobby_chat_update", self, "_on_lobby_chat_update") | ||
| 110 | _ignore = Steam.connect("lobby_data_update", self, "_on_lobby_data_update") | 115 | _ignore = Steam.connect("lobby_data_update", self, "_on_lobby_data_update") |
| 111 | _ignore = Steam.connect("persona_state_change", self, "_on_persona_state_change") | 116 | _ignore = Steam.connect("persona_state_change", self, "_on_persona_state_change") |
| 112 | _ignore = Steam.connect("p2p_session_request", self, "_on_p2p_session_request") | 117 | _ignore = Steam.connect("p2p_session_request", self, "_on_p2p_session_request") |
| @@ -201,6 +206,12 @@ func _on_lobby_joined(lobby_id: int, _permissions: int, _locked: bool, result: i | |||
| 201 | _update_lobby_members() | 206 | _update_lobby_members() |
| 202 | 207 | ||
| 203 | 208 | ||
| 209 | func _on_lobby_chat_update( | ||
| 210 | _lobby_id: int, _member_id: int, _making_change_id: int, _chat_state: int | ||
| 211 | ) -> void: | ||
| 212 | _update_lobby_members() | ||
| 213 | |||
| 214 | |||
| 204 | func _on_lobby_data_update(_lobby_id: int, _member_id: int, _key: int) -> void: | 215 | func _on_lobby_data_update(_lobby_id: int, _member_id: int, _key: int) -> void: |
| 205 | _update_lobby_members() | 216 | _update_lobby_members() |
| 206 | 217 | ||
| @@ -255,6 +266,10 @@ func _read_p2p_packet() -> void: | |||
| 255 | var packet: Dictionary = Steam.readP2PPacket(packet_size, 0) | 266 | var packet: Dictionary = Steam.readP2PPacket(packet_size, 0) |
| 256 | var remote_id = packet["steam_id_remote"] | 267 | var remote_id = packet["steam_id_remote"] |
| 257 | if remote_id in active_lobby_members: | 268 | if remote_id in active_lobby_members: |
| 269 | var race_manager = global.get_node("RaceManager") | ||
| 270 | if is_starting: | ||
| 271 | race_manager.held_messages.append(packet.duplicate(true)) | ||
| 272 | return | ||
| 258 | var serialized: PoolByteArray = packet["data"] | 273 | var serialized: PoolByteArray = packet["data"] |
| 259 | var data: Dictionary = bytes2var(serialized, false) | 274 | var data: Dictionary = bytes2var(serialized, false) |
| 260 | if "message_id" in data: | 275 | if "message_id" in data: |
| @@ -267,7 +282,6 @@ func _read_p2p_packet() -> void: | |||
| 267 | false | 282 | false |
| 268 | ) | 283 | ) |
| 269 | if "start_x" in data: | 284 | if "start_x" in data: |
| 270 | var race_manager = global.get_node("RaceManager") | ||
| 271 | race_manager.start_pos = [ | 285 | race_manager.start_pos = [ |
| 272 | data["start_name"], | 286 | data["start_name"], |
| 273 | int(data["start_x"]), | 287 | int(data["start_x"]), |
| diff --git a/racing/manager.gd b/racing/manager.gd index e2cd728..24ae409 100644 --- a/racing/manager.gd +++ b/racing/manager.gd | |||
| @@ -5,6 +5,7 @@ var SCRIPT_multiplayer | |||
| 5 | var start_pos | 5 | var start_pos |
| 6 | var end_pos | 6 | var end_pos |
| 7 | var lobby_id | 7 | var lobby_id |
| 8 | var held_messages = [] | ||
| 8 | 9 | ||
| 9 | 10 | ||
| 10 | func everyone_ready(): | 11 | func everyone_ready(): |
| diff --git a/racing/multiplayer.gd b/racing/multiplayer.gd index 4255ba6..2df69c1 100644 --- a/racing/multiplayer.gd +++ b/racing/multiplayer.gd | |||
| @@ -41,6 +41,11 @@ func _ready(): | |||
| 41 | 41 | ||
| 42 | # _request_lobby_list() | 42 | # _request_lobby_list() |
| 43 | 43 | ||
| 44 | var race_manager = global.get_node("RaceManager") | ||
| 45 | for packet in race_manager.held_messages: | ||
| 46 | _handle_packet(packet) | ||
| 47 | race_manager.held_messages.clear() | ||
| 48 | |||
| 44 | 49 | ||
| 45 | func _process(_delta: float) -> void: | 50 | func _process(_delta: float) -> void: |
| 46 | _read_p2p_packet() | 51 | _read_p2p_packet() |
| @@ -197,27 +202,32 @@ func _read_p2p_packet() -> void: | |||
| 197 | var packet: Dictionary = Steam.readP2PPacket(packet_size, 0) | 202 | var packet: Dictionary = Steam.readP2PPacket(packet_size, 0) |
| 198 | var remote_id = packet["steam_id_remote"] | 203 | var remote_id = packet["steam_id_remote"] |
| 199 | if remote_id in active_lobby_members: | 204 | if remote_id in active_lobby_members: |
| 200 | var serialized: PoolByteArray = packet["data"] | 205 | _handle_packet(packet) |
| 201 | var data: Dictionary = bytes2var(serialized, false) | 206 | |
| 202 | if "global_transform" in data: | 207 | |
| 203 | _receive_member_location(remote_id, data["global_transform"]) | 208 | func _handle_packet(packet): |
| 204 | if "message_id" in data: | 209 | var remote_id = packet["steam_id_remote"] |
| 205 | _send_p2p_packet( | 210 | var serialized: PoolByteArray = packet["data"] |
| 206 | { | 211 | var data: Dictionary = bytes2var(serialized, false) |
| 207 | "ack": data["message_id"], | 212 | if "global_transform" in data: |
| 208 | }, | 213 | _receive_member_location(remote_id, data["global_transform"]) |
| 209 | remote_id, | 214 | if "message_id" in data: |
| 210 | Steam.P2P_SEND_RELIABLE_WITH_BUFFERING, | 215 | _send_p2p_packet( |
| 211 | false | 216 | { |
| 212 | ) | 217 | "ack": data["message_id"], |
| 213 | if "loaded" in data: | 218 | }, |
| 214 | _update_lobby_members() | 219 | remote_id, |
| 215 | if "timeout" in data: | 220 | Steam.P2P_SEND_RELIABLE_WITH_BUFFERING, |
| 216 | _update_lobby_members() | 221 | false |
| 217 | if "victory" in data: | 222 | ) |
| 218 | _someone_victory(Steam.getFriendPersonaName(remote_id)) | 223 | if "loaded" in data: |
| 219 | if "ack" in data: | 224 | _update_lobby_members() |
| 220 | messages_needing_ack.erase(data["ack"]) | 225 | if "timeout" in data: |
| 226 | _update_lobby_members() | ||
| 227 | if "victory" in data: | ||
| 228 | _someone_victory(Steam.getFriendPersonaName(remote_id)) | ||
| 229 | if "ack" in data: | ||
| 230 | messages_needing_ack.erase(data["ack"]) | ||
| 221 | 231 | ||
| 222 | 232 | ||
| 223 | func _receive_member_location(member_id: int, global_transform) -> void: | 233 | func _receive_member_location(member_id: int, global_transform) -> void: |
