今回の趣旨
今回から実際の”InternalsPlugin”の詳細に入っていく。
プラグインクラスの親子関係
InternalsPluginクラスは、下記のような親子関係になっている。
class ExampleInternalsPlugin : public InternalsPluginV01
”InternalsPluginV01の子”
class InternalsPluginV01 : public InternalsPlugin
”InternalsPluginの子”
class InternalsPlugin : public PluginObject
”スーパークラスの子: InternalsPluginの基底”
class PluginObject
”スーパークラス”
PluginObjectは、必須のクラスである。rFactor2からプラグインが読み込まれた際は、
必ずPluginObjectをスーパークラスとする子孫のクラスを返す必要がある。
これはExample.cppの中のDLLの関数定義を見ると、プラグインオブジェクトのポイントへ
キャストしていることからもわかる。
extern “C” __declspec( dllexport )
PluginObject * __cdecl CreatePluginObject() { return( (PluginObject *) new ExampleInternalsPlugin ); }
3世代構成としているようだ。今後もサンプルが更新されることもあるので、自作した部分に影響が少ないように、
InternalsPluginの子孫を継承して、クラスを作成するのがよいと考える。
コード修正
今回は、void ExampleInternalsPlugin::UpdateTelemetry関数を修正する。
ソースコードの中には、「具体的にFPS毎にテレメトリーデータを提供する」と書かれている。
元は少々長めのコードが書かれているが、ばっさりと下記のように短く書き直して、時間を出力するようにした。
目的は、1秒間に何回この関数が呼び出されるか確認するためである。
時刻用の関数を扱うため、time.hもincludeする。
実行
プラグインをコンパイルして実行してみる。 ミルズを1週走ってみた。
無事、rFactor2インストール先配下に日本語ファイル名が出力されていることを確認した。
結果
結論から言うと、UpdateTelemetry関数は1秒間にジャスト100回呼ばれる。
サンプルソースの中で書かれている「1FPSに1回」というのは、「描画1FPSに1回」という意味ではなく、
rFactor2の内部エンジン(挙動等)の「計算1FPSに1回」という意味のようだ。
ちなみに走行中の描画FPSは、80~150FPSであった。
古いシミュレータ(新しめのゲームでもあるが)等と違って、
「描画遅い=ハンドルの動きどおりに動かない」とはならないようだ。
好みで分かれるが、必ずしも”60FPS原理主義”である必要はないと考える。
rFactor2では、30FPSでも綺麗な描画がよければ、それでもよいという人もいるかもしれない。
次回
次回は、走行中の画面描画関連について取り上げる予定だ。
おまけ
日記というよりはリファレンス的なものにしたいため、解析中に後で気づいた箇所、関連する過去の履歴も更新しています。