takeyohのおぼえがき

気になったこと、試したことの記録です。

CPHYS_SCRIPTの使い方&注意事項

CSPの機能の一つに、物理制御しているscript.luaから光やアニメーションを制御するextension側にパラメータを受け渡すことができます。
公式WIKIはこちら。
github.com

これの、
CPHYS_SCRIPT_0: value #0 set by custom physics Lua script;
CPHYS_SCRIPT_1: value #1 set by custom physics Lua script;
CPHYS_SCRIPT_2: value #2 set by custom physics Lua script;
CPHYS_SCRIPT_3: value #3 set by custom physics Lua script;
CPHYS_SCRIPT_4: value #4 set by custom physics Lua script;
CPHYS_SCRIPT_5: value #5 set by custom physics Lua script;
CPHYS_SCRIPT_6: value #6 set by custom physics Lua script;
CPHYS_SCRIPT_7: value #7 set by custom physics Lua script;

この8つがそれです。(8個まで個別に制御できるってことですね。)

よくあるAnimationやEmissiveで使われる
INPUT=〇〇
の〇〇に入れることになります。
例えば、

[EMISSIVE_...]
INPUT = CPHYS_SCRIPT_0
INPUT_THRESHOLD = 5000
NAME = alertLight
COLOR = 255, 0, 0

とか書いておくと、
CPHYS_SCRIPT_0の値が5000を超えると、alertLightというオブジェクトが赤く光る
ということになりますね。

で、CPHYS_SCRIPT_0の値はどうやって制御するのかというと、車の制御側になる、data/script.luaフォルダ内で定義します。
CPHUS_SCRIPT_0の値は、ac.accessCarPhysics().controllerInputs[0] で制御します。
0から7まであるので、ac.accessCarPhysics().controllerInputsも[0]から[7]まであり、一対一で対応しています。
例えば、data/script.luaの中に

ac.accessCarPhysics().controllerInputs[0] = ac.getCar().rpm

とか書いておくと、CPHYS_SCRIPT_0には随時現在のエンジン回転数(RPM)が入力されるようになります。
(実際にはINPUT=RPMというのがあるので、こんな面倒なことはしないですけどね。)

こうして、script.luaでいろいろな制御をして、その結果をアニメーションや光に反映させたいときは、CPHYS_SCRIPTを使って制御することが出来るようになります。
が、一つ欠点が。
これ、ゲームプレイ中はちゃんと機能するのですが、リプレイでは機能しません。リプレイ中script.lua自体は機能するのですが、CPHYS_SCRIPT側がデータを受け取って処理することが出来ません。
なので、車の外から見てわかるアニメーションや光などはリプレイで動作しないことに。すごく違和感が出てしまうので、そのような場合はあきらめて割り切るか、違う方法で制御することを考えましょう。

/* -----codeの行番号----- */