基本制約
- スクリプトの長さは 最大 8192 文字です。
- ピン構成は固定です。
in1= Composite 入力、in2= Video 入力、out1= Composite 出力、out2= Video 出力。 - Composite の入出力チャンネルは 1〜32 で扱います(信号モデル を参照)。
onTick と onDraw
スクリプトはonTick() と onDraw() という2つの関数(定義してあれば呼ばれる)を中心に動作します。
onTick()
- 物理ティックごとに呼び出されます(60Hz)。引数はありません。
input.*/output.*はこの関数の中でのみ呼び出せます。screen.*はここでは呼べません。- 実行に 16ms を超えると、物理エンジンの進行が遅くなります。
onDraw()
onTick()の直後、接続されている電源オンのモニター1台につき1回呼び出されます。モニターが接続されていなければ呼ばれません。screen.*はこの関数の中でのみ呼び出せます。input.*/output.*はここでは呼べません。onTick()で読んだ値を変数に保存しておき、onDraw()で使うのが基本的な書き方です。- ゲームが一時停止している間は
onTick()/onDraw()のどちらも呼ばれません。
Composite I/O
Composite 信号のチャンネル 1〜32 に対して読み書きします。output.setNumber / output.setBool で一度書いた値は、次に上書きするまで保持されます。毎ティック 0 にリセットされるわけではありません。Property API
マイクロコントローラーのプロパティパネルに配置した Property ブロックの値を読みます。ラベルは大文字・小文字を区別します。Screen API(onDraw 内のみ)
screen.drawText のフォントサイズは固定で、1文字4×5ピクセルです。screen.getWidth() / screen.getHeight() はモニターの解像度をピクセル単位で返し、モニター1ブロックあたり32ピクセルです。
screen.setMapColorOcean / screen.setMapColorLand などのマップ描画用の色設定関数もあります(Ocean・Shallows・Land・Grass・Sand・Snow・Rock・Gravel の各要素に対応)。
Map API
HTTP API
localhost への GET リクエストを送信します。1ティックにつき1リクエストまでです。応答は httpReply(port, request, response) というコールバック関数で受け取ります。
タッチスクリーン入力
タッチスクリーン対応モニターを接続すると、Composite 入力に次のチャンネルが自動的に設定されます。タッチが離されると Bool のタッチ中フラグは
false になりますが、X・Y の座標値は最後にタッチしていた値を保持し続けます。利用可能な標準ライブラリ
math.atan は1引数・2引数のどちらの呼び出し方にも対応しますが、math.atan2 という別名の関数は存在しません。
その他の注意点
- Lua はサーバーと各クライアントで独立して実行されます。マルチプレイでは
math.random()の結果がクライアントごとに異なります。Composite の入出力は同期されますが、screen.*による描画結果はクライアントごとに異なる場合があります。 - ビークルがアンロード(デスポーン)されると、Lua のすべての変数がリセットされます。ティックをまたいで値を保持したい場合は、Memory Register ブロックなどロジック側の状態を使う必要があります。