diff --git a/Assets/Fungus/FungusScript/Scripts/FungusScript.cs b/Assets/Fungus/FungusScript/Scripts/FungusScript.cs index a671fa51..0b349f15 100644 --- a/Assets/Fungus/FungusScript/Scripts/FungusScript.cs +++ b/Assets/Fungus/FungusScript/Scripts/FungusScript.cs @@ -258,6 +258,9 @@ namespace Fungus unityTable["time"] = UserData.CreateStatic(typeof(Time)); unityTable["fungusprefs"] = UserData.CreateStatic(typeof(FungusPrefs)); + UserData.RegisterType(typeof(PODTypeFactory)); + unityTable["factory"] = UserData.CreateStatic(typeof(PODTypeFactory)); + // This FungusScript object unityTable["fungusscript"] = this; diff --git a/Assets/Fungus/FungusScript/Scripts/PODTypeFactory.cs b/Assets/Fungus/FungusScript/Scripts/PODTypeFactory.cs new file mode 100644 index 00000000..bef1e265 --- /dev/null +++ b/Assets/Fungus/FungusScript/Scripts/PODTypeFactory.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using System.Collections; + +namespace Fungus +{ + + /// + /// Factory class to create new instances of common POD value types used by Unity. + /// Supports the same types as the SerializedProperty class: Color, Vector2, Vector3, Vector4, Quaternion & Rect. + /// MoonSharp doesn't work well with these types due to internal interop issues with c#. + /// Use these factory methods to constuct these types instead of using the __new function call in Lua. + /// + public static class PODTypeFactory + { + /// + /// Returns a new Color object. + /// + /// The red component. + /// The green component. + /// The blue component. + /// The alpha component. + public static Color color(float r, float g, float b, float a) + { + return new Color(r,g,b,a); + } + + /// + /// Returns a new Vector2 object. + /// + /// The x coordinate. + /// The y coordinate. + public static Vector2 vector2(float x, float y) + { + return new Vector2(x,y); + } + + /// + /// Returns a new Vector3 object. + /// + /// The x coordinate. + /// The y coordinate. + /// The z coordinate. + public static Vector3 vector3(float x, float y, float z) + { + return new Vector3(x,y,z); + } + + /// + /// Returns a new Vector4 object. + /// + /// The x coordinate. + /// The y coordinate. + /// The z coordinate. + /// The w coordinate. + public static Vector4 vector4(float x, float y, float z, float w) + { + return new Vector4(x,y,z,w); + } + + /// + /// Returns a new Quaternion object representing a rotation. + /// + /// The x rotation in degrees. + /// The y rotation in degrees. + /// The z rotation in degrees. + public static Quaternion quaternion(float x, float y, float z) + { + return UnityEngine.Quaternion.Euler(x,y,z); + } + + /// + /// Returns a new Rect object. + /// + /// The x coordinate. + /// The y coordinate. + /// The rectangle width. + /// The rectangle height. + public static Rect rect(float x, float y, float width, float height) + { + return new Rect(x,y,width, height); + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/FungusScript/Scripts/PODTypeFactory.cs.meta b/Assets/Fungus/FungusScript/Scripts/PODTypeFactory.cs.meta new file mode 100644 index 00000000..ec05b69d --- /dev/null +++ b/Assets/Fungus/FungusScript/Scripts/PODTypeFactory.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7e3401d05b72e4960ad1b35a73e1571a +timeCreated: 1459374585 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/FungusScript/FungusTests.unity b/Assets/Tests/FungusScript/FungusTests.unity index f1b068d1..2057ea62 100644 --- a/Assets/Tests/FungusScript/FungusTests.unity +++ b/Assets/Tests/FungusScript/FungusTests.unity @@ -142,7 +142,6 @@ MonoBehaviour: - key: voiceover obj: {fileID: 8300000, guid: d2ab1fbe555d44e9e870311657856bdc, type: 3} component: {fileID: 0} - typeRegistry: {fileID: 0} --- !u!1 &13683311 GameObject: m_ObjectHideFlags: 0 @@ -715,7 +714,6 @@ MonoBehaviour: - key: menudialog obj: {fileID: 560555132} component: {fileID: 560555134} - typeRegistry: {fileID: 0} --- !u!4 &36455799 stripped Transform: m_PrefabParentObject: {fileID: 495584, guid: 49031c561e16d4fcf91c12153f8e0b25, type: 2} @@ -1274,7 +1272,6 @@ MonoBehaviour: - key: optionbutton0 obj: {fileID: 876352038} component: {fileID: 876352041} - typeRegistry: {fileID: 0} --- !u!1 &190681717 GameObject: m_ObjectHideFlags: 0 @@ -2738,7 +2735,6 @@ MonoBehaviour: - key: flowchart obj: {fileID: 1983492490} component: {fileID: 1983492495} - typeRegistry: {fileID: 0} --- !u!1 &507572619 GameObject: m_ObjectHideFlags: 0 @@ -3617,7 +3613,6 @@ MonoBehaviour: - key: transform obj: {fileID: 328064332} component: {fileID: 328064333} - typeRegistry: {fileID: 0} --- !u!1001 &726346786 Prefab: m_ObjectHideFlags: 0 @@ -4749,7 +4744,6 @@ MonoBehaviour: - key: obj: {fileID: 0} component: {fileID: 0} - typeRegistry: {fileID: 0} --- !u!1 &928936324 GameObject: m_ObjectHideFlags: 0 @@ -5024,7 +5018,7 @@ MonoBehaviour: m_EditorClassIdentifier: nodeRect: serializedVersion: 2 - x: 100 + x: 98.90469 y: 61 width: 120 height: 40 @@ -5060,8 +5054,8 @@ MonoBehaviour: version: 1 scrollPos: {x: 32, y: -30} variablesScrollPos: {x: 0, y: 0} - variablesExpanded: 1 - blockViewHeight: 400 + variablesExpanded: 0 + blockViewHeight: 251 zoom: 0.9129947 scrollViewRect: serializedVersion: 2 @@ -5071,7 +5065,7 @@ MonoBehaviour: height: 859 selectedBlock: {fileID: 942227027} selectedCommands: - - {fileID: 942227038} + - {fileID: 942227053} variables: - {fileID: 942227029} - {fileID: 942227035} @@ -5238,15 +5232,7 @@ MonoBehaviour: errorMessage: indentLevel: 0 fungusScript: {fileID: 715246548} - luaScript: 'local c = unity.color.__new() - - c.r = 1 - - c.g = 0.5 - - c.b = 1 - - c.a = 1 + luaScript: 'local c = unity.factory.color(1, 0.5, 1, 1) return c' @@ -5419,11 +5405,8 @@ MonoBehaviour: errorMessage: indentLevel: 0 fungusScript: {fileID: 715246548} - luaScript: 'local v = unity.vector2.__new() - - v.x = 1 + luaScript: 'local v = unity.factory.vector2(1,1) - v.y =1 return v' useFungusModule: 1 @@ -5493,13 +5476,7 @@ MonoBehaviour: errorMessage: indentLevel: 0 fungusScript: {fileID: 715246548} - luaScript: 'local v = unity.vector3.__new() - - v.x = 1 - - v.y =1 - - v.z = 1 + luaScript: 'local v = unity.factory.vector3(1,1,1) return v' useFungusModule: 1 @@ -6129,7 +6106,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &1109996700 MonoBehaviour: m_ObjectHideFlags: 0 @@ -8133,7 +8110,6 @@ MonoBehaviour: - key: flowchart obj: {fileID: 807616582} component: {fileID: 807616590} - typeRegistry: {fileID: 0} --- !u!1 &1738857300 GameObject: m_ObjectHideFlags: 0 @@ -9626,7 +9602,6 @@ MonoBehaviour: - key: mousepointer obj: {fileID: 2800000, guid: efe8aa62cc87f4b70b9272e4e8e06668, type: 3} component: {fileID: 0} - typeRegistry: {fileID: 0} --- !u!1 &2119731355 GameObject: m_ObjectHideFlags: 0