X-Git-Url: http://git.purplebirdman.com/william-skin.git/blobdiff_plain/991a7b1300e33ebdb52734e566479263acff8ef3..c92b8f1fd53dee92846473ca69f62de008b07509:/player/player.gd diff --git a/player/player.gd b/player/player.gd index 6c78b21..db5b1cc 100644 --- a/player/player.gd +++ b/player/player.gd @@ -1,7 +1,6 @@ class_name Player extends CharacterBody3D - # signals signal camera_lockon @@ -24,7 +23,7 @@ signal camera_lockon @export_range(0.0, 100.0) var camera_lockon_radius := 40.0 @export_enum("locked", "unlocked") var camera_mode: String @export_range(0.0, 50.0) var lockon_sensitivity := 0.2 -@export_range(0.0, 1.0) var mouse_sensitivity := 0.25 +@export_range(0.0, 1.0) var mouse_sensitivity := 0.15 @export_range(0.0, 10.0) var joystick_sensitivity_x := 4.0 @export_range(0.0, 10.0) var joystick_sensitivity_y := 2.0 @@ -43,13 +42,14 @@ signal camera_lockon # class variables var _player_speed := walk_speed var _camera_input_direction := Vector2.ZERO -var _last_movement_direction := rotation +var _last_movement_direction := -rotation var _idle_time := 0.0 var _camera_lockon_node: Node3D = null 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,8 +75,8 @@ func _ready() -> void: _debug.stats.add_property(self, "velocity", "") _debug.stats.add_property(self, "_idle_time", "round") _debug.stats.add_property(self, "_lockon_shift", "round") - _debug.stats.add_property(self, "_head_track_to", "") _debug.stats.add_property(self, "_head_track_arr", "") + _debug.stats.add_property(self, "_head_track_target", "") func _input(event: InputEvent) -> void: @@ -111,9 +111,10 @@ func _unhandled_input(event: InputEvent) -> void: elif event is InputEventJoypadMotion: _camera_input_method = CAMERA_JOYSTICK_INPUT _camera_input_direction = Input.get_vector("camera-left", "camera-right", "camera-up", "camera-down") - if _camera_input_direction == Vector2.ZERO: - _lockon_shift = LOCKON_CENTER _camera_input_direction *= Vector2(joystick_sensitivity_x, -joystick_sensitivity_y) + + if _camera_input_direction == Vector2.ZERO: + _lockon_shift = LOCKON_CENTER # class functions @@ -324,15 +325,33 @@ 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(null) + _skin.set_eyes_target(null) + else: + var target: Node3D = _head_track_arr.front() + _head_track_target = target + _skin.set_head_target(target) + _skin.set_eyes_target(target) + + +# 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_head_turn")): + for node in area.get_children().filter(func(c: Node3D): 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: - for node in area.get_parent().get_children().filter(func(c): return c.is_in_group("player_head_turn")): + for node in area.get_children().filter(func(c: Node3D): return c.is_in_group("player-headTrack")): var i = _head_track_arr.find(node) if i >= 0: _head_track_arr.remove_at(i) + _pick_head_track_target()