お気づきの方もおいでかと思いますが、カテゴリ
“VRM4魔法書庫”を新設しました。従来一緒くただった
スクリプト解説とスクロール公開が分離しただけですけど。
* * *
例によって例の如く、不意に思い立って作ってみました。
[Download] 自動トグルポイント&アドオン三種詰め合わせ
ここで“トグル”と言っているのはいわゆるトグルスイッチのこと。カチッと押す都度にオン/オフが切り替わる=オン/オフの操作が同じになっているスイッチね、念のため。
自動トグルポイントは、ポイントとセンサー1つずつを組み合わせて作ります。このセンサーが編成の通過を検知する都度、ポイントが正/反位に交互に切り替わります。ポイントの正/反位切替のきっかけが、どちらも同じで交互に切り替わるので
トグルポイント、それだけ。
想定している使い方は、ポイントの真上(厳密には、常に編成が通過する非分岐側)にセンサーを置くというもの。このポイントを編成が通過すると、それがスイッチになって、編成の通過を待ってポイント位が逆転し、次に来る編成は先に通過した編成とは逆方向を通過するようになる、という仕掛けです。
たとえば、通過線と待避線に分岐する駅を作り、場内進入ポイントをトグルポイントにしておくと、ここを通る列車は(それが別編成か、周回してきた同編成かは問わずに)交互に通過線と待避線へ導かれることになります。
さらに、以下の三種類のアドオン(必要に応じて追加組み込みするスクロール)を同梱しています。
・連動ポイント:
トグルポイントと連動して正/反位が切り替わるポイントを作る。
・連動信号機:
トグルポイントと連動して進行/停止が切り替わる信号機(2つ)を作る。
・連動転轍機:
トグルポイントまたは連動ポイントに連動して動作する転轍機を作る。
毎度のことながら「誰もそこまで拘らねーよ」的オーバースペックです。さらに、皆さんがパッと見で思い浮かべるよりも、扱いが厄介な部類のスクロールです。ので、追って具体的な組み込み例を紹介する予定です。
が、とりあえず今日のところはアーカイブを放流するに留めます。簡単なマニュアルがreadmeとして同梱されているので、まぁ、読んでください。んでもって「こんなモン、難しくも何ともねーよ!」とおっしゃる方は、ボクが後日書く組み込み例に先行して利用レポートなどを書いていただいてですね、それをネットに流してささやかな優越感を味わってください。っつーか、それの出来が良ければボクの手間も省けるので。
* * *
以下、誰も興味がないとは思いますが、このスクロール群の技術的背景について書いておきます。
第一に、ポイント切替は以前に解説した
「ポイント制御の成否を判定する方法」の応用になっています。マニュアルに従ってポイント上にセンサーを置くと、センサーが編成(の先頭台車)を検知した時点では必ずポイント上に車両があることになりますから、ここでSetPointBranchをやっても必ず失敗します。
なので、SetPointBranchの直後にGetPointBranchして、もしポイントの状態がSetPointBranchしたつもりの値と一致しないようであれば、一定時間後(今回のスクロールでは500_秒後)に同じことをするようにSetEventAfterします。編成が、ポイントの切り替えを支障しないところまで走行すればSetPointBranchは成功し、この繰り返しが止まります。この結果、見た目的には編成の通過を待ってポイントが切り替わったような動作になります。
第二に(どちらかと言えばこっちが主眼です)、先だっても
実例を紹介した
「アドオン・スクロールで別オブジェクトのメソッドをコールする方法」の本格的な実装例になっています。
興味のある方は、4つのスクロールの中身を読み比べてください。ボクにしては丁寧にコメントを書いています。特に、メソッド名、グローバル変数名が、親となる「自動トグルポイント」と、その他のアドオンスクロールの中でどのように扱われているか、に注目してください。
ちなみに、アドオン側のメソッドへのcall(組み込み方によっては未代入オブジェクト変数へのcallになる)を常に“if {オブジェクト変数}〜endif”で包むのは、別にやらなくてもいいような気もする(オブジェクト変数がnullなら、call系命令は空振りする仕様のはず)のですが、どうにもnullオブジェクトに対するcallが不可避にロジックに含まれているが気持ち悪いので、こうしています。