以前、スピードとRPMのLEDメータを動かすために、lua scriptを使った設定方法をご紹介しましたが、その後CSPの理解が少し進み、custom inputsを使ってシンプルに設定できることが分かったので、その覚書です。
以前の書き方、例えばRPMメータの一番左、回転数が333以下の時に点灯するという設定は、こんな感じでした。
; RPM Meter
[EMISSIVE_LIGHT_...]
NAME=rpmMeter1_0, rpmMeter1_1, rpmMeter1_2, rpmMeter1_3, rpmMeter1_4, rpmMeter1_5, rpmMeter1_6, rpmMeter1_7, rpmMeter1_8, rpmMeter1_9, rpmMeter1_10
COLOR=0,10,0
OFF_COLOR=0,10,0
[SCRIPTABLE_DISPLAY_...]
MESHES=rpmMeter1_0
KEEP_BACKGROUND=1
INTERACTIVE=0
FORCE_UPDATE_AFTER=CAR_STEREO_0
SCRIPT='
function update(dt)
if car.rpm > 333 then
display.rect{
pos = vec2(0, 0),
size = vec2(128,128),
color = rgb(1,1,1)
}
else
display.rect{
pos = vec2(0, 0),
size = vec2(128,128),
color = rgb(0,0,0)
}
end
end'(以下[SCRIPTABLE_DISPLAY_...]がつづく・・・。)
LEDのオブジェクトをEMISSIVE_LIGHTで点灯させて、そのオンオフをSCRIPTABLE_DISPLAY_...で切り替える、という仕組みです。
一方これをcustom inputsを使うとこうなります。
; RPM Meter
[EMISSIVE_...]
NAME=rpmMeter1_0
INPUT=RPM
INPUT_THRESHOLD=333
COLOR=0,10,0,1(以下、EMISSIVE_...が続く。)
シンプルですね。ヘッドライトとも連動せず、RPMが333を超えるとrpmMeter1_0が点灯します。
NAMEは光らせるオブジェクト名(LEDとか)、INPUTには連動させたいインプット情報、INPUT_THRESHOLDはインプットされる情報の閾値(これを超えると点灯し、下回ると消灯する)、COLORは光った時の色、です。
なお、custom inputsについて、wikiでは注意書きで、エクステリア(外側)のインジケータにはcustom inputsではなく、EMISSIVE_LIGHT_...を使うことを推奨すると書かれていました。なんでかな???
INPUTは以前にも書きましたが、いろんな情報を指定できます。具体的にはこちら。
Cars – Instruments inputs · ac-custom-shaders-patch/acc-extension-config Wiki · GitHub
応用例としては、KNIGHT2000のアクセルペダルのインジケータです。
アクセルペダルに並ぶLEDライトの一番下(最初)の設定はこれです。
; foot pedal
[EMISSIVE_...]
NAME=foot_1
INPUT=GAS
INPUT_THRESHOLD=0.0666666666666667
COLOR=0,10,0,1
INPUTのGASはアクセルペダルを踏みこんだ量です。踏まない状態が0、めいっぱい踏み込んだ状態が1で、その間は小数点表示でインプットされます。
今回アクセルペダルのLEDは15段階あるので、1つ目のライトはアクセルを1/15(=0.0666666666666667)踏み込むと緑色に点灯する、という設定です。
これを15パターン登録して、光らせたのがこちらです。