--- nono/lib/object.h 2026/04/29 17:04:54 1.1.1.7 +++ nono/lib/object.h 2026/04/29 17:05:08 1.1.1.8 @@ -4,13 +4,18 @@ // Licensed under nono-license.txt // +// +// 基本オブジェクト +// + #pragma once #include "mystring.h" -#include "textscreen.h" #include #include +class Logger; + // ログ表示に指定するラムダ式の便利マクロ。 // fmt 内では __func__ が使えないので代わりに lam_func を使うこと。 // lstr("%s value=%d", lam_func, value) のようになる。 @@ -18,11 +23,7 @@ #define lstr(fmt...) \ [&, lam_func = __func__] { (void)lam_func; return string_format(fmt); } -// // 基本オブジェクト -// -// ログ出力機能を持つ。 -// class Object { public: @@ -76,12 +77,8 @@ class Object // ログ // - // ログレベル - // 0: 未実装動作などのデバッグログではない情報 - // 1: 大雑把なデバッグログ - // 2: 詳細なデバッグログ - // 3: うるさいデバッグログ - int loglevel {}; + // ログレベルを設定する + virtual void SetLogLevel(int loglevel_); // メッセージ出力 // メッセージは仮想時刻も現在の PC も表示しない。Init() など VM 実行前や @@ -108,7 +105,7 @@ class Object // ログは仮想時刻と現在の PC も表示する。VM 実行中は基本的にこれで表示。 // レベル指定なし、フォーマット版。(レベルを評価した後で使う) - void putlogn(const char *fmt, ...) const __printflike(2, 3); + virtual void putlogn(const char *fmt, ...) const __printflike(2, 3); // レベル指定あり、フォーマット版。 #define putlog(lv, fmt...) do { \ @@ -123,7 +120,18 @@ class Object putlogn("%s", msgf().c_str()); } } -}; -// 全オブジェクトのリスト -extern std::vector gObjects; + // オブジェクト登録時に代入される + Logger *logger {}; + + // ログレベルの目安 + // 0: 未実装動作などのデバッグログではない情報 + // 1: 大雑把なデバッグログ + // 2: 詳細なデバッグログ + // 3: うるさいデバッグログ + int loglevel {}; + + protected: + // ログ直接出力 + void WriteLog(const char *) const; +};