aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/game.gd4
-rw-r--r--client/map/tiles/cutting_board.gd13
-rw-r--r--client/map/tiles/sink.gd4
-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
7 files changed, 166 insertions, 13 deletions
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/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/sink.gd b/client/map/tiles/sink.gd
index e2524041..b12f175c 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(position_: float, speed: float, warn: bool):
- super(position_, speed, warn)
+func progress(position_: float, speed: float, warn: bool, _acting_player):
+ super(position_, speed, warn, _acting_player)
if item is Plate:
particles.start(true)
elif item is Glass:
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 b38a9393..d8c6c1ff 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)
@@ -167,9 +167,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")