Added Unity project files
This commit is contained in:
@ -0,0 +1,98 @@
|
||||
using System;
|
||||
using JetBrains.Annotations;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
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 string AssemblyError => assemblyError;
|
||||
|
||||
public delegate void AssembleDelegate(bool success, string assembly);
|
||||
public event AssembleDelegate OnAssemble;
|
||||
|
||||
protected override void DrawProgramSourceGUI(UdonBehaviour udonBehaviour, ref bool dirty)
|
||||
{
|
||||
DrawAssemblyErrorTextArea();
|
||||
|
||||
DrawPublicVariables(udonBehaviour, ref dirty);
|
||||
|
||||
DrawAssemblyTextArea(!Application.isPlaying, ref dirty);
|
||||
DrawProgramDisassembly();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22203902d63dec94194fefc3e155c43b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,9 @@
|
||||
using UnityEditor;
|
||||
|
||||
namespace VRC.Udon.Editor.ProgramSources
|
||||
{
|
||||
[CustomEditor(typeof(UdonAssemblyProgramAsset))]
|
||||
public class UdonAssemblyProgramAssetEditor : UdonProgramAssetEditor
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3df823f3ab561fc43bcb81286e14b91d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,27 @@
|
||||
using System.IO;
|
||||
using JetBrains.Annotations;
|
||||
using UnityEditor;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
namespace VRC.Udon.Editor.ProgramSources
|
||||
{
|
||||
[UnityEditor.AssetImporters.ScriptedImporter(1, "uasm")]
|
||||
[UsedImplicitly]
|
||||
public class UdonAssemblyProgramAssetImporter : UnityEditor.AssetImporters.ScriptedImporter
|
||||
{
|
||||
public override void OnImportAsset(UnityEditor.AssetImporters.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3c0638314c289c24193b47d1c53c9fca
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user