79 lines
1.6 KiB
C#
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;
|
|
}
|
|
}
|