diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/player/character/character.gd | 35 | ||||
-rw-r--r-- | client/player/character/character.tscn | 73 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 1 | ||||
-rw-r--r-- | client/player/player.gd | 5 |
4 files changed, 75 insertions, 39 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"] diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index bb9c75e8..65fcf960 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -50,6 +50,7 @@ func _process(delta): interact() update(delta, input) super(delta) + character.walking = input.length_squared() > 0.1 func update(dt: float, input: Vector2): var direction = input.limit_length(1.); diff --git a/client/player/player.gd b/client/player/player.gd index d64b5d43..41ba1059 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -56,14 +56,14 @@ func set_item(i: Item): if i == null: push_error("tile is null") hand = i - character.play_animation("hold") + character.holding = true func remove_item() -> Item: var i = hand if i == null: push_error("holding nothing") hand = null - character.play_animation("idle") + character.holding = false return i func take_item(tile: Floor): @@ -84,3 +84,4 @@ func _process(delta): position.x = position_anim.x position.z = position_anim.y rotation.y = rotation_anim + character.walking = position_.distance_squared_to(position_anim) > 0.001 |