]> Untitled Git - william-skin.git/blobdiff - player/player.gd
* Added face test animation
[william-skin.git] / player / player.gd
index 076679a2ae6f81fe29f5726a2d86445bbc008550..1ebbf4c2180d4a72567c2a3f7d2a48c4087ff65b 100644 (file)
@@ -49,6 +49,7 @@ var _lockon_direction: Vector3 = Vector3.ZERO
 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}
@@ -75,6 +76,7 @@ func _ready() -> void:
        _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:
@@ -323,11 +325,28 @@ func _process_player(delta: float) -> 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:
@@ -335,3 +354,4 @@ 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()