summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/audio/play_random.gd10
-rw-r--r--client/game.gd4
-rw-r--r--client/map/progress.gd27
-rw-r--r--client/map/tiles/cutting_board.gd13
-rw-r--r--client/map/tiles/oven.gd4
-rw-r--r--client/map/tiles/oven.tscn10
-rw-r--r--client/map/tiles/sink.gd20
-rw-r--r--client/map/tiles/sounds/beep.oggbin0 -> 7905 bytes
-rw-r--r--client/map/tiles/sounds/beep.ogg.import19
-rw-r--r--client/map/tiles/tile.gd2
-rw-r--r--client/multiplayer.gd5
-rw-r--r--client/player/character/character.gd6
-rw-r--r--client/player/character/character.tscn145
-rw-r--r--client/project.godot1
14 files changed, 230 insertions, 36 deletions
diff --git a/client/audio/play_random.gd b/client/audio/play_random.gd
index 683d95ba..e51b77ac 100644
--- a/client/audio/play_random.gd
+++ b/client/audio/play_random.gd
@@ -19,6 +19,7 @@ class_name PlayRandom
@export var volume_db := 0.0
@export var enable_attenuations := false
+@export var randomize_pitch := true
var autoplay := false
var manual_setup_called := false
@@ -31,18 +32,19 @@ func _ready():
for s: AudioStreamPlayer3D in sounds:
configure_player(s)
-func setup(new_sounds: Array):
+func setup(new_sounds: Array[AudioStream]):
# new_sounds should be an array of AudioStream
manual_setup_called = true
for s in new_sounds:
var player = AudioStreamPlayer3D.new()
player.stream = s
+ player.volume_db = volume_db
configure_player(player)
add_child(player)
sounds.append(player)
func configure_player(player):
- player.connect("finished", sound_finished)
+ player.finished.connect(sound_finished)
player.volume_db = volume_db
if not enable_attenuations:
@@ -52,7 +54,8 @@ func play_random():
if sounds.size() == 0: return
var s = sounds[randi_range(0, sounds.size() - 1)]
- s.pitch_scale = randf_range(0.9, 1.1)
+ if randomize_pitch:
+ s.pitch_scale = randf_range(0.9, 1.1)
s.play()
func stop_all():
@@ -60,6 +63,7 @@ func stop_all():
s.stop()
func start_autoplay():
+ if autoplay: return
autoplay = true
play_random()
diff --git a/client/game.gd b/client/game.gd
index 2938d86a..8f583e9e 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -196,9 +196,9 @@ func _ready():
from_tile.pass_to(to_tile)
)
- mp.set_tile_progress.connect(func(tile: Vector2i, position_: float, speed: float, warn: bool):
+ mp.set_tile_progress.connect(func(tile: Vector2i, position_: float, speed: float, warn: bool, acting_player):
var t: Tile = map.get_tile_instance(tile)
- t.progress(position_, speed, warn)
+ t.progress(position_, speed, warn, players.get(acting_player))
)
mp.set_tile_finished.connect(func(tile: Vector2i):
diff --git a/client/map/progress.gd b/client/map/progress.gd
index 1ca76287..1a8bb3c0 100644
--- a/client/map/progress.gd
+++ b/client/map/progress.gd
@@ -18,19 +18,44 @@
class_name ProgressBar3D
extends MeshInstance3D
+const PLAY_RANDOM_SCENE = preload("res://audio/play_random.tscn")
+
+var beep_node: PlayRandom = PLAY_RANDOM_SCENE.instantiate()
+var ding_node: PlayRandom = PLAY_RANDOM_SCENE.instantiate()
+
var speed := 0.
var position_ := 0.
+var warn := false
-func update(new_position: float, new_speed: float, warn: bool):
+func _ready():
+ add_child(beep_node)
+ add_child(ding_node)
+
+ beep_node.randomize_pitch = false
+ beep_node.volume_db = -12
+ beep_node.setup([load("res://map/tiles/sounds/beep.ogg")])
+
+ ding_node.randomize_pitch = false
+ ding_node.volume_db = -12
+ ding_node.setup([load("res://map/tiles/sounds/ding.ogg")])
+
+func update(new_position: float, new_speed: float, new_warn: bool):
speed = new_speed
position_ = new_position
+ warn = new_warn
var mat: ShaderMaterial = get_active_material(0)
mat.set_shader_parameter("progress", position_)
mat.set_shader_parameter("bad", warn)
+
+ if warn and speed > 0.: ding_node.play_random()
func _process(delta: float):
position_ += delta * speed
+ var time_remaining = (1 - position_) / speed
+
+ if warn and speed > 0 and time_remaining < 5.: beep_node.start_autoplay()
+ else: beep_node.stop_autoplay()
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 c9291717..e8f8897b 100644
--- a/client/map/tiles/cutting_board.gd
+++ b/client/map/tiles/cutting_board.gd
@@ -22,11 +22,14 @@ func _init(rename: String, neighbors: Array):
super(rename, neighbors)
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")
+func progress(position_: float, speed: float, warn: bool, acting_player):
+ super(position_, speed, warn, acting_player)
+ var knife: Node3D = board.get_node("Knife")
+ knife.visible = speed == 0
+
+ if acting_player != null:
+ var acting_character: Character = acting_player.character
+ acting_character.cutting = speed != 0
static func interact_target() -> Vector3:
return Vector3(0., 0.575, 0.)
diff --git a/client/map/tiles/oven.gd b/client/map/tiles/oven.gd
index 9ab7fd75..c5df63f8 100644
--- a/client/map/tiles/oven.gd
+++ b/client/map/tiles/oven.gd
@@ -29,7 +29,3 @@ func put_item(i: Item):
func take_item() -> Item:
oven.open()
return super()
-
-func finish():
- super()
- oven.ding()
diff --git a/client/map/tiles/oven.tscn b/client/map/tiles/oven.tscn
index 053d02de..d6c2785c 100644
--- a/client/map/tiles/oven.tscn
+++ b/client/map/tiles/oven.tscn
@@ -1,11 +1,9 @@
-[gd_scene load_steps=10 format=3 uid="uid://bil6eip7uwqvs"]
+[gd_scene load_steps=8 format=3 uid="uid://bil6eip7uwqvs"]
[ext_resource type="Script" path="res://map/tiles/oven_model.gd" id="1_3v43w"]
[ext_resource type="ArrayMesh" uid="uid://blc1q50d5ky86" path="res://map/tiles/oven_base.res" id="1_d1hwl"]
[ext_resource type="ArrayMesh" uid="uid://blb5oew3sh7ek" path="res://map/tiles/oven_door.res" id="2_i5vso"]
-[ext_resource type="Script" path="res://audio/play_random.gd" id="4_3hvts"]
[ext_resource type="Script" path="res://map/auto_setup/light_setup.gd" id="4_hjc80"]
-[ext_resource type="AudioStream" uid="uid://dkwpv708ihh4c" path="res://map/tiles/sounds/ding.ogg" id="5_d43p4"]
[sub_resource type="Animation" id="Animation_yo2v1"]
length = 0.001
@@ -66,9 +64,3 @@ light_energy = 2.0
shadow_enabled = true
script = ExtResource("4_hjc80")
completely_disable_light_if_shadows_disabled = true
-
-[node name="Ding" type="Node3D" parent="."]
-script = ExtResource("4_3hvts")
-
-[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Ding"]
-stream = ExtResource("5_d43p4")
diff --git a/client/map/tiles/sink.gd b/client/map/tiles/sink.gd
index e2524041..efa85ed0 100644
--- a/client/map/tiles/sink.gd
+++ b/client/map/tiles/sink.gd
@@ -35,14 +35,18 @@ func _init(rename: String, neighbors: Array):
stopping.stream = preload("res://map/tiles/sounds/sink_stopping.ogg")
add_child(stopping)
-func progress(position_: float, speed: float, warn: bool):
- super(position_, speed, warn)
- if item is Plate:
- particles.start(true)
- elif item is Glass:
- particles.start()
- if not running.playing:
- running.play()
+func progress(position_: float, speed: float, warn: bool, _acting_player):
+ super(position_, speed, warn, _acting_player)
+ if speed == 0:
+ particles.stop()
+ running.stop()
+ else:
+ if item is Plate:
+ particles.start(true)
+ elif item is Glass:
+ particles.start()
+ if not running.playing:
+ running.play()
func finish():
super()
diff --git a/client/map/tiles/sounds/beep.ogg b/client/map/tiles/sounds/beep.ogg
new file mode 100644
index 00000000..c4491fa3
--- /dev/null
+++ b/client/map/tiles/sounds/beep.ogg
Binary files differ
diff --git a/client/map/tiles/sounds/beep.ogg.import b/client/map/tiles/sounds/beep.ogg.import
new file mode 100644
index 00000000..85526c5e
--- /dev/null
+++ b/client/map/tiles/sounds/beep.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://e4vsty7bkg8s"
+path="res://.godot/imported/beep.ogg-fd24b57085580112faf45d17e578f198.oggvorbisstr"
+
+[deps]
+
+source_file="res://map/tiles/sounds/beep.ogg"
+dest_files=["res://.godot/imported/beep.ogg-fd24b57085580112faf45d17e578f198.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/client/map/tiles/tile.gd b/client/map/tiles/tile.gd
index be78883e..4bee3ced 100644
--- a/client/map/tiles/tile.gd
+++ b/client/map/tiles/tile.gd
@@ -57,7 +57,7 @@ static func interact_target() -> Vector3:
func interact():
pass
-func progress(position_: float, speed: float, warn: bool):
+func progress(position_: float, speed: float, warn: bool, _acting_player):
if item != null:
item.progress(position_, speed, warn)
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index a70a5738..168e62e6 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -45,7 +45,7 @@ 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, position: float, speed: float, warn: bool)
+signal set_tile_progress(tile: Vector2i, position: float, speed: float, warn: bool, acting_player)
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)
@@ -165,9 +165,10 @@ func handle_packet(bytes: PackedByteArray):
var item: Dictionary = decoded["item"]
var tile = item.get("tile")
var player = item.get("player")
+ var acting_player = decoded.get("player")
if tile != null:
- set_tile_progress.emit(pos_to_vec2i(tile), position, speed, warn)
+ set_tile_progress.emit(pos_to_vec2i(tile), position, speed, warn, int(acting_player) if acting_player != null else null)
else:
set_player_progress.emit(player, position, speed, warn)
"clear_progress":
diff --git a/client/player/character/character.gd b/client/player/character/character.gd
index 31d5230e..66a3435b 100644
--- a/client/player/character/character.gd
+++ b/client/player/character/character.gd
@@ -27,6 +27,7 @@ const WALK_ANIM_SPEED:= 15.0
var walking := false
var holding := false
var boosting := false
+var cutting := false
var was_boosting := boosting
var current_animation := "idle"
@@ -39,6 +40,7 @@ var current_animation := "idle"
@onready var boosting_particles = $Boosting
@onready var username_tag = $Username
@onready var tie = $Main/Tie
+@onready var knife = $Main/HandRight/Knife
@onready var hairstyles := {
"Brown": $Main/HeadDefault/Hair,
@@ -68,6 +70,8 @@ func _process(delta):
var next_animation: String
if holding:
next_animation = "hold"
+ elif cutting:
+ next_animation = "cut"
elif walking:
next_animation = "walk"
else:
@@ -122,6 +126,8 @@ func play_animation(name_: String):
step_sounds.start_autoplay()
else:
step_sounds.stop_autoplay()
+
+ knife.visible = name_ == "cut"
func _on_hand_animations_animation_finished(_name):
hand_animations.play(current_animation)
diff --git a/client/player/character/character.tscn b/client/player/character/character.tscn
index 0957eb68..a7c09c01 100644
--- a/client/player/character/character.tscn
+++ b/client/player/character/character.tscn
@@ -1,9 +1,10 @@
-[gd_scene load_steps=25 format=3 uid="uid://b3hhir2fvnunu"]
+[gd_scene load_steps=27 format=3 uid="uid://b3hhir2fvnunu"]
[ext_resource type="Script" path="res://player/character/character.gd" id="1_12lbh"]
[ext_resource type="ArrayMesh" uid="uid://bnmm01yjwultj" path="res://player/character/default/main.res" id="2_uovyg"]
[ext_resource type="ArrayMesh" uid="uid://46sp3fu3n6ls" path="res://player/character/default/hand_right.res" id="3_k28vh"]
[ext_resource type="ArrayMesh" uid="uid://r52cylox4imf" path="res://player/character/default/hand_left.res" id="4_tcrm3"]
+[ext_resource type="PackedScene" uid="uid://cufype1bex3r3" path="res://map/tiles/knife.tscn" id="4_tjq3a"]
[ext_resource type="ArrayMesh" uid="uid://csryncouqhwp1" path="res://player/character/default/head.res" id="5_n1vl0"]
[ext_resource type="ArrayMesh" uid="uid://bsxmxq4dfv2vy" path="res://player/character/hairstyles/hair.res" id="6_3uydp"]
[ext_resource type="ArrayMesh" uid="uid://dx7jswwaesok4" path="res://player/character/hairstyles/hair_2.res" id="7_1403k"]
@@ -152,6 +153,144 @@ tracks/11/keys = {
"times": PackedFloat32Array(0)
}
+[sub_resource type="Animation" id="Animation_557hk"]
+resource_name = "cut"
+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("Main/HandLeft:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1.302, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Main/HandLeft:position:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-0.17, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Main/HandLeft:position:z")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Main/HandRight:position:x")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-1, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Main/HandRight:position:y")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Main/HandRight:position:z")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/6/type = "bezier"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("Main/HandRight:rotation:x")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-0.628319, -0.125, 0, 0.125, 0, 0.349066, -0.075, -0.0382189, 0.08, 0.0989729, -0.628319, 0, 0.340511, 0.125, 0),
+"times": PackedFloat32Array(0, 0.15, 0.25)
+}
+tracks/7/type = "bezier"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("Main/HandRight:rotation:y")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(-3.14159, -0.125, 0, 0.125, 0, -3.14159, -0.125, 0, 0.125, 0, -3.14159, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0, 0.15, 0.25)
+}
+tracks/8/type = "bezier"
+tracks/8/imported = false
+tracks/8/enabled = true
+tracks/8/path = NodePath("Main/HandRight:rotation:z")
+tracks/8/interp = 1
+tracks/8/loop_wrap = true
+tracks/8/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(2.0944, -0.125, 0, 0.125, 0, 2.0944, -0.125, 0, 0.125, 0, 2.0944, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0, 0.15, 0.25)
+}
+tracks/9/type = "bezier"
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/path = NodePath("Main/HandLeft:rotation:x")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(4.14408e-16, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/10/type = "bezier"
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/path = NodePath("Main/HandLeft:rotation:y")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(3.14159, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/11/type = "bezier"
+tracks/11/imported = false
+tracks/11/enabled = true
+tracks/11/path = NodePath("Main/HandLeft:rotation:z")
+tracks/11/interp = 1
+tracks/11/loop_wrap = true
+tracks/11/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(-2.0944, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0)
+}
+
[sub_resource type="Animation" id="Animation_cvcpd"]
resource_name = "hold"
loop_mode = 1
@@ -567,6 +706,7 @@ tracks/11/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xtrfe"]
_data = {
"RESET": SubResource("Animation_tdhvg"),
+"cut": SubResource("Animation_557hk"),
"hold": SubResource("Animation_cvcpd"),
"idle": SubResource("Animation_r1hej"),
"walk": SubResource("Animation_7kiho")
@@ -595,6 +735,9 @@ transform = Transform3D(0.287144, 0.2864, -1.17785e-06, 0.402357, -0.133775, 0.3
mesh = ExtResource("3_k28vh")
skeleton = NodePath("")
+[node name="Knife" parent="Main/HandRight" instance=ExtResource("4_tjq3a")]
+transform = Transform3D(3.69699, 2.68602, 2.63837, -3.70658, -2.69301, 7.93544, 3.10156, -4.26893, -1.08623e-05, -0.157983, 0.472216, -0.19819)
+
[node name="HandLeft" type="MeshInstance3D" parent="Main"]
transform = Transform3D(0.287143, -0.2864, 1.45591e-06, -0.497341, -0.165355, -2.37987e-16, 7.2796e-07, -7.26076e-07, -0.574281, 1.302, -0.17, 0)
mesh = ExtResource("4_tcrm3")
diff --git a/client/project.godot b/client/project.godot
index 65ff288c..61010051 100644
--- a/client/project.godot
+++ b/client/project.godot
@@ -135,6 +135,7 @@ chat={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":true,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194310,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
reset={