「ゆゆぽん☆退避/追越列車とか作っちゃうかMona-(10)−区間閉塞のまとめ」
VRMスクリプト禅問答
<<前回へ
第5回から前回までで解説した、区間閉塞信号の実現方法のまとめです。全体の流れをフローチャートで示します。
太枠は、それぞれセンサーと信号を示しています。細枠はセンサーおよび信号のスクリプトの中に書かれるメソッド(BeginFunc〜EndFuncの組)がいくつあるかを示しています。つまり、センサーに1つ、信号に4つのメソッドがあれば、区間閉塞を実現できる、ということです。
※本連載に素直に従う限り、この他に信号スクリプトに信号灯火を切り換えるメソッドMtdSignalR/Y/Gがあるはずですが、雑多になるので図には示していません。
青太字は、それぞれのオブジェクトが、自分以外のオブジェクトの変数を調べることを示しています。具体的には、前回までのサンプルコードを例にすると、
センサースクリプトのObjSignal.....(このセンサーが)担当する信号機
信号スクリプトのObjNextSignal.....(この信号の)次区間信号機
ということになります。これは同時に、レイアウト上の閉塞信号(センサー1つと信号1つの組み合わせ)に書かれるスクリプトは、これらのオブジェクト変数にどの部品の名称をgetするかのみが異なるだけで、あとはまったく同じで良いことを意味しています。
下線とそこから伸びる→は、メソッドを実行することを意味しています。単に「実行する」とだけある場合はcall命令を、「一定時間後に」とある場合はSetEventAfter命令を使います。
注意すべき点としては、信号スクリプトにおいてSetEventAfter命令を使う場合のイベント管理変数は、ローカル変数ではなくグローバル変数を使うことです。かつ、すべてのSetEventAfter命令で同じ変数を使います。閉塞メソッド冒頭の「実行中のイベントがあればこれを解除する」としているイベント変数にも同じものを使います。この理由は後日解説します。とりあえず現時点ではそうしておきましょう。
緑/黄/赤でそれぞれ着色されている部分は、信号スクリプトが自分自身の灯火色を、この時点で切り換えることを意味しています。本連載的には、MtdSignalR/Y/Gのいずれかをcallする、ということです。
以上で、課題(2)信号自動制御と、課題(3)編成走行位置把握については8割方クリアしたことになります。次回以降、ここまでに作り上げた仕組みを利用して課題(4)保安機構を組み込み、最終的な課題“退避/追越列車とか作っちゃうかMona-”の解決に着手します。