//Switcher
概要
Swticherサインは列車やトロッコの情報を認識し、それに応じた分岐レールやレバーの切り替えを行います。経路探索においても、分岐を切り替えできるノードとして認識されます。経路探索などなどを活用して、列車をその目的地まで自動で進行させるのにとても役立ちます。
レバーをSwitcherサインと同じブロックに繋げると、サインの内容に従って返り値としてオンオフを切り替えます。サインに電源が供給されている時は、条件文に従って上のレールの分岐も切り替えます。そのため、直線のレールでも列車が真逆の方向に進むかもしれません。もしもレールを切り替えずに、レバーだけを変化させたい場合には、[-train]を利用してください。
デフォルトでは、電源が供給されていないSwitcherサインは経路探索においても線路を切り替えません。以前のバージョンでは仕様が異なっていたため、レガシーサポートとしてconfig.ymlから挙動を変更することができます。
記法
一行目:レバーだけ動作させる場合は[-train]を、レールも分岐させたいなら[+train]などを使います。
二行目:switcherもしくはtag。
三行目:分岐を左へ切り替える際に判定されるステートメント 。方向の前置詞が指定されていない場合のみです。
四行目:分岐を右に切り替える際のステートメント。
ステートメントはトロッコのタグや目的地、乗客の状態やアイテム、その他のいろいろな状態を識別できます。また、最後の二行に数値を用いれば列車やトロッコを並べ替えることも可能で、たとえば三つの列車がくるたびにひとつを左へ進ませ、残りを右へ送るという制御が実装できます。またdefaultという特殊なステートメントも使うことができ、他のステートメントがすべて条件を満たさなかった場合にはこちらへ分岐するようになります。基本的に、ステートメントはすべて上から順に評価されます。
方向接頭辞
ステートメントにはl:やf:といった方向を指定する接頭辞を追加することができ、そのステートメントが真だった場合にどちらへ列車を送るのかを指定できます。
ステートメント
三行目と四行目にはステートメントを記述します。先述の通りコロンの前に方向を指定することで、真だったときの分岐先を明示することもできます。たとえば次のような感じになります。
トロッコ数が五より多い列車は左へ、木をチェストの中に格納しているトロッコは右へ送ります。Switcherサインではステートメントは上から下へ評価していくので、木を格納している列車でもトロッコが五以上であれば左へ分岐します。
Switcherサインは、タグ名やプレイヤー名の部分判定に利用できるワイルドカードにも対応しています。ただ、それ以外の列車の名前などに使うことはできません。
ステートメントの記述の継続
ステートメントを下にある看板に三つ以上続けて記述することができます。ただし、その際に方向を表すプレフィックスを記述しないと、Switcherサインから無視されてしまいます。単にレバーの切り替えを行いたい場合でも、f:などの何かしらの方向を記述する必要があります。ただし、これらの方向の記述は動作には影響を及ぼさず、ただステートメントとして認識されるためのおまじないといった感じです。下のレッドストーン信号で動作するSwitcherの例などはこの機能を利用しています。
機能
検出器として
Switcherサインは線路を切り替えるのに加え、接続されたレバーの状態も切り替えます。[-train]を利用すれば線路の切り替え機能が無効化されるため、レバーの切り替えにのみ使用できます。これは例えばプレイヤーが乗り込んだなど、上にある列車の変化を自動的に検知する機能に使うことが可能です。
列車なしで切り替え
列車がレールを通過することなしに、レッドストーンによってレールの分岐を切り替えたい場合、切り替えの前後の方向を同時に指定できます。
この場合、レッドストーン信号を受け取ると、北から東の向きへレールを切り替えます。受け取っていない場合、北から西の向きになります。TC-Coastersを利用する時、1-2:redstoneのようにジャンクションを指定することもできます。
経路探索
Switcherサインは経路探索を行う際にも利用されます。列車やトロッコの行き先が設定されており、サインに書かれたステートメントがないかマッチしない時、レールの分岐を目的地へ向かう方向へと切り替えます。もし他のルートを教示したい場合や、通過する列車を迂回させたりする必要がある場合には、そのためのステートメントをサインへ追加してください。
ソート
もし複数のトロッコを複数のレールへ整理する必要がある時は、内部的なカウンターの機能を利用できます。
こうすると、まずみっつの列車を左へ向かわせ、そのあとよっつの列車を右側へ向かわせる、というサイクルを繰り返します。さらに、複数のSwitcherサインを配置することで、いくつものレールへ列車を分けていくことができます。次の動画でその様子を掲載しています。
https://www.youtube.com/watch?v=8KCfenk3Vi8
列車を分割する
[+cart]を指定したSwitcherサインを用いれば、列車を任意の数のトロッコへ分割することができます。これを用いれば、列車が通過している途中でレールが切り替わり、列車を構成する各トロッコが別々の方向へと向かっていきます。『1トロッコを左、1トロッコを右』のような固定値のほか、『50%』などの割合を利用することができます。こうすると、列車を構成するトロッコの数にかかわらず、ちょうど半分で分割されます。
例
レッドストーン信号で動作するSwitcher
レッドストーンのステートメントを利用すれば、列車を送りたい方向をカンペキにコントロールすることができます。
自動発車
[-train]を利用して乗客を感知するSwitcherサインを作ると、接続されているレバーをプレイヤーが通過しているかどうかに応じて切り替えるようになります。こうすると、反転モードになっているStationサインが起動し、動力を受け取っていない側へ列車を射出します。レッドストーンリピーターなどで遅延を設定すれば、意図しない発車を防げます。
トロッコごとに分割する
[+cart]にして上述のカウンターソートを使えば、長い列車を個別のトロッコへと分割することができます。それぞれのトロッコはみっつのレールへそれぞれ等しく送られます。追加のサインをSwitcherの下に連ねていけば、さらに切り替えのルールを拡張していけます。以下の零でのステートメントは、l:1 r:1 f:1のみっつです。

