var _lockon_indicator_scene = load("res://ux/lockon_indicator.tscn")
var _lockon_instance: Node3D = _lockon_indicator_scene.instantiate()
+var _head_track_target: Node3D = null
var _head_track_arr: Array[Node3D] = []
enum {LOCKON_LEFT, LOCKON_CENTER, LOCKON_RIGHT}
_debug.stats.add_property(self, "_idle_time", "round")
_debug.stats.add_property(self, "_lockon_shift", "round")
_debug.stats.add_property(self, "_head_track_arr", "")
+ _debug.stats.add_property(self, "_head_track_target", "")
func _input(event: InputEvent) -> void:
move_and_slide()
+# head tracking
+# TODO: choose the closest head track thing to my position
+# tell skin to track it
+func _pick_head_track_target() -> void:
+ if _head_track_arr.is_empty():
+ _head_track_target = null
+ _skin.set_head_target(Vector3.ZERO)
+ _skin.set_eyes_target(Vector3.ZERO)
+ else:
+ var target: Node3D = _head_track_arr.front()
+ _head_track_target = target
+ _skin.set_head_target(target.global_position)
+ _skin.set_eyes_target(target.global_position)
+
+
+# if we find a head tracking obj, add it to the array unless it's already there
func _on_head_turn_area_entered(area: Area3D) -> void:
for node in area.get_parent().get_children().filter(func(c): return c.is_in_group("player-headTrack")):
var i = _head_track_arr.find(node)
if i < 0:
_head_track_arr.append(node)
+ _pick_head_track_target()
func _on_head_turn_area_exited(area: Area3D) -> void:
var i = _head_track_arr.find(node)
if i >= 0:
_head_track_arr.remove_at(i)
+ _pick_head_track_target()