@@ -7606,7 +7606,7 @@ namespace jenova
76067606 }
76077607 std::string ResolveVariantValueAsString (const Variant* variantValue, jenova::PointerList& ptrList)
76087608 {
7609- // Atomic types
7609+ // Atomic Types
76107610 if (variantValue->get_type () == Variant::BOOL) return (bool (*variantValue)) ? " true" : " false" ;
76117611 if (variantValue->get_type () == Variant::FLOAT) return jenova::Format (" %lf" , double (*variantValue));
76127612 if (variantValue->get_type () == Variant::INT) return jenova::Format (" %lld" , int64_t (*variantValue));
@@ -7617,7 +7617,7 @@ namespace jenova
76177617 return jenova::Format (" (void*)0x%llx" , value);
76187618 }
76197619
7620- // Math types
7620+ // Math Types
76217621 if (variantValue->get_type () == Variant::VECTOR2)
76227622 {
76237623 Vector2* value = new Vector2 (*variantValue);
@@ -7709,7 +7709,7 @@ namespace jenova
77097709 return jenova::Format (" (void*)0x%llx" , value);
77107710 }
77117711
7712- // Misc types
7712+ // Misc Types
77137713 if (variantValue->get_type () == Variant::COLOR)
77147714 {
77157715 Color* value = new Color (*variantValue);
@@ -7763,7 +7763,7 @@ namespace jenova
77637763 return jenova::Format (" (void*)0x%llx" , value);
77647764 }
77657765
7766- // Typed arrays
7766+ // Typed Arrays
77677767 if (variantValue->get_type () == Variant::PACKED_BYTE_ARRAY)
77687768 {
77697769 PackedByteArray* value = new PackedByteArray (*variantValue);
@@ -8424,6 +8424,7 @@ namespace jenova
84248424 scriptProp.propertyName = String (scriptProperty[" PropertyName" ].get <std::string>().c_str ());
84258425 scriptProp.propertyInfo .type = jenova::GetVariantTypeFromStdString (scriptProperty[" PropertyType" ].get <std::string>());
84268426 scriptProp.defaultValue = UtilityFunctions::str_to_var (String (scriptProperty[" PropertyDefault" ].get <std::string>().c_str ()));
8427+ if (scriptProp.defaultValue .get_type () == Variant::NIL) scriptProp.defaultValue = jenova::CreateDefaultVariantFromType (scriptProp.propertyInfo .type );
84278428 scriptProp.propertyInfo .name = bool (scriptProperty.contains (" PropertyGroup" )) ?
84288429 StringName (String (scriptProperty[" PropertyGroup" ].get <std::string>().c_str ()) + " /" + String (scriptProperty[" PropertyName" ].get <std::string>().c_str ())) :
84298430 StringName (String (scriptProperty[" PropertyName" ].get <std::string>().c_str ()));
@@ -8870,6 +8871,60 @@ namespace jenova
88708871 // All Good
88718872 return true ;
88728873 }
8874+ Variant CreateDefaultVariantFromType (Variant::Type variantType)
8875+ {
8876+ switch (variantType)
8877+ {
8878+ // Atomic Types
8879+ case Variant::BOOL: return Variant (false );
8880+ case Variant::INT: return Variant (int64_t (0 ));
8881+ case Variant::FLOAT: return Variant (0 .0f );
8882+ case Variant::STRING: return Variant (String ());
8883+
8884+ // Math Types
8885+ case Variant::VECTOR2: return Variant (Vector2 ());
8886+ case Variant::VECTOR2I: return Variant (Vector2i ());
8887+ case Variant::RECT2: return Variant (Rect2 ());
8888+ case Variant::RECT2I: return Variant (Rect2i ());
8889+ case Variant::VECTOR3: return Variant (Vector3 ());
8890+ case Variant::VECTOR3I: return Variant (Vector3i ());
8891+ case Variant::TRANSFORM2D: return Variant (Transform2D ());
8892+ case Variant::VECTOR4: return Variant (Vector4 ());
8893+ case Variant::VECTOR4I: return Variant (Vector4i ());
8894+ case Variant::PLANE: return Variant (Plane ());
8895+ case Variant::QUATERNION: return Variant (Quaternion ());
8896+ case Variant::AABB: return Variant (AABB ());
8897+ case Variant::BASIS: return Variant (Basis ());
8898+ case Variant::TRANSFORM3D: return Variant (Transform3D ());
8899+ case Variant::PROJECTION: return Variant (Projection ());
8900+
8901+ // Misc Types
8902+ case Variant::COLOR: return Variant (Color ());
8903+ case Variant::STRING_NAME: return Variant (StringName ());
8904+ case Variant::NODE_PATH: return Variant (NodePath ());
8905+ case Variant::RID: return Variant (RID ());
8906+ case Variant::OBJECT: return Variant ((Object*)nullptr );
8907+ case Variant::CALLABLE: return Variant (Callable ());
8908+ case Variant::SIGNAL: return Variant (Signal ());
8909+ case Variant::DICTIONARY: return Variant (Dictionary ());
8910+ case Variant::ARRAY: return Variant (Array ());
8911+
8912+ // Typed Arrays
8913+ case Variant::PACKED_BYTE_ARRAY: return Variant (PackedByteArray ());
8914+ case Variant::PACKED_INT32_ARRAY: return Variant (PackedInt32Array ());
8915+ case Variant::PACKED_INT64_ARRAY: return Variant (PackedInt64Array ());
8916+ case Variant::PACKED_FLOAT32_ARRAY: return Variant (PackedFloat32Array ());
8917+ case Variant::PACKED_FLOAT64_ARRAY: return Variant (PackedFloat64Array ());
8918+ case Variant::PACKED_STRING_ARRAY: return Variant (PackedStringArray ());
8919+ case Variant::PACKED_VECTOR2_ARRAY: return Variant (PackedVector2Array ());
8920+ case Variant::PACKED_VECTOR3_ARRAY: return Variant (PackedVector3Array ());
8921+ case Variant::PACKED_COLOR_ARRAY: return Variant (PackedColorArray ());
8922+ case Variant::PACKED_VECTOR4_ARRAY: return Variant (PackedVector4Array ());
8923+
8924+ // Fallback to NIL
8925+ default : return Variant ();
8926+ }
8927+ }
88738928 std::string ParseClassNameFromScriptSource (const std::string& sourceCode)
88748929 {
88758930 std::regex pattern (R"( JENOVA_CLASS_NAME\s*\(\s*\"([^\"]+)\"\s*\))" );
0 commit comments