VRM5仕様なのでそのままでは使えないかもしれないですし、全くのオリジナルとして検討したので参考に出来る部分はないかもしれませんが、こっそりと作りました。こっそりと公開します(^_^;)
LAYOUT
Var crossarea01 //踏切区間に 0:いない、1:1編成、2:2編成
C57
Var train_way
BeginFunc direction
GetDirection2 train_way
EndFunc
EF81
Var train_way
BeginFunc direction
GetDirection2 train_way
EndFunc
CROSSINGSIGN_LEFT
SetCrossingStatus 1
BeginFunc crs_close1
Var a
GetCrossingStatus a //状態取得
ifeq a 1 //踏切が開いていたら
SetCrossingStatus 2 //踏切を閉じる
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 1 //方向1を表示
else
SetCrossingSign 3 //それ以外なら矢印両方向を表示
endif
EndFunc
BeginFunc crs_open1
ifeq LAYOUT.crossarea01 0 //踏切区間にいないなら
SetCrossingStatus 1 //踏切を開く
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 2 //方向2を表示
else
SetCrossingSign 0 //それ以外なら消灯
endif
EndFunc
BeginFunc crs_close2
Var a
GetCrossingStatus a //状態取得
ifeq a 1 //踏切が開いていたら
SetCrossingStatus 2 //踏切を閉じる
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 2 //方向2を表示
else
SetCrossingSign 3 //それ以外なら矢印両方向を表示
endif
EndFunc
BeginFunc crs_open2
ifeq LAYOUT.crossarea01 0 //踏切区間にいないなら
SetCrossingStatus 1 //踏切を開く
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 1 //方向1を表示
else
SetCrossingSign 0 //それ以外なら消灯
endif
EndFunc
CROSSINGSIGN_RIGHT
SetCrossingStatus 1
BeginFunc crs_close1
Var a
GetCrossingStatus a //状態取得
ifeq a 1 //踏切が開いていたら
SetCrossingStatus 2 //踏切を閉じる
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 2 //方向2を表示
else
SetCrossingSign 3 //それ以外なら矢印両方向を表示
endif
EndFunc
BeginFunc crs_open1
ifeq LAYOUT.crossarea01 0 //踏切区間にいないなら
SetCrossingStatus 1 //踏切を開く
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 1 //方向1を表示
else
SetCrossingSign 0 //それ以外なら消灯
endif
EndFunc
BeginFunc crs_close2
Var a
GetCrossingStatus a //状態取得
ifeq a 1 //踏切が開いていたら
SetCrossingStatus 2 //踏切を閉じる
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 1 //方向1を表示
else
SetCrossingSign 3 //それ以外なら矢印両方向を表示
endif
EndFunc
BeginFunc crs_open2
ifeq LAYOUT.crossarea01 0 //踏切区間にいないなら
SetCrossingStatus 1 //踏切を開く
endif
ifeq LAYOUT.crossarea01 1 //踏切区間に1編成だったら
SetCrossingSign 2 //方向2を表示
else
SetCrossingSign 0 //それ以外なら消灯
endif
EndFunc
CROSSINGBAR_LEFT
SetCrossingTime 3000
SetCrossingStatus 1
BeginFunc crs_close
Var a
GetCrossingStatus a //状態取得
ifeq a 1 //踏切が開いていたら
SetCrossingStatus 2 //踏切を閉じる
endif
EndFunc
BeginFunc crs_open
ifeq LAYOUT.crossarea01 0 //踏切区間にいないなら
SetCrossingStatus 1 //踏切を開く
endif
EndFunc
CROSSINGBAR_RIGHT
SetCrossingTime 3000
SetCrossingStatus 1
BeginFunc crs_close
Var a
GetCrossingStatus a //状態取得
ifeq a 1 //踏切が開いていたら
SetCrossingStatus 2 //踏切を閉じる
endif
EndFunc
BeginFunc crs_open
ifeq LAYOUT.crossarea01 0 //踏切区間にいないなら
SetCrossingStatus 1 //踏切を開く
endif
EndFunc
SENSOR_IN_IN
Var evid
SetEventSensor snsev, evid
SetSensorMode 0
BeginFunc snsev
VarTrain obj
GetSenseTrain obj
call obj direction
ifeq "C57.train_way" 1
add LAYOUT.crossarea01 1
DrawVar LAYOUT.crossarea01
call "CROSSINGSIGN_LEFT" crs_close1
call "CROSSINGSIGN_RIGHT" crs_close1
call "CROSSINGBAR_LEFT" crs_close
call "CROSSINGBAR_RIGHT" crs_close
endif
EndFunc
SENSOR_IN_OUT
Var evid
SetEventSensor snsev, evid
SetSensorMode 1
BeginFunc snsev
VarTrain obj
GetSenseTrain obj
call obj direction
ifeq "C57.train_way" 1
sub LAYOUT.crossarea01 1
DrawVar LAYOUT.crossarea01
call "CROSSINGSIGN_LEFT" crs_open1
call "CROSSINGSIGN_RIGHT" crs_open1
call "CROSSINGBAR_LEFT" crs_open
call "CROSSINGBAR_RIGHT" crs_open
endif
EndFunc
SENSOR_OUT_IN
Var evid
SetEventSensor snsev, evid
SetSensorMode 0
BeginFunc snsev
VarTrain obj
GetSenseTrain obj
call obj direction
ifeq "EF81.train_way" 1
add LAYOUT.crossarea01 1
DrawVar LAYOUT.crossarea01
call "CROSSINGSIGN_LEFT" crs_close2
call "CROSSINGSIGN_RIGHT" crs_close2
call "CROSSINGBAR_LEFT" crs_close
call "CROSSINGBAR_RIGHT" crs_close
endif
EndFunc
SENSOR_OUT_OUT
Var evid
SetEventSensor snsev, evid
SetSensorMode 1
BeginFunc snsev
VarTrain obj
GetSenseTrain obj
call obj direction
ifeq "EF81.train_way" 1
sub LAYOUT.crossarea01 1
DrawVar LAYOUT.crossarea01
call "CROSSINGSIGN_LEFT" crs_open2
call "CROSSINGSIGN_RIGHT" crs_open2
call "CROSSINGBAR_LEFT" crs_open
call "CROSSINGBAR_RIGHT" crs_open
endif
EndFunc