見出し画像

Rosso Laboratory

センサー2個で交換駅スクリプト

「センサー2個で」になりました(^^)/ 今回は交換駅を再現してみました。

#----------------
#交換駅L→Rホーム用
#----------------
#OBJID=77
import vrmapi
area_LR = 0 #交換駅L→Rホーム有無
def vrmevent_77(obj,ev,param):
    global area_LR
    global area_RL
    di = obj.GetDict()
    if ev == 'init':
        di['train'] = 0
        di['evid'] = 0
        di['inpointid'] = 75 #進入ポイントのID
        di['outpointid'] = 74 #退出ポイントのID
        di['stopdistance'] = 800.0 #停車距離
        di['stoptime'] = 10.0 #停車時間
        di['startdistance'] = 600.0 #出発列車電圧設定距離
        di['startvoltage'] = 0.8 #出発列車電圧
        di['inpoint'] = vrmapi.LAYOUT().GetPoint(di['inpointid'])
        di['outpoint'] = vrmapi.LAYOUT().GetPoint(di['outpointid'])
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        if param['eventUID'] == 101:
            if area_RL == 1:
                obj.SetEventAfter(di['stoptime'],100)
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        if param['eventUID'] == 100:
            di['train'].AutoSpeedCTRL(di['startdistance'],di['startvoltage'])
            di['outpoint'].SetBranch(1)
            area_LR = 0
            obj.ResetEvent(di['evid'])
    elif ev == 'frame':
        dummy = 1
    elif ev == 'catch':
        f = obj.GetForward()
        if f == 1:
            di['inpoint'].SetBranch(0)
            area_LR = 1
            di['train'] = obj.GetTrain()
            speed = di['train'].GetSpeed()
            delaytime = di['stoptime'] + 1.08 * di['stopdistance'] / speed
            di['train'].AutoSpeedCTRL(di['stopdistance'],0.0)
            if area_RL == 1:
                obj.SetEventAfter(delaytime,100)
            else:
                di['evid'] = obj.SetEventTimer(1.0,101)


#----------------
#交換駅R→Lホーム用
#----------------
#OBJID=76
import vrmapi
area_RL = 0 #交換駅R→Lホーム有無
def vrmevent_76(obj,ev,param):
    global area_LR
    global area_RL
    di = obj.GetDict()
    if ev == 'init':
        di['train'] = 0
        di['evid'] = 0
        di['inpointid'] = 74 #進入ポイントのID
        di['outpointid'] = 75 #退出ポイントのID
        di['stopdistance'] = 800.0 #停車距離
        di['stoptime'] = 10.0 #停車時間
        di['startdistance'] = 600.0 #出発列車電圧設定距離
        di['startvoltage'] = 0.8 #出発列車電圧
        di['inpoint'] = vrmapi.LAYOUT().GetPoint(di['inpointid'])
        di['outpoint'] = vrmapi.LAYOUT().GetPoint(di['outpointid'])
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        if param['eventUID'] == 101:
            if area_LR == 1:
                obj.SetEventAfter(di['stoptime'],100)
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        if param['eventUID'] == 100:
            di['train'].AutoSpeedCTRL(di['startdistance'],di['startvoltage'])
            di['outpoint'].SetBranch(1)
            area_RL = 0
            obj.ResetEvent(di['evid'])
    elif ev == 'frame':
        dummy = 1
    elif ev == 'catch':
        f = obj.GetForward()
        if f == 1:
            di['inpoint'].SetBranch(0)
            area_RL = 1
            di['train'] = obj.GetTrain()
            speed = di['train'].GetSpeed()
            delaytime = di['stoptime'] + 1.08 * di['stopdistance'] / speed
            di['train'].AutoSpeedCTRL(di['stopdistance'],0.0)
            if area_LR == 1:
                obj.SetEventAfter(delaytime,100)
            else:
                di['evid'] = obj.SetEventTimer(1.0,101)


#----------------
#終端駅用
#----------------
#OBJID=78
import vrmapi
def vrmevent_78(obj,ev,param):
    di = obj.GetDict()
    if ev == 'init':
        di['train'] = 0
        di['stopdistance'] = 600.0 #停車距離
        di['stoptime'] = 10.0 #停車時間
        di['startdistance'] = 600.0 #出発列車電圧設定距離
        di['startvoltage'] = 0.8 #出発列車電圧
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        dummy = 1
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        if param['eventUID'] == 100:
            di['train'].Turn()
            di['train'].AutoSpeedCTRL(di['startdistance'],di['startvoltage'])
    elif ev == 'frame':
        dummy = 1
    elif ev == 'catch':
        f = obj.GetForward()
        if f == 1:
            di['train'] = obj.GetTrain()
            speed = di['train'].GetSpeed()
            delaytime = di['stoptime'] + 1.08 * di['stopdistance'] / speed
            di['train'].AutoSpeedCTRL(di['stopdistance'],0.0)
            obj.SetEventAfter(delaytime,100)

全部で3種類のスクリプトになりました。

上と下では終端駅と交換駅までの距離が違います。これで時間差を作っています。

鉄道模型シミュレーターNXセンサー2個で交換駅スクリプト

レイアウトでこのまま使うことは難しいかもしれませんが参考までに。
PVアクセスランキング にほんブログ村


ランキングに参加中。クリックして応援お願いします!

名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新の画像もっと見る

最近の「Pythonスクリプト」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事