feat: GitHub integration and URL management
All checks were successful
Create Unity Package / package (push) Successful in 8s

This commit is contained in:
2025-11-25 18:38:00 +02:00
parent ac7c0352e5
commit cf5f71e34f
13 changed files with 1273 additions and 615 deletions

View File

@@ -46,7 +46,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 0
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
@@ -55,118 +55,233 @@ MonoBehaviour:
PrefabModifications: []
SerializationNodes: []
_udonSharpBackingUdonBehaviour: {fileID: 1195327852248355995}
GIT_USERNAME:
GIT_REPO:
debugMode: 1
vrcBoardDomain: mydomain.vrcboard.app
periodicUpdateInterval: 60
atlasUrlCount: 100
vrcBoardComponents: []
atlasUrls:
- url: http://mydomain.vrcboard.app/atlas/0
- url: http://mydomain.vrcboard.app/atlas/1
- url: http://mydomain.vrcboard.app/atlas/2
- url: http://mydomain.vrcboard.app/atlas/3
- url: http://mydomain.vrcboard.app/atlas/4
- url: http://mydomain.vrcboard.app/atlas/5
- url: http://mydomain.vrcboard.app/atlas/6
- url: http://mydomain.vrcboard.app/atlas/7
- url: http://mydomain.vrcboard.app/atlas/8
- url: http://mydomain.vrcboard.app/atlas/9
- url: http://mydomain.vrcboard.app/atlas/10
- url: http://mydomain.vrcboard.app/atlas/11
- url: http://mydomain.vrcboard.app/atlas/12
- url: http://mydomain.vrcboard.app/atlas/13
- url: http://mydomain.vrcboard.app/atlas/14
- url: http://mydomain.vrcboard.app/atlas/15
- url: http://mydomain.vrcboard.app/atlas/16
- url: http://mydomain.vrcboard.app/atlas/17
- url: http://mydomain.vrcboard.app/atlas/18
- url: http://mydomain.vrcboard.app/atlas/19
- url: http://mydomain.vrcboard.app/atlas/20
- url: http://mydomain.vrcboard.app/atlas/21
- url: http://mydomain.vrcboard.app/atlas/22
- url: http://mydomain.vrcboard.app/atlas/23
- url: http://mydomain.vrcboard.app/atlas/24
- url: http://mydomain.vrcboard.app/atlas/25
- url: http://mydomain.vrcboard.app/atlas/26
- url: http://mydomain.vrcboard.app/atlas/27
- url: http://mydomain.vrcboard.app/atlas/28
- url: http://mydomain.vrcboard.app/atlas/29
- url: http://mydomain.vrcboard.app/atlas/30
- url: http://mydomain.vrcboard.app/atlas/31
- url: http://mydomain.vrcboard.app/atlas/32
- url: http://mydomain.vrcboard.app/atlas/33
- url: http://mydomain.vrcboard.app/atlas/34
- url: http://mydomain.vrcboard.app/atlas/35
- url: http://mydomain.vrcboard.app/atlas/36
- url: http://mydomain.vrcboard.app/atlas/37
- url: http://mydomain.vrcboard.app/atlas/38
- url: http://mydomain.vrcboard.app/atlas/39
- url: http://mydomain.vrcboard.app/atlas/40
- url: http://mydomain.vrcboard.app/atlas/41
- url: http://mydomain.vrcboard.app/atlas/42
- url: http://mydomain.vrcboard.app/atlas/43
- url: http://mydomain.vrcboard.app/atlas/44
- url: http://mydomain.vrcboard.app/atlas/45
- url: http://mydomain.vrcboard.app/atlas/46
- url: http://mydomain.vrcboard.app/atlas/47
- url: http://mydomain.vrcboard.app/atlas/48
- url: http://mydomain.vrcboard.app/atlas/49
- url: http://mydomain.vrcboard.app/atlas/50
- url: http://mydomain.vrcboard.app/atlas/51
- url: http://mydomain.vrcboard.app/atlas/52
- url: http://mydomain.vrcboard.app/atlas/53
- url: http://mydomain.vrcboard.app/atlas/54
- url: http://mydomain.vrcboard.app/atlas/55
- url: http://mydomain.vrcboard.app/atlas/56
- url: http://mydomain.vrcboard.app/atlas/57
- url: http://mydomain.vrcboard.app/atlas/58
- url: http://mydomain.vrcboard.app/atlas/59
- url: http://mydomain.vrcboard.app/atlas/60
- url: http://mydomain.vrcboard.app/atlas/61
- url: http://mydomain.vrcboard.app/atlas/62
- url: http://mydomain.vrcboard.app/atlas/63
- url: http://mydomain.vrcboard.app/atlas/64
- url: http://mydomain.vrcboard.app/atlas/65
- url: http://mydomain.vrcboard.app/atlas/66
- url: http://mydomain.vrcboard.app/atlas/67
- url: http://mydomain.vrcboard.app/atlas/68
- url: http://mydomain.vrcboard.app/atlas/69
- url: http://mydomain.vrcboard.app/atlas/70
- url: http://mydomain.vrcboard.app/atlas/71
- url: http://mydomain.vrcboard.app/atlas/72
- url: http://mydomain.vrcboard.app/atlas/73
- url: http://mydomain.vrcboard.app/atlas/74
- url: http://mydomain.vrcboard.app/atlas/75
- url: http://mydomain.vrcboard.app/atlas/76
- url: http://mydomain.vrcboard.app/atlas/77
- url: http://mydomain.vrcboard.app/atlas/78
- url: http://mydomain.vrcboard.app/atlas/79
- url: http://mydomain.vrcboard.app/atlas/80
- url: http://mydomain.vrcboard.app/atlas/81
- url: http://mydomain.vrcboard.app/atlas/82
- url: http://mydomain.vrcboard.app/atlas/83
- url: http://mydomain.vrcboard.app/atlas/84
- url: http://mydomain.vrcboard.app/atlas/85
- url: http://mydomain.vrcboard.app/atlas/86
- url: http://mydomain.vrcboard.app/atlas/87
- url: http://mydomain.vrcboard.app/atlas/88
- url: http://mydomain.vrcboard.app/atlas/89
- url: http://mydomain.vrcboard.app/atlas/90
- url: http://mydomain.vrcboard.app/atlas/91
- url: http://mydomain.vrcboard.app/atlas/92
- url: http://mydomain.vrcboard.app/atlas/93
- url: http://mydomain.vrcboard.app/atlas/94
- url: http://mydomain.vrcboard.app/atlas/95
- url: http://mydomain.vrcboard.app/atlas/96
- url: http://mydomain.vrcboard.app/atlas/97
- url: http://mydomain.vrcboard.app/atlas/98
- url: http://mydomain.vrcboard.app/atlas/99
customModuleUrls: []
customModuleEnabled:
atlasInfoUrl:
url: http://mydomain.vrcboard.app/api/data/v1/atlas
supporterInfoUrl:
url: http://mydomain.vrcboard.app/api/data/v1/supporters
waitIndex: 0
_sourceAtlasUrls:
- url: https://mydomain.vrcboard.app/atlas/0
- url: https://mydomain.vrcboard.app/atlas/1
- url: https://mydomain.vrcboard.app/atlas/2
- url: https://mydomain.vrcboard.app/atlas/3
- url: https://mydomain.vrcboard.app/atlas/4
- url: https://mydomain.vrcboard.app/atlas/5
- url: https://mydomain.vrcboard.app/atlas/6
- url: https://mydomain.vrcboard.app/atlas/7
- url: https://mydomain.vrcboard.app/atlas/8
- url: https://mydomain.vrcboard.app/atlas/9
- url: https://mydomain.vrcboard.app/atlas/10
- url: https://mydomain.vrcboard.app/atlas/11
- url: https://mydomain.vrcboard.app/atlas/12
- url: https://mydomain.vrcboard.app/atlas/13
- url: https://mydomain.vrcboard.app/atlas/14
- url: https://mydomain.vrcboard.app/atlas/15
- url: https://mydomain.vrcboard.app/atlas/16
- url: https://mydomain.vrcboard.app/atlas/17
- url: https://mydomain.vrcboard.app/atlas/18
- url: https://mydomain.vrcboard.app/atlas/19
- url: https://mydomain.vrcboard.app/atlas/20
- url: https://mydomain.vrcboard.app/atlas/21
- url: https://mydomain.vrcboard.app/atlas/22
- url: https://mydomain.vrcboard.app/atlas/23
- url: https://mydomain.vrcboard.app/atlas/24
- url: https://mydomain.vrcboard.app/atlas/25
- url: https://mydomain.vrcboard.app/atlas/26
- url: https://mydomain.vrcboard.app/atlas/27
- url: https://mydomain.vrcboard.app/atlas/28
- url: https://mydomain.vrcboard.app/atlas/29
- url: https://mydomain.vrcboard.app/atlas/30
- url: https://mydomain.vrcboard.app/atlas/31
- url: https://mydomain.vrcboard.app/atlas/32
- url: https://mydomain.vrcboard.app/atlas/33
- url: https://mydomain.vrcboard.app/atlas/34
- url: https://mydomain.vrcboard.app/atlas/35
- url: https://mydomain.vrcboard.app/atlas/36
- url: https://mydomain.vrcboard.app/atlas/37
- url: https://mydomain.vrcboard.app/atlas/38
- url: https://mydomain.vrcboard.app/atlas/39
- url: https://mydomain.vrcboard.app/atlas/40
- url: https://mydomain.vrcboard.app/atlas/41
- url: https://mydomain.vrcboard.app/atlas/42
- url: https://mydomain.vrcboard.app/atlas/43
- url: https://mydomain.vrcboard.app/atlas/44
- url: https://mydomain.vrcboard.app/atlas/45
- url: https://mydomain.vrcboard.app/atlas/46
- url: https://mydomain.vrcboard.app/atlas/47
- url: https://mydomain.vrcboard.app/atlas/48
- url: https://mydomain.vrcboard.app/atlas/49
- url: https://mydomain.vrcboard.app/atlas/50
- url: https://mydomain.vrcboard.app/atlas/51
- url: https://mydomain.vrcboard.app/atlas/52
- url: https://mydomain.vrcboard.app/atlas/53
- url: https://mydomain.vrcboard.app/atlas/54
- url: https://mydomain.vrcboard.app/atlas/55
- url: https://mydomain.vrcboard.app/atlas/56
- url: https://mydomain.vrcboard.app/atlas/57
- url: https://mydomain.vrcboard.app/atlas/58
- url: https://mydomain.vrcboard.app/atlas/59
- url: https://mydomain.vrcboard.app/atlas/60
- url: https://mydomain.vrcboard.app/atlas/61
- url: https://mydomain.vrcboard.app/atlas/62
- url: https://mydomain.vrcboard.app/atlas/63
- url: https://mydomain.vrcboard.app/atlas/64
- url: https://mydomain.vrcboard.app/atlas/65
- url: https://mydomain.vrcboard.app/atlas/66
- url: https://mydomain.vrcboard.app/atlas/67
- url: https://mydomain.vrcboard.app/atlas/68
- url: https://mydomain.vrcboard.app/atlas/69
- url: https://mydomain.vrcboard.app/atlas/70
- url: https://mydomain.vrcboard.app/atlas/71
- url: https://mydomain.vrcboard.app/atlas/72
- url: https://mydomain.vrcboard.app/atlas/73
- url: https://mydomain.vrcboard.app/atlas/74
- url: https://mydomain.vrcboard.app/atlas/75
- url: https://mydomain.vrcboard.app/atlas/76
- url: https://mydomain.vrcboard.app/atlas/77
- url: https://mydomain.vrcboard.app/atlas/78
- url: https://mydomain.vrcboard.app/atlas/79
- url: https://mydomain.vrcboard.app/atlas/80
- url: https://mydomain.vrcboard.app/atlas/81
- url: https://mydomain.vrcboard.app/atlas/82
- url: https://mydomain.vrcboard.app/atlas/83
- url: https://mydomain.vrcboard.app/atlas/84
- url: https://mydomain.vrcboard.app/atlas/85
- url: https://mydomain.vrcboard.app/atlas/86
- url: https://mydomain.vrcboard.app/atlas/87
- url: https://mydomain.vrcboard.app/atlas/88
- url: https://mydomain.vrcboard.app/atlas/89
- url: https://mydomain.vrcboard.app/atlas/90
- url: https://mydomain.vrcboard.app/atlas/91
- url: https://mydomain.vrcboard.app/atlas/92
- url: https://mydomain.vrcboard.app/atlas/93
- url: https://mydomain.vrcboard.app/atlas/94
- url: https://mydomain.vrcboard.app/atlas/95
- url: https://mydomain.vrcboard.app/atlas/96
- url: https://mydomain.vrcboard.app/atlas/97
- url: https://mydomain.vrcboard.app/atlas/98
- url: https://mydomain.vrcboard.app/atlas/99
_proxyAtlasUrls:
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image0.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image1.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image2.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image3.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image4.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image5.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image6.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image7.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image8.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image9.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image10.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image11.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image12.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image13.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image14.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image15.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image16.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image17.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image18.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image19.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image20.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image21.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image22.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image23.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image24.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image25.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image26.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image27.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image28.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image29.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image30.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image31.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image32.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image33.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image34.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image35.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image36.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image37.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image38.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image39.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image40.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image41.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image42.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image43.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image44.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image45.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image46.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image47.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image48.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image49.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image50.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image51.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image52.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image53.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image54.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image55.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image56.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image57.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image58.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image59.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image60.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image61.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image62.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image63.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image64.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image65.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image66.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image67.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image68.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image69.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image70.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image71.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image72.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image73.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image74.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image75.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image76.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image77.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image78.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image79.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image80.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image81.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image82.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image83.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image84.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image85.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image86.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image87.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image88.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image89.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image90.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image91.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image92.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image93.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image94.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image95.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image96.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image97.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image98.png
- url: https://raw.githubusercontent.com///refs/heads/main/atlas/image99.png
_sourceAtlasInfoUrl:
url: https://mydomain.vrcboard.app/api/data/v1/atlas
_proxyAtlasInfoUrl:
url: https://raw.githubusercontent.com///refs/heads/main/atlas.json
_sourceCustomModuleUrls:
- url: https://mydomain.vrcboard.app/api/data/v1/barmanager
- url:
- url:
_proxyCustomModuleUrls:
- url: https://raw.githubusercontent.com///refs/heads/main/custom_modules/barmanager
- url:
- url:
_sourceSupporterInfoUrl:
url: https://mydomain.vrcboard.app/api/data/v1/supporters
_proxySupporterInfoUrl:
url: https://raw.githubusercontent.com///refs/heads/main/supporters.json
customModuleEnabled: 000000
imageIdDownloadQueue: []
--- !u!114 &1195327852248355995
MonoBehaviour:

View File

@@ -48,7 +48,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 0
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
@@ -138,7 +138,7 @@ MonoBehaviour:
AllowCollisionOwnershipTransfer: 0
Reliable: 0
_syncMethod: 1
serializedProgramAsset: {fileID: 11400000, guid: 7111a5f4b78f7a94fb3d6ae9aef3b9d4,
serializedProgramAsset: {fileID: 11400000, guid: dfe93a97c46c4cf4c95cfe80dcaa0d3e,
type: 2}
programSource: {fileID: 11400000, guid: 5ca3673014ba8e84cbd28b03627eac47, type: 2}
serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF

View File

@@ -20,12 +20,14 @@ namespace VRCBoard.Components
public abstract class VRCBoardBaseComponent : UdonSharpBehaviour
{
[HideInInspector] public VRCBoardManager manager;
protected virtual void OnRegister() {}
protected virtual void OnInitialize() {}
protected virtual void OnSupporterDataUpdate() {}
protected virtual void OnImageDataUpdate() {}
protected abstract void OnRegister();
protected abstract void OnInitialize();
protected abstract void OnSupporterDataUpdate();
protected abstract void OnImageDataUpdate();
protected abstract void OnImageLoaded();
protected virtual void OnImageLoaded() {}
protected virtual void OnCustomModuleUpdate(int inputModuleIndex, DataDictionary data) {}
protected internal void _Register(VRCBoardManager _manager)
{
@@ -68,7 +70,7 @@ namespace VRCBoard.Components
protected internal void _OnCustomModuleUpdate(int moduleIndex, DataDictionary data)
{
Debug.Log("Custom module update");
OnCustomModuleUpdate(moduleIndex, data);
}
protected internal void _OnAtlasImageLoaded(int atlasIndex = -1)

View File

@@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: VRCBoardImage
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 19ae0697d87c22c40b5eceb361997922,
serializedUdonProgramAsset: {fileID: 11400000, guid: f83f88ce349d298438a783df6b33c10f,
type: 2}
udonAssembly:
assemblyError:

View File

@@ -6,6 +6,7 @@ using VRC.SDK3.Data;
using UnityEditor;
using VRC.SDKBase;
using VRC.Udon.Common.Enums;
namespace VRCBoard.Components
{
@@ -44,12 +45,6 @@ namespace VRCBoard.Components
if (imageIds.Length == 0) return;
_uploaderId = GetUploader(imageIds[0]);
if (string.IsNullOrEmpty(_uploaderId))
{
Debug.LogWarning("Failed to get uploader ID");
//return;
}
for (int i = 0; i < imageIds.Length; i++)
{
string imageId = imageIds[i];
@@ -73,13 +68,8 @@ namespace VRCBoard.Components
TryGetUploader();
}
protected override void OnImageLoaded()
public void _ApplyImageToMaterial()
{
//Debug.Log("Image loaded VRCBoardImage");
//bool textureSuccess = GetImageAtlasTexture(albedoImageId, _uploaderId, out Texture2D texture, out int atlasPosition, out int atlasSize, out string type1);
MaterialPropertyBlock propertyBlock = new MaterialPropertyBlock();
for (int i = 0; i < imageIds.Length; i++)
@@ -102,6 +92,11 @@ namespace VRCBoard.Components
if (_renderer) _renderer.SetPropertyBlock(propertyBlock,materialIndex);
}
protected override void OnImageLoaded()
{
if (manager == null) return;
SendCustomEventDelayedFrames(nameof(_ApplyImageToMaterial), manager.waitIndex++, EventTiming.LateUpdate);
}
}
#if UNITY_EDITOR && !COMPILER_UDONSHARP
[CustomEditor(typeof(VRCBoardImage), true)]

View File

@@ -20,7 +20,7 @@ namespace VRCBoard.Components
GetImageAtlasTexture(imageId, null, out Texture2D albedoTexture, out int albedoAtlasPosition, out int albedoAtlasSize, out string albedoType);
if (albedoType == null)
{
Debug.LogError("Failed to get image type for albedo image");
//Debug.LogError("Failed to get image type for albedo image");
return "";
}
string _mainType = albedoType;
@@ -30,26 +30,14 @@ namespace VRCBoard.Components
}
else if (_mainType == "global")
{
uploaderId = null;
uploaderId = "null";
}
else
{
DataDictionary ownerInfo = manager.GetSupporterDataFromPlayer(manager.InstanceOwner);
if (ownerInfo == null)
{
Debug.LogWarning("Failed to get owner info, user has likely not linked their account.");
return "";
}
bool ownerSuccess = ownerInfo.TryGetValue("id", out DataToken ownerToken);
if (!ownerSuccess || ownerToken.TokenType != TokenType.String)
{
Debug.LogWarning("Failed to get owner ID from owner info.");
return "";
}
uploaderId = ownerToken.String;
uploaderId = manager._VRCBoardIdFromName(manager.InstanceOwner);
}
Debug.Log("image uploader: " + uploaderId);
//Debug.Log("image uploader: " + uploaderId);
} else
{
uploaderId = uploaderIdOverride;

View File

@@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: VRCBoardImageBasic
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 7111a5f4b78f7a94fb3d6ae9aef3b9d4,
serializedUdonProgramAsset: {fileID: 11400000, guid: dfe93a97c46c4cf4c95cfe80dcaa0d3e,
type: 2}
udonAssembly:
assemblyError:

View File

@@ -54,11 +54,6 @@ namespace VRCBoard.Components
{
if (!string.IsNullOrEmpty(_uploaderId)) return;
_uploaderId = GetUploader(albedoImageId);
if (string.IsNullOrEmpty(_uploaderId))
{
Debug.LogWarning("Failed to get uploader ID");
//return;
}
RequestImageLoad(albedoImageId, _uploaderId);
RequestImageLoad(emissionImageId, _uploaderId);
RequestImageLoad(normalImageId, _uploaderId);
@@ -79,7 +74,7 @@ namespace VRCBoard.Components
protected override void OnImageLoaded()
{
Debug.Log("Image loaded VRCBoardImage");
//Debug.Log("Image loaded VRCBoardImage");
Texture2D albedoTexture;
int albedoAtlasPosition;

View File

@@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: VRCBoardOverheadIcons
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 9b52c5e5b2955fa468b15a65e066455d,
serializedUdonProgramAsset: {fileID: 11400000, guid: 4d130d8e384312146b0f690571220be5,
type: 2}
udonAssembly:
assemblyError:

View File

@@ -86,7 +86,7 @@ namespace VRCBoard.Components
{
// for each entry in string[] config get every fifth element
// if the first element is equal to the node, return the config
Debug.Log("Getting config from node " + node);
//Debug.Log("Getting config from node " + node);
foundConfig = null;
foundIndex = -1;
string[] split = node.Split('.');

View File

@@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: VRCBoardSupporterBoardTMP
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: cb7ba44e9b1599548a81a4691eb88bb4,
serializedUdonProgramAsset: {fileID: 11400000, guid: e758930ddabc47d499d718189a2787b5,
type: 2}
udonAssembly:
assemblyError:

File diff suppressed because it is too large Load Diff

View File

@@ -25,8 +25,14 @@ namespace VRCBoard
Tag,
Image
}
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class VRCBoardManager : UdonSharpBehaviour
{
public string GIT_USERNAME = "";
public string GIT_REPO = "";
public string GIT_BASE_URL => "https://raw.githubusercontent.com/" + GIT_USERNAME + "/" + GIT_REPO + "/refs/heads/main/";
public bool debugMode = true;
public string vrcBoardDomain = "mydomain.vrcboard.app";
@@ -35,26 +41,49 @@ namespace VRCBoard
public int atlasUrlCount = 100;
public VRCBoardBaseComponent[] vrcBoardComponents;
public byte waitIndex = 0;
public VRCUrl[] atlasUrls;
private bool _useProxyUrls = false;
#region URLS
public VRCUrl[] _sourceAtlasUrls;
public VRCUrl[] _proxyAtlasUrls;
public VRCUrl _sourceAtlasInfoUrl;
public VRCUrl _proxyAtlasInfoUrl;
public VRCUrl[] _sourceCustomModuleUrls;
public VRCUrl[] _proxyCustomModuleUrls;
public VRCUrl _sourceSupporterInfoUrl;
public VRCUrl _proxySupporterInfoUrl;
public VRCUrl[] customModuleUrls => _useProxyUrls ? _proxyCustomModuleUrls : _sourceCustomModuleUrls;
public VRCUrl supporterInfoUrl => _useProxyUrls ? _proxySupporterInfoUrl : _sourceSupporterInfoUrl;
public VRCUrl atlasInfoUrl => _useProxyUrls ? _proxyAtlasInfoUrl : _sourceAtlasInfoUrl;
public VRCUrl[] atlasUrls => _useProxyUrls ? _proxyAtlasUrls : _sourceAtlasUrls;
#endregion
private VRCImageDownloader[] _imageDownloaders;
private Texture2D[] _downloadedAtlasTextures;
private float[] _atlasDownloadTimes;
public VRCUrl[] customModuleUrls;
public bool[] customModuleEnabled;
public VRCUrl atlasInfoUrl;
private DataDictionary _atlasInfo;
public VRCUrl supporterInfoUrl;
private DataDictionary _supporterInfo;
private DataDictionary _supporterInfoVrcLookup;
private DataList _supporterList;
private DataList _perkNodes;
[UdonSynced, FieldChangeCallback(nameof(instanceOwnerOverride))]
private string _instanceOwnerOverride = "";
private string instanceOwnerOverride
@@ -68,31 +97,51 @@ namespace VRCBoard
}
}
[UdonSynced, FieldChangeCallback(nameof(InstanceOwner))] private string _instanceOwner;
[UdonSynced, FieldChangeCallback(nameof(InstanceOwner))]
private string _instanceOwner;
public string[] imageIdDownloadQueue = new string[0];
public bool automaticInstanceOwner = true;
[PublicAPI]
public void SetInstanceOwner(string owner)
{
instanceOwnerOverride = owner;
Networking.SetOwner(Networking.LocalPlayer, gameObject);
}
public string InstanceOwner
{
get {
if (!string.IsNullOrWhiteSpace(instanceOwnerOverride)) return instanceOwnerOverride;
return _instanceOwner;
if (automaticInstanceOwner)
{
return _instanceOwner;
}
return String.Empty;
}
private set
{
_instanceOwner = value;
Networking.SetOwner(Networking.LocalPlayer, gameObject);
RequestSerialization();
Debug.Log("Instance owner set to " + value);
}
}
public string _VRCBoardIdFromName(string name)
{
DataDictionary ownerInfo = GetSupporterDataFromPlayer(name);
if (ownerInfo == null)
{
Debug.LogWarning("Failed to get user info, user has likely not linked their account. username: " + name);
return "";
}
bool ownerSuccess = ownerInfo.TryGetValue("id", out DataToken ownerToken);
if (!ownerSuccess || ownerToken.TokenType != TokenType.String)
{
Debug.LogWarning("Failed to get vrcboard ID from displayname");
return "";
}
return ownerToken.String;
}
private void RemoveNullComponents()
{
int nullCount = 0;
@@ -198,6 +247,7 @@ namespace VRCBoard
private VRCUrl[] _currentlyDownloadingUrls = new VRCUrl[0];
private void RequestUrlLoad(VRCUrl url)
{
Debug.Log("[VRCBOARD] Laoding URL " + url.Get());
string urlStr = url.Get();
for (int i = 0; i < _currentlyDownloadingUrls.Length; i++)
{
@@ -281,7 +331,7 @@ namespace VRCBoard
DataDictionary imageInfo = _GetImageIdInfo(imageId);
if (imageInfo == null)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " not found!");
//Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " not found!");
return false;
}
@@ -304,6 +354,7 @@ namespace VRCBoard
int uploadCount = uploads.Count;
if (uploadCount == 0)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " has no uploads.");
return false;
}
// find index of the uploader
@@ -333,16 +384,20 @@ namespace VRCBoard
//Debug.Log("Uploader index: " + uploaderIndex);
if (uploaderIndex == -1)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " uploader not found. uploaderIndex==-1");
return false;
}
DataDictionary uploadInfo = uploads[uploaderIndex].DataDictionary;
if (uploadInfo == null)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " uploadInfo is null.");
return false;
}
bool atlasIndexSuccess = uploadInfo.TryGetValue("i", out DataToken atlasIndexToken);
if (!atlasIndexSuccess || atlasIndexToken.TokenType != TokenType.Double)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " atlasIndex is not a valid number.");
return false;
}
@@ -351,6 +406,7 @@ namespace VRCBoard
bool positionSuccess = uploadInfo.TryGetValue("p", out DataToken positionToken);
if (!positionSuccess || positionToken.TokenType != TokenType.Double)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " position is not a valid number.");
return false;
}
texture = _downloadedAtlasTextures[atlasIndex];
@@ -359,11 +415,19 @@ namespace VRCBoard
bool hashSuccess = uploadInfo.TryGetValue("h", out DataToken hashToken);
if (!hashSuccess || hashToken.TokenType != TokenType.String)
{
Debug.LogWarning("[_GetImageAtlasTexture] " + imageId + " hash is not a valid string.");
return false;
}
hash = hashToken.String;
return true;
}
public void _RequestCustomModuleUpdate(int moduleIndex)
{
if (moduleIndex < 0 || moduleIndex >= customModuleUrls.Length) return;
VRCUrl url = customModuleUrls[moduleIndex];
RequestUrlLoad(url);
}
public void _RequestImageLoad(string imageId, string uploader, VRCBoardBaseComponent component)
{
if (uploader == null) uploader = "null";
@@ -375,6 +439,7 @@ namespace VRCBoard
}
private void TryDownloadImageId(string combinedImageId)
{
Debug.Log("[VRCBoard] Trying to download imageid " + combinedImageId);
string[] split = combinedImageId.Split(':');
if (split.Length != 2) return;
string imageId = split[0];
@@ -382,10 +447,16 @@ namespace VRCBoard
if (uploader == "null") uploader = null;
bool success = _GetImageAtlasTexture(imageId, uploader, out int atlasIndex, out Texture2D texture,
out int position, out int size, out string type, out string hash);
//Debug.Log("Try download image " + combinedImageId + " success: " + success);
Debug.Log("Try download image " + combinedImageId + " success: " + success);
if (!success) return;
/*if ( GetFromTextureCache(hash) != null)
{
Debug.Log("[VRCBoard] Image found in texture cache " + combinedImageId);
return;
}*/
DownloadAtlas(atlasIndex);
}
private void OnSupporterInfoDownload(string data)
@@ -535,7 +606,7 @@ namespace VRCBoard
private void OnAtlasInfoDownload(string data)
{
//Debug.Log("Atlas info download success");
Debug.Log("[VRCBoard] Atlas info download success");
if (VRCJson.TryDeserializeFromJson(data, out DataToken result))
{
if (result.TokenType != TokenType.DataDictionary) return;
@@ -569,7 +640,7 @@ namespace VRCBoard
private void DownloadAtlas(int index)
{
//Debug.Log("Downloading atlas " + index);
Debug.Log("Downloading atlas " + index);
if (index < 0 || index >= atlasUrls.Length) return;
VRCUrl url = GetAtlasUrlFromIndex(index);
VRCImageDownloader imageDownloader = _imageDownloaders[index];
@@ -664,74 +735,100 @@ namespace VRCBoard
textureCacheCurrentSize = newSize;
}
[PublicAPI]
public Texture2D GetTexture2D(string uploader, string imageId, out string imageHash)
public void BilinearScale(Texture2D tex, int newWidth, int newHeight)
{
bool success = _GetImageAtlasTexture(imageId, uploader, out int atlasIndex, out Texture2D texture,
out int position, out int size, out string type, out string hash);
Color[] newPixels = new Color[newWidth * newHeight];
Color[] originalPixels = tex.GetPixels();
int origWidth = tex.width;
int origHeight = tex.height;
float ratioX = (float)(origWidth - 1) / newWidth;
float ratioY = (float)(origHeight - 1) / newHeight;
for (int y = 0; y < newHeight; y++)
{
float sy = y * ratioY;
int yFloor = Mathf.FloorToInt(sy);
int yCeil = Mathf.Min(yFloor + 1, origHeight - 1);
float fy = sy - yFloor;
for (int x = 0; x < newWidth; x++)
{
float sx = x * ratioX;
int xFloor = Mathf.FloorToInt(sx);
int xCeil = Mathf.Min(xFloor + 1, origWidth - 1);
float fx = sx - xFloor;
// Manual bilinear interpolation
Color c00 = originalPixels[yFloor * origWidth + xFloor];
Color c10 = originalPixels[yFloor * origWidth + xCeil];
Color c01 = originalPixels[yCeil * origWidth + xFloor];
Color c11 = originalPixels[yCeil * origWidth + xCeil];
Color interpolated =
c00 * (1 - fx) * (1 - fy) +
c10 * fx * (1 - fy) +
c01 * (1 - fx) * fy +
c11 * fx * fy;
newPixels[y * newWidth + x] = interpolated;
}
}
tex.Reinitialize(newWidth, newHeight);
tex.SetPixels(newPixels);
tex.Apply();
}
[PublicAPI]
public Texture2D GetTexture2D(string uploader, string imageId, out string imageHash, bool bilinearScaling = false)
{
imageHash = null;
if (!_GetImageAtlasTexture(imageId, uploader, out int atlasIndex, out Texture2D texture,
out int position, out int size, out string type, out string hash) || atlasIndex == -1 || texture == null)
{
Debug.LogWarning("[VRCBoard] [GetTexture2D] Failed to get texture for " + uploader);
return null;
}
imageHash = hash;
Texture2D cachedTexture = GetFromTextureCache(hash);
if (cachedTexture != null) return cachedTexture;
int blockSize = texture.width / size;
int xIndex = position % size;
int yIndex = size - 1 - (position / size);
int startX = xIndex * blockSize;
int startY = yIndex * blockSize;
if (!success || atlasIndex == -1)
{
Debug.LogWarning("[VRCBoard] [GetTexture2D] Failed to get texture for " + uploader);
return null;
}
Color[] pixels = texture.GetPixels(startX, startY, blockSize, blockSize);
if (texture == null)
{
Debug.LogWarning("[VRCBoard] [GetTexture2D] Failed to get texture for " + uploader);
return null;
}
// Instead of bilinear sampling, scale using Unitys built-in Resize method.
Texture2D newTexture = new Texture2D(blockSize, blockSize, TextureFormat.RGBA32, false);
newTexture.SetPixels(pixels);
int blockSize = (int)Mathf.Floor((float)(texture.width) / (float)(size));
float startX = position % size;
float startY = size - (int)Mathf.Floor((float)position / (float)size) - 1;
startX = startX / size;
startY = startY / size;
if (bilinearScaling) BilinearScale(newTexture, 512, 512);
//Debug.Log("[VRCBoard] texture startX:" + startX + ", startY:" + startY);
int textureSize = 1024;
Texture2D newTexture = new Texture2D (textureSize, textureSize);
Color[] stretchedPixels = new Color[textureSize * textureSize];
for (int y = 0; y < textureSize; y++)
{
for (int x = 0; x < textureSize; x++)
{
// Get the corresponding pixel from the original texture
float u = startX + ((float)x / textureSize / size);
float v = startY + ((float)y / textureSize / size);
// Sample the original texture at the calculated UV coordinates
Color pixel = texture.GetPixelBilinear(u, v);
stretchedPixels[y * textureSize + x] = pixel;
}
}
//Color[] pixels = texture.GetPixels(startX * blockSize, startY * blockSize, blockSize, blockSize);
newTexture.SetPixels(stretchedPixels);
newTexture.wrapMode = TextureWrapMode.Clamp;
newTexture.wrapMode = TextureWrapMode.Repeat;
newTexture.filterMode = FilterMode.Trilinear;
newTexture.anisoLevel = 1;
newTexture.Apply();
newTexture.Apply(true,true);
AddToTextureCache(hash, newTexture);
return newTexture;
}
[PublicAPI]
public Texture2D GetTexture2D(string uploader, string imageId)
public Texture2D GetTexture2D(string uploader, string imageId, bool bilinearScaling = false)
{
return GetTexture2D(uploader, imageId, out string imageHash);
return GetTexture2D(uploader, imageId, out string imageHash, bilinearScaling);
}
public override void OnImageLoadError(IVRCImageDownload result)
@@ -810,6 +907,7 @@ namespace VRCBoard
public class VrcBoardManagerEditor : Editor
{
bool shouldRefreshUrls = true;
bool showGitSettings = false;
private void OnEnable()
{
shouldRefreshUrls = true;
@@ -844,32 +942,52 @@ namespace VRCBoard
string baseUrl = manager.VrcBoardBaseUrl;
// update the urls
manager.atlasUrls = new VRCUrl[manager.atlasUrlCount];
manager._sourceAtlasUrls = new VRCUrl[manager.atlasUrlCount];
manager._proxyAtlasUrls = new VRCUrl[manager.atlasUrlCount];
for (int i = 0; i < manager.atlasUrlCount; i++)
{
manager.atlasUrls[i] = new VRCUrl(baseUrl + "atlas/" + i);
manager._sourceAtlasUrls[i] = new VRCUrl(baseUrl + "atlas/" + i);
manager._proxyAtlasUrls[i] = new VRCUrl(manager.GIT_BASE_URL + "atlas/image" + i + ".png");
}
const string apiPath = "api/data/v1/";
bool[] oldEnabled = manager.customModuleEnabled;
manager.customModuleUrls = new VRCUrl[3];
manager._sourceCustomModuleUrls = new VRCUrl[3];
manager._proxyCustomModuleUrls = new VRCUrl[3];
manager.customModuleEnabled = new bool[3];
manager.customModuleUrls[0] = new VRCUrl(baseUrl + apiPath + "barmanager");
manager._sourceCustomModuleUrls[0] = new VRCUrl(baseUrl + apiPath + "module/barmanager");
manager._proxyCustomModuleUrls[0] = new VRCUrl(manager.GIT_BASE_URL + "custom_modules/barmanager");
for (int i = 0; i < oldEnabled.Length; i++)
{
if (i < manager.customModuleEnabled.Length) manager.customModuleEnabled[i] = oldEnabled[i];
}
manager.atlasInfoUrl = new VRCUrl(baseUrl + apiPath + "atlas");
manager.supporterInfoUrl = new VRCUrl(baseUrl + apiPath + "supporters");
manager._sourceAtlasInfoUrl = new VRCUrl(baseUrl + apiPath + "atlas");
manager._sourceSupporterInfoUrl = new VRCUrl(baseUrl + apiPath + "supporters");
manager._proxyAtlasInfoUrl = new VRCUrl(manager.GIT_BASE_URL + "atlas.json");
manager._proxySupporterInfoUrl = new VRCUrl(manager.GIT_BASE_URL + "supporters.json");
EditorUtility.SetDirty(manager);
}
float selectedInterval = EditorGUILayout.FloatField("Periodic Update Interval", manager.periodicUpdateInterval);
manager.periodicUpdateInterval = Mathf.Clamp(selectedInterval, 5f, 600f);
if (selectedInterval != manager.periodicUpdateInterval)
{
manager.periodicUpdateInterval = Mathf.Clamp(selectedInterval, 5f, 600f);
EditorUtility.SetDirty(manager);
}
bool instanceOwner = EditorGUILayout.Toggle("Enable Automatic Instance Owner Detection", manager.automaticInstanceOwner);
if (instanceOwner != manager.automaticInstanceOwner)
{
manager.automaticInstanceOwner = instanceOwner;
EditorUtility.SetDirty(manager);
}
EditorGUILayout.Separator();
SerializedProperty customModuleEnabled = serializedObject.FindProperty("customModuleEnabled");
@@ -880,6 +998,25 @@ namespace VRCBoard
customModuleEnabled.GetArrayElementAtIndex(0).boolValue = EditorGUILayout.Popup(customModuleEnabled.GetArrayElementAtIndex(0).boolValue ? 1 : 0, new[] {"Disabled", "Enabled"}) == 1;
EditorGUILayout.EndHorizontal();
EditorGUILayout.Separator();
showGitSettings = EditorGUILayout.Foldout(showGitSettings, "GitHub Settings");
if (showGitSettings)
{
EditorGUILayout.HelpBox("GitHub can be used to host the images on trusted URLs. See more info on the VRCBoard website.", MessageType.Info);
string gitUser = EditorGUILayout.TextField("GitHub Username", manager.GIT_USERNAME);
string gitRepo = EditorGUILayout.TextField("GitHub Repo", manager.GIT_REPO);
//string gitBranch = EditorGUILayout.TextField("GitHub Branch", manager.GIT_BRANCH);
bool gitChanged = gitUser != manager.GIT_USERNAME || gitRepo != manager.GIT_REPO; //|| gitBranch != manager.GIT_BRANCH;
if (gitChanged)
{
manager.GIT_USERNAME = gitUser;
manager.GIT_REPO = gitRepo;
EditorUtility.SetDirty(manager);
}
}
EditorGUILayout.Separator();
SerializedProperty vrcBoardComponents = serializedObject.FindProperty("vrcBoardComponents");