diff options
-rw-r--r-- | client/game.gd | 136 |
1 files changed, 47 insertions, 89 deletions
diff --git a/client/game.gd b/client/game.gd index 1bc4ec95..2e600d7c 100644 --- a/client/game.gd +++ b/client/game.gd @@ -89,13 +89,10 @@ func handle_packet(p): data_updated.emit() "add_player": - var id = p["id"] - var player_name = p["name"] var pos = pos_to_vec2(p["position"]) - var character = p["character"] var player_instance: Player - if id == player_id: - player_instance = ControllablePlayer.new(id, player_name, pos, character, self) + if p.id == player_id: + player_instance = ControllablePlayer.new(p.id, p.name, pos, p.character, self) in_lobby_updated.connect(player_instance.onscreen_controls.in_lobby_updated) player_instance.onscreen_controls.in_lobby_updated(in_lobby) camera.target = player_instance.movement_base @@ -103,8 +100,8 @@ func handle_packet(p): join_sent = true joined.emit() else: - player_instance = Player.new(id, player_name, pos, character, self) - players[id] = player_instance + player_instance = Player.new(p.id, p.name, pos, p.character, self) + players[p.id] = player_instance add_child(player_instance) update_players.emit(players) "remove_player": @@ -121,63 +118,42 @@ func handle_packet(p): player.queue_free() update_players.emit(players) "movement": - var player = p["player"] - var pos = pos_to_vec2(p["pos"]) - var rot = p["rot"] - var boost = p["boost"] - var dir = pos_to_vec2(p["dir"]) - var player_instance: Player = players[player] - player_instance.update_position(pos, rot, boost) - if player == player_id: + var pos = pos_to_vec2(p.pos) + var dir = pos_to_vec2(p.dir) + var player_instance: Player = players[p.player] + player_instance.update_position(pos, p.rot, p.boost) + if p.player == player_id: last_position = pos "movement_sync": if not players.has(player_id): return var player_instance: ControllablePlayer = players[player_id] player_instance.position_ = last_position "move_item": - var from: Dictionary = p["from"] - var to: Dictionary = p["to"] - var from_player = from.get("player") - var from_tile = from.get("tile") - var to_player = to.get("player") - var to_tile = to.get("tile") - if from_player != null and to_player != null: - players[from_player].pass_to(players[to_player]) - elif from_tile != null and to_player != null: - var t: Tile = map.get_tile_instance(pos_to_vec2i(from_tile)) - players[to_player].take_item(t) - elif from_player != null and to_tile != null: - var t: Tile = map.get_tile_instance(pos_to_vec2i(to_tile)) - players[from_player].put_item(t) - elif from_tile != null and to_tile != null: - var from_tile2: Tile = map.get_tile_instance(pos_to_vec2i(from_tile)) - var to_tile2: Tile = map.get_tile_instance(pos_to_vec2i(to_tile)) + if "player" in p.from and "player" in p.to: + players[p.from.player].pass_to(p.to.player) + elif "tile" in p.from and "player" in p.to: + var t: Tile = map.get_tile_instance(pos_to_vec2i(p.from.tile)) + players[p.to.player].take_item(t) + elif "player" in p.from and "tile" in p.to: + var t: Tile = map.get_tile_instance(pos_to_vec2i(p.to.tile)) + players[p.from.player].put_item(t) + elif "tile" in p.from and "tile" in p.to: + var from_tile2: Tile = map.get_tile_instance(pos_to_vec2i(p.from.tile)) + var to_tile2: Tile = map.get_tile_instance(pos_to_vec2i(p.to.tile)) from_tile2.pass_to(to_tile2) "set_progress": - var warn: bool = p["warn"] - var position: float = p["position"] - var speed: float = p["speed"] - var item: Dictionary = p["item"] - var tile = item.get("tile") - var player = item.get("player") - var acting_player = p.get("player") - - if tile != null: + if "tile" in p.item: @warning_ignore("incompatible_ternary") - var t: Tile = map.get_tile_instance(pos_to_vec2i(tile)) - t.progress(position, speed, warn, players.get(int(acting_player) if acting_player != null else null)) + var t: Tile = map.get_tile_instance(pos_to_vec2i(p.item.tile)) + t.progress(p.position, p.speed, p.warn, players.get(p.acting_player if "acting_player" in p else null)) else: - players[player].progress(position, speed, warn) + players[p.item.player].progress(p.position, p.speed, p.warn) "clear_progress": - var item: Dictionary = p["item"] - var tile = item.get("tile") - var player = item.get("player") - - if tile != null: - var t: Tile = map.get_tile_instance(pos_to_vec2i(tile)) + if "tile" in p.item: + var t: Tile = map.get_tile_instance(pos_to_vec2i(p.item.tile)) t.finish() else: - players[player].finish() + players[p.item.player].finish() "set_item": var location: Dictionary = p["location"] var tile = location.get("tile") @@ -205,42 +181,32 @@ func handle_packet(p): players[player].set_item(null) "update_map": var tile: Vector2i = pos_to_vec2i(p["tile"]) - var kind = p.get("kind") var neighbors: Array = p["neighbors"] - if kind != null: + if p.kind != null: if neighbors != null: neighbors = neighbors.map(func(x): return tile_names[x] if x != null else null) - map.set_tile(tile, tile_names[kind], neighbors) + map.set_tile(tile, tile_names[p.kind], neighbors) else: map.clear_tile(tile) "communicate": - var player: int = p["player"] - var message = p.get("message") var timeout_initial: float = p["timeout"]["initial"] if p["timeout"] != null else 5. var timeout_remaining: float = p["timeout"]["remaining"] if p["timeout"] != null else 5. - if message != null: - var item = message.get("item") - var text = message.get("text") - var effect = message.get("effect") - if item != null: - players[player].item_message(item_names[item], timeout_initial, timeout_remaining) - elif text != null: - players[player].text_message(text, timeout_initial, timeout_remaining) - var username: String = players[player].username - text_message.emit(username, text, timeout_initial, timeout_remaining) - text_message_history.append([username, text]) + if p.message != null: + if "item" in p.message: + players[p.player].item_message(item_names[p.message.item], timeout_initial, timeout_remaining) + elif "text" in p.message: + players[p.player].text_message(p.message.text, timeout_initial, timeout_remaining) + var username: String = players[p.player].username + text_message.emit(username, p.message.text, timeout_initial, timeout_remaining) + text_message_history.append([username, p.message.text]) else: push_error("neither text, item nor effect provided") else: - players[player].clear_message() + players[p.player].clear_message() "effect": - var player: int = p["player"] - var name: int = p["name"] - players[player].effect_message(name) + players[p.player].effect_message(p.name) "set_ingame": - var state = p["state"] - var lob = p["lobby"] - in_lobby = lob + in_lobby = p.lobby in_lobby_updated.emit(in_lobby) - if state: + if p.state: map.gi_bake() await get_parent()._menu_open() map.autobake = true @@ -255,21 +221,13 @@ func handle_packet(p): if lobby and not join_sent: join() - overlay.set_ingame(state, lob) - follow_camera.set_ingame(state, lob) - "error": - var message = p["message"] - push_warning("server error: %s" % message) + overlay.set_ingame(p.state, p.lobby) + follow_camera.set_ingame(p.state, p.lobby) "score": - var demands_failed: int = p["demands_failed"] - var demands_completed: int = p["demands_completed"] - var points: int = p["points"] - var time_remaining = p.get("time_remaining") - if time_remaining != null: - overlay.update(demands_failed, demands_completed, points, time_remaining) + if p.time_remaining != null: + overlay.update(p.demands_failed, p.demands_completed, p.points, p.time_remaining) "menu": - var menu_type: String = p["menu"] - match menu_type: + match p.menu: "book": menu.submenu("res://menu/book/book.tscn") "score": @@ -283,7 +241,7 @@ func handle_packet(p): else: popup_message.display_server_msg(mstr) "environment": - $Environment.update(p["effects"]) + $Environment.update(p.effects) "replay_start": is_replay = true |