「センサー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個で交換駅スクリプト