summaryrefslogtreecommitdiff
path: root/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters
diff options
context:
space:
mode:
Diffstat (limited to 'VRCSDK3Worlds/Assets/Udon/Serialization/Formatters')
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs35
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs56
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs.meta11
4 files changed, 113 insertions, 0 deletions
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs
new file mode 100644
index 00000000..677e3219
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs
@@ -0,0 +1,35 @@
+using System;
+using VRC.Udon.Common;
+using VRC.Udon.Serialization.OdinSerializer;
+using VRC.Udon.Serialization.Formatters;
+
+[assembly: RegisterFormatter(typeof(UdonGameObjectComponentReferenceFormatter))]
+
+namespace VRC.Udon.Serialization.Formatters
+{
+ public sealed class UdonGameObjectComponentReferenceFormatter : BaseFormatter<UdonGameObjectComponentHeapReference>
+ {
+ private static readonly Serializer<Type> _typeSerializer = Serializer.Get<Type>();
+
+ protected override UdonGameObjectComponentHeapReference GetUninitializedObject()
+ {
+ return null;
+ }
+
+ // ReSharper disable once RedundantAssignment
+ protected override void DeserializeImplementation(ref UdonGameObjectComponentHeapReference value, IDataReader reader)
+ {
+ Type type = _typeSerializer.ReadValue(reader);
+
+ value = new UdonGameObjectComponentHeapReference(type);
+
+ RegisterReferenceID(value, reader);
+ InvokeOnDeserializingCallbacks(ref value, reader.Context);
+ }
+
+ protected override void SerializeImplementation(ref UdonGameObjectComponentHeapReference value, IDataWriter writer)
+ {
+ _typeSerializer.WriteValue(value.type, writer);
+ }
+ }
+}
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs.meta
new file mode 100644
index 00000000..7af055f9
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonGameObjectComponentReferenceFormatter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b1d0b8aa8084bcd44a572d524d7a31bb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs
new file mode 100644
index 00000000..7db14523
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs
@@ -0,0 +1,56 @@
+using VRC.Udon.Common;
+using VRC.Udon.Common.Interfaces;
+using VRC.Udon.Serialization.OdinSerializer;
+using VRC.Udon.Serialization.Formatters;
+
+[assembly: RegisterFormatter(typeof(UdonProgramFormatter))]
+
+namespace VRC.Udon.Serialization.Formatters
+{
+ public sealed class UdonProgramFormatter : BaseFormatter<UdonProgram>
+ {
+ private static readonly Serializer<byte[]> _byteArrayReaderWriter = Serializer.Get<byte[]>();
+ private static readonly Serializer<IUdonHeap> _udonHeapReaderWriter = Serializer.Get<IUdonHeap>();
+ private static readonly Serializer<IUdonSymbolTable> _udonSymbolTableReaderWriter = Serializer.Get<IUdonSymbolTable>();
+ private static readonly Serializer<IUdonSyncMetadataTable> _udonSyncMetadataTableReaderWriter = Serializer.Get<IUdonSyncMetadataTable>();
+
+ protected override UdonProgram GetUninitializedObject()
+ {
+ return null;
+ }
+
+ // ReSharper disable once RedundantAssignment
+ protected override void DeserializeImplementation(ref UdonProgram value, IDataReader reader)
+ {
+ reader.ReadString(out string instructionSetIdentifier);
+ reader.ReadInt32(out int instructionSetVersion);
+ byte[] byteCode = _byteArrayReaderWriter.ReadValue(reader);
+ IUdonHeap heap = _udonHeapReaderWriter.ReadValue(reader);
+ IUdonSymbolTable entryPoints = _udonSymbolTableReaderWriter.ReadValue(reader);
+ IUdonSymbolTable symbolTable = _udonSymbolTableReaderWriter.ReadValue(reader);
+ IUdonSyncMetadataTable syncMetadataTable = _udonSyncMetadataTableReaderWriter.ReadValue(reader);
+
+ if(!reader.ReadInt32(out int updateOrder))
+ {
+ updateOrder = 0;
+ }
+
+ value = new UdonProgram(instructionSetIdentifier, instructionSetVersion, byteCode, heap, entryPoints, symbolTable, syncMetadataTable, updateOrder);
+
+ RegisterReferenceID(value, reader);
+ InvokeOnDeserializingCallbacks(ref value, reader.Context);
+ }
+
+ protected override void SerializeImplementation(ref UdonProgram value, IDataWriter writer)
+ {
+ writer.WriteString("InstructionSetIdentifier", value.InstructionSetIdentifier);
+ writer.WriteInt32("InstructionSetVersion", value.InstructionSetVersion);
+ _byteArrayReaderWriter.WriteValue("ByteCode", value.ByteCode, writer);
+ _udonHeapReaderWriter.WriteValue("Heap", value.Heap, writer);
+ _udonSymbolTableReaderWriter.WriteValue("EntryPoints", value.EntryPoints, writer);
+ _udonSymbolTableReaderWriter.WriteValue("SymbolTable", value.SymbolTable, writer);
+ _udonSyncMetadataTableReaderWriter.WriteValue("SyncMetadataTable", value.SyncMetadataTable, writer);
+ writer.WriteInt32("UpdateOrder", value.UpdateOrder);
+ }
+ }
+}
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs.meta
new file mode 100644
index 00000000..565153dd
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/Formatters/UdonProgramFormatter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f2626352b2a60eb41adc3580ae44c750
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: