aboutsummaryrefslogtreecommitdiff
path: root/client/multiplayer.gd
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-06-25 22:31:17 +0200
committernokoe <nokoe@mailbox.org>2024-06-25 23:39:19 +0200
commit8bb065604fbd12b14a7605cfa265ebf38890f628 (patch)
tree811866aec6093924694605155d9962261c57cb17 /client/multiplayer.gd
parentab6279e726ac7e10a4c5211a3d3827471fd35ccf (diff)
downloadhurrycurry-8bb065604fbd12b14a7605cfa265ebf38890f628.tar
hurrycurry-8bb065604fbd12b14a7605cfa265ebf38890f628.tar.bz2
hurrycurry-8bb065604fbd12b14a7605cfa265ebf38890f628.tar.zst
multiplayer refactor
Diffstat (limited to 'client/multiplayer.gd')
-rw-r--r--client/multiplayer.gd62
1 files changed, 31 insertions, 31 deletions
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index b9242a41..db891562 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -19,7 +19,14 @@ class_name Multiplayer
extends Node
signal init(player_id: int)
-signal update_map(tile: int, pos: Array, neighbors: Array)
+signal data(
+ item_names: Array,
+ tile_names: Array,
+ tile_collide: Array,
+ tile_interact: Array
+)
+signal set_tile(tile: Vector2i, kind: int, neighbors: Array)
+signal remove_tile(tile: Vector2i)
signal clear_message(player: int)
signal text_message(player: int, text: String)
signal item_message(player: int, item: int)
@@ -40,15 +47,6 @@ signal connection_closed(reason: String)
var connected := false
var socket := WebSocketPeer.new()
-var item_names = []
-var tile_names = []
-var tile_collide = []
-var tile_interact = []
-var item_idx_from_name: Dictionary = {}
-var player_id = -1
-
-var tileid_by_pos: Dictionary = {}
-
func _ready():
print("Multiplayer connect");
socket.connect_to_url(Global.server_url)
@@ -82,14 +80,19 @@ func handle_packet(bytes: PackedByteArray):
var packet_type: String = decoded["type"]
match packet_type:
"init":
- player_id = decoded["id"]
- item_names = decoded["data"]["item_names"]
- tile_names = decoded["data"]["tile_names"]
- tile_collide = decoded["data"]["tile_collide"]
- tile_interact = decoded["data"]["tile_interact"]
- for i in range(item_names.size()):
- item_idx_from_name[item_names[i]] = i
+ var player_id = decoded["id"]
emit_signal("init", player_id)
+ "data":
+ var item_names = decoded["data"]["item_names"]
+ var tile_names = decoded["data"]["tile_names"]
+ var tile_collide = decoded["data"]["tile_collide"]
+ var tile_interact = decoded["data"]["tile_interact"]
+ emit_signal("data",
+ item_names,
+ tile_names,
+ tile_collide,
+ tile_interact
+ )
"add_player":
var id = decoded["id"]
var player_name = decoded["name"]
@@ -135,11 +138,18 @@ func handle_packet(bytes: PackedByteArray):
else:
emit_signal("remove_player_item", player)
"update_map":
- var tile: int = decoded["tile"]
- var pos: Array = decoded["pos"]
+ var tile: Vector2i = pos_to_vec2i(decoded["tile"])
+ var kind = decoded.get("kind")
var neighbors: Array = decoded["neighbors"]
- tileid_by_pos[str(Vector2i(pos[0],pos[1]))] = tile
- emit_signal("update_map", pos, tile_names[tile], neighbors.map(func (x): return tile_names[x] if x != null else null))
+ if kind != null:
+ emit_signal(
+ "set_tile",
+ tile,
+ kind,
+ neighbors,
+ )
+ else:
+ emit_signal("remove_tile", tile)
"communicate":
var player = decoded["player"]
var message = decoded.get("message")
@@ -200,13 +210,3 @@ func pos_to_vec2(pos: Array) -> Vector2:
func pos_to_vec2i(pos: Array) -> Vector2i:
return Vector2i(pos[0], pos[1])
-
-func get_tile_collision(pos: Vector2i) -> bool:
- var t = tileid_by_pos.get(str(pos))
- if t == null: return false
- else: return tile_collide[t]
-
-func get_tile_interactive(pos: Vector2i) -> bool:
- var t = tileid_by_pos.get(str(pos))
- if t == null: return false
- else: return tile_interact[t]