Refactor VRCBoard components and update material properties

This commit is contained in:
2024-10-15 14:58:58 +03:00
parent ea409c627a
commit e25230326b
8 changed files with 477 additions and 686 deletions

View File

@@ -27,6 +27,8 @@ namespace VRCBoard
}
public class VRCBoardManager : UdonSharpBehaviour
{
public bool debugMode = true;
public string vrcBoardDomain = "mydomain.vrcboard.app";
public float periodicUpdateInterval = 60f;
public string VrcBoardBaseUrl => "https://" + vrcBoardDomain + "/";
@@ -511,13 +513,49 @@ namespace VRCBoard
Texture2D texture = result.Result;
int index = GetAtlasIndexFromUrl(url);
if (index == -1) return;
_downloadedAtlasTextures[index] = result.Result;
_downloadedAtlasTextures[index] = texture;
_atlasDownloadTimes[index] = Time.time;
Debug.Log("Downloaded atlas texture " + index);
foreach (var component in vrcBoardComponents)
component._OnImageLoaded(index);
}
public Texture2D GetTexture2D(string uploader, string imageId)
{
bool success = _GetImageAtlasTexture(imageId, uploader, out int atlasIndex, out Texture2D texture,
out int position, out int size, out string type);
if (!success)
{
Debug.LogWarning("[VRCBoard] [GetTexture2D] Failed to get texture for " + uploader);
return null;
}
if (!texture)
{
Debug.LogWarning("[VRCBoard] [GetTexture2D] Failed to get texture for " + uploader);
return null;
}
int blockSize = (int)Mathf.Floor((float)texture.width / (float)size);
int startX = position % size;
int startY = size - (int)Mathf.Floor((float)position / (float)size) - 1;
// Debug.Log("texture startX:" + startX + ", startY:" + startY);
int blockWidth = blockSize;
int blockHeight = blockSize;
Texture2D newTexture = new Texture2D (blockWidth, blockHeight);
Color[] pixels = texture.GetPixels(startX * blockWidth, startY * blockHeight, blockWidth, blockHeight);
newTexture.SetPixels(pixels);
newTexture.wrapMode = TextureWrapMode.Clamp;
newTexture.Apply();
return newTexture;
}
public override void OnImageLoadError(IVRCImageDownload result)
{
base.OnImageLoadError(result);
@@ -532,7 +570,7 @@ namespace VRCBoard
return -1;
}
[PublicAPI] public VRCUrl GetAtlasUrlFromIndex(int index)
private VRCUrl GetAtlasUrlFromIndex(int index)
{
if (index < 0 || index >= atlasUrls.Length || atlasUrls[index] == null)
{
@@ -610,7 +648,7 @@ namespace VRCBoard
string domainInput = EditorGUILayout.TextField("Your VRCBoard Domain", manager.vrcBoardDomain);
bool changed = domainInput != manager.vrcBoardDomain;
int urlCount = EditorGUILayout.IntField("Atlas Url Count [1-1000]", manager.atlasUrlCount);
int urlCount = EditorGUILayout.IntField("Atlas Url Count [10-1000]", manager.atlasUrlCount);
bool urlCountChanged = urlCount != manager.atlasUrlCount;
manager.atlasUrlCount = Math.Clamp(urlCount, 10, 1000);
@@ -625,8 +663,8 @@ namespace VRCBoard
string baseUrl = manager.VrcBoardBaseUrl;
// update the urls
manager.atlasUrls = new VRCUrl[urlCount];
for (int i = 0; i < urlCount; i++)
manager.atlasUrls = new VRCUrl[manager.atlasUrlCount];
for (int i = 0; i < manager.atlasUrlCount; i++)
{
manager.atlasUrls[i] = new VRCUrl(baseUrl + "atlas/" + i);
}