ベルトコンベア2

ベルトコンベアを改良してスイッチでオン・オフを操作できるようにしてみます。

ターゲット設定

目印になるスイッチを作り、例によって遠隔操作ドアでやったように func_invisible_user と target_script_trigger で
スクリプトを駆動できるようにしてみます。

sw01s.jpg

func_invisible_userの設定

delay 1 target t1 cursorhint HINT_BUTTON

delay 1 は、最低1秒経たないと再操作できないようにするためで、Fキー連打されたときの不具合対策です。

target_script_trigger

targetname t1 scriptname game_manager target toggle_switch

game_manager スクリプトの toggle_switch という関数を呼び出すことにします。

スクリプト

スクリプトはちょっと長くなりました。。。

game_manager { spawn { ・・・ accum 3 set 0 // コンベア動作フラグ(0:停止状態、1:動作状態) }   ・・・ trigger toggle_switch { accum 3 inc 1 trigger self convey_start trigger self convey_stop } trigger convey_start // 停止中なら動作させる { accum 3 abort_if_equal 2 trigger convey move } trigger convey_stop // 動作中なら停止させる { accum 3 abort_if_less_than 2 trigger convey stop accum 3 set 0 } }

convey { trigger move //コンベア動作 { gotomarker end_corner 30 wait setposition start_corner trigger self move } trigger stop //コンベア停止 { halt } }

accum は変数(レジスタ)の操作をする命令です。
スクリプト毎に0番〜9番のローカル変数が用意されていて、それに対して代入・演算・判定などができます。
この変数はクラススコープです、といえばわかる人ならわかるでしょう。
これに対して globalaccum という変数も用意されていて、どのスクリプトからも参照できるグローバル変数の役割をします。

今回は game_manager のローカル変数3番に、コンベアの状態を保存することにしました。
0だったらコンベアは停止状態、1だったらコンベアは動いている状態、と。
なぜ3番変数を使うかというと、1番と2番は OBJ の公式スクリプトの中で既に使われているからです。

このスクリプトの概要を説明します。
プレイヤーがFキーを押してトリガーが作動し、game_manager スクリプトの toggle_switch 関数が呼ばれると
3番変数の値が1増えます。0だったら1に、1だったら2に。
そして、1になった場合にはコンベアを動作状態に変え、2になった場合にはコンベアを停止させて
変数の値を0に戻します。

スイッチの動作とかサウンドとか。。。

コンベアのオン・オフの動作がうまくいくようになったら、スイッチの動作やコンベアの動作音のオン・オフなどにも凝ると面白くなるでしょう。

説明が面倒くさいので 以下のサンプルを見てみて下さい。

ex-conveyor2.map (リンク切れ)
ex-conveyor2.script (リンク切れ)
ex-conveyor2_tdm.script (リンク切れ)

fig-ex-conveyor2s.jpg

カチッ グォングォングォン