AeThex-Engine-Core/engine/modules/aethex_templates/template_data.cpp

181 lines
8.6 KiB
C++

/**************************************************************************/
/* template_data.cpp */
/**************************************************************************/
/* This file is part of: */
/* AETHEX ENGINE */
/* https://aethex.foundation */
/**************************************************************************/
/* Copyright (c) 2026-present AeThex Labs. */
/**************************************************************************/
#include "template_data.h"
void AeThexTemplate::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_id"), &AeThexTemplate::get_id);
ClassDB::bind_method(D_METHOD("set_id", "id"), &AeThexTemplate::set_id);
ClassDB::bind_method(D_METHOD("get_template_name"), &AeThexTemplate::get_template_name);
ClassDB::bind_method(D_METHOD("set_template_name", "template_name"), &AeThexTemplate::set_template_name);
ClassDB::bind_method(D_METHOD("get_description"), &AeThexTemplate::get_description);
ClassDB::bind_method(D_METHOD("set_description", "description"), &AeThexTemplate::set_description);
ClassDB::bind_method(D_METHOD("get_author"), &AeThexTemplate::get_author);
ClassDB::bind_method(D_METHOD("set_author", "author"), &AeThexTemplate::set_author);
ClassDB::bind_method(D_METHOD("get_version"), &AeThexTemplate::get_version);
ClassDB::bind_method(D_METHOD("set_version", "version"), &AeThexTemplate::set_version);
ClassDB::bind_method(D_METHOD("get_category"), &AeThexTemplate::get_category);
ClassDB::bind_method(D_METHOD("set_category", "category"), &AeThexTemplate::set_category);
ClassDB::bind_method(D_METHOD("get_platforms"), &AeThexTemplate::get_platforms);
ClassDB::bind_method(D_METHOD("set_platforms", "platforms"), &AeThexTemplate::set_platforms);
ClassDB::bind_method(D_METHOD("get_difficulty"), &AeThexTemplate::get_difficulty);
ClassDB::bind_method(D_METHOD("set_difficulty", "difficulty"), &AeThexTemplate::set_difficulty);
ClassDB::bind_method(D_METHOD("get_tags"), &AeThexTemplate::get_tags);
ClassDB::bind_method(D_METHOD("set_tags", "tags"), &AeThexTemplate::set_tags);
ClassDB::bind_method(D_METHOD("get_features"), &AeThexTemplate::get_features);
ClassDB::bind_method(D_METHOD("set_features", "features"), &AeThexTemplate::set_features);
ClassDB::bind_method(D_METHOD("get_dependencies"), &AeThexTemplate::get_dependencies);
ClassDB::bind_method(D_METHOD("set_dependencies", "dependencies"), &AeThexTemplate::set_dependencies);
ClassDB::bind_method(D_METHOD("get_variables"), &AeThexTemplate::get_variables);
ClassDB::bind_method(D_METHOD("set_variables", "variables"), &AeThexTemplate::set_variables);
ClassDB::bind_method(D_METHOD("get_file_structure"), &AeThexTemplate::get_file_structure);
ClassDB::bind_method(D_METHOD("set_file_structure", "file_structure"), &AeThexTemplate::set_file_structure);
ClassDB::bind_method(D_METHOD("get_is_builtin"), &AeThexTemplate::get_is_builtin);
ClassDB::bind_method(D_METHOD("get_is_downloaded"), &AeThexTemplate::get_is_downloaded);
ClassDB::bind_method(D_METHOD("get_local_path"), &AeThexTemplate::get_local_path);
ClassDB::bind_method(D_METHOD("supports_platform", "platform"), &AeThexTemplate::supports_platform);
ClassDB::bind_method(D_METHOD("get_category_name"), &AeThexTemplate::get_category_name);
ClassDB::bind_method(D_METHOD("get_difficulty_name"), &AeThexTemplate::get_difficulty_name);
ClassDB::bind_method(D_METHOD("get_size_string"), &AeThexTemplate::get_size_string);
ClassDB::bind_method(D_METHOD("to_json"), &AeThexTemplate::to_json);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "id"), "set_id", "get_id");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "template_name"), "set_template_name", "get_template_name");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "description"), "set_description", "get_description");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "author"), "set_author", "get_author");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "version"), "set_version", "get_version");
ADD_PROPERTY(PropertyInfo(Variant::INT, "category", PROPERTY_HINT_ENUM, "Game,Application,Tool,Plugin,Component,Snippet"), "set_category", "get_category");
ADD_PROPERTY(PropertyInfo(Variant::INT, "platforms", PROPERTY_HINT_FLAGS, "AeThex,Roblox,UEFN,Unity,Web"), "set_platforms", "get_platforms");
ADD_PROPERTY(PropertyInfo(Variant::INT, "difficulty", PROPERTY_HINT_ENUM, "Beginner,Intermediate,Advanced"), "set_difficulty", "get_difficulty");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "tags"), "set_tags", "get_tags");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "features"), "set_features", "get_features");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "dependencies"), "set_dependencies", "get_dependencies");
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "variables"), "set_variables", "get_variables");
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "file_structure"), "set_file_structure", "get_file_structure");
BIND_ENUM_CONSTANT(CATEGORY_GAME);
BIND_ENUM_CONSTANT(CATEGORY_APPLICATION);
BIND_ENUM_CONSTANT(CATEGORY_TOOL);
BIND_ENUM_CONSTANT(CATEGORY_PLUGIN);
BIND_ENUM_CONSTANT(CATEGORY_COMPONENT);
BIND_ENUM_CONSTANT(CATEGORY_SNIPPET);
BIND_ENUM_CONSTANT(PLATFORM_AETHEX);
BIND_ENUM_CONSTANT(PLATFORM_ROBLOX);
BIND_ENUM_CONSTANT(PLATFORM_UEFN);
BIND_ENUM_CONSTANT(PLATFORM_UNITY);
BIND_ENUM_CONSTANT(PLATFORM_WEB);
BIND_ENUM_CONSTANT(PLATFORM_ALL);
BIND_ENUM_CONSTANT(DIFFICULTY_BEGINNER);
BIND_ENUM_CONSTANT(DIFFICULTY_INTERMEDIATE);
BIND_ENUM_CONSTANT(DIFFICULTY_ADVANCED);
}
AeThexTemplate::AeThexTemplate() {
}
AeThexTemplate::~AeThexTemplate() {
}
bool AeThexTemplate::supports_platform(TargetPlatform p_platform) const {
return (platforms & p_platform) != 0;
}
String AeThexTemplate::get_category_name() const {
switch (category) {
case CATEGORY_GAME: return "Game";
case CATEGORY_APPLICATION: return "Application";
case CATEGORY_TOOL: return "Tool";
case CATEGORY_PLUGIN: return "Plugin";
case CATEGORY_COMPONENT: return "Component";
case CATEGORY_SNIPPET: return "Snippet";
default: return "Unknown";
}
}
String AeThexTemplate::get_difficulty_name() const {
switch (difficulty) {
case DIFFICULTY_BEGINNER: return "Beginner";
case DIFFICULTY_INTERMEDIATE: return "Intermediate";
case DIFFICULTY_ADVANCED: return "Advanced";
default: return "Unknown";
}
}
String AeThexTemplate::get_size_string() const {
if (size_bytes < 1024) {
return itos(size_bytes) + " B";
} else if (size_bytes < 1024 * 1024) {
return String::num(size_bytes / 1024.0, 1) + " KB";
} else if (size_bytes < 1024 * 1024 * 1024) {
return String::num(size_bytes / (1024.0 * 1024.0), 1) + " MB";
} else {
return String::num(size_bytes / (1024.0 * 1024.0 * 1024.0), 2) + " GB";
}
}
Dictionary AeThexTemplate::to_json() const {
Dictionary result;
result["id"] = id;
result["name"] = template_name;
result["description"] = description;
result["author"] = author;
result["version"] = version;
result["thumbnail_url"] = thumbnail_url;
result["download_url"] = download_url;
result["category"] = (int)category;
result["platforms"] = platforms;
result["difficulty"] = (int)difficulty;
result["tags"] = tags;
result["features"] = features;
result["dependencies"] = dependencies;
result["variables"] = variables;
result["file_structure"] = file_structure;
result["size_bytes"] = size_bytes;
result["rating"] = rating;
result["downloads"] = downloads;
return result;
}
Ref<AeThexTemplate> AeThexTemplate::from_json(const Dictionary &p_data) {
Ref<AeThexTemplate> tmpl;
tmpl.instantiate();
tmpl->id = p_data.get("id", "");
tmpl->template_name = p_data.get("name", "");
tmpl->description = p_data.get("description", "");
tmpl->author = p_data.get("author", "");
tmpl->version = p_data.get("version", "1.0.0");
tmpl->thumbnail_url = p_data.get("thumbnail_url", "");
tmpl->download_url = p_data.get("download_url", "");
tmpl->category = (TemplateCategory)(int)p_data.get("category", 0);
tmpl->platforms = p_data.get("platforms", PLATFORM_ALL);
tmpl->difficulty = (Difficulty)(int)p_data.get("difficulty", 0);
tmpl->tags = p_data.get("tags", PackedStringArray());
tmpl->features = p_data.get("features", PackedStringArray());
tmpl->dependencies = p_data.get("dependencies", PackedStringArray());
tmpl->variables = p_data.get("variables", Dictionary());
tmpl->file_structure = p_data.get("file_structure", Dictionary());
tmpl->size_bytes = p_data.get("size_bytes", 0);
tmpl->rating = p_data.get("rating", 0);
tmpl->downloads = p_data.get("downloads", 0);
return tmpl;
}