killbox/bak/look_forward_modifier.gd
Nikolai Rodionov f17726240d
Trying something that will probably never happen
Signed-off-by: Nikolai Rodionov <allanger@badhouseplants.net>
2025-05-31 23:39:45 +02:00

43 lines
1.2 KiB
GDScript

@tool
class_name LookForwardModifier
extends SkeletonModifier3D
@export var target_object: Marker3D
@export var head_marker: Marker3D
@export_enum(" ") var bone: String
func _validate_property(property: Dictionary) -> void:
if property.name == "bone":
var skeleton: Skeleton3D = get_skeleton()
if skeleton:
property.hint = PROPERTY_HINT_ENUM
property.hint_string = skeleton.get_concatenated_bone_names()
func _process_modification() -> void:
var skeleton: Skeleton3D = get_skeleton()
if !skeleton:
return
var bone_idx: int = skeleton.find_bone(bone)
if bone_idx == -1:
return
var target_position_global: Vector3 = target_object.global_position
var target_position_local: Vector3 = to_local(target_position_global)
var head_bone_pose: Transform3D = skeleton.get_bone_global_pose(bone_idx)
var new_pose: Transform3D = head_bone_pose.looking_at(target_position_local, Vector3.FORWARD, true)
var new_basis: Basis
new_basis.y = new_pose.basis.y
new_basis.z = new_pose.basis.z
new_basis.x = new_pose.basis.x
new_pose.basis = new_basis
skeleton.set_bone_global_pose(bone_idx, new_pose)
func z_and_y_inverse(v : Vector3) -> Vector3 :
var tmp: float = v.z
v.z = v.y
v.y = tmp
return v