CarmenSandiego/Assets/UdonSharp/RandomVideoPlayer.cs
Jamie Greunbaum b0995571c0 This is a big one:
- Added more camera switches to the end of round 3.
- Made round 3 camera animations reset more reliably.
- Added more decorations, including self-updating Wanted and Missing posters.
- Added a crook portrait for Carmen Sandiego as part of the above.
- Uncommented seemingly useless code in CaseVideoSyncPlayer; not so useless.
- RandomVideoPlayer now sets ownership properly on ownership transfer.
- Location board crook portraits no longer use a shared material.
- Lowered resolution of crook portraits.
- Paper materials now have their normal map on the detail UVs instead.
- Drew more of Robocrook's lower half, and filled out his portrait more.
2026-03-12 04:46:43 -04:00

96 lines
1.9 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 MultiRoundVideoPlayer _VideoPlayer;
[UdonSynced, FieldChangeCallback(nameof(VideoIndex))] private int _VideoIndex = -1;
[UdonSynced, FieldChangeCallback(nameof(PlayVideo))] private bool _VideoIsPlaying;
public VRCUrl[] VideoPool;
public VRCUrl[] VideoPoolFallback;
public override void OnOwnershipTransferred(VRCPlayerApi Player)
{
Networking.SetOwner(Player, _VideoPlayer.gameObject);
base.OnOwnershipTransferred(Player);
}
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 void VideoEnded()
{
transform.position = new Vector3(transform.position.x, -1000.0f, transform.position.z);
PlayVideo = false;
}
public float GetDuration()
{
return _VideoPlayer.GetDuration();
}
public float GetTime()
{
return _VideoPlayer.GetTime();
}
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;
}
}