
前回のスクリプトにて
elif ev == 'catch':
obj.ResetEvent(di['timerEID'])
di['distance'] = 0
di['train'] = obj.GetTrain()
di['timerEID'] = obj.SetEventTimer(1,100)
のResetEventは次の列車が信号機の遷移中に突入してきた時の為だったのですが、ここに次の列車用のSetEventTimerを置くとイベントが発生できないことが分かりましたので、SetEventAfterで0.1秒遅らせることにしました。
#OBJID=38
import vrmapi
def vrmevent_38(obj,ev,param):
di = obj.GetDict()
if ev == 'init':
di['signal36'] = vrmapi.LAYOUT().GetSignal(36)
di['signal36'].SetStat(0,6)
di['train'] = 0
di['timerEID'] = 0
di['distance'] = 0
elif ev == 'broadcast':
dummy = 1
elif ev == 'timer':
if param['eventUID'] == 100:
speed = di['train'].GetSpeed()
di['distance'] = di['distance'] + 1.85185 * speed
if di['distance'] > 2500:
di['signal36'].SetStat(0,6)
obj.ResetEvent(di['timerEID'])
di['distance'] = 0
elif di['distance'] > 2000:
di['signal36'].SetStat(0,4)
elif di['distance'] > 1500:
di['signal36'].SetStat(0,3)
elif di['distance'] > 1000:
di['signal36'].SetStat(0,2)
elif di['distance'] > 0:
di['signal36'].SetStat(0,1)
elif ev == 'time':
dummy = 1
elif ev == 'after':
if param['eventUID'] == 101:
di['timerEID'] = obj.SetEventTimer(1,100)
elif ev == 'frame':
dummy = 1
elif ev == 'catch':
obj.ResetEvent(di['timerEID'])
di['distance'] = 0
di['train'] = obj.GetTrain()
obj.SetEventAfter(0.1,101)
こちらをお使いください。