
前回の続きで1路線に複数の編成が走っていても対応するようにします。

そのためにはグローバル変数をやめてdict変数を使ってやった方が良いだろうと判断し、苦手というか今まで使いこなせなかったdict変数を使っていきます。
LAYOUT
if ev == 'init':
vrmapi.LAYOUT().CrossingGroupCTRL(10, 2)
vrmapi.LAYOUT().CrossingGroupCTRL(11, 2)
TRAIN_01
di = obj.GetDict()
if ev == 'init':
di['doorTAG'] = 11
di['doorside'] = 1
elif ev == 'after':
if param['eventUID'] == 100:
obj.CloseDoor(di['doorside'], False)
vrmapi.LAYOUT().CrossingGroupCTRL(di['doorTAG'], 2)
obj.SetEventAfter(3,200)
if param['eventUID'] == 200:
obj.AutoSpeedCTRL(400,1.0)
elif ev == 'autospeed':
s = obj.GetSpeed()
if s == 0:
obj.OpenDoor(di['doorside'], False)
vrmapi.LAYOUT().CrossingGroupCTRL(di['doorTAG'], 1)
obj.SetEventAfter(10,100)
TRAIN_02
di = obj.GetDict()
if ev == 'init':
di['doorTAG'] = 10
di['doorside'] = 0
elif ev == 'after':
if param['eventUID'] == 101:
obj.CloseDoor(di['doorside'], False)
vrmapi.LAYOUT().CrossingGroupCTRL(di['doorTAG'], 2)
obj.SetEventAfter(3,201)
if param['eventUID'] == 201:
obj.AutoSpeedCTRL(400,1.0)
elif ev == 'autospeed':
s = obj.GetSpeed()
if s == 0:
obj.OpenDoor(di['doorside'], False)
vrmapi.LAYOUT().CrossingGroupCTRL(di['doorTAG'], 1)
obj.SetEventAfter(10,101)
SENSOR_01
if ev == 'init':
obj.SetSNSMode(0)
elif ev == 'catch':
train = obj.GetTrain()
di = train.GetDict()
di['doorTAG'] = 10
di['doorside'] = 0
vrmapi.LOG(di['doorTAG'])
vrmapi.LOG(di['doorside'])
train.AutoSpeedCTRL(435,0)
SENSOR_02
if ev == 'init':
obj.SetSNSMode(0)
elif ev == 'catch':
train = obj.GetTrain()
di = train.GetDict()
di['doorTAG'] = 11
di['doorside'] = 1
vrmapi.LOG(di['doorTAG'])
vrmapi.LOG(di['doorside'])
train.AutoSpeedCTRL(435,0)
これが完成版なのですが一人ではミスが見つからなくてDISCORDにてヘルプを要請したところ、AKAGIさんに助けられて完成出来ました(^^)/ 緑の部分のコードの位置に問題がありました。di = obj.GetDict()の下ではなく、if ev == 'init':の下に書く必要があったのですね。この僅かな違いで予定通り動かなくなるので、それに気が付くかどうかが難しいところです(^_^;)
まぁ兎に角これにて多数の駅、多数の編成にも対応できるスクリプトが出来ました。これなら自動センサー制御と同様に難しくなく拡張していけることでしょう。