godot-cpp-utils
A collection of utility classes, functions and macros for use with Godot and GDExtension.
Loading...
Searching...
No Matches
godot_macros.h
1#ifndef UC_GODOT_MACROS_H
2#define UC_GODOT_MACROS_H
3
7#include "godot_cpp/classes/engine.hpp"
8#include "godot_cpp/core/class_db.hpp"
9#include "godot_cpp/variant/string.hpp"
10
11
12#define MACRO_STRING_INNER(_Arg) #_Arg
13#define MACRO_STRING(_Arg) MACRO_STRING_INNER(_Arg)
14
20#define GDPROPERTY(PropName_, PropType_) \
21 godot::ClassDB::bind_method(godot::D_METHOD("get_" #PropName_), &CLASSNAME::get_##PropName_); \
22 godot::ClassDB::bind_method(godot::D_METHOD("set_" #PropName_, "value"), &CLASSNAME::set_##PropName_); \
23 godot::ClassDB::add_property(MACRO_STRING(CLASSNAME), godot::PropertyInfo(PropType_, #PropName_), "set_" #PropName_, "get_" #PropName_)
24
30#define GDPROPERTY_HINTED(PropName_, PropType_, ...) \
31 godot::ClassDB::bind_method(godot::D_METHOD("get_" #PropName_), &CLASSNAME::get_##PropName_); \
32 godot::ClassDB::bind_method(godot::D_METHOD("set_" #PropName_, "value"), &CLASSNAME::set_##PropName_); \
33 godot::ClassDB::add_property(MACRO_STRING(CLASSNAME), godot::PropertyInfo(PropType_, #PropName_, __VA_ARGS__), "set_" #PropName_, "get_" #PropName_)
34
40#define GDFUNCTION(_FnName) godot::ClassDB::bind_method(godot::D_METHOD(#_FnName), &CLASSNAME::_FnName)
41
47#define GDFUNCTION_ARGS(_FnName, ...) godot::ClassDB::bind_method(godot::D_METHOD(#_FnName, __VA_ARGS__), &CLASSNAME::_FnName)
48
54#define GDFUNCTION_STATIC(_FnName) godot::ClassDB::bind_static_method(MACRO_STRING(CLASSNAME), godot::D_METHOD(#_FnName), &CLASSNAME::_FnName)
55
61#define GDFUNCTION_STATIC_ARGS(_FnName, ...) godot::ClassDB::bind_static_method(MACRO_STRING(CLASSNAME), godot::D_METHOD(#_FnName, __VA_ARGS__), &CLASSNAME::_FnName)
62
67#define GDSIGNAL(...) godot::ClassDB::add_signal(MACRO_STRING(CLASSNAME), godot::MethodInfo(__VA_ARGS__))
68
73#define GDRESOURCETYPE(_Class) godot::vformat("%s/%s:%s", godot::Variant::OBJECT, godot::PROPERTY_HINT_RESOURCE_TYPE, #_Class)
74
79#define GDEDITORONLY() if(!godot::Engine::get_singleton()->is_editor_hint()) return;
84#define GDGAMEONLY() if(godot::Engine::get_singleton()->is_editor_hint()) return;
85
90#define GDENUM(Name_, ...) struct Name_ {\
91 enum Value {__VA_ARGS__};\
92 private:\
93 Value value{};\
94 public:\
95 static inline godot::String get_property_hint() { return godot::String(#__VA_ARGS__); }\
96 inline Name_(Value value): value{value} {}\
97 inline Name_(Name_ const &value): value{value.value} {}\
98}
99
100#endif // !UC_GODOT_MACROS_H