Files
Billiards/scenes/ui_controls/camera/camera_controller.gd
itdominator ed6f243b93 Refactor game mode scoring and win conditions
* Add overridable hooks for sunk/reaped ball handling and turn behavior.
* Implement default scoring and game-over messaging across game modes.
* Add pretty game mode names for win-condition messages.
* Update Free Ball, Last Ball, and Snooker modes to return win-condition messages.
* Move the reset button lookup to the scene root for multiplayer setup.
* Move camera controller scene to shared base UI. Move parts of it to new game_data UI node.
* Add commented test state generation for end-state testing.
2026-08-14 03:38:04 -05:00

63 lines
1.5 KiB
GDScript

class_name CameraController extends Control
@onready var prev_bttn: Button = $margin_container/vbox/hbox/hbox2/prev_bttn
@onready var next_bttn: Button = $margin_container/vbox/hbox/hbox2/next_bttn
@export var cameras: Array[Camera3D]
var cue_cam: Camera3D
var current_cam: Camera3D
var current_cam_index: int = 0
func _ready() -> void:
setup_signals()
setup_multiplayer()
for camera in get_children():
if not is_instance_of(camera, Camera3D): continue
cameras.append(camera)
if not camera.name == "cue_cam": continue
cue_cam = camera
current_cam = cameras.get(current_cam_index)
func setup_signals() -> void:
Globals.game_state.update_cue_cam_position.connect(
_on_update_cue_cam_position
)
func setup_multiplayer() -> void:
if not Globals.multiplayer_data.is_multiplayer_active: return
func _on_update_cue_cam_position(marker_rotation: Vector3, marker_position: Vector3) -> void:
cue_cam.global_rotation = marker_rotation
cue_cam.global_position = marker_position
func _on_prev_bttn_pressed() -> void:
accept_event()
if current_cam_index == 0:
current_cam_index = cameras.size() - 1
else:
current_cam_index -= 1
_set_active_camera()
func _on_next_bttn_pressed() -> void:
accept_event()
if current_cam_index == (cameras.size() - 1):
current_cam_index = 0
else:
current_cam_index += 1
_set_active_camera()
func _set_active_camera():
current_cam.set_current(false)
current_cam = cameras.get(current_cam_index)
current_cam.set_current(true)