サンプルプログラム/ライトの色変更

Last-modified: 2017-01-15 (日) 21:05:20

操縦席やタイマーなどのツールバーアクションから実行することで、ライト*1の色を変更するスクリプトです。

改変なしで実用可能です。


スクリプト

Programmable Blockの準備は下記スクリプトをそのまま貼り付けるだけです。用途に応じて変わる対象のブロック名や色の数値はツールバー側で設定するので、スクリプト自体は改変する必要がありません。また、Programmable Blockは一つしか使わずにツールバー項目ごとに別々の設定を使用できます。

public void Main(string argument) {
   if(argument.Length>0){
       string[] split_a = argument.Split(',');
       string target_name = split_a[0];
       int red   = int.Parse(split_a[1]);
       int green = int.Parse(split_a[2]);
       int blue  = int.Parse(split_a[3]);
       var target = new List<IMyTerminalBlock> ();
       GridTerminalSystem.GetBlocksOfType<IMyLightingBlock>(target);
       for (int i = 0; i < target.Count; i++) {
           string block_name = target[i].CustomName;
           if (block_name.Contains(target_name)){
               target[i].SetValue("Color", new Color(red, green, blue));
           }
       }
   }
}

使い方

Button Panelのツールバーに設定する場合を例として説明します。

  1. 事前に、色を変えたいライトのブロック名のどこかに任意の名前、今回は「test_name」とつけておきます。
  2. Button Panelに、このスクリプトを設定したProgrammable Blockをドラッグ&ドロップし、「Run」を登録します。
    • このとき、Argument入力ダイアログが出るので「識別用の文字列,Rの値,Gの値,Bの値」の書き方で、今回は「test_name,255,0,0」と入力してください。
  3. これによって「名前にtest_nameがある全てのライトを赤色にする」ボタンが出来上がります。

同様に、操作するライトに応じて識別用の文字列を、色によってRGBの値を変更したRunを登録することで、プログラムに変更を加えることなく任意の色設定アクションを設定できます。

Argument文字列の例

文字列備考
test,255,0,0名前にtestを含むライトが赤くなります。
test,255,255,255名前にtestを含むライトが白になります。
signal,0,255,0名前にsignalを含むライトが緑になります。

コメント


*1 SpotlightInterior LightCorner Light系どれでも可