diff options
| author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-11-06 15:12:42 -0500 |
|---|---|---|
| committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-11-06 15:12:42 -0500 |
| commit | eb84bb298d2b95aec7b2ae12cbf25ac64f25379a (patch) | |
| tree | efd616a157df06ab661c6d56651853431ac6b08b /VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram | |
| download | unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.gz unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.bz2 unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.zip | |
move to self host
Diffstat (limited to 'VRCSDK3Worlds/Assets/Udon/Editor/ProgramSources/UdonAssemblyProgram')
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: |