Skip to content

Commit e8f87cd

Browse files
committed
Add a parent CameraState class to get autocompletion and type checks
1 parent 27c77f8 commit e8f87cd

File tree

6 files changed

+40
-22
lines changed

6 files changed

+40
-22
lines changed

project.godot

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ _global_script_classes=[ {
1414
"language": "GDScript",
1515
"path": "res://src/Player/Camera/CameraRig.gd"
1616
}, {
17+
"base": "State",
18+
"class": "CameraState",
19+
"language": "GDScript",
20+
"path": "res://src/Player/Camera/CameraState.gd"
21+
}, {
1722
"base": "Spatial",
1823
"class": "Mannequiny",
1924
"language": "GDScript",
@@ -41,6 +46,7 @@ _global_script_classes=[ {
4146
} ]
4247
_global_script_class_icons={
4348
"CameraRig": "",
49+
"CameraState": "",
4450
"Mannequiny": "",
4551
"Player": "",
4652
"PlayerState": "",

src/Player/Camera/CameraRig.gd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ signal aim_fired(target_vector)
1212
onready var camera: InterpolatedCamera = $InterpolatedCamera
1313
onready var spring_arm: SpringArm = $SpringArm
1414
onready var aim_ray: RayCast = $AimRay
15+
onready var aim_target: Sprite3D = $AimTarget
1516

1617
var player: KinematicBody
1718

src/Player/Camera/CameraState.gd

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
extends State
2+
class_name CameraState
3+
4+
5+
var camera_rig: CameraRig
6+
7+
8+
func _ready() -> void:
9+
yield(owner, "ready")
10+
camera_rig = owner

src/Player/Camera/States/Aim.gd

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
extends State
1+
extends CameraState
22
"""
33
Logic state for the camera where configuration are made to the camera to set
44
the field of view, position offset (over the shoulder), etc.
@@ -15,16 +15,16 @@ func unhandled_input(event: InputEvent) -> void:
1515
_state_machine.transition_to("Camera/Default")
1616
elif event.is_action_pressed("action"):
1717
_state_machine.transition_to("Camera/Default")
18-
owner.emit_signal("aim_fired",
19-
owner.aim_ray.get_collision_point() if owner.aim_ray.is_colliding()
20-
else owner.get_global_transform().origin)
18+
camera_rig.emit_signal("aim_fired",
19+
camera_rig.aim_ray.get_collision_point() if camera_rig.aim_ray.is_colliding()
20+
else camera_rig.get_global_transform().origin)
2121
else:
2222
_parent.unhandled_input(event)
2323

2424

2525
func physics_process(delta: float) -> void:
2626
_parent.physics_process(delta)
27-
_parent.aim_target.update(owner.aim_ray)
27+
_parent.aim_target.update(camera_rig.aim_ray)
2828

2929

3030
func enter(msg: Dictionary = {}) -> void:

src/Player/Camera/States/Camera.gd

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
extends State
1+
extends CameraState
22
"""
33
Parent state for all camera based states for the Camera. Handles input based on
44
mouse/gamepad and movement and configuration based on which state we're using.
@@ -9,7 +9,7 @@ logic contained in a central location while being easily modifiable.
99
"""
1010

1111

12-
onready var aim_target: Sprite3D = owner.get_node("AimTarget")
12+
onready var aim_target: Sprite3D
1313

1414
export var is_y_inverted: = true
1515
export var fov_default: = 70.0
@@ -26,10 +26,11 @@ var _is_aiming: = false
2626
func _ready():
2727
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
2828
yield(owner, "ready")
29+
aim_target = camera_rig.aim_target
2930

3031

3132
func physics_process(delta: float) -> void:
32-
owner.global_transform.origin = owner.player.global_transform.origin + owner._position_start
33+
camera_rig.global_transform.origin = camera_rig.player.global_transform.origin + camera_rig._position_start
3334

3435
var look_direction: = get_look_direction()
3536
var move_direction: = get_move_direction()
@@ -44,12 +45,12 @@ func physics_process(delta: float) -> void:
4445
if not is_moving_towards_camera and not _is_aiming:
4546
auto_rotate(move_direction)
4647

47-
owner.rotation.y = wrapf(owner.rotation.y, -PI, PI)
48+
camera_rig.rotation.y = wrapf(camera_rig.rotation.y, -PI, PI)
4849

49-
if owner.camera.fov != _fov_current:
50-
owner.camera.fov = lerp(owner.camera.fov, _fov_current, 0.05)
50+
if camera_rig.camera.fov != _fov_current:
51+
camera_rig.camera.fov = lerp(camera_rig.camera.fov, _fov_current, 0.05)
5152

52-
owner.spring_arm.translation = lerp(owner.spring_arm.translation, owner._position_start + _offset, 0.05)
53+
camera_rig.spring_arm.translation = lerp(camera_rig.spring_arm.translation, camera_rig._position_start + _offset, 0.05)
5354

5455

5556
func enter(msg: Dictionary = {}) ->void:
@@ -59,13 +60,13 @@ func enter(msg: Dictionary = {}) ->void:
5960

6061

6162
func auto_rotate(move_direction: Vector3) -> void:
62-
var offset: float = owner.player.rotation.y - owner.rotation.y
63+
var offset: float = camera_rig.player.rotation.y - camera_rig.rotation.y
6364
var target_angle: float = (
64-
owner.player.rotation.y - 2 * PI if offset > PI
65-
else owner.player.rotation.y + 2 * PI if offset < -PI
66-
else owner.player.rotation.y
65+
camera_rig.player.rotation.y - 2 * PI if offset > PI
66+
else camera_rig.player.rotation.y + 2 * PI if offset < -PI
67+
else camera_rig.player.rotation.y
6768
)
68-
owner.rotation.y = lerp(owner.rotation.y, target_angle, 0.015)
69+
camera_rig.rotation.y = lerp(camera_rig.rotation.y, target_angle, 0.015)
6970

7071

7172
func unhandled_input(event: InputEvent) -> void:
@@ -83,12 +84,12 @@ func unhandled_input(event: InputEvent) -> void:
8384

8485
func process_camera_input(input: Vector2) -> void:
8586
if input.x != 0:
86-
owner.rotation.y -= input.x
87+
camera_rig.rotation.y -= input.x
8788
if input.y != 0:
8889
var angle: = input.y
89-
owner.rotation.x -= angle * -1.0 if is_y_inverted else angle
90-
owner.rotation.x = clamp(owner.rotation.x, -0.75, 1.25)
91-
owner.rotation.z = 0
90+
camera_rig.rotation.x -= angle * -1.0 if is_y_inverted else angle
91+
camera_rig.rotation.x = clamp(camera_rig.rotation.x, -0.75, 1.25)
92+
camera_rig.rotation.z = 0
9293

9394

9495
"""

src/Player/Camera/States/Default.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
extends State
1+
extends CameraState
22
"""
33
Logic state for the camera - implies no modification to the camera settings.
44
"""

0 commit comments

Comments
 (0)