- 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.
96 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|