Files
Blitz3/templates/class_tpl.lua
2024-08-11 18:55:31 +02:00

103 lines
2.7 KiB
Lua

--[[
#ifndef $(HEADER_GUARD)
#define $(HEADER_GUARD)
#include <godot_cpp/classes/$(BASECLASS_HEADER_NAME).hpp>
namespace $(NAMESPACE)
{
class $(CLASS_NAME) : public godot::$(BASE_CLASS)
{
GDCLASS($(CLASS_NAME), godot::$(BASE_CLASS)
protected:
static void _bind_methods();
public:
$(CLASS_NAME)();
~$(CLASS_NAME)();
void _process(float delta);
};
}
#endif
]]
function render_header(header_guard, namespace, class_name, base_class)
local template = {
string.format("#ifndef %s", header_guard),
string.format("#define %s", header_guard),
string.format("#include <godot_cpp/classes/%s.hpp>", string.lower(base_class)),
string.format("namespace %s", namespace),
"{",
string.format(" class %s : public godot::%s", class_name, base_class),
" {",
string.format(" GDCLASS(%s, godot::%s)", class_name, base_class),
" protected:",
string.format(" static void _bind_methods();"),
string.format(" public:"),
string.format(" %s();", class_name),
string.format(" ~%s();", class_name),
string.format(" void _process(float delta);"),
" };",
"}",
"#endif",
}
return table.concat(template, "\n")
end
--[[
#include "{% echo(" " .. string.lower(ClassName)) %}.h"
using namespace {*Namespace*};
void {*ClassName*}::_bind_methods() {
// bind your own methods here, like
// ClassDB::bind_method(D_METHOD("my_foo", "delta"), &{ClassName}::my_foo);
}
{*ClassName*}::{*ClassName*}()
{
// initialize here
}
{*ClassName*}::~{*ClassName*}() {}
void {*ClassName*}::_process(float delta)
{
// do update here
}
]]
function render_impl(namespace, classname)
local template = {
string.format("#include \"%s.h\"", string.lower(classname)),
string.format("using namespace %s;", namespace),
"",
string.format("void %s::_bind_methods()", classname),
"{",
" // bind your own methods here, like",
string.format(" // ClassDB::bind_method(D_METHOD(\"my_foo\", \"delta\"), &%s::my_foo);", classname),
"}",
"",
string.format("%s::%s()", classname, classname),
"{",
" // initialize here",
"}",
"",
string.format("%s::~%s()", classname, classname),
"{",
" // do clean up here",
"}",
"",
string.format("void %s::_process(float delta)", classname),
"{",
" // do update here",
"}"
}
return table.concat(template, "\n")
end