mirror of
https://git.aaro.dev/VRCBoard/vrcboard-udon.git
synced 2026-03-17 04:49:45 +00:00
129 lines
4.2 KiB
C#
129 lines
4.2 KiB
C#
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDK3.Data;
|
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
|
namespace VRCBoard.Components
|
|
{
|
|
/*
|
|
protected override void OnRegister() {}
|
|
protected override void OnInitialize() {}
|
|
protected override void OnSupporterDataUpdate() {}
|
|
protected override void OnImageDataUpdate() {}
|
|
protected override void OnImageLoaded() {}
|
|
*/
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
|
|
public abstract class VRCBoardBaseComponent : UdonSharpBehaviour
|
|
{
|
|
[HideInInspector] public VRCBoardManager manager;
|
|
|
|
protected abstract void OnRegister();
|
|
protected abstract void OnInitialize();
|
|
protected abstract void OnSupporterDataUpdate();
|
|
protected abstract void OnImageDataUpdate();
|
|
protected abstract void OnImageLoaded();
|
|
|
|
protected internal void _Register(VRCBoardManager _manager)
|
|
{
|
|
manager = _manager;
|
|
OnRegister();
|
|
}
|
|
|
|
private bool _imageInitialized;
|
|
private bool _dataInitialized;
|
|
private bool _initialized;
|
|
private void CheckInitialization()
|
|
{
|
|
if (_imageInitialized && _dataInitialized && !_initialized)
|
|
{
|
|
_initialized = true;
|
|
OnInitialize();
|
|
OnImageDataUpdate();
|
|
OnSupporterDataUpdate();
|
|
}
|
|
}
|
|
protected internal void _OnImageInfoUpdate()
|
|
{
|
|
if (_initialized) OnImageDataUpdate();
|
|
else
|
|
{
|
|
_imageInitialized = true;
|
|
CheckInitialization();
|
|
}
|
|
|
|
}
|
|
protected internal void _OnSupporterDataUpdate()
|
|
{
|
|
if (_initialized) OnSupporterDataUpdate();
|
|
else
|
|
{
|
|
_dataInitialized = true;
|
|
CheckInitialization();
|
|
}
|
|
}
|
|
|
|
protected internal void _OnCustomModuleUpdate(int moduleIndex, DataDictionary data)
|
|
{
|
|
Debug.Log("Custom module update");
|
|
}
|
|
|
|
protected internal void _OnAtlasImageLoaded(int atlasIndex = -1)
|
|
{
|
|
OnImageLoaded();
|
|
}
|
|
|
|
private DataDictionary GetImageIdInfo(string imageId) => manager._GetImageIdInfo(imageId);
|
|
|
|
internal bool GetImageAtlasTexture(string imageId, string uploader, out Texture2D texture,
|
|
out int position, out int size, out string type) {
|
|
return manager._GetImageAtlasTexture(imageId, uploader, out int atlasIndex, out texture, out position, out size,
|
|
out type, out string hash);
|
|
}
|
|
|
|
|
|
internal string GetRandomUploader(string imageId)
|
|
{
|
|
DataDictionary imageInfo = GetImageIdInfo(imageId);
|
|
if (imageInfo == null) return null;
|
|
bool uploadsSuccess = imageInfo.TryGetValue("uploads", out DataToken uploadsToken);
|
|
if (!uploadsSuccess) return null;
|
|
if (uploadsToken.TokenType != TokenType.DataList) return null;
|
|
DataList uploads = uploadsToken.DataList;
|
|
if (uploads.Count == 0) return null;
|
|
int randomIndex = Random.Range(0, uploads.Count);
|
|
DataDictionary upload = uploads[randomIndex].DataDictionary;
|
|
if (upload == null) return null;
|
|
bool uploaderSuccess = upload.TryGetValue("a", out DataToken uploaderToken);
|
|
if (!uploaderSuccess) return null;
|
|
if (uploaderToken.TokenType != TokenType.String) return null;
|
|
return uploaderToken.String;
|
|
}
|
|
|
|
internal void RequestImageLoad(string imageId, string uploaderId = "")
|
|
{
|
|
manager._RequestImageLoad(imageId, uploaderId, this);
|
|
}
|
|
}
|
|
#if UNITY_EDITOR && !COMPILER_UDONSHARP
|
|
[CustomEditor(typeof(VRCBoardBaseComponent), true)]
|
|
public class VRCBoardBaseComponentEditor : Editor
|
|
{
|
|
public override void OnInspectorGUI()
|
|
{
|
|
if (Application.isPlaying)
|
|
{
|
|
EditorGUILayout.LabelField("Cannot edit a VRCBoard component while in play mode");
|
|
//return;
|
|
}
|
|
|
|
base.OnInspectorGUI();
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|