class_name CameraController extends Control @onready var player_lbl: Label = $margin_container/vbox/hbox/hbox/player_lbl @onready var prev_bttn: Button = $margin_container/vbox/hbox/hbox2/prev_bttn @onready var next_bttn: Button = $margin_container/vbox/hbox/hbox2/next_bttn @onready var active_lbl: Label = $margin_container/vbox/hbox2/hbox/active_lbl @onready var reset_bttn: Button = $margin_container/vbox/hbox2/hbox2/reset_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) MessageBus.emit_local("update_active_lbl", null) func setup_signals() -> void: Globals.game_state.update_cue_cam_position.connect( _on_update_cue_cam_position ) MessageBus.subscribe("update_active_lbl", _on_update_active_lbl) func setup_multiplayer() -> void: player_lbl.text = Globals.game_data.player_id if not Globals.multiplayer_data.is_multiplayer_active: return reset_bttn.pressed.disconnect(_on_reset_bttn_pressed) reset_bttn.visible = false func _on_update_active_lbl() -> void: active_lbl.visible = \ Globals.multiplayer_data.current_turn_player_id == multiplayer.get_unique_id() 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 _on_reset_bttn_pressed() -> void: Globals.game_state.reload_scene.emit() func _set_active_camera(): current_cam.set_current(false) current_cam = cameras.get(current_cam_index) current_cam.set_current(true)