From 7f482330cabefff181cfe6a34b8e003d1f755d7e Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 8 Apr 2021 10:43:51 +0200 Subject: [PATCH] Add support for Vector2/3/4 and Quaternion constants for default value attribute in C# scripting api --- .../Bindings/BindingsGenerator.CSharp.cs | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs index 9b6d2c16d..ed07e1abd 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs @@ -59,21 +59,43 @@ namespace Flax.Build.Bindings if (value.StartsWith("TEXT(\"") && value.EndsWith("\")")) return value.Substring(5, value.Length - 6); + value = value.Replace("::", "."); + if (attribute) { // Value constructors (eg. Vector2(1, 2)) - // TODO: support value constructors for default value attribute if (value.Contains('(') && value.Contains(')')) - return null; + { + // Support for in-built types + if (value.StartsWith("Vector2(")) + return $"typeof(Vector2), \"{value.Substring(8, value.Length - 9).Replace("f", "")}\""; + if (value.StartsWith("Vector3(")) + return $"typeof(Vector3), \"{value.Substring(8, value.Length - 9).Replace("f", "")}\""; + if (value.StartsWith("Vector4(")) + return $"typeof(Vector4), \"{value.Substring(8, value.Length - 9).Replace("f", "")}\""; - // Constants (eg. Vector2::Zero) - // TODO: support constants for default value attribute - if (value.Contains("::")) return null; + } + + // Constants (eg. Vector2::Zero) + if (value.Contains('.')) + { + // Support for in-built constants + switch (value) + { + case "Vector2.Zero": return "typeof(Vector2), \"0,0\""; + case "Vector2.One": return "typeof(Vector2), \"1,1\""; + case "Vector3.Zero": return "typeof(Vector3), \"0,0,0\""; + case "Vector3.One": return "typeof(Vector3), \"1,1,1\""; + case "Vector4.Zero": return "typeof(Vector4), \"0,0,0,0\""; + case "Vector4.One": return "typeof(Vector4), \"1,1,1,1\""; + case "Quaternion.Identity": return "typeof(Quaternion), \"0,0,0,1\""; + } + + return null; + } } - value = value.Replace("::", "."); - // Skip constants unsupported in C# var dot = value.LastIndexOf('.'); if (dot != -1)