diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-19 13:38:51 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-19 13:38:59 +0200 |
commit | ba5a51f5fabb68f0e103e41a593b2259ba2a013a (patch) | |
tree | 7fd120abc1eb15286d334f26debb3f37921e1b91 /client | |
parent | e3b813f6948af1bc3bbc640c3aa04c783aeed02e (diff) | |
download | hurrycurry-ba5a51f5fabb68f0e103e41a593b2259ba2a013a.tar hurrycurry-ba5a51f5fabb68f0e103e41a593b2259ba2a013a.tar.bz2 hurrycurry-ba5a51f5fabb68f0e103e41a593b2259ba2a013a.tar.zst |
fix packet types in multiplayer.gd
Diffstat (limited to 'client')
-rw-r--r-- | client/game.gd | 60 | ||||
-rw-r--r-- | client/multiplayer.gd | 30 |
2 files changed, 45 insertions, 45 deletions
diff --git a/client/game.gd b/client/game.gd index 2e600d7c..d286d876 100644 --- a/client/game.gd +++ b/client/game.gd @@ -89,10 +89,9 @@ func handle_packet(p): data_updated.emit() "add_player": - var pos = pos_to_vec2(p["position"]) var player_instance: Player if p.id == player_id: - player_instance = ControllablePlayer.new(p.id, p.name, pos, p.character, self) + player_instance = ControllablePlayer.new(p.id, p.name, p.position, 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 @@ -100,7 +99,7 @@ func handle_packet(p): join_sent = true joined.emit() else: - player_instance = Player.new(p.id, p.name, pos, p.character, self) + player_instance = Player.new(p.id, p.name, p.position, p.character, self) players[p.id] = player_instance add_child(player_instance) update_players.emit(players) @@ -118,12 +117,9 @@ func handle_packet(p): player.queue_free() update_players.emit(players) "movement": - 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 + player_instance.update_position(p.pos, p.rot, p.boost) + if p.player == player_id: last_position = p.pos "movement_sync": if not players.has(player_id): return var player_instance: ControllablePlayer = players[player_id] @@ -132,60 +128,56 @@ func handle_packet(p): 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)) + var t: Tile = map.get_tile_instance(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)) + var t: Tile = map.get_tile_instance(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)) + var from_tile2: Tile = map.get_tile_instance(p.from.tile) + var to_tile2: Tile = map.get_tile_instance(p.to.tile) from_tile2.pass_to(to_tile2) "set_progress": if "tile" in p.item: @warning_ignore("incompatible_ternary") - var t: Tile = map.get_tile_instance(pos_to_vec2i(p.item.tile)) + var t: Tile = map.get_tile_instance(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[p.item.player].progress(p.position, p.speed, p.warn) "clear_progress": if "tile" in p.item: - var t: Tile = map.get_tile_instance(pos_to_vec2i(p.item.tile)) + var t: Tile = map.get_tile_instance(p.item.tile) t.finish() else: players[p.item.player].finish() "set_item": var location: Dictionary = p["location"] - var tile = location.get("tile") - var player = location.get("player") - var item = p.get("item") - if item != null: - if tile != null: - var t: Tile = map.get_tile_instance(pos_to_vec2i(tile)) - var i = ItemFactory.produce(item_names[item], t.item_base) + if p.item != null: + if "tile" in p.location: + var t: Tile = map.get_tile_instance(p.location.tile) + var i = ItemFactory.produce(item_names[p.item], t.item_base) i.position = t.item_base.global_position add_child(i) - i.name = item_names[item] + i.name = item_names[p.item] t.set_item(i) else: - var pl: Player = players[player] - var i = ItemFactory.produce(item_names[item], pl.hand_base) + var pl: Player = players[p.location.player] + var i = ItemFactory.produce(item_names[p.item], pl.hand_base) add_child(i) - i.name = item_names[item] + i.name = item_names[p.item] pl.set_item(i) else: - if tile != null: - var t: Tile = map.get_tile_instance(pos_to_vec2i(tile)) + if "tile" in p.location: + var t: Tile = map.get_tile_instance(p.location.tile) t.set_item(null) else: - players[player].set_item(null) + players[p.location.player].set_item(null) "update_map": - var tile: Vector2i = pos_to_vec2i(p["tile"]) var neighbors: Array = p["neighbors"] 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[p.kind], neighbors) - else: map.clear_tile(tile) + map.set_tile(p.tile, tile_names[p.kind], neighbors) + else: map.clear_tile(p.tile) "communicate": 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. @@ -327,9 +319,3 @@ func spectate_free(): var extents = map.extents() $Center.position.x = clamp($Center.position.x, extents[0].x, extents[1].x) $Center.position.z = clamp($Center.position.z, extents[0].y, extents[1].y) - -func pos_to_vec2(pos: Array) -> Vector2: - return Vector2(pos[0], pos[1]) - -func pos_to_vec2i(pos: Array) -> Vector2i: - return Vector2i(pos[0], pos[1]) diff --git a/client/multiplayer.gd b/client/multiplayer.gd index 6b642d90..fa429514 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -52,10 +52,30 @@ func _process(_delta): connection_closed.emit(tr("c.error.websocket") % [code, reason, code != -1]) self.queue_free() +func fix_packet_types(val): + match typeof(val): + TYPE_FLOAT: return val + TYPE_STRING: return val + TYPE_BOOL: return val + TYPE_ARRAY: return val.map(fix_packet_types) + TYPE_DICTIONARY: + var newval = {} + for k in val.keys(): + if typeof(val[k]) == TYPE_ARRAY and val[k].size() == 2 and typeof(val[k][0]) == TYPE_FLOAT and typeof(val[k][1]) == TYPE_FLOAT: + if k in ["tile"]: newval[k] = Vector2i(val[k][0], val[k][1]) + elif k in ["pos", "position"]: newval[k] = Vector2(val[k][0], val[k][1]) + elif k in ["player", "id"] and typeof(val[k]) == TYPE_FLOAT: + newval[k] = int(val[k]) + else: + newval[k] = fix_packet_types(val[k]) + return newval + func handle_packet(coded): var p = decode_packet(coded) if p == null: return + + p = fix_packet_types(p) match p["type"]: "version": @@ -116,8 +136,8 @@ func send_leave(player: int): "player": player, }) -func send_packet(packet): - var json = JSON.stringify(packet) +func send_packet(p): + var json = JSON.stringify(p) socket.send_text(json) func decode_packet(bytes: PackedByteArray): @@ -129,9 +149,3 @@ func decode_packet(bytes: PackedByteArray): else: print("Decode of packet failed: %s in %s" % [json.get_error_message(), in_str]) return null - -func pos_to_vec2(pos: Array) -> Vector2: - return Vector2(pos[0], pos[1]) - -func pos_to_vec2i(pos: Array) -> Vector2i: - return Vector2i(pos[0], pos[1]) |