diff options
-rw-r--r-- | client/game.gd | 22 | ||||
-rw-r--r-- | client/map/tiles/grass_side.res | bin | 1433 -> 0 bytes | |||
-rw-r--r-- | client/map/tiles/grass_side.tres | 45 | ||||
-rw-r--r-- | client/map/tiles/grass_side.tscn | 2 | ||||
-rw-r--r-- | client/multiplayer.gd | 69 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 4 | ||||
-rw-r--r-- | client/player/player.gd | 14 |
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 Binary files differdeleted file mode 100644 index 1e008942..00000000 --- a/client/map/tiles/grass_side.res +++ /dev/null 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) |