summaryrefslogtreecommitdiff
path: root/client/player/character
diff options
context:
space:
mode:
Diffstat (limited to 'client/player/character')
-rw-r--r--client/player/character/character.gd35
-rw-r--r--client/player/character/character.tscn73
2 files changed, 71 insertions, 37 deletions
diff --git a/client/player/character/character.gd b/client/player/character/character.gd
index 847bd7b6..76e7b6b3 100644
--- a/client/player/character/character.gd
+++ b/client/player/character/character.gd
@@ -16,13 +16,46 @@
extends Node3D
class_name Character
+const WALK_ANIM_STRENGTH := 0.05
+const WALK_ANIM_SPEED:= 15.0
+
+var walking := false
+var holding := false
+
+var current_animation := "idle"
+
@onready var hand_animations = $HandAnimations
+@onready var main = $Main
+@onready var default_height = main.position.y
+@onready var main_height_target = default_height
func _ready():
play_animation("idle")
+var t := 0.0
+func _process(delta):
+ if walking:
+ t += delta
+ main_height_target = default_height + sin(t * WALK_ANIM_SPEED) * WALK_ANIM_STRENGTH
+ else:
+ t = 0
+ main.position.y = main_height_target
+
+ # Update animation:
+ var next_animation: String
+ if holding:
+ next_animation = "hold"
+ elif walking:
+ next_animation = "walk"
+ else:
+ next_animation = "idle"
+
+ if current_animation != next_animation:
+ play_animation(next_animation)
+
func play_animation(name_: String):
+ current_animation = name_
hand_animations.play(name_)
func _on_hand_animations_animation_finished(name_):
- hand_animations.play(name_)
+ hand_animations.play(current_animation)
diff --git a/client/player/character/character.tscn b/client/player/character/character.tscn
index fc06f448..d33a424e 100644
--- a/client/player/character/character.tscn
+++ b/client/player/character/character.tscn
@@ -419,6 +419,7 @@ tracks/11/keys = {
[sub_resource type="Animation" id="Animation_7kiho"]
resource_name = "walk"
+length = 0.4
loop_mode = 1
step = 0.05
tracks/0/type = "bezier"
@@ -428,9 +429,9 @@ tracks/0/path = NodePath("Main/HandLeft:position:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(1.302, 0, 0, 0, 0, 1.302, -0.25, 0, 0.25, 0, 1.302, 0, 0, 0, 0, 1.302, -0.25, 0, 0.25, 0, 1.302, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(1.302, 0, 0, 0, 0, 1.302, 0, 0, 0, 0, 1.302, 0, 0, 0, 0, 1.302, 0, 0, 0, 0, 1.302, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/1/type = "bezier"
tracks/1/imported = false
@@ -439,9 +440,9 @@ tracks/1/path = NodePath("Main/HandLeft:position:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(-0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(-0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/2/type = "bezier"
tracks/2/imported = false
@@ -450,9 +451,9 @@ tracks/2/path = NodePath("Main/HandLeft:position:z")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(0, 0, 0, 0, 0, 0.25, -0.25, 0, 0.25, 0, 0, 0, 0, 0, 0, -0.25, -0.25, 0, 0.25, 0, 0, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/3/type = "bezier"
tracks/3/imported = false
@@ -461,9 +462,9 @@ tracks/3/path = NodePath("Main/HandLeft:rotation:x")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(4.14408e-16, 0, 0, 0, 0, 0.436332, -0.25, 0, 0.25, 0, 4.14408e-16, 0, 0, 0, 0, -0.436332, -0.25, 0, 0.25, 0, 4.14408e-16, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(4.14408e-16, 0, 0, 0, 0, 0.436332, 0, 0, 0, 0, 4.14408e-16, 0, 0, 0, 0, -0.436332, 0, 0, 0, 0, 4.14408e-16, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/4/type = "bezier"
tracks/4/imported = false
@@ -472,9 +473,9 @@ tracks/4/path = NodePath("Main/HandLeft:rotation:y")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(3.14159, 0, 0, 0, 0, 3.14159, -0.25, 0, 0.25, 0, 3.14159, 0, 0, 0, 0, 3.14159, -0.25, 0, 0.25, 0, 3.14159, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(3.14159, 0, 0, 0, 0, 3.14159, 0, 0, 0, 0, 3.14159, 0, 0, 0, 0, 3.14159, 0, 0, 0, 0, 3.14159, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/5/type = "bezier"
tracks/5/imported = false
@@ -483,9 +484,9 @@ tracks/5/path = NodePath("Main/HandLeft:rotation:z")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(-2.0944, 0, 0, 0, 0, -2.0944, -0.25, 0, 0.25, 0, -2.0944, 0, 0, 0, 0, -2.0944, -0.25, 0, 0.25, 0, -2.0944, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(-2.0944, 0, 0, 0, 0, -2.0944, 0, 0, 0, 0, -2.0944, 0, 0, 0, 0, -2.0944, 0, 0, 0, 0, -2.0944, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/6/type = "bezier"
tracks/6/imported = false
@@ -494,9 +495,9 @@ tracks/6/path = NodePath("Main/HandRight:position:x")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(-1.302, 0, 0, 0, 0, -1.302, -0.25, 0, 0.25, 0, -1.302, 0, 0, 0, 0, -1.302, -0.25, 0, 0.25, 0, -1.302, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(-1.302, 0, 0, 0, 0, -1.302, 0, 0, 0, 0, -1.302, 0, 0, 0, 0, -1.302, 0, 0, 0, 0, -1.302, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/7/type = "bezier"
tracks/7/imported = false
@@ -505,9 +506,9 @@ tracks/7/path = NodePath("Main/HandRight:position:y")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(-0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0, -0.17, -0.25, 0, 0.25, 0, -0.17, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(-0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0, -0.17, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/8/type = "bezier"
tracks/8/imported = false
@@ -516,9 +517,9 @@ tracks/8/path = NodePath("Main/HandRight:position:z")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(0, 0, 0, 0, 0, -0.25, -0.25, 0, 0.25, 0, -7.09899e-06, 0, 0, 0, 0, 0.25, -0.25, 0, 0.25, 0, 0, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(0, 0, 0, 0, 0, -0.25, 0, 0, 0, 0, -7.09899e-06, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/9/type = "bezier"
tracks/9/imported = false
@@ -527,9 +528,9 @@ tracks/9/path = NodePath("Main/HandRight:rotation:x")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(-0.628319, 0, 0, 0, 0, -1.06465, -0.25, 0, 0.25, 0, -0.628331, 0, 0, 0, 0, -0.191986, -0.25, 0, 0.25, 0, -0.628319, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(-0.628319, 0, 0, 0, 0, -1.06465, 0, 0, 0, 0, -0.628331, 0, 0, 0, 0, -0.191986, 0, 0, 0, 0, -0.628319, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/10/type = "bezier"
tracks/10/imported = false
@@ -538,9 +539,9 @@ tracks/10/path = NodePath("Main/HandRight:rotation:y")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(-3.14159, 0, 0, 0, 0, -3.14159, -0.25, 0, 0.25, 0, -3.14159, 0, 0, 0, 0, -3.14159, -0.25, 0, 0.25, 0, -3.14159, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(-3.14159, 0, 0, 0, 0, -3.14159, 0, 0, 0, 0, -3.14159, 0, 0, 0, 0, -3.14159, 0, 0, 0, 0, -3.14159, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
tracks/11/type = "bezier"
tracks/11/imported = false
@@ -549,9 +550,9 @@ tracks/11/path = NodePath("Main/HandRight:rotation:z")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
-"handle_modes": PackedInt32Array(1, 0, 1, 0, 1),
-"points": PackedFloat32Array(2.0944, 0, 0, 0, 0, 2.0944, -0.25, 0, 0.25, 0, 2.0944, 0, 0, 0, 0, 2.0944, -0.25, 0, 0.25, 0, 2.0944, 0, 0, 0, 0),
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1)
+"handle_modes": PackedInt32Array(1, 1, 0, 1, 0),
+"points": PackedFloat32Array(2.0944, 0, 0, 0, 0, 2.0944, 0, 0, 0, 0, 2.0944, 0, 0, 0, 0, 2.0944, 0, 0, 0, 0, 2.0944, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4)
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xtrfe"]