remove manual mirrored animations and make flipping automatic
This commit is contained in:
@@ -15,5 +15,4 @@ func _ready() -> void:
|
||||
|
||||
|
||||
func play_footstep() -> void:
|
||||
|
||||
_polyphonic.play_stream(_footsteps.streams[_footsteps_shuffle.take()])
|
||||
|
||||
@@ -13,7 +13,7 @@ var _skeleton: Skeleton3D
|
||||
|
||||
|
||||
func _validate_property(property: Dictionary) -> void:
|
||||
if property.name == "_bones_to_flip" or property.name == "_bones_to_exclude":
|
||||
if property.name in ["_bones_to_flip", "_bones_to_exclude"]:
|
||||
if _skeleton:
|
||||
property.hint = PROPERTY_HINT_TYPE_STRING
|
||||
property.hint_string = (
|
||||
@@ -90,7 +90,9 @@ func _flip_bone(bone_idx: int, bone_name: String) -> void:
|
||||
func _mirror_bone_transform(bone_idx: int, pose: Transform3D) -> void:
|
||||
pose.origin.x = -pose.origin.x
|
||||
var pose_rot := pose.basis.get_euler()
|
||||
pose_rot.z = -pose_rot.z
|
||||
var pose_scale := pose.basis.get_scale()
|
||||
pose_rot.y = -pose_rot.y
|
||||
pose_rot.z = -pose_rot.z
|
||||
pose.basis = Basis.from_euler(pose_rot)
|
||||
pose.basis = pose.basis.scaled(pose_scale)
|
||||
_skeleton.set_bone_pose(bone_idx, pose)
|
||||
|
||||
@@ -1,32 +1,26 @@
|
||||
extends AnimationTree
|
||||
|
||||
@export_group("Animation names")
|
||||
@export var _suffix_left := "_L"
|
||||
@export var _suffix_right := "_R"
|
||||
|
||||
@export var _idle_name := "+idle"
|
||||
|
||||
var _speed: float
|
||||
var _has_input: bool
|
||||
|
||||
@onready var _player: Player = $"../" as Player
|
||||
@onready var _attack: PlayerAttack = $"../Attack" as PlayerAttack
|
||||
@onready var _locomotion_playback: AnimationNodeStateMachinePlayback = get(
|
||||
"parameters/locomotion/playback"
|
||||
)
|
||||
@onready var _bone_flipper: BoneFlipper = $"../Model/Armature/Skeleton3D/BoneFlipper"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
assert(_player, "_player missing!")
|
||||
Music.track_started.connect(_on_music_track_started)
|
||||
_attack.attacked.connect(_on_player_attacked)
|
||||
_set_bpm()
|
||||
_set_side()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
_bone_flipper.flip = _is_left()
|
||||
|
||||
_speed = _player.velocity.length() / _player.movement.move_speed
|
||||
_has_input = _player.movement.move_input.length() > 0
|
||||
_has_input = (
|
||||
_player.movement.move_input.length() > 0 and not _player.attack.is_hitting()
|
||||
)
|
||||
|
||||
var velocity_relative := _player.to_local(
|
||||
_player.global_position + _player.velocity
|
||||
@@ -34,31 +28,21 @@ func _process(_delta: float) -> void:
|
||||
var velocity_blend := (
|
||||
Vector2(-velocity_relative.x, velocity_relative.z) / _player.movement.move_speed
|
||||
)
|
||||
|
||||
if _is_left():
|
||||
velocity_blend.x = -velocity_blend.x
|
||||
|
||||
Debugger.text("velocity_blend", velocity_blend, 2)
|
||||
set(&"parameters/locomotion/run_R/blend_position", velocity_blend)
|
||||
set(&"parameters/locomotion/run/blend_position", velocity_blend)
|
||||
|
||||
|
||||
func _is_left() -> bool:
|
||||
return _attack.side == PlayerAttack.Side.LEFT
|
||||
|
||||
|
||||
func _suffix(invert: bool = false) -> String:
|
||||
if not invert:
|
||||
return _suffix_left if _is_left() else _suffix_right
|
||||
return _suffix_left if not _is_left() else _suffix_right
|
||||
|
||||
|
||||
func _set_bpm() -> void:
|
||||
set(&"parameters/main_time_scale/scale", Music.bpm_factor)
|
||||
|
||||
|
||||
func _set_side() -> void:
|
||||
_locomotion_playback.travel(_idle_name + _suffix())
|
||||
|
||||
|
||||
func _on_music_track_started() -> void:
|
||||
_set_bpm()
|
||||
|
||||
|
||||
func _on_player_attacked() -> void:
|
||||
_set_side()
|
||||
|
||||
Reference in New Issue
Block a user