mirror of
https://git.aaro.dev/VRCBoard/vrcboard-udon.git
synced 2026-03-16 23:29:48 +00:00
feat: GitHub integration and URL management
All checks were successful
Create Unity Package / package (push) Successful in 8s
All checks were successful
Create Unity Package / package (push) Successful in 8s
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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('.');
|
||||
|
||||
@@ -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
@@ -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 Unity’s 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");
|
||||
|
||||
Reference in New Issue
Block a user