CarmenSandiego/Assets/UdonSharp/RandomVideoPlayer.cs
Jamie Greunbaum 1f921988ef - Foghorn and Crook In Jail animations implemented
- GameManager initialisation now also enables interactions no matter what
- Markers are no longer unnecessarily deactivated at the end of a round
- Markers have better physics when dropped and disabled
- Attempted to add fallback support to video players
2025-08-23 23:02:39 -04:00

83 lines
1.7 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDK3.Video.Components.Base;
using VRC.SDKBase;
using VRC.Udon;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class RandomVideoPlayer : UdonSharpBehaviour
{
public VRCUrl[] VideoPool;
public VRCUrl[] VideoPoolFallback;
private BaseVRCVideoPlayer _VideoPlayer;
[UdonSynced, FieldChangeCallback(nameof(VideoIndex))] private int _VideoIndex = -1;
[UdonSynced, FieldChangeCallback(nameof(PlayVideo))] private bool _VideoIsPlaying;
void Start()
{
_VideoPlayer = GetComponent<BaseVRCVideoPlayer>();
}
public void LoadRandomVideo()
{
int RandomIndex = -1;
for (int i = 0; i < 3; i++)
{
RandomIndex = Random.Range(0, VideoPool.Length);
if (RandomIndex >= 0 && RandomIndex != VideoIndex) break;
}
VideoIndex = RandomIndex;
}
private void _PlayVideo_Private()
{
_VideoPlayer.Play();
transform.position = new Vector3(transform.position.x, 0.0f, transform.position.z);
}
private void _StopVideo_Private()
{
transform.position = new Vector3(transform.position.x, 1000.0f, transform.position.z);
_VideoPlayer.Stop();
}
public override void OnVideoEnd()
{
transform.position = new Vector3(transform.position.x, 1000.0f, transform.position.z);
PlayVideo = false;
base.OnVideoEnd();
}
public int VideoIndex
{
set
{
_VideoIndex = value;
if (VideoIndex >= 0)
{
_VideoPlayer.LoadURL(VideoPool[_VideoIndex]);
}
RequestSerialization();
}
get => _VideoIndex;
}
public bool PlayVideo
{
set
{
_VideoIsPlaying = value;
if (_VideoIsPlaying) _PlayVideo_Private();
else _StopVideo_Private();
RequestSerialization();
}
get => _VideoIsPlaying;
}
}