add bone flattener
This commit is contained in:
50
scripts/effects/bone_to_flatten.gd
Normal file
50
scripts/effects/bone_to_flatten.gd
Normal file
@@ -0,0 +1,50 @@
|
||||
@tool
|
||||
class_name BoneToFlatten
|
||||
extends Resource
|
||||
|
||||
@export var bone_names: PackedStringArray = []
|
||||
@export var amount_by_pitch_curve: Curve = Curve.new()
|
||||
@export var amount_by_yaw_curve: Curve = Curve.new()
|
||||
@export var consider_side: bool = false
|
||||
@export var yaw_fraction: float = 1
|
||||
|
||||
@export_group("Position")
|
||||
@export var do_position: bool = false
|
||||
@export var position_x_amount: float
|
||||
|
||||
@export_group("Rotation")
|
||||
@export var do_rotation: bool = false
|
||||
@export var rotation_x_amount: float
|
||||
@export var rotation_x_curve: Curve
|
||||
@export var mirror_rot_x: bool = false
|
||||
@export var consider_side_rot_x: bool = false
|
||||
@export var rotation_y_amount: float
|
||||
@export var rotation_y_curve: Curve
|
||||
@export var mirror_rot_y: bool = false
|
||||
@export var consider_side_rot_y: bool = false
|
||||
@export var rotation_z_amount: float
|
||||
@export var rotation_z_curve: Curve
|
||||
@export var mirror_rot_z: bool = false
|
||||
@export var consider_side_rot_z: bool = false
|
||||
|
||||
@export_group("Scale")
|
||||
@export var do_scale: bool = false
|
||||
|
||||
|
||||
func get_angle_normalized(angle: Vector3) -> Vector3:
|
||||
var normalized := Vector3.ZERO
|
||||
normalized.y = angle.y / (PI / yaw_fraction)
|
||||
normalized.x = angle.x / (PI / 2)
|
||||
return normalized
|
||||
|
||||
|
||||
func get_amount(angle: Vector3) -> float:
|
||||
if amount_by_pitch_curve == null or amount_by_yaw_curve == null:
|
||||
return 0
|
||||
|
||||
var normalized := get_angle_normalized(angle)
|
||||
var amount_by_yaw := amount_by_yaw_curve.sample(absf(normalized.y))
|
||||
var amount := amount_by_pitch_curve.sample(absf(normalized.x)) * amount_by_yaw
|
||||
if consider_side:
|
||||
amount *= -signf(normalized.y)
|
||||
return amount
|
||||
Reference in New Issue
Block a user