【rfactor2】 プラグイン開発5 – テレメトリー1 –

今回の趣旨
 今回から実際の”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秒間に何回この関数が呼び出されるか確認するためである。
 capt_005.jpg
 時刻用の関数を扱うため、time.hもincludeする。
 capt_004_20120330220542.jpg
実行
 プラグインをコンパイルして実行してみる。 ミルズを1週走ってみた。
 rFactor2 2012-03-30 22-12-16-63
 無事、rFactor2インストール先配下に日本語ファイル名が出力されていることを確認した。
 capt_003.jpg
結果
 結論から言うと、UpdateTelemetry関数は1秒間にジャスト100回呼ばれる。
 サンプルソースの中で書かれている「1FPSに1回」というのは、「描画1FPSに1回」という意味ではなく、
 rFactor2の内部エンジン(挙動等)の「計算1FPSに1回」という意味のようだ。
 ちなみに走行中の描画FPSは、80~150FPSであった。
 古いシミュレータ(新しめのゲームでもあるが)等と違って、
 「描画遅い=ハンドルの動きどおりに動かない」とはならないようだ
 好みで分かれるが、必ずしも”60FPS原理主義”である必要はないと考える。
 rFactor2では、30FPSでも綺麗な描画がよければ、それでもよいという人もいるかもしれない。
次回
 次回は、走行中の画面描画関連について取り上げる予定だ。
おまけ
 日記というよりはリファレンス的なものにしたいため、解析中に後で気づいた箇所、関連する過去の履歴も更新しています。

rfactor2 Plugin Develop