Rosso Laboratory

Rosso Laboratory

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

これで完成


前回の続きで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':の下に書く必要があったのですね。この僅かな違いで予定通り動かなくなるので、それに気が付くかどうかが難しいところです(^_^;)

まぁ兎に角これにて多数の駅、多数の編成にも対応できるスクリプトが出来ました。これなら自動センサー制御と同様に難しくなく拡張していけることでしょう。
PVアクセスランキング にほんブログ村