Rosso Laboratory

Rosso Laboratory

主に鉄道模型シミュレーター(VRM)などの仮想鉄道アプリを扱うブログです。またHDR写真の記事も書いています。

信号機遷移中突入対応版


前回のスクリプトにて
    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)
こちらをお使いください。
PVアクセスランキング にほんブログ村