aboutsummaryrefslogtreecommitdiff
path: root/client/scripts
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-06-22 18:14:27 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-23 19:28:50 +0200
commitfbb81024ea206bfad1436e27f49175a815b010b7 (patch)
tree4ec70f7862673f43f8718c47e2f60a78409c807a /client/scripts
parent05269b84133a3a91b5234fcc47f7135eb15e4b3e (diff)
downloadhurrycurry-fbb81024ea206bfad1436e27f49175a815b010b7.tar
hurrycurry-fbb81024ea206bfad1436e27f49175a815b010b7.tar.bz2
hurrycurry-fbb81024ea206bfad1436e27f49175a815b010b7.tar.zst
update multiplayer, add take, put
Diffstat (limited to 'client/scripts')
-rw-r--r--client/scripts/game.gd3
-rw-r--r--client/scripts/multiplayer.gd36
-rw-r--r--client/scripts/player.gd21
-rw-r--r--client/scripts/tiles/full_tile.gd11
4 files changed, 55 insertions, 16 deletions
diff --git a/client/scripts/game.gd b/client/scripts/game.gd
index 48457f9c..0403e7c4 100644
--- a/client/scripts/game.gd
+++ b/client/scripts/game.gd
@@ -28,12 +28,11 @@ func _ready():
player_instance.update_position(position, rotation)
)
- Multiplayer.connect("remove_playern", func(id: int):
+ Multiplayer.connect("remove_player", func(id: int):
var player = players.get(id)
if player != null:
players.erase(id)
player.queue_free()
-
)
Multiplayer.send_join("Blub", 1)
diff --git a/client/scripts/multiplayer.gd b/client/scripts/multiplayer.gd
index 6ac05699..3386d99b 100644
--- a/client/scripts/multiplayer.gd
+++ b/client/scripts/multiplayer.gd
@@ -8,6 +8,12 @@ signal item_message(player: int, item: int)
signal add_player(player: int, name: String, pos: Vector2, character: int)
signal remove_player(player: int)
signal position(player: int, position: Vector2, rotation: float)
+signal take_item(tile: Vector2i, player: int)
+signal put_item(tile: Vector2i, player: int)
+signal set_tile_item(tile: Vector2i, item: int)
+signal remove_tile_item(tile: Vector2i)
+signal set_progress(tile: Vector2i, progress: float, warn: bool)
+signal set_finished(tile: Vector2i, warn: bool)
var connected := false
var socket := WebSocketPeer.new()
@@ -77,19 +83,26 @@ func handle_packet(bytes: PackedByteArray):
var rot = decoded["rot"]
emit_signal("position", id, pos_to_vec2(pos), rot)
"take_item":
- var tile = decoded["tile"]
+ var tile = pos_to_vec2i(decoded["tile"])
var player_id = decoded["player"]
+ emit_signal("take_item", tile, player_id)
"put_item":
- var tile = decoded["tile"]
+ var tile = pos_to_vec2i(decoded["tile"])
var player_id = decoded["player"]
- "produce_item":
- var tile = decoded["tile"]
- var item = decoded["item"]
- "consume_item":
- var tile = decoded["tile"]
- "set_active":
- var tile = decoded["tile"]
- var progress = decoded["progress"]
+ emit_signal("take_item", tile, player_id)
+ "set_progress":
+ var tile = pos_to_vec2i(decoded["tile"])
+ var warn = decoded["warn"]
+ if decoded.has("progress"):
+ emit_signal("set_progress", tile, decoded["progress"], warn)
+ else:
+ emit_signal("set_finished", tile, warn)
+ "set_tile_item":
+ var tile = pos_to_vec2i(decoded["tile"])
+ if decoded.has("item"):
+ emit_signal("set_tile_item", tile, decoded["tile"])
+ else:
+ emit_signal("remove_tile_name", tile)
"update_map":
var tile: int = decoded["tile"]
var pos: Array = decoded["pos"]
@@ -145,3 +158,6 @@ func decode_packet(bytes: PackedByteArray):
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/scripts/player.gd b/client/scripts/player.gd
index 8f53b790..6e07c3aa 100644
--- a/client/scripts/player.gd
+++ b/client/scripts/player.gd
@@ -9,7 +9,9 @@ var position_ = Vector2(0, 0)
var mesh = preload("res://scenes/player.tscn").instantiate()
-func _init(id: int, new_name: String, pos: Vector2, _character: int, new_game: Game):
+var hand: Node3D = null
+
+func _init(id: int, new_name: String, pos: Vector2, _character: int):
add_child(mesh)
position_ = pos
name = new_name
@@ -19,6 +21,17 @@ func update_position(new_position: Vector2, new_rotation: float):
position_ = new_position
rotation.y = new_rotation
-func _process(delta):
- position.x = position_.x
- position.z = position_.y
+func take_item(tile: FullTile):
+ if hand != null:
+ push_error("already holding an item")
+ var i = tile.take_item()
+ if i == null:
+ push_error("tile is null")
+ hand = i
+
+func put_item(tile: FullTile):
+ var i = hand
+ if i == null:
+ push_error("holding nothing")
+ i = null
+ tile.put_item(hand)
diff --git a/client/scripts/tiles/full_tile.gd b/client/scripts/tiles/full_tile.gd
index 7ee1e1fc..bdcca61c 100644
--- a/client/scripts/tiles/full_tile.gd
+++ b/client/scripts/tiles/full_tile.gd
@@ -2,6 +2,7 @@ class_name FullTile
extends Floor
var static_body = StaticBody3D.new()
+var item: Node3D = null
func _init(rename: String, neighbors: Array):
super(rename, neighbors)
@@ -21,3 +22,13 @@ static func interact_target() -> Vector3:
# actions when interacting, e.g. animations
func interact():
pass
+
+func put_item(i: Node3D):
+ if item != null:
+ push_error("already holding an item")
+ item = i
+
+func take_item() -> Node3D:
+ var i = item
+ item = null
+ return i