using UdonSharp; using UnityEngine; using VRC.SDK3.UdonNetworkCalling; using VRC.SDKBase; using VRC.Udon; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class CameraControllerRound3 : CameraControllerBase { [Space] [SerializeField] public Camera PlayerCamera; [SerializeField] public Camera HostCamera; [SerializeField] public Camera OverheadCamera; [SerializeField] public Camera FrontCamera; [SerializeField] public Camera PrimaryFocusCamera; [SerializeField] public Camera VideoPlayerCamera; [Space] [SerializeField] public GameObject PlayfieldSwitchTriggerGroup; [Space] [SerializeField] public CameraTimedSwitcher HostPlayerTimerToggle; [Space] [SerializeField] public Animator _CameraAnimator; [Space] [SerializeField] public CameraAnchor HostStartingCameraAnchor; [SerializeField] public CameraAnchor PlayerStartingCameraAnchor; [SerializeField] public CameraAnchor OverheadCameraAnchor; [SerializeField] public CameraAnchor FrontCameraAnchor; [SerializeField] public CameraAnchor NewspaperCameraAnchor; [SerializeField] public CameraAnchor VideoPlayerCameraAnchor; [Space] [SerializeField] public CameraAnchor[] HostCameraAnchorSequence; [SerializeField] public CameraAnchor[] PlayerCameraAnchorSequence; [UdonSynced, FieldChangeCallback(nameof(ActivatePlayfieldSwitchTriggerGroup))] private bool _ActivatePlayfieldSwitchTriggerGroup = false; [UdonSynced, FieldChangeCallback(nameof(MarkerCameraAnchorPosition))] private int _MarkerCameraAnchorPosition = -1; [UdonSynced, FieldChangeCallback(nameof(PlayIFeelGoodCallback))] private bool _PlayIFeelGood = false; [UdonSynced, FieldChangeCallback(nameof(PlayDoItRockapellaCallback))] private bool _PlayDoItRockapella = false; public override void InitialiseCameras() { HostStartingCameraAnchor.AttachCamera(PlayerCamera); PlayerStartingCameraAnchor.AttachCamera(HostCamera); OverheadCameraAnchor.AttachCamera(OverheadCamera); FrontCameraAnchor.AttachCamera(FrontCamera); NewspaperCameraAnchor.AttachCamera(PrimaryFocusCamera); VideoPlayerCameraAnchor.AttachCamera(VideoPlayerCamera); HostCameraAnchorSequence[0].AttachCamera(HostCamera); PlayerCameraAnchorSequence[0].AttachCamera(PlayerCamera); ActivatePlayfieldSwitchTriggerGroup = false; } public override void DeinitialiseCameras() { PlayIFeelGood(false); PlayDoItRockapella(false); base.DeinitialiseCameras(); } public override void OnOwnershipTransferred(VRCPlayerApi Player) { Networking.SetOwner(Player, PlayerCamera.gameObject); Networking.SetOwner(Player, HostCamera.gameObject); Networking.SetOwner(Player, OverheadCamera.gameObject); Networking.SetOwner(Player, FrontCamera.gameObject); Networking.SetOwner(Player, PrimaryFocusCamera.gameObject); Networking.SetOwner(Player, VideoPlayerCamera.gameObject); Networking.SetOwner(Player, PlayfieldSwitchTriggerGroup); Networking.SetOwner(Player, HostPlayerTimerToggle.gameObject); Networking.SetOwner(Player, _CameraAnimator.gameObject); Networking.SetOwner(Player, HostStartingCameraAnchor.gameObject); Networking.SetOwner(Player, PlayerStartingCameraAnchor.gameObject); Networking.SetOwner(Player, OverheadCameraAnchor.gameObject); Networking.SetOwner(Player, FrontCameraAnchor.gameObject); Networking.SetOwner(Player, NewspaperCameraAnchor.gameObject); Networking.SetOwner(Player, VideoPlayerCameraAnchor.gameObject); base.OnOwnershipTransferred(Player); } public void SwitchToPlayerCamera() { SwitchToLiveCamera(PlayerCamera); } public void SwitchToHostCamera() { SwitchToLiveCamera(HostCamera); } public void SwitchToOverheadCamera() { SwitchToLiveCamera(OverheadCamera); } public void SwitchToFrontCamera() { SwitchToLiveCamera(FrontCamera); } public void SwitchToVideoPlayerCamera() { SwitchToLiveCamera(VideoPlayerCamera); } private void _OnPlayfieldSwitchTriggerGroupChanged() { PlayfieldSwitchTriggerGroup.SetActive(ActivatePlayfieldSwitchTriggerGroup); RequestSerialization(); } public void ActivateWideShotCamera() { //DefaultWideShotCameraAnchor.AttachCamera(PrimaryFocusCamera); } public void SwitchToWideShotCamera() { //DisableAllSwitchers(); //ActivateWideShotCamera(); //SwitchToLiveCamera(PrimaryFocusCamera); } public void ActivateHostPlayerCameraSwitcher() { HostPlayerTimerToggle.Activate = true; } public void PlayIFeelGood(bool Play) { PlayIFeelGoodCallback = Play; RequestSerialization(); } public void PlayDoItRockapella(bool Play) { PlayDoItRockapellaCallback = Play; RequestSerialization(); } public override void DisableAllTriggers() { ActivatePlayfieldSwitchTriggerGroup = false; } public override void DisableAllSwitchers() { HostPlayerTimerToggle.Activate = false; } public bool ActivatePlayfieldSwitchTriggerGroup { set { _ActivatePlayfieldSwitchTriggerGroup = value; _OnPlayfieldSwitchTriggerGroupChanged(); } get => _ActivatePlayfieldSwitchTriggerGroup; } public int MarkerCameraAnchorPosition { set { _MarkerCameraAnchorPosition = value; _ChangeMarkerCameraPosition(); } get => _MarkerCameraAnchorPosition; } private void _ChangeMarkerCameraPosition() { HostCameraAnchorSequence[MarkerCameraAnchorPosition].AttachCamera(HostCamera); PlayerCameraAnchorSequence[MarkerCameraAnchorPosition].AttachCamera(PlayerCamera); RequestSerialization(); } private bool PlayIFeelGoodCallback { set { _PlayIFeelGood = value; _CameraAnimator.SetBool("Play I Feel Good", _PlayIFeelGood); if (_PlayIFeelGood) { SwitchToOverheadCamera(); } } get => _PlayIFeelGood; } private bool PlayDoItRockapellaCallback { set { _PlayDoItRockapella = value; _CameraAnimator.SetBool("Play Do It Rockapella", _PlayDoItRockapella); if (_PlayDoItRockapella) { SwitchToOverheadCamera(); } } get => _PlayDoItRockapella; } }