diff options
-rw-r--r-- | client/audio/play_random.gd | 10 | ||||
-rw-r--r-- | client/game.gd | 4 | ||||
-rw-r--r-- | client/map/progress.gd | 27 | ||||
-rw-r--r-- | client/map/tiles/cutting_board.gd | 13 | ||||
-rw-r--r-- | client/map/tiles/oven.gd | 4 | ||||
-rw-r--r-- | client/map/tiles/oven.tscn | 10 | ||||
-rw-r--r-- | client/map/tiles/sink.gd | 20 | ||||
-rw-r--r-- | client/map/tiles/sounds/beep.ogg | bin | 0 -> 7905 bytes | |||
-rw-r--r-- | client/map/tiles/sounds/beep.ogg.import | 19 | ||||
-rw-r--r-- | client/map/tiles/tile.gd | 2 | ||||
-rw-r--r-- | client/multiplayer.gd | 5 | ||||
-rw-r--r-- | client/player/character/character.gd | 6 | ||||
-rw-r--r-- | client/player/character/character.tscn | 145 | ||||
-rw-r--r-- | client/project.godot | 1 |
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 Binary files differnew file mode 100644 index 00000000..c4491fa3 --- /dev/null +++ b/client/map/tiles/sounds/beep.ogg 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={ |