mirror of
https://github.com/geode-sdk/geode.git
synced 2025-03-23 03:15:58 -04:00
log scheduling
This commit is contained in:
parent
260943dcc4
commit
e67eaf7ec3
4 changed files with 55 additions and 81 deletions
loader
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue