aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd22
-rw-r--r--client/map/tiles/grass_side.resbin1433 -> 0 bytes
-rw-r--r--client/map/tiles/grass_side.tres45
-rw-r--r--client/map/tiles/grass_side.tscn2
-rw-r--r--client/multiplayer.gd69
-rw-r--r--client/player/controllable_player.gd4
-rw-r--r--client/player/player.gd14
7 files changed, 143 insertions, 13 deletions
diff --git a/client/game.gd b/client/game.gd
index 51f593a7..3102c84d 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -133,22 +133,38 @@ func _ready():
p.take_item(t)
)
- mp.put_item.connect(func(tile: Vector2i, player: int):
+ mp.put_item.connect(func(player: int, tile: Vector2i):
var t: Tile = map.get_tile_instance(tile)
var p: Player = players[player]
p.put_item(t)
)
- mp.set_progress.connect(func(tile: Vector2i, progress: float, warn: bool):
+ mp.pass_item.connect(func(from: int, to: int):
+ var from_player: Player = players[from]
+ var to_player: Player = players[to]
+ from_player.pass_to(to_player)
+ )
+
+ mp.set_tile_progress.connect(func(tile: Vector2i, progress: float, warn: bool):
var t: Tile = map.get_tile_instance(tile)
t.progress(progress, warn)
)
- mp.set_finished.connect(func(tile: Vector2i, warn: bool):
+ mp.set_tile_finished.connect(func(tile: Vector2i, warn: bool):
var t: Tile = map.get_tile_instance(tile)
t.finish(warn)
)
+ mp.set_player_progress.connect(func(player: int, progress: float, warn: bool):
+ var p: Player = players[player]
+ p.progress(progress, warn)
+ )
+
+ mp.set_player_finished.connect(func(player: int, warn: bool):
+ var p: Player = players[player]
+ p.finish(warn)
+ )
+
mp.text_message.connect(func(player: int, text: String, persist: bool):
var p: Player = players[player]
p.text_message(text, persist)
diff --git a/client/map/tiles/grass_side.res b/client/map/tiles/grass_side.res
deleted file mode 100644
index 1e008942..00000000
--- a/client/map/tiles/grass_side.res
+++ /dev/null
Binary files differ
diff --git a/client/map/tiles/grass_side.tres b/client/map/tiles/grass_side.tres
new file mode 100644
index 00000000..3e9e0729
--- /dev/null
+++ b/client/map/tiles/grass_side.tres
@@ -0,0 +1,45 @@
+[gd_resource type="ArrayMesh" load_steps=4 format=3 uid="uid://l2by4gv4wpd1"]
+
+[ext_resource type="Texture2D" uid="uid://p35o0tkyfmrl" path="res://map/tiles/grass_side.webp" id="1_ud4dd"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nudmg"]
+resource_name = "grass"
+transparency = 4
+cull_mode = 2
+albedo_texture = ExtResource("1_ud4dd")
+subsurf_scatter_strength = 1.0
+backlight_enabled = true
+backlight = Color(1, 1, 1, 1)
+texture_repeat = false
+
+[sub_resource type="ArrayMesh" id="ArrayMesh_t8hod"]
+_surfaces = [{
+"aabb": AABB(-0.535714, 0, -0.5, 1.07143, 1e-05, 1.00001),
+"format": 34896613377,
+"index_count": 6,
+"index_data": PackedByteArray(0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 3, 0),
+"name": "grass",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 4,
+"vertex_data": PackedByteArray(0, 0, 0, 0, 254, 255, 0, 0, 255, 255, 0, 0, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0)
+}]
+blend_shape_mode = 0
+
+[resource]
+resource_name = "grass_side_grass"
+_surfaces = [{
+"aabb": AABB(-0.535714, 0, -0.5, 1.07143, 1e-05, 1.00001),
+"attribute_data": PackedByteArray(0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0),
+"format": 34896613399,
+"index_count": 6,
+"index_data": PackedByteArray(0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 3, 0),
+"material": SubResource("StandardMaterial3D_nudmg"),
+"name": "grass",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 4,
+"vertex_data": PackedByteArray(0, 0, 0, 0, 254, 255, 255, 191, 255, 255, 0, 0, 254, 255, 255, 191, 0, 0, 0, 0, 0, 0, 255, 191, 255, 255, 0, 0, 0, 0, 255, 191, 255, 255, 255, 127, 255, 255, 255, 127, 255, 255, 255, 127, 255, 255, 255, 127)
+}]
+blend_shape_mode = 0
+shadow_mesh = SubResource("ArrayMesh_t8hod")
diff --git a/client/map/tiles/grass_side.tscn b/client/map/tiles/grass_side.tscn
index cfa7c97a..c49ea4ca 100644
--- a/client/map/tiles/grass_side.tscn
+++ b/client/map/tiles/grass_side.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dbp0ts6tfycev"]
-[ext_resource type="ArrayMesh" uid="uid://bxtxpg4lsk613" path="res://map/tiles/grass_side.res" id="1_u044x"]
+[ext_resource type="ArrayMesh" path="res://map/tiles/grass_side.tres" id="1_u044x"]
[node name="GrassSide" type="Node3D"]
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index eae2a7f0..d4864d01 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -35,13 +35,16 @@ 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 put_item(player: int, tile: Vector2i, )
+signal pass_item(from: int, to: int)
signal set_tile_item(tile: Vector2i, item: int)
signal remove_tile_item(tile: Vector2i)
signal set_player_item(player: int, item: int)
signal remove_player_item(player: int)
-signal set_progress(tile: Vector2i, progress: float, warn: bool)
-signal set_finished(tile: Vector2i, warn: bool)
+signal set_tile_progress(tile: Vector2i, progress: float, warn: bool)
+signal set_player_progress(player: int, progress: float, warn: bool)
+signal set_tile_finished(tile: Vector2i, warn: bool)
+signal set_player_finished(player: int, warn: bool)
signal set_ingame(state: bool)
signal score(demands_failed: int, demands_completed: int, points: int, time_remaining: float)
signal hide_score()
@@ -110,22 +113,55 @@ func handle_packet(bytes: PackedByteArray):
var rot = decoded["rot"]
position.emit(player, pos_to_vec2(pos), rot)
"take_item":
+ push_warning("take_item is deprecated")
var tile = pos_to_vec2i(decoded["tile"])
var player = decoded["player"]
take_item.emit(tile, player)
"put_item":
+ push_warning("put_item is deprecated")
var tile = pos_to_vec2i(decoded["tile"])
var player = decoded["player"]
put_item.emit(tile, player)
+ "move_item":
+ var from: Dictionary = decoded["from"]
+ var to: Dictionary = decoded["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:
+ pass_item.emit(from_player, to_player)
+ elif from_tile != null and to_player != null:
+ take_item.emit(pos_to_vec2i(from_tile), to_player)
+ elif from_player != null and to_tile != null:
+ put_item.emit(from_player, pos_to_vec2i(to_tile))
"set_active":
+ push_warning("set_active is deprecated")
var tile = pos_to_vec2i(decoded["tile"])
var warn = decoded["warn"]
var progress = decoded.get("progress")
if progress != null:
- set_progress.emit(tile, decoded["progress"], warn)
+ set_tile_progress.emit(tile, progress, warn)
else:
- set_finished.emit(tile, warn)
+ set_tile_finished.emit(tile, warn)
+ "set_progress":
+ var item: Dictionary = decoded["item"]
+ var tile = item.get("tile")
+ var player = item.get("player")
+ var warn = decoded["warn"]
+ var progress = decoded.get("progress")
+ if progress != null:
+ if tile != null:
+ set_tile_progress.emit(pos_to_vec2i(tile), progress, warn)
+ else:
+ set_player_progress.emit(player, progress, warn)
+ else:
+ if tile != null:
+ set_tile_finished.emit(pos_to_vec2i(tile), warn)
+ else:
+ set_player_finished.emit(player, warn)
"set_tile_item":
+ push_warning("set_tile_item is deprecated")
var tile = pos_to_vec2i(decoded["tile"])
var item = decoded.get("item")
if item != null:
@@ -133,12 +169,28 @@ func handle_packet(bytes: PackedByteArray):
else:
remove_tile_item.emit(tile)
"set_player_item":
+ push_warning("set_player_item is deprecated")
var player = decoded["player"]
var item = decoded.get("item")
if item != null:
- set_player_item.emit(player, decoded["item"])
+ set_player_item.emit(player, item)
else:
remove_player_item.emit(player)
+ "set_item":
+ var location: Dictionary = decoded["location"]
+ var tile = location.get("tile")
+ var player = location.get("player")
+ var item = decoded.get("item")
+ if item != null:
+ if tile != null:
+ set_tile_item.emit(pos_to_vec2i(tile), item)
+ else:
+ set_player_item.emit(player, item)
+ else:
+ if tile != null:
+ remove_tile_item.emit(pos_to_vec2i(tile))
+ else:
+ remove_player_item.emit(player)
"update_map":
var tile: Vector2i = pos_to_vec2i(decoded["tile"])
var kind = decoded.get("kind")
@@ -200,13 +252,16 @@ func send_position(pos: Vector2, rotation: float):
"rot": rotation
})
-func send_interact(pos: Vector2i, edge: bool):
+func send_tile_interact(pos: Vector2i, edge: bool):
send_packet({
"type": "interact",
"pos": [pos.x, pos.y],
"edge": edge
})
+func set_player_interact(player: int, edge: bool):
+ push_error("not yet implemented")
+
func send_chat(message: String):
send_packet({
"type": "communicate",
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index 31378f3f..67c6db63 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -138,9 +138,9 @@ func interact():
game.marker.visible = true
game.marker_target = tile.item_base.global_position
if Input.is_action_just_pressed("interact"):
- game.mp.send_interact(target, true)
+ game.mp.send_tile_interact(target, true)
tile.interact()
elif Input.is_action_just_released("interact"):
- game.mp.send_interact(target, false)
+ game.mp.send_tile_interact(target, false)
else:
game.marker.visible = false
diff --git a/client/player/player.gd b/client/player/player.gd
index 1df80d94..301f7945 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -87,6 +87,14 @@ func remove_item() -> Item:
character.holding = false
return i
+func progress(p: float, warn: bool):
+ if hand != null:
+ hand.progress(p, warn)
+
+func finish(warn: bool):
+ if hand != null:
+ hand.finish(warn)
+
func take_item(tile: Tile):
if hand != null:
push_error("already holding an item")
@@ -99,6 +107,12 @@ func put_item(tile: Tile):
i.put()
tile.put_item(i)
+func pass_to(player: Player):
+ var i = remove_item()
+ if player.hand != null:
+ push_error("target is already holding an item")
+ player.set_item(i)
+
func _process(delta):
_anim_angle = fmod(_anim_angle + delta, TAU)
hand_base.position.y = HAND_BASE_POSITION.y + 0.05 * sin(_anim_angle * 3)