Rosso Laboratory

Rosso Laboratory

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

2つ目の駅にも対応させる


前回の続きで、折角なら2つ以上の駅にも対応できるスクリプトを作っておこうと思い、書いてみました。

LAYOUT
doorTAG = 0
doorside = 0
    if ev == 'init':
        vrmapi.LAYOUT().CrossingGroupCTRL(10, 2)
        vrmapi.LAYOUT().CrossingGroupCTRL(11, 2)

TRAIN
    if ev == 'init':
        global doorTAG
        global doorside
    elif ev == 'after':
        if param['eventUID'] == 100:
            obj.CloseDoor(doorside, False)
            vrmapi.LAYOUT().CrossingGroupCTRL(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(doorside, False)
            vrmapi.LAYOUT().CrossingGroupCTRL(doorTAG, 1)
            obj.SetEventAfter(10,100)

SENSOR_01
    if ev == 'init':
        obj.SetSNSMode(0)
    elif ev == 'catch':
        global doorTAG
        global doorside
        doorTAG = 10
        doorside = 0
        train = obj.GetTrain()
        train.AutoSpeedCTRL(435,0)

SENSOR_02
    if ev == 'init':
        obj.SetSNSMode(0)
    elif ev == 'catch':
        global doorTAG
        global doorside
        doorTAG = 11
        doorside = 1
        train = obj.GetTrain()
        train.AutoSpeedCTRL(435,0)

注意すべき点は、CrossingGroupCTRL()のホームドアタグを文字列から数字に変えた点です。ここに変数を使うと文字列は対応していないらしく数字で指定するしかありませんでした。あと動作しなくて苦労した点はTRAINの'after'と'autospeed'の両方に同じグローバル宣言を書いていたことで、2つ同じものを書くと動作しなくなるんですね。よって'init'の方にまとめました(^_^;) これでセンサーにてホームドアタグ番号、左右どちら側か、制動距離を指定できるので複数の駅に対応できることになりました(^^)/ 但しこれだと1路線に複数の編成が走っていると対応できていないような気がします。まだ改良の余地はありますか(^_^;)
PVアクセスランキング にほんブログ村