using UdonSharp; using UnityEngine; using VRC.SDKBase; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class CameraControllerRound2 : CameraControllerBase { [Space] [SerializeField] public Camera Player1Camera; [SerializeField] public Camera Player2Camera; [SerializeField] public Camera HostAndWinnerCamera; [SerializeField] public Camera LocationBoardCamera; [SerializeField] public Camera PrimaryFocusCamera; [SerializeField] public Camera VideoPlayerCamera; [Space] [SerializeField] public CameraSwitchTrigger WideShotCameraTrigger; [SerializeField] public CameraSwitchTrigger HostAndWinnerCameraTrigger; [Space] [SerializeField] public CameraTimedSwitcher HostAllPlayersTimerToggle; [SerializeField] public CameraTimedSwitcher HostPlayersAndWideShotTimerToggle; [SerializeField] public CameraTimedSwitcher Player1AndLocationBoardTimerToggle; [SerializeField] public CameraTimedSwitcher Player2AndLocationBoardTimerToggle; [SerializeField] public CameraTimedSwitcher LocationBoardAndShortHostTimerToggle; [SerializeField] public CameraTimedSwitcher LocationBoardAndLongHostTimerToggle; [SerializeField] public CameraTimedSwitcher LocationBoardAndCurrentPlayerTimerToggle; [SerializeField] public CameraTimedSwitcher LocationBoardAndWinningPlayerTimerToggle; [SerializeField] public CameraTimedSwitcher VideoPlayerToWinningPlayerTimerToggle; [Space] [SerializeField] public Animator _CameraAnimator; [Space] [SerializeField] public CameraAnchor Player1CameraAnchor; [SerializeField] public CameraAnchor Player2CameraAnchor; [SerializeField] public CameraAnchor HostAndWinnerCameraAnchor; [SerializeField] public CameraAnchor LocationBoardCameraAnchor; [SerializeField] public CameraAnchor ModemCameraAnchor; [SerializeField] public CameraAnchor VideoPlayerCameraAnchor; [Space] [SerializeField] public CameraAnchor WideShotCameraAnchor; [SerializeField] public CameraAnchor AllPlayersCameraAnchor; [SerializeField] public CameraAnchor WinningPlayerCameraAnchor; [UdonSynced, FieldChangeCallback(nameof(_PlayModemZoomCallback))] private bool _PlayModemZoom = false; public override void InitialiseCameras() { DisableAllSwitchers(); DisableAllTriggers(); Player1CameraAnchor.AttachCamera(Player1Camera); Player2CameraAnchor.AttachCamera(Player2Camera); HostAndWinnerCameraAnchor.AttachCamera(HostAndWinnerCamera); LocationBoardCameraAnchor.AttachCamera(LocationBoardCamera); ModemCameraAnchor.AttachCamera(PrimaryFocusCamera); VideoPlayerCameraAnchor.AttachCamera(VideoPlayerCamera); } public override void OnOwnershipTransferred(VRCPlayerApi Player) { Networking.SetOwner(Player, Player1Camera.gameObject); Networking.SetOwner(Player, Player2Camera.gameObject); Networking.SetOwner(Player, HostAndWinnerCamera.gameObject); Networking.SetOwner(Player, LocationBoardCamera.gameObject); Networking.SetOwner(Player, PrimaryFocusCamera.gameObject); Networking.SetOwner(Player, VideoPlayerCamera.gameObject); Networking.SetOwner(Player, WideShotCameraTrigger.gameObject); Networking.SetOwner(Player, HostAllPlayersTimerToggle.gameObject); Networking.SetOwner(Player, HostPlayersAndWideShotTimerToggle.gameObject); Networking.SetOwner(Player, Player1AndLocationBoardTimerToggle.gameObject); Networking.SetOwner(Player, Player2AndLocationBoardTimerToggle.gameObject); Networking.SetOwner(Player, LocationBoardAndShortHostTimerToggle.gameObject); Networking.SetOwner(Player, LocationBoardAndLongHostTimerToggle.gameObject); Networking.SetOwner(Player, LocationBoardAndCurrentPlayerTimerToggle.gameObject); Networking.SetOwner(Player, LocationBoardAndWinningPlayerTimerToggle.gameObject); Networking.SetOwner(Player, VideoPlayerToWinningPlayerTimerToggle.gameObject); Networking.SetOwner(Player, _CameraAnimator.gameObject); Networking.SetOwner(Player, Player1CameraAnchor.gameObject); Networking.SetOwner(Player, Player2CameraAnchor.gameObject); Networking.SetOwner(Player, HostAndWinnerCameraAnchor.gameObject); Networking.SetOwner(Player, LocationBoardCameraAnchor.gameObject); Networking.SetOwner(Player, VideoPlayerCameraAnchor.gameObject); Networking.SetOwner(Player, WideShotCameraAnchor.gameObject); Networking.SetOwner(Player, AllPlayersCameraAnchor.gameObject); Networking.SetOwner(Player, WinningPlayerCameraAnchor.gameObject); base.OnOwnershipTransferred(Player); } public void SwitchToPlayer1Camera() { SwitchToLiveCamera(Player1Camera); } public void SwitchToPlayer2Camera() { SwitchToLiveCamera(Player2Camera); } public void SwitchToHostAndWinnerCamera() { SwitchToLiveCamera(HostAndWinnerCamera); } public void SwitchToLocationBoardCamera() { SwitchToLiveCamera(LocationBoardCamera); } public void SwitchToModemCamera() { SwitchToLiveCamera(PrimaryFocusCamera); } public void SwitchToVideoPlayerCamera() { SwitchToLiveCamera(VideoPlayerCamera); } public void ActivateWideShotCamera() { WideShotCameraAnchor.AttachCamera(PrimaryFocusCamera); } public void SwitchToWideShotCamera() { ActivateWideShotCamera(); SwitchToLiveCamera(PrimaryFocusCamera); } public void ActivateAllPlayersCamera() { AllPlayersCameraAnchor.AttachCamera(PrimaryFocusCamera); } public void SwitchToAllPlayersCamera() { ActivateAllPlayersCamera(); SwitchToLiveCamera(PrimaryFocusCamera); } public void ActivateWinningPlayerCamera() { WinningPlayerCameraAnchor.AttachCamera(PrimaryFocusCamera); } public void SwitchToWinningPlayerCamera() { ActivateWinningPlayerCamera(); SwitchToLiveCamera(PrimaryFocusCamera); } public void WinningPlayerCamera_FollowPlayers(string[] Players, float FollowSpeed = 1.0f) { WinningPlayerCameraAnchor.FollowPlayers(Players, FollowSpeed); } public void WinningPlayerCamera_StopFollowingPlayers() { WinningPlayerCameraAnchor.StopFollowingPlayers(); } public void ActivateHostAllPlayersCameraSwitcher() { ActivateCameraSwitcher(HostAllPlayersTimerToggle); } public void ActivateHostPlayersAndWideShotCameraSwitcher() { ActivateCameraSwitcher(HostPlayersAndWideShotTimerToggle); } public void ActivatePlayer1AndLocationBoardCameraSwitcher() { ActivateCameraSwitcher(Player1AndLocationBoardTimerToggle); } public void ActivatePlayer2AndLocationBoardCameraSwitcher() { ActivateCameraSwitcher(Player2AndLocationBoardTimerToggle); } public void ActivateLocationBoardAndShortHostCameraSwitcher() { ActivateCameraSwitcher(LocationBoardAndShortHostTimerToggle); } public void ActivateLocationBoardAndLongHostCameraSwitcher() { ActivateCameraSwitcher(LocationBoardAndLongHostTimerToggle); } public void ActivateLocationBoardAndCurrentPlayerCameraSwitcher() { ActivateCameraSwitcher(LocationBoardAndCurrentPlayerTimerToggle); } public void ActivateLocationBoardAndWinningPlayerCameraSwitcher() { ActivateCameraSwitcher(LocationBoardAndWinningPlayerTimerToggle); } public void ActivateVideoPlayerToWinningPlayerCameraSwitcher() { ActivateCameraSwitcher(VideoPlayerToWinningPlayerTimerToggle); } public void ActivateHostAllPlayersCameraTrigger() { WideShotCameraTrigger.gameObject.SetActive(true); } public void DeactivateHostAllPlayersCameraTrigger() { WideShotCameraTrigger.gameObject.SetActive(false); } public void ActivateHostWinnerCameraTrigger() { HostAndWinnerCameraTrigger.gameObject.SetActive(true); } public void DeactivateHostWinnerCameraTrigger() { HostAndWinnerCameraTrigger.gameObject.SetActive(false); } public void PlayModemZoom(bool Play) { if (Play) { SwitchToModemCamera(); } _PlayModemZoomCallback = Play; RequestSerialization(); } public override void DisableAllTriggers() { WideShotCameraTrigger.gameObject.SetActive(false); } public override void DisableAllSwitchers() { ActivateCameraSwitcher(null); } private bool _PlayModemZoomCallback { set { _PlayModemZoom = value; _CameraAnimator.SetBool("Play Modem Zoom", _PlayModemZoom); } get => _PlayModemZoom; } }