diff options
Diffstat (limited to 'VRCSDK3Worlds/Assets/Udon/ProgramSources')
7 files changed, 124 insertions, 0 deletions
diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract.meta b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract.meta new file mode 100644 index 00000000..fdf30f45 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f527b4785069e24e92365548c4e3dc1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractSerializedUdonProgramAsset.cs b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractSerializedUdonProgramAsset.cs new file mode 100644 index 00000000..21811758 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractSerializedUdonProgramAsset.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using JetBrains.Annotations; +using UnityEngine; +using VRC.Udon.Common.Interfaces; + +namespace VRC.Udon +{ + public abstract class AbstractSerializedUdonProgramAsset : ScriptableObject + { + [PublicAPI] + public abstract void StoreProgram(IUdonProgram udonProgram); + + [PublicAPI] + public abstract IUdonProgram RetrieveProgram(); + } +} diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractSerializedUdonProgramAsset.cs.meta b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractSerializedUdonProgramAsset.cs.meta new file mode 100644 index 00000000..8fbfd26a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractSerializedUdonProgramAsset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fad63ba312d5f44a8ab215c3f5b18f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractUdonProgramSource.cs b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractUdonProgramSource.cs new file mode 100644 index 00000000..359dba0a --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractUdonProgramSource.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using UnityEngine; +using VRC.Udon.Common.Interfaces; + +namespace VRC.Udon +{ + public abstract class AbstractUdonProgramSource : ScriptableObject + { + [PublicAPI] + public abstract AbstractSerializedUdonProgramAsset SerializedProgramAsset { get; } + + [PublicAPI] + public abstract void RunEditorUpdate(UdonBehaviour udonBehaviour, ref bool dirty); + + [PublicAPI] + public abstract void RefreshProgram(); + } +} diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractUdonProgramSource.cs.meta b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractUdonProgramSource.cs.meta new file mode 100644 index 00000000..54a1d0e9 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/Abstract/AbstractUdonProgramSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fa64b2d7df72fb4cbf7898a400e86ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/SerializedUdonProgramAsset.cs b/VRCSDK3Worlds/Assets/Udon/ProgramSources/SerializedUdonProgramAsset.cs new file mode 100644 index 00000000..d1bdcb5b --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/SerializedUdonProgramAsset.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Profiling; +using VRC.Udon.Common; +using VRC.Udon.Common.Interfaces; +using VRC.Udon.Serialization.OdinSerializer; + +namespace VRC.Udon.ProgramSources +{ + public sealed class SerializedUdonProgramAsset : AbstractSerializedUdonProgramAsset + { + private const DataFormat DEFAULT_SERIALIZATION_DATA_FORMAT = DataFormat.Binary; + + [SerializeField, HideInInspector] + private string serializedProgramBytesString; + + [SerializeField, HideInInspector] + private List<UnityEngine.Object> programUnityEngineObjects; + + // Store the serialization DataFormat that was actually used to serialize the program. + // This allows us to change the DataFormat later (ex. switch to binary) without causing already serialized programs to use the wrong DataFormat. + // Programs will be deserialized using the previous format and will switch to the new format if StoreProgram is called again later. + [SerializeField, HideInInspector] + private DataFormat serializationDataFormat = DEFAULT_SERIALIZATION_DATA_FORMAT; + + public override void StoreProgram(IUdonProgram udonProgram) + { + if (this == null) return; + + byte[] serializedProgramBytes = SerializationUtility.SerializeValue(udonProgram, DEFAULT_SERIALIZATION_DATA_FORMAT, out programUnityEngineObjects); + serializedProgramBytesString = Convert.ToBase64String(serializedProgramBytes); + serializationDataFormat = DEFAULT_SERIALIZATION_DATA_FORMAT; + + #if UNITY_EDITOR + UnityEditor.EditorUtility.SetDirty(this); + #endif + } + + public override IUdonProgram RetrieveProgram() + { + byte[] serializedProgramBytes = Convert.FromBase64String(serializedProgramBytesString ?? ""); + return SerializationUtility.DeserializeValue<IUdonProgram>(serializedProgramBytes, serializationDataFormat, programUnityEngineObjects); + } + } +} diff --git a/VRCSDK3Worlds/Assets/Udon/ProgramSources/SerializedUdonProgramAsset.cs.meta b/VRCSDK3Worlds/Assets/Udon/ProgramSources/SerializedUdonProgramAsset.cs.meta new file mode 100644 index 00000000..d401c8ae --- /dev/null +++ b/VRCSDK3Worlds/Assets/Udon/ProgramSources/SerializedUdonProgramAsset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf61d954ecb803046953c666facfb904 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |