Rosso Laboratory

Rosso Laboratory

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

踏切スクリプト完成



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

まぁ一応作れたので内容は理解できたから何かの役には立つことでしょう。
PVアクセスランキング にほんブログ村