Browse Source

custom types can now be used as method parameters

karroffel 7 years ago
parent
commit
7dde412e26
2 changed files with 15 additions and 7 deletions
  1. 2 0
      binding_generator.py
  2. 13 7
      include/core/Godot.hpp

+ 2 - 0
binding_generator.py

@@ -120,6 +120,8 @@ def generate_class_header(used_classes, c):
     # ___get_class_name
     # ___get_class_name
     source.append("\tstatic inline char *___get_class_name() { return (char *) \"" + strip_name(c["name"]) + "\"; }")
     source.append("\tstatic inline char *___get_class_name() { return (char *) \"" + strip_name(c["name"]) + "\"; }")
 
 
+    source.append("\tstatic inline Object *___get_from_variant(Variant a) { return (Object *) a; }")
+
     enum_values = []
     enum_values = []
 
 
     source.append("\n\t// enums")
     source.append("\n\t// enums")

+ 13 - 7
include/core/Godot.hpp

@@ -20,6 +20,13 @@
 namespace godot {
 namespace godot {
 
 
 
 
+template<class T>
+T *as(Object *obj)
+{
+	return (T *) godot::nativescript_api->godot_nativescript_get_userdata(obj);
+}
+
+
 template<class T>
 template<class T>
 class GodotScript {
 class GodotScript {
 public:
 public:
@@ -33,6 +40,11 @@ public:
 		return T::___get_class_name();
 		return T::___get_class_name();
 	}
 	}
 
 
+	static GodotScript<T> *___get_from_variant(Variant a)
+	{
+		return as<GodotScript<T> >((Object *) a);
+	}
+
 	static void _register_methods() {}
 	static void _register_methods() {}
 };
 };
 
 
@@ -48,7 +60,6 @@ public:
 	private:
 	private:
 
 
 
 
-
 template<class T>
 template<class T>
 struct _ArgCast {
 struct _ArgCast {
 	static T _arg_cast(Variant a)
 	static T _arg_cast(Variant a)
@@ -61,7 +72,7 @@ template<class T>
 struct _ArgCast<T*> {
 struct _ArgCast<T*> {
 	static T *_arg_cast(Variant a)
 	static T *_arg_cast(Variant a)
 	{
 	{
-		return (T *) ((Object *) a);
+		return (T *) T::___get_from_variant(a);
 	}
 	}
 };
 };
 
 
@@ -76,11 +87,6 @@ struct _ArgCast<Variant> {
 
 
 
 
 
 
-template<class T>
-T *as(Object *obj)
-{
-	return (T *) godot::nativescript_api->godot_nativescript_get_userdata(obj);
-}
 
 
 // instance and destroy funcs
 // instance and destroy funcs