VRMpyはどんなのか
なんとかVRM NXのアプリケーションが起動したので,Pythonベースに刷新されたスクリプトがどんなものであるのか覗いてみた。
とはいってもビュワーはちっとも起動しないので以下に書くことはすべて妄想である。そこを割り引いて読むこと。
上の図は「新規レイアウト作成」した段階でのレイアウトスクリプトの中身である。この,vrmeventなる関数が,「イベントのレシーバーは、システムによって自動生成されます。」に当たるのだろうか。
ちなみに,Pythonではコメントは#以下となる。
同様に,編成部品,車両,ポイントなどのスクリプトは以下のような初期状態であった。
イベントの発生条件が満たされるとシステムからvrmevent関数がしかるべき引数を伴って呼び出されてくる感じなんだろうか。
オブジェクトごとに,レシーバの関数名が異なる理由(仕様上の制約)が気になる。
こんな仕様のイベント(イベントハンドラ)だったらいいなあというのを勝手に述べる。
#イベントを設定するとき
evcode = vrmapi.seteventafter(obj, funcex, time)
#呼び出される側
def funcex(params):
#params は辞書型でいろんなパラメータをまとめて持ってきてくれる。例えば
eventtype = params["evtype"] #例えば"after"
aftertime = params["time"]
#イベントを削除するとき
killevent(evcode)
将来はマルチスレッドに対応することも想定しているらしいので,イベントハンドラから従来のGetSenseTrainのようなことはできないかもしれないが,こういうのも,次のようにできたら自然だと思う。
#イベントを設定するとき
evid = vrmapi.seteventsensor(obj, funcex)
#呼び出される側
def funcex(params):
#params は辞書型でいろんなパラメータをまとめて持ってきてくれる。例えば
eventtype = params["evtype"] #例えば"sensor"
train = params["train"] #通過した編成
dir = params["direction"] #センサーに対する通過方向
イベントのタイプに対して有効なパラメータの種類 (キー) もこれまた中身がリストの辞書型でvrmapiから与えられているとよい。 (後からもたせるパラメータを追加しやすそう。)
#vrmapi
EVPARAMS = {after: ["time"],
keydown: ["keycode"],
sensor: ["train", "dir"], #以下省略
}