summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd60
-rw-r--r--client/multiplayer.gd30
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])