ビュワー起動時の先頭車方向へ向けて走行しているか、あるいはその逆かを取得する。要するに、[Home]キーを押した回数+Turn命令を使った回数の合計が偶数か奇数か、ってだけの話。
【編成】GetMe [Variable(train)]この命令が実行されたコンテキストが所属する編成オブジェクトを取得する。こちらのエントリで言及したObjMeに相当。要するに動的なthis。
【ポイント】SetEventBranchChange [Method] [Event Handler]ビュワーメニューまたはSetPointBranch命令によってポイントが切り替わった際に、任意のメソッドをトリガするイベント設定。コレとかコレでやっている“タイマーイベントでGetPointBranchの値を監視する”って手法は、あまりスマートでないので。
【信号】SetEventSignalChange [Method] [Event Handler]SetSignal命令によって信号灯火が遷移した際に、任意のメソッドをトリガするイベント設定。ポイント位と異なり、信号遷移はスクリプトでしか起きないのでSetEventBranchChangeほどの重要性はないが、これがあれば、区間閉塞や中継信号その他を実現するために、無駄なタイマーイベントやアドオン記法を弄せずに済む。
●実装が厄介そうだけども、あれば面白くなりそうなもの先頭台車が乗っているレールの、両端の高さの差÷レール長(つまり勾配率)を取得する。GetDirectionの値と合わせて評価すれば、上ってるか下ってるかもわかる、みたいな。後述するSet/GetAccelerateと対で使う想定。
【編成】Set/GetAccelerate [Variable(float)]直接的には、トラコンモードでノッチが入っていないときの減速率を設定/取得する。ノッチに応じた加減速に影響するならなおベター。前述したGetGradientRatioと組み合わせて使うことで、下り坂で加速し、上り坂で減速するギミックを実現できる。
【編成】Set/GetTrainCameraRoll [Variable(float)]カメラの左右への傾き角を設定/取得する。値はラジアンか。取得はなくてもいいような気もするが、カントレールが使われていれば、編成が曲線を走行中か否かをスクリプトで知ることが出来る(編成先頭が振り子車かどうかも判別できるわな)というオマケが付く。何の役に立つかは別にして。
【全般】GetObjectPosition [Variable(Object)] [Variable(vector)]任意のオブジェクトの座標をベクトル変数に取得する。出来ればすべてのオブジェクトに対応して欲しいが、とりあえず編成と車両(いずれも進行方向台車座標でOK)に対応してくれれば神。あとは適当に何とかする。
●とりあえず、とっととリファレンスの記述通りに動くようにして欲しいものコイツらが放置状態な現状では、上に書いたような要望も虚しいわな。っつーか、対応する気がないならないで、中の人にはその旨を明言して欲しい。そのくらいしても罰は当たらんだろう。
と、アウトプットしておかないと忘れそうなので、チラシの裏的に書き出してみた。まぁ、実装されたところで、ボクしか使わないんだったら意味ないけど。<編成スクリプト>まぁ、普通は書かないスクリプトですが、説明の便宜上こうしておきます。要するに、メソッドMtdAを何らかの方法で実行すると、メソッドMtdBがcallされ、編成が停車する、という流れです。
BeginFunc MtdA
call this MtdB //thisのMtdBをcallする
EndFunc
BeginFunc MtdB
SetTimerVoltage 0.0 10000 //10秒かけて停車する
EndFunc
SearchPoint命令って使い道ねーじゃん
↓
いや、こんなことが出来るぞ、ゴメンよI.MAGiC!!
↓
そしたら、こんなことも出来るんじゃねーの!!
↓
あれ・・・仮組みしたけど意図通りに動かねーぞ?
↓
やっぱり駄目じゃん・・・@ ← 今ここ
=[編成>=□=(128mm)=□=(128mm)=□=(ポイント)=・・・
独り言:Caldia氏の言っているのは、たとえばC言語におけるディレクティブに当たるものになると思うんですが。
今回の事例もそうですが、せめてスクリプトで部品や変数の有無を確かめる条件式が欲しいですねぇ。それがあれば必要パッケージを持っていなかったり、編成を変えたりしても今より柔軟にスクリプトを組めると思いますけど。
(1) ほとんどのVRMユーザーは、VRMスクリプトがコンパイル型言語処理系であることについて無自覚であること。すなわち、スクリプトの字面はビュワーが起動する瞬間にのみ意味があり(thisに関する挙動が典型的)必ずしもそれぞれのスクリプト命令が実行される瞬間と一対一対応しないこと。
(2) ゆえに、階の異なる言語処理系(VRMスクリプトがビュワーの挙動を決定するのに対し、Caldia氏の言う仮称“VRMディレクティブ”はコンパイラの挙動を決定する)を、一般的なVRMユーザーが理解できるとは思えないこと。
(3) 仮に理解するユーザーがいるとして、VRMユーザーのスクリプトを書く目的は、第一に自分のVRM環境で動作することであり、他人のVRM環境での動作を保障するためにVRMディレクティブを厳密に記述する人がいるとは思えないし、仮に記述したとしても、記述した本人のVRM環境ではその記述が正しいか否か判断できないこと。
第4号の音源部品を使った作品であっても、そのメソッド/グローバル変数を外部から参照しなければ・・・つまり、音源部品が他の部品の状態をタイマーイベント等で監視して発声するようなロジックを採用すれば、第4号が欠落した環境であってもビュワー起動を阻害することはない。について無問自説。

