takeyohのおぼえがき

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

LEDのインジケータ(カスタムインプット使用版)

以前、スピードとRPMのLEDメータを動かすために、lua scriptを使った設定方法をご紹介しましたが、その後CSPの理解が少し進み、custom inputsを使ってシンプルに設定できることが分かったので、その覚書です。

github.com

 

以前の書き方、例えば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パターン登録して、光らせたのがこちらです。

youtu.be

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