Extra2D/examples/hello_module/hello_module.h

149 lines
3.0 KiB
C
Raw Normal View History

#pragma once
#include <extra2d/config/module_config.h>
#include <extra2d/config/module_initializer.h>
#include <string>
namespace extra2d {
/**
* @brief Hello模块配置数据结构
*/
struct HelloModuleConfigData {
std::string greeting = "Hello, Extra2D!";
int repeatCount = 1;
bool enableLogging = true;
};
/**
* @brief Hello模块配置类
*
*
* 1.
* 2. IModuleConfig接口
* 3. JSON配置加载/
*/
class HelloModuleConfig : public IModuleConfig {
public:
HelloModuleConfigData config;
/**
* @brief
*/
ModuleInfo getModuleInfo() const override {
ModuleInfo info;
info.id = 0;
info.name = "HelloModule";
info.version = "1.0.0";
info.priority = ModulePriority::User;
info.enabled = true;
return info;
}
/**
* @brief
*/
std::string getConfigSectionName() const override {
return "hello";
}
/**
* @brief
*/
bool validate() const override {
return !config.greeting.empty() && config.repeatCount > 0;
}
/**
* @brief
*/
void resetToDefaults() override {
config = HelloModuleConfigData{};
}
/**
* @brief
*/
void applyPlatformConstraints(PlatformType platform) override {
(void)platform;
}
/**
* @brief JSON加载配置
*/
bool loadFromJson(const void* jsonData) override;
/**
* @brief JSON
*/
bool saveToJson(void* jsonData) const override;
};
/**
* @brief Hello模块初始化器
*
*
*/
class HelloModuleInitializer : public IModuleInitializer {
public:
HelloModuleInitializer();
~HelloModuleInitializer() override;
/**
* @brief
*/
ModuleId getModuleId() const override { return moduleId_; }
/**
* @brief
*/
ModulePriority getPriority() const override { return ModulePriority::User; }
/**
* @brief
*/
std::vector<ModuleId> getDependencies() const override;
/**
* @brief
*/
bool initialize(const IModuleConfig* config) override;
/**
* @brief
*/
void shutdown() override;
/**
* @brief
*/
bool isInitialized() const override { return initialized_; }
/**
* @brief
*/
void setModuleId(ModuleId id) { moduleId_ = id; }
/**
* @brief
*/
void sayHello() const;
private:
ModuleId moduleId_ = INVALID_MODULE_ID;
bool initialized_ = false;
HelloModuleConfigData config_;
};
/**
* @brief Hello模块标识符
*/
ModuleId get_hello_module_id();
/**
* @brief Hello模块
*/
void register_hello_module();
} // namespace extra2d