log scheduling

This commit is contained in:
altalk23 2022-10-08 14:56:41 +03:00
parent 260943dcc4
commit e67eaf7ec3
4 changed files with 55 additions and 81 deletions
loader
include/Geode/loader
resources
src/load

View file

@ -60,6 +60,8 @@ namespace geode {
};*/
class GEODE_DLL Log {
private:
static std::vector<std::function<void(Mod*)>>& scheduled();
protected:
Mod* m_sender;
log_clock::time_point m_time;
@ -79,6 +81,11 @@ namespace geode {
inline log_clock::time_point getTime() const { return m_time; }
inline Mod* getSender() const { return m_sender; }
inline Severity getSeverity() const { return m_severity; }
template <typename ...Args>
friend void schedule(Severity sev, Args... args);
friend void releaseSchedules(Mod* m);
};
template <typename ...Args> requires requires(Args... b) { (parse(b), ...); }
@ -89,35 +96,48 @@ namespace geode {
l.pushToLoader();
}
template <typename ...Args>
void debug(Args... args) { log(Severity::Debug, getMod(), args...); }
void releaseSchedules(Mod* m);
template <typename ...Args>
void info(Args... args) { log(Severity::Info, getMod(), args...); }
void schedule(Severity sev, Args... args) {
auto m = getMod();
if (m) return log(sev, m, args...);
Log::scheduled().push_back([=](Mod* m){
log(sev, m, args...);
});
}
template <typename ...Args>
void notice(Args... args) { log(Severity::Notice, getMod(), args...); }
void debug(Args... args) { schedule(Severity::Debug, args...); }
template <typename ...Args>
void warn(Args... args) { log(Severity::Warning, getMod(), args...); }
void info(Args... args) { schedule(Severity::Info, args...); }
template <typename ...Args>
void error(Args... args) { log(Severity::Error, getMod(), args...); }
void notice(Args... args) { schedule(Severity::Notice, args...); }
template <typename ...Args>
void critical(Args... args) { log(Severity::Critical, getMod(), args...); }
void warn(Args... args) { schedule(Severity::Warning, args...); }
template <typename ...Args>
void alert(Args... args) { log(Severity::Alert, getMod(), args...); }
void error(Args... args) { schedule(Severity::Error, args...); }
template <typename ...Args>
void emergency(Args... args) { log(Severity::Emergency, getMod(), args...); }
void critical(Args... args) { schedule(Severity::Critical, args...); }
template <typename ...Args>
void alert(Args... args) { schedule(Severity::Alert, args...); }
template <typename ...Args>
void emergency(Args... args) { schedule(Severity::Emergency, args...); }
// parse overload
#define FF(x) \
std::string parse(x const& thing);
FF(cocos2d::CCObject*)
FF(cocos2d::CCNode*)
FF(cocos2d::CCPoint)
FF(cocos2d::CCSize)
FF(cocos2d::CCRect)

View file

@ -1,60 +0,0 @@
{
"geode": "v0.2.0",
"id": "geode.loader",
"version": "v0.2.0",
"name": "Geode",
"developer": "Geode Team",
"description": "The Geode mod loader",
"repository": "https://github.com/geode-sdk/geode",
"resources": {
"fonts": {
"mdFont": {
"path": "fonts/Ubuntu-Regular.ttf",
"size": 80
},
"mdFontB": {
"path": "fonts/Ubuntu-Bold.ttf",
"size": 80
},
"mdFontI": {
"path": "fonts/Ubuntu-Italic.ttf",
"size": 80
},
"mdFontBI": {
"path": "fonts/Ubuntu-BoldItalic.ttf",
"size": 80
},
"mdFontMono": {
"path": "fonts/UbuntuMono-Regular.ttf",
"size": 80
}
},
"files": [
"images/*.png",
"sounds/*.ogg"
],
"spritesheets": {
"LogoSheet": [
"logos/*.png"
],
"APISheet": [
"*.png"
],
"BlankSheet": [
"blanks/*.png"
]
}
},
"settings": {
"show-platform-console": {
"type": "bool",
"default": false,
"name": "Show Platform Console",
"description": "Show the native console (if one exists). <cr>This setting is meant for developers</c>."
}
},
"issues": {
"info": "Post your issues on the <cp>Geode Github Repository</c>. <cy>Please follow the standard issue format</c>.",
"url": "https://github.com/geode-sdk/geode/issues/new"
}
}

View file

@ -14,6 +14,18 @@ USE_GEODE_NAMESPACE();
using namespace geode::log;
using namespace cocos2d;
std::vector<std::function<void(Mod*)>>& Log::scheduled() {
static std::vector<std::function<void(Mod*)>> ret;
return ret;
}
void log::releaseSchedules(Mod* m) {
for (auto& func : Log::scheduled()) {
func(m);
}
Log::scheduled().clear();
}
std::string log::parse(Mod* const& mod) {
if (mod) {
return fmt::format("{{ Mod, {} }}", mod->getName());;
@ -30,6 +42,18 @@ std::string log::parse(CCObject* const& obj) {
}
}
std::string log::parse(CCNode* const& obj) {
if (obj) {
auto bb = obj->boundingBox();
return fmt::format("{{ {}, {}, ({}, {} | {} : {}) }}",
typeid(*obj).name(), utils::intToHex(obj),
bb.origin.x, bb.origin.y, bb.size.width, bb.size.height
);
} else {
return "{ CCNode, null }";
}
}
std::string log::parse(CCArray* const& arr) {
std::string out = "[";
@ -73,13 +97,6 @@ std::string Log::toString(bool logTime) const {
std::string res;
if (logTime) {
const auto t = std::chrono::system_clock::to_time_t(this->m_time);
tm obj;
#ifdef _MSC_VER
localtime_s(&obj, &t);
#else
obj = *std::localtime(&t);
#endif
res += fmt::format("{:%H:%M:%S}", this->m_time);
}
@ -97,9 +114,5 @@ void Log::pushToLoader() {
}
std::string geode::log::generateLogName() {
std::stringstream tmp;
tmp << "Geode_"
<< std::chrono::duration_cast<std::chrono::seconds>(log_clock::now().time_since_epoch()).count()
<< ".log";
return tmp.str();
return fmt::format("Geode_{:%H:%M:%S}.log", log_clock::now());
}

View file

@ -211,6 +211,7 @@ Result<> Mod::load() {
if (this->hasUnresolvedDependencies()) {
RETURN_LOAD_ERR("Mod has unresolved dependencies");
}
log::releaseSchedules(this);
auto err = this->loadPlatformBinary();
if (!err) RETURN_LOAD_ERR(err.error());
if (m_implicitLoadFunc) {