From fd20d29c5a4e490a33b56c1e2ff3e77b9b602ab6 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Feb 2023 00:02:34 -0600 Subject: [PATCH] add inspector modifiable and name --- RoateObjectTS.jsmart | 34 ++++++ RoateObjectTS.jsmart.meta | 7 ++ .../SmartObjectBehaviour_Editor.cs | 65 ++++++++++ Scripts/Editor/Utilities.meta | 8 ++ .../Editor/Utilities/ObjectNamesUtility.cs | 15 +++ .../Utilities/ObjectNamesUtility.cs.meta | 11 ++ .../SmartObjects/SmartObjectBehaviour.cs | 111 +++++++++++++++++- 7 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 RoateObjectTS.jsmart create mode 100644 RoateObjectTS.jsmart.meta create mode 100644 Scripts/Editor/Utilities.meta create mode 100644 Scripts/Editor/Utilities/ObjectNamesUtility.cs create mode 100644 Scripts/Editor/Utilities/ObjectNamesUtility.cs.meta diff --git a/RoateObjectTS.jsmart b/RoateObjectTS.jsmart new file mode 100644 index 0000000..58ddb8b --- /dev/null +++ b/RoateObjectTS.jsmart @@ -0,0 +1,34 @@ +class RotateObject extends ObjectComponent{ + //test:GameObject + tt:string + num:number + cold:string + newValue:number + + + + onEnable(){ + console.log(this.test) + } + onLoad(){ + + } + start(){ + + } + + update(){ + + } + + + //constructor(object, smart){ + //super(object) + //const userData = object.userData.RotateObject + + // int, float, string, array + + + //this.value = userData.value; // int + //} +} \ No newline at end of file diff --git a/RoateObjectTS.jsmart.meta b/RoateObjectTS.jsmart.meta new file mode 100644 index 0000000..29b2ae0 --- /dev/null +++ b/RoateObjectTS.jsmart.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9249f2d5d6641f543a704ccd13ef7717 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Editor/GLTFExporter/SmartObjects/SmartObjectBehaviour_Editor.cs b/Scripts/Editor/GLTFExporter/SmartObjects/SmartObjectBehaviour_Editor.cs index 5648efd..43da418 100644 --- a/Scripts/Editor/GLTFExporter/SmartObjects/SmartObjectBehaviour_Editor.cs +++ b/Scripts/Editor/GLTFExporter/SmartObjects/SmartObjectBehaviour_Editor.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UnityEngine; using UnityEditor; +using System.IO; namespace WEBGL_EXPORTER.GLTF { @@ -9,15 +10,79 @@ namespace WEBGL_EXPORTER.GLTF public class SmartObjectBehaviour_Editor : Editor { SmartObjectBehaviour myScript; + private void OnEnable() { myScript = (SmartObjectBehaviour)target; + + + + if (myScript.javascript == null) + { + // find th js code + } + string displayTitle = StringUtilities.GetFileNameFromPath(StringUtilities.GetFullPathFromAsset(myScript.javascript)); + var inspectorTitles = ObjectNamesUtility.GetInternalInspectorTitlesCache(); + inspectorTitles[typeof(SmartObjectBehaviour)] = displayTitle + " (JS Smart)"; + + if (myScript.javascript != null) + { + + string file_path = StringUtilities.GetFullPathFromAsset(myScript.javascript); + StreamReader inp_stm = new StreamReader(file_path); + List jsvars = new List(); + while (!inp_stm.EndOfStream) + { + + string inp_ln = inp_stm.ReadLine(); + //Debug.Log(inp_ln); + string lineVal = inp_ln.Replace('\t', ' ').Replace(" ", "").Replace(";", ""); + if (lineVal.Contains(":") && !lineVal.StartsWith("//")) { + + string[] splitString = lineVal.Split(":"); + AddVar(splitString[0], splitString[1], ref jsvars); + } + } + inp_stm.Close(); + myScript.allVars = jsvars; + } } + + private void AddVar(string var_name, string type_name, ref List final_list) + { + //Debug.Log("enters"); + + JSVar v = myScript.getExistingJSVar(var_name, type_name); + + if (v != null) + final_list.Add(v); + else + final_list.Add(new JSVar(var_name, type_name)); + } + public override void OnInspectorGUI() { GUI.enabled = false; myScript.javascript = EditorGUILayout.ObjectField("Javascript",myScript.javascript,typeof(Object), false); GUI.enabled = true; + for (int i =0; i < myScript.allVars.Count; i++) + { + JSVar jsvar = myScript.allVars[i]; + switch (myScript.allVars[i].getJsVarName()) + { + case "number": + jsvar.numberValue = EditorGUILayout.FloatField(jsvar.varName, jsvar.numberValue); + + break; + case "string": + jsvar.stringValue = EditorGUILayout.TextField(jsvar.varName, jsvar.stringValue); + break; + //default: + // JSScript sc = myScript.allVars[i] as JSScript; + // sc.varValue = (SmartObjectBehaviour)EditorGUILayout.ObjectField(sc.varName, sc.varValue, typeof(SmartObjectBehaviour), true); + // break; + } + } } } } diff --git a/Scripts/Editor/Utilities.meta b/Scripts/Editor/Utilities.meta new file mode 100644 index 0000000..7a6ab47 --- /dev/null +++ b/Scripts/Editor/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a27f96ac4dfa74342b48f888ca85380c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Editor/Utilities/ObjectNamesUtility.cs b/Scripts/Editor/Utilities/ObjectNamesUtility.cs new file mode 100644 index 0000000..9595325 --- /dev/null +++ b/Scripts/Editor/Utilities/ObjectNamesUtility.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; + + +public static class ObjectNamesUtility +{ + public static Dictionary GetInternalInspectorTitlesCache() + { + Type inspectorTitlesType = typeof(ObjectNames).GetNestedType("InspectorTitles", BindingFlags.Static | BindingFlags.NonPublic); + var inspectorTitlesField = inspectorTitlesType.GetField("s_InspectorTitles", BindingFlags.Static | BindingFlags.NonPublic); + return (Dictionary)inspectorTitlesField.GetValue(null); + } +} diff --git a/Scripts/Editor/Utilities/ObjectNamesUtility.cs.meta b/Scripts/Editor/Utilities/ObjectNamesUtility.cs.meta new file mode 100644 index 0000000..55462c7 --- /dev/null +++ b/Scripts/Editor/Utilities/ObjectNamesUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df2528a0986cc0b4594dcd0d9f24feda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/GLTFExporter/GLTFGenerator/SmartObjects/SmartObjectBehaviour.cs b/Scripts/GLTFExporter/GLTFGenerator/SmartObjects/SmartObjectBehaviour.cs index 4271cd3..f6a6f76 100644 --- a/Scripts/GLTFExporter/GLTFGenerator/SmartObjects/SmartObjectBehaviour.cs +++ b/Scripts/GLTFExporter/GLTFGenerator/SmartObjects/SmartObjectBehaviour.cs @@ -1,15 +1,124 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using System; namespace WEBGL_EXPORTER.GLTF { public class SmartObjectBehaviour : MonoBehaviour { - public Object javascript; + + [SerializeField] + public List allVars; + + + public UnityEngine.Object javascript; + private void Start() { // do nothing, just need the checkbox } + + public JSVar getExistingJSVar(string var_name, string type = "") + { + if (allVars == null) + return null; + + foreach (JSVar jsvar in allVars) + { + if (jsvar.isSame(var_name, type)) + return jsvar; + } + return null; + } + + } + + + [Serializable] + public class JSVar + { + [SerializeField] + public string varName = ""; + [SerializeField] + public string typeName = ""; + + public SmartObjectBehaviour scriptValue; + public string stringValue; + public float numberValue; + public JSVar(string var_name, string type_name) + { + varName = var_name; + typeName = type_name; + } + public virtual bool isSame(string var_name, string var_type) + { + return varName == var_name; + } + + public virtual string getJsVarName() + { + return typeName; + } } + //[Serializable] + //public class JSScript : JSVar + //{ + // [SerializeField] + // public SmartObjectBehaviour varValue; + + // public JSScript(string var_name, string type_name) + // { + // varName = var_name; + // typeName = type_name; + // } + // public override bool isSame(string var_name, string var_type) + // { + // if (var_type == "") + // { + // return false; + // } + // return base.isSame(var_name, ""); + // } + //} + //[Serializable] + //public class JSString : JSVar + //{ + + // [SerializeField] + // public string varValue; + // public JSString(string var_name) + // { + // varName = var_name; + // varValue = ""; + // typeName = "string"; + // } + // public override bool isSame(string var_name, string var_type) + // { + // if (var_type != "string") + // { + // return false; + // } + // return base.isSame(var_name, ""); + // } + //} + //[Serializable] + //public class JSNumber : JSVar + //{ + // [SerializeField] + // public float varValue; + // public JSNumber(string var_name) + // { + // varName = var_name; + // varValue = 0f; + // typeName = "number"; + // } + // public override bool isSame(string var_name, string var_type) + // { + // if (var_type != "number") + // return false; + // return base.isSame(var_name, ""); + // } + + //} }