diff options
-rw-r--r-- | client/game.gd | 16 | ||||
-rw-r--r-- | client/map/items/bread.gd | 8 | ||||
-rw-r--r-- | client/map/items/food_processor.gd | 17 | ||||
-rw-r--r-- | client/map/items/item.gd | 13 | ||||
-rw-r--r-- | client/map/items/pot.gd | 8 | ||||
-rw-r--r-- | client/map/items/pot_items.gd | 4 | ||||
-rw-r--r-- | client/map/items/strawberry.gd | 8 | ||||
-rw-r--r-- | client/map/items/tomato.gd | 8 | ||||
-rw-r--r-- | client/map/progress.gd | 21 | ||||
-rw-r--r-- | client/map/tiles/cutting_board.gd | 10 | ||||
-rw-r--r-- | client/map/tiles/cutting_board.tscn | 160 | ||||
-rw-r--r-- | client/map/tiles/knife.res | bin | 5530 -> 5546 bytes | |||
-rw-r--r-- | client/map/tiles/knife.tscn | 4 | ||||
-rw-r--r-- | client/map/tiles/oven.gd | 4 | ||||
-rw-r--r-- | client/map/tiles/sink.gd | 8 | ||||
-rw-r--r-- | client/map/tiles/tile.gd | 8 | ||||
-rw-r--r-- | client/multiplayer.gd | 42 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 4 | ||||
-rw-r--r-- | client/player/player.gd | 8 |
19 files changed, 263 insertions, 88 deletions
diff --git a/client/game.gd b/client/game.gd index 09027d18..d764e6af 100644 --- a/client/game.gd +++ b/client/game.gd @@ -196,24 +196,24 @@ func _ready(): from_tile.pass_to(to_tile) ) - mp.set_tile_progress.connect(func(tile: Vector2i, progress: float, warn: bool): + mp.set_tile_progress.connect(func(tile: Vector2i, position_: float, speed: float, warn: bool): var t: Tile = map.get_tile_instance(tile) - t.progress(progress, warn) + t.progress(position_, speed, warn) ) - mp.set_tile_finished.connect(func(tile: Vector2i, warn: bool): + mp.set_tile_finished.connect(func(tile: Vector2i): var t: Tile = map.get_tile_instance(tile) - t.finish(warn) + t.finish() ) - mp.set_player_progress.connect(func(player: int, progress: float, warn: bool): + mp.set_player_progress.connect(func(player: int, position_: float, speed: float, warn: bool): var p: Player = players[player] - p.progress(progress, warn) + p.progress(position_, speed, warn) ) - mp.set_player_finished.connect(func(player: int, warn: bool): + mp.set_player_finished.connect(func(player: int): var p: Player = players[player] - p.finish(warn) + p.finish() ) mp.text_message.connect(func(player: int, text: String, timeout_initial: float, timeout_remaining: float): diff --git a/client/map/items/bread.gd b/client/map/items/bread.gd index b5143c53..a3c109e1 100644 --- a/client/map/items/bread.gd +++ b/client/map/items/bread.gd @@ -25,10 +25,10 @@ func _init(owned_by_: Node3D): steam.color = Color(.6, .6, .6, .4) base.add_child(steam) -func progress(p: float, warn: bool): - super(p, warn) +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) steam.emitting = warn -func finish(warn: bool): - super(warn) +func finish(): + super() steam.emitting = false diff --git a/client/map/items/food_processor.gd b/client/map/items/food_processor.gd index 66d78168..81886ae7 100644 --- a/client/map/items/food_processor.gd +++ b/client/map/items/food_processor.gd @@ -16,6 +16,7 @@ class_name FoodProcessor extends Item +var time := 0. var processing: CPUParticles3D = load("res://map/items/processing.tscn").instantiate() func _init(owned_by_: Node3D): @@ -23,11 +24,15 @@ func _init(owned_by_: Node3D): add_child(load("res://map/items/food_processor.tscn").instantiate()) add_child(processing) -func progress(p: float, warn: bool): - super(p, warn) +func _process(delta: float): + super(delta) + time += delta + processing.rotation.y += time * TAU + base.rotation.y += time * TAU + +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) processing.emitting = true - processing.rotation.y += p * TAU - base.rotation.y += p * TAU if sound_id == null: sound_id = Sound.item_progress( self, @@ -36,8 +41,8 @@ func progress(p: float, warn: bool): -10. ) -func finish(warn: bool): - super(warn) +func finish(): + super() if sound_id != null: processing.emitting = false Sound.item_finished(sound_id) diff --git a/client/map/items/item.gd b/client/map/items/item.gd index 2d046700..11914eef 100644 --- a/client/map/items/item.gd +++ b/client/map/items/item.gd @@ -50,14 +50,15 @@ func _process(delta): if p: rotation.y = G.interpolate_angle(rotation.y, owned_by.global_rotation.y, delta * ispeed) else: rotation.y = G.interpolate_angle_closest_quarter(rotation.y, owned_by.global_rotation.y, delta * ispeed) -func progress(p: float, warn: bool): +func progress(position_: float, speed: float, warn: bool): progress_instance.visible = true - progress_instance.set_progress(p, warn) - # this shoukd be removed when the server is fixed - if p >= 1.: - finish(warn) + progress_instance.update(position_, speed, warn) + + # TODO: Fix finish + # if p >= 1.: + # finish(warn) -func finish(_warn: bool): +func finish(): progress_instance.visible = false func setup_sounds(): diff --git a/client/map/items/pot.gd b/client/map/items/pot.gd index dd5a6c6f..2bed6a5c 100644 --- a/client/map/items/pot.gd +++ b/client/map/items/pot.gd @@ -23,16 +23,16 @@ func _init(owned_by_: Node3D): add_child(load("res://map/items/pot.tscn").instantiate()) base.add_child(steam) -func progress(p: float, warn: bool): - super(p, warn) +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) steam.emitting = true if warn: steam.color = Color(.2, .2, .2) else: steam.color = Color(1.,1.,1.) -func finish(warn: bool): - super(warn) +func finish(): + super() steam.emitting = false func setup_sounds(): diff --git a/client/map/items/pot_items.gd b/client/map/items/pot_items.gd index fae2ccaa..25fd74d3 100644 --- a/client/map/items/pot_items.gd +++ b/client/map/items/pot_items.gd @@ -51,8 +51,8 @@ class RawSteakP extends Pot: super(owned_by_) base.add_child(preload("res://map/items/raw_steak.tscn").instantiate()) - func progress(p: float, warn: bool): - super(p, warn) + func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) if sound_id == null: sound_id = Sound.item_progress(self, preload("res://map/items/sounds/frying.ogg"), null) diff --git a/client/map/items/strawberry.gd b/client/map/items/strawberry.gd index ef9abb64..f2a1165a 100644 --- a/client/map/items/strawberry.gd +++ b/client/map/items/strawberry.gd @@ -24,10 +24,10 @@ func _init(owned_by_: Node3D): base.add_child(cut) cut.color = Color(1., 0., 0.) -func progress(p: float, warn: bool): - super(p, warn) +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) cut.emitting = true -func finish(warn: bool): - super(warn) +func finish(): + super() cut.emitting = false diff --git a/client/map/items/tomato.gd b/client/map/items/tomato.gd index 97cd668c..082b2b19 100644 --- a/client/map/items/tomato.gd +++ b/client/map/items/tomato.gd @@ -24,10 +24,10 @@ func _init(owned_by_: Node3D): base.add_child(cut) cut.color = Color(1., 0., 0.) -func progress(p: float, warn: bool): - super(p, warn) +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) cut.emitting = true -func finish(warn: bool): - super(warn) +func finish(): + super() cut.emitting = false diff --git a/client/map/progress.gd b/client/map/progress.gd index 94670651..1ca76287 100644 --- a/client/map/progress.gd +++ b/client/map/progress.gd @@ -1,6 +1,7 @@ # Hurry Curry! - a game about cooking # Copyright 2024 metamuffin # Copyright 2024 nokoe +# Copyright 2024 tpart # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -17,7 +18,19 @@ class_name ProgressBar3D extends MeshInstance3D -func set_progress(progress: float, bad: bool): - var mat: ShaderMaterial = self.get_active_material(0) - mat.set_shader_parameter("progress", progress) - mat.set_shader_parameter("bad", bad) +var speed := 0. +var position_ := 0. + +func update(new_position: float, new_speed: float, warn: bool): + speed = new_speed + position_ = new_position + + var mat: ShaderMaterial = get_active_material(0) + mat.set_shader_parameter("progress", position_) + mat.set_shader_parameter("bad", warn) + +func _process(delta: float): + position_ += delta * speed + + var mat: ShaderMaterial = get_active_material(0) + mat.set_shader_parameter("progress", position_) diff --git a/client/map/tiles/cutting_board.gd b/client/map/tiles/cutting_board.gd index 3e1b4018..c9291717 100644 --- a/client/map/tiles/cutting_board.gd +++ b/client/map/tiles/cutting_board.gd @@ -16,9 +16,17 @@ class_name CuttingBoard extends CounterBase +var board = load("res://map/tiles/cutting_board.tscn").instantiate() + func _init(rename: String, neighbors: Array): super(rename, neighbors) - base.add_child(load("res://map/tiles/cutting_board.tscn").instantiate()) + base.add_child(board) + +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) + var anim: AnimationPlayer = board.get_node("AnimationPlayer") + if not anim.is_playing(): + anim.play("cut_loop") static func interact_target() -> Vector3: return Vector3(0., 0.575, 0.) diff --git a/client/map/tiles/cutting_board.tscn b/client/map/tiles/cutting_board.tscn index 3defaba0..517682b7 100644 --- a/client/map/tiles/cutting_board.tscn +++ b/client/map/tiles/cutting_board.tscn @@ -1,14 +1,166 @@ -[gd_scene load_steps=3 format=3 uid="uid://bslx1a7kdufde"] +[gd_scene load_steps=6 format=3 uid="uid://bslx1a7kdufde"] [ext_resource type="ArrayMesh" uid="uid://dd4g04lgvsly5" path="res://map/tiles/cutting_board.res" id="1_d4k2k"] -[ext_resource type="PackedScene" uid="uid://wadi7kb021k6" path="res://map/tiles/knife.tscn" id="3_wvxni"] +[ext_resource type="PackedScene" uid="uid://cufype1bex3r3" path="res://map/tiles/knife.tscn" id="3_wvxni"] + +[sub_resource type="Animation" id="Animation_ercgy"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Knife:rotation:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(-1.5708, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Knife:rotation:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Knife:rotation:z") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Knife:position:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.375, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Knife:position:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.52, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Knife:position:z") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.19, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="Animation" id="Animation_vu13j"] +resource_name = "cut_loop" +length = 0.25 +loop_mode = 1 +step = 0.01 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Knife:rotation:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.125, 0, 0.125, 0, 0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.1, 0.25) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Knife:rotation:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(-1.5708, -0.25, 0, 0.25, 0, -1.5708, -0.125, 0, 0.125, 0, -1.5708, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.1, 0.25) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Knife:rotation:z") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(0.785, -0.25, 0, 0.05, 0.0393813, 1.88533, -0.01, -0.696971, 0.03, 0.0774413, 0.855358, -0.07, 0.0542088, 0.1, -0.00774413), +"times": PackedFloat32Array(0, 0.15, 0.25) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Knife:position:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Knife:position:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.75, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Knife:position:z") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.19, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_fy61n"] +_data = { +"RESET": SubResource("Animation_ercgy"), +"cut_loop": SubResource("Animation_vu13j") +} [node name="CuttingBoard" type="Node3D"] [node name="Mesh" type="MeshInstance3D" parent="."] -transform = Transform3D(0.4, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -0.1, 0.5, 0) +transform = Transform3D(0.4, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -0.075, 0.5, 0) mesh = ExtResource("1_d4k2k") skeleton = NodePath("") [node name="Knife" parent="." instance=ExtResource("3_wvxni")] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0.375, 0.52, 0.19) +transform = Transform3D(1, 0, 0, 0, -3.61999e-06, 1, 0, -1, -3.61999e-06, 0.375, 0.52, 0.19) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_fy61n") +} diff --git a/client/map/tiles/knife.res b/client/map/tiles/knife.res Binary files differindex 77e95cc7..622d9eb3 100644 --- a/client/map/tiles/knife.res +++ b/client/map/tiles/knife.res diff --git a/client/map/tiles/knife.tscn b/client/map/tiles/knife.tscn index a4dc676f..a7cd690e 100644 --- a/client/map/tiles/knife.tscn +++ b/client/map/tiles/knife.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=2 format=3 uid="uid://wadi7kb021k6"] +[gd_scene load_steps=2 format=3 uid="uid://cufype1bex3r3"] -[ext_resource type="ArrayMesh" uid="uid://bfsaljqvte3a8" path="res://map/tiles/knife.res" id="1_uotix"] +[ext_resource type="ArrayMesh" uid="uid://buqo28euvn7ru" path="res://map/tiles/knife.res" id="1_uotix"] [node name="Knife" type="Node3D"] diff --git a/client/map/tiles/oven.gd b/client/map/tiles/oven.gd index 598e0c7e..9ab7fd75 100644 --- a/client/map/tiles/oven.gd +++ b/client/map/tiles/oven.gd @@ -30,6 +30,6 @@ func take_item() -> Item: oven.open() return super() -func finish(warn: bool): - super(warn) +func finish(): + super() oven.ding() diff --git a/client/map/tiles/sink.gd b/client/map/tiles/sink.gd index c39a2a2a..e2524041 100644 --- a/client/map/tiles/sink.gd +++ b/client/map/tiles/sink.gd @@ -35,8 +35,8 @@ func _init(rename: String, neighbors: Array): stopping.stream = preload("res://map/tiles/sounds/sink_stopping.ogg") add_child(stopping) -func progress(p: float, warn: bool): - super(p, warn) +func progress(position_: float, speed: float, warn: bool): + super(position_, speed, warn) if item is Plate: particles.start(true) elif item is Glass: @@ -44,8 +44,8 @@ func progress(p: float, warn: bool): if not running.playing: running.play() -func finish(warn: bool): - super(warn) +func finish(): + super() particles.stop() running.stop() stopping.play() diff --git a/client/map/tiles/tile.gd b/client/map/tiles/tile.gd index 70cecfd8..be78883e 100644 --- a/client/map/tiles/tile.gd +++ b/client/map/tiles/tile.gd @@ -57,13 +57,13 @@ static func interact_target() -> Vector3: func interact(): pass -func progress(p: float, warn: bool): +func progress(position_: float, speed: float, warn: bool): if item != null: - item.progress(p, warn) + item.progress(position_, speed, warn) -func finish(warn: bool): +func finish(): if item != null: - item.finish(warn) + item.finish() func put_item(i: Item): if item != null: diff --git a/client/multiplayer.gd b/client/multiplayer.gd index b3ce6217..d42e500b 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -45,8 +45,8 @@ 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_tile_progress(tile: Vector2i, progress: float, warn: bool) -signal set_player_progress(player: int, progress: float, warn: bool) +signal set_tile_progress(tile: Vector2i, position: float, speed: float, warn: bool) +signal set_player_progress(player: int, position: float, speed: float, warn: bool) signal set_tile_finished(tile: Vector2i, warn: bool) signal set_player_finished(player: int, warn: bool) signal set_ingame(state: bool, lobby: bool) @@ -58,7 +58,7 @@ signal connection_closed(reason: String) signal show_rating(stars: int, points: int) signal show_book() # TODO: Connect this -const VERSION_MAJOR: int = 5 +const VERSION_MAJOR: int = 6 const VERSION_MINOR: int = 0 var connected := false @@ -160,31 +160,27 @@ func handle_packet(bytes: PackedByteArray): put_item.emit(from_player, pos_to_vec2i(to_tile)) elif from_tile != null and to_tile != null: pass_item_tile.emit(pos_to_vec2i(from_tile), 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_tile_progress.emit(tile, progress, warn) - else: - set_tile_finished.emit(tile, warn) "set_progress": + var warn: bool = decoded["warn"] + var position: float = decoded["position"] + var speed: float = decoded["speed"] 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) + + if tile != null: + set_tile_progress.emit(pos_to_vec2i(tile), position, speed, warn) else: - if tile != null: - set_tile_finished.emit(pos_to_vec2i(tile), warn) - else: - set_player_finished.emit(player, warn) + set_player_progress.emit(player, position, speed, warn) + "clear_progress": + var item: Dictionary = decoded["item"] + var tile = item.get("tile") + var player = item.get("player") + + if tile != null: + set_tile_finished.emit(pos_to_vec2i(tile)) + else: + set_player_finished.emit(player) "set_tile_item": push_warning("set_tile_item is deprecated") var tile = pos_to_vec2i(decoded["tile"]) diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index c654c070..81315630 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -136,8 +136,8 @@ func aabb_point_distance(mi: Vector2, ma: Vector2, p: Vector2) -> float: func update_position(_new_position: Vector2, _new_rotation: float, _new_boosting: bool): pass -func progress(p: float, warn: bool): - super(p, warn) +func progress(position__: float, speed: float, warn: bool): + super(position__, speed, warn) Input.start_joy_vibration(0, 0.5, 0.1, 0.15) func put_item(tile: Tile): diff --git a/client/player/player.gd b/client/player/player.gd index 43d7dd7f..d5837d47 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -107,13 +107,13 @@ func remove_item() -> Item: character.holding = false return i -func progress(p: float, warn: bool): +func progress(position__: float, speed: float, warn: bool): if hand != null: - hand.progress(p, warn) + hand.progress(position__, speed, warn) -func finish(warn: bool): +func finish(): if hand != null: - hand.finish(warn) + hand.finish() func take_item(tile: Tile): if hand != null: |