Rosso Laboratory

センサーチェーン構造図解

前々回の「CommonStatusの有用性」に記載した「閉塞構築センサー」における「センサーチェーン構造」を図解してみよう。

---*---*---*---

「センサーチェーン構造」とは、あるセンサーが、編成を運び屋にすることによって、1つ前のセンサーのオブジェクト参照値を取得するものである。そして、1つ前のセンサーはその1つ前のセンサーのオブジェクト参照値を持つことになるから、鎖状に連なって動作させることが出来る訳である。

---*---*---*---

それでは、「閉塞構築センサー」の動作(VRM5/ONLINE版)を見てみよう。

 //閉塞メソッド
 BeginFunc MethodSensorEvent
  GetSenseTrain ObjTrain
  SetCommonStatus VarBlockadeZoneNo VarBlockadeZoneStatus
  mov this ObjPreviousSensor ObjTrain ObjBZoneSensor
  ifeq VarBlockadeZoneStatus 4
   call ObjPreviousSensor Method4to3
  endif
  ifeq VarBlockadeZoneStatus 3
   call ObjPreviousSensor Method3to2
  endif
  ifeq VarBlockadeZoneStatus 2
   call ObjPreviousSensor Method2to1
  endif
  ifeq VarBlockadeZoneStatus 1
   call ObjPreviousSensor Method1to0
  endif
  mov ObjTrain ObjBZoneSensor this ObjThisSensor
 EndFunc


この閉塞メソッドの黄色い部分がセンサーチェーン確立のためのコマンド群であり、編成ObjTrainのObjBZoneSensorが運び屋の器である。そして、センサーはObjPreviousSensorに1つ前のセンサーの参照値を確保する。



そして、メソッドは1つ前のセンサーへと指令を出していくわけである。それにより、閉塞の状態を示す4、3、2、1、0の値が入るのである。

「Method3to2」より

 BeginFunc Method3to2
  GetCommonStatus VarBlockadeZoneNo VarStatus
  ifeq VarStatus 3

   SetCommonStatus VarBlockadeZoneNo 2
   call ObjPreviousSensor Method2to1
  endif
 EndFunc


尚、この赤い部分は変えるべき値が本当に3であるかを確認するためであり、これが後続編成が対象区間に突入していた場合の対策になる。

---*---*---*---

また、閉塞メソッドに話は戻るが、「ifeq VarBlockadeZoneStatus」で条件分岐しているのは、信号機の灯火数に対応するものであり、例えば5灯ではなく4灯ならば、



このようになる訳である。後は4灯式信号機及び編成動作用のスクリプトを追加すれば良いだけ。

---*---*---*---

という訳で、センサーチェーン構造の解説を書いた訳ですが、1つ前のセンサーが判るということは逆に1つ先のセンサーも判るということで、ObjPreviousSensorだけでなく、ObjNextSensorも取得できる訳である。

VRMにおける「動的オブジェクト参照」の究極的な使い方が、この「センサーチェーン構造」だろうと私は勝手に思っている。

ランキングに参加中。クリックして応援お願いします!

名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新の画像もっと見る

最近の「VRMスクリプト」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事