Browse Source

Merge pull request #8329 from touilleMan/dlscript-godot_get_global_constants

GlobalConstants support in DLScript & api.json
Rémi Verschelde 8 years ago
parent
commit
0198d2e03c
3 changed files with 34 additions and 0 deletions
  1. 18 0
      modules/dlscript/api_generator.cpp
  2. 14 0
      modules/dlscript/godot.cpp
  3. 2 0
      modules/dlscript/godot.h

+ 18 - 0
modules/dlscript/api_generator.cpp

@@ -4,6 +4,7 @@
 
 #include "class_db.h"
 #include "core/global_config.h"
+#include "core/global_constants.h"
 #include "os/file_access.h"
 
 // helper stuff
@@ -92,6 +93,23 @@ List<ClassAPI> generate_c_api_classes() {
 	List<StringName> classes;
 	ClassDB::get_class_list(&classes);
 
+	// Register global constants as a fake GlobalConstants singleton class
+	{
+		ClassAPI global_constants_api;
+		global_constants_api.class_name = L"GlobalConstants";
+		global_constants_api.api_type = ClassDB::API_CORE;
+		global_constants_api.is_singleton = true;
+		global_constants_api.is_instanciable = false;
+		const int constants_count = GlobalConstants::get_global_constant_count();
+		for (int i = 0; i < constants_count; ++i) {
+			ConstantAPI constant_api;
+			constant_api.constant_name = GlobalConstants::get_global_constant_name(i);
+			constant_api.constant_value = GlobalConstants::get_global_constant_value(i);
+			global_constants_api.constants.push_back(constant_api);
+		}
+		api.push_back(global_constants_api);
+	}
+
 	for (List<StringName>::Element *e = classes.front(); e != NULL; e = e->next()) {
 		StringName class_name = e->get();
 

+ 14 - 0
modules/dlscript/godot.cpp

@@ -32,6 +32,7 @@
 #include "class_db.h"
 #include "dl_script.h"
 #include "global_config.h"
+#include "global_constants.h"
 #include "variant.h"
 
 #ifdef __cplusplus
@@ -181,6 +182,19 @@ void GDAPI *godot_dlinstance_get_userdata(godot_object *p_instance) {
 	return NULL;
 }
 
+godot_dictionary GDAPI godot_get_global_constants() {
+	godot_dictionary constants;
+	godot_dictionary_new(&constants);
+	Dictionary *p_constants = (Dictionary*)&constants;
+	const int constants_count = GlobalConstants::get_global_constant_count();
+	for (int i = 0; i < constants_count; ++i) {
+		const char *name = GlobalConstants::get_global_constant_name(i);
+		int value = GlobalConstants::get_global_constant_value(i);
+		(*p_constants)[name] = value;
+	}
+	return constants;
+}
+
 // System functions
 void GDAPI *godot_alloc(int p_bytes) {
 	return memalloc(p_bytes);

+ 2 - 0
modules/dlscript/godot.h

@@ -376,6 +376,8 @@ void GDAPI godot_script_register_signal(const char *p_name, const godot_signal *
 
 void GDAPI *godot_dlinstance_get_userdata(godot_object *p_instance);
 
+godot_dictionary GDAPI godot_get_global_constants();
+
 ////// System Functions
 
 //using these will help Godot track how much memory is in use in debug mode