summaryrefslogtreecommitdiff
path: root/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-11-06 15:12:42 -0500
committertylermurphy534 <tylermurphy534@gmail.com>2022-11-06 15:12:42 -0500
commiteb84bb298d2b95aec7b2ae12cbf25ac64f25379a (patch)
treeefd616a157df06ab661c6d56651853431ac6b08b /VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram
downloadunityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.gz
unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.bz2
unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.zip
move to self host
Diffstat (limited to 'VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram')
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs96
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs9
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs27
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs.meta11
6 files changed, 165 insertions, 0 deletions
diff --git a/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs
new file mode 100644
index 00000000..0045931e
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using JetBrains.Annotations;
+using UnityEditor;
+using UnityEngine;
+using VRC.Udon.Editor;
+using VRC.Udon.Editor.ProgramSources;
+using VRC.Udon.Editor.ProgramSources.Attributes;
+
+[assembly: UdonProgramSourceNewMenu(typeof(UdonAssemblyProgramAsset), "Udon Assembly Program Asset")]
+
+namespace VRC.Udon.Editor.ProgramSources
+{
+ [CreateAssetMenu(menuName = "VRChat/Udon/Udon Assembly Program Asset", fileName = "New Udon Assembly Program Asset")]
+ public class UdonAssemblyProgramAsset : UdonProgramAsset
+ {
+ [SerializeField]
+ protected string udonAssembly = "";
+
+ [SerializeField]
+ protected string assemblyError = null;
+
+ public delegate void AssembleDelegate(bool success, string assembly);
+ public event AssembleDelegate OnAssemble;
+
+ protected override void DrawProgramSourceGUI(UdonBehaviour udonBehaviour, ref bool dirty)
+ {
+ DrawAssemblyTextArea(!Application.isPlaying, ref dirty);
+ DrawAssemblyErrorTextArea();
+
+ base.DrawProgramSourceGUI(udonBehaviour, ref dirty);
+ }
+
+ protected override void RefreshProgramImpl()
+ {
+ AssembleProgram();
+ }
+
+ [PublicAPI]
+ protected virtual void DrawAssemblyTextArea(bool allowEditing, ref bool dirty)
+ {
+ EditorGUILayout.LabelField("Assembly Code", EditorStyles.boldLabel);
+ if(GUILayout.Button("Copy Assembly To Clipboard"))
+ {
+ EditorGUIUtility.systemCopyBuffer = udonAssembly;
+ }
+
+ EditorGUI.BeginChangeCheck();
+ using(new EditorGUI.DisabledScope(!allowEditing))
+ {
+ string newAssembly = EditorGUILayout.TextArea(udonAssembly);
+ if(EditorGUI.EndChangeCheck())
+ {
+ dirty = true;
+ Undo.RecordObject(this, "Edit Assembly Program Code");
+ udonAssembly = newAssembly;
+ UdonEditorManager.Instance.QueueAndRefreshProgram(this);
+ }
+ }
+ }
+
+ [PublicAPI]
+ protected void DrawAssemblyErrorTextArea()
+ {
+ if(string.IsNullOrEmpty(assemblyError))
+ {
+ return;
+ }
+
+ EditorGUILayout.LabelField("Assembly Error", EditorStyles.boldLabel);
+ using(new EditorGUI.DisabledScope(true))
+ {
+ EditorGUILayout.TextArea(assemblyError);
+ }
+ }
+
+ [PublicAPI]
+ protected void AssembleProgram()
+ {
+ try
+ {
+ program = UdonEditorManager.Instance.Assemble(udonAssembly);
+ assemblyError = null;
+ OnAssemble?.Invoke(true, udonAssembly);
+ }
+ catch(Exception e)
+ {
+ program = null;
+ assemblyError = e.Message;
+ Debug.LogException(e);
+ OnAssemble?.Invoke(false, assemblyError);
+ }
+ }
+
+ }
+}
diff --git a/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs.meta b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs.meta
new file mode 100644
index 00000000..c2d8a2b6
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAsset.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 22203902d63dec94194fefc3e155c43b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs
new file mode 100644
index 00000000..a6b6c856
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs
@@ -0,0 +1,9 @@
+using UnityEditor;
+
+namespace VRC.Udon.Editor.ProgramSources
+{
+ [CustomEditor(typeof(UdonAssemblyProgramAsset))]
+ public class UdonAssemblyProgramAssetEditor : UdonProgramAssetEditor
+ {
+ }
+}
diff --git a/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs.meta b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs.meta
new file mode 100644
index 00000000..e7fb7fee
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3df823f3ab561fc43bcb81286e14b91d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs
new file mode 100644
index 00000000..409c2c68
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs
@@ -0,0 +1,27 @@
+using System.IO;
+using JetBrains.Annotations;
+using UnityEditor;
+using UnityEditor.Experimental.AssetImporters;
+using UnityEngine;
+
+namespace VRC.Udon.Editor.ProgramSources
+{
+ [ScriptedImporter(1, "uasm")]
+ [UsedImplicitly]
+ public class UdonAssemblyProgramAssetImporter : ScriptedImporter
+ {
+ public override void OnImportAsset(AssetImportContext ctx)
+ {
+ UdonAssemblyProgramAsset udonAssemblyProgramAsset = ScriptableObject.CreateInstance<UdonAssemblyProgramAsset>();
+ SerializedObject serializedUdonAssemblyProgramAsset = new SerializedObject(udonAssemblyProgramAsset);
+ SerializedProperty udonAssemblyProperty = serializedUdonAssemblyProgramAsset.FindProperty("udonAssembly");
+ udonAssemblyProperty.stringValue = File.ReadAllText(ctx.assetPath);
+ serializedUdonAssemblyProgramAsset.ApplyModifiedProperties();
+
+ udonAssemblyProgramAsset.RefreshProgram();
+
+ ctx.AddObjectToAsset("Imported Udon Assembly Program", udonAssemblyProgramAsset);
+ ctx.SetMainObject(udonAssemblyProgramAsset);
+ }
+ }
+}
diff --git a/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs.meta b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs.meta
new file mode 100644
index 00000000..f3951da2
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram/UdonAssemblyProgramAssetImporter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c0638314c289c24193b47d1c53c9fca
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: