CarmenSandiego/Assets/UdonSharp/RandomVideoPlayer.cs

79 lines
1.6 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
{
[SerializeField] private BaseVRCVideoPlayer _VideoPlayer;
[UdonSynced, FieldChangeCallback(nameof(VideoIndex))] private int _VideoIndex = -1;
[UdonSynced, FieldChangeCallback(nameof(PlayVideo))] private bool _VideoIsPlaying;
public VRCUrl[] VideoPool;
public VRCUrl[] VideoPoolFallback;
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);
VideoIndex = -1;
_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;
}
}