Skip to main content
Design は、描画モニターを GUI で組み立てる機能です。 Lua が書けなくてもモニターを作れます。拡張子は .design です。 生成された Lua はそのまま minify してゲームへ貼れるほか、 Storm Code 内から require して描画関数を呼ぶこともできます。
Design は、以前 Storm Sketch という単体のツールだったものを Storm Code に統合したものです。 単体版は廃止されました。

3つの概念

モニター

描画面そのもの。解像度、背景色、描画順を持ちます。

パーツ

再利用できるアイテムの束。引数を取れます。

アイテム

矩形・円・三角形・線・テキスト、そしてパーツの配置。
**パーツは「定義」、その配置は「アイテム」**です。 同じパーツを何箇所に置いても定義は1つで、座標・引数・表示条件は配置ごとに独立します。 パーツの中にパーツを置くこともできます (循環参照は配置時に拒否されます)。

最初はモニター1枚だけ

新しい Design を作ると、モニター1枚のキャンバスだけが開きます。 パーツという概念はこの時点では出てきません。 複数のアイテムを選んで「パーツにまとめる」を実行したときに、初めてパーツが作られ、 選択していたアイテムがその配置に置き換わります。 逆向きの操作もあります。配置を選んで「アイテムに展開 (Detach)」すると、 パーツ定義は残したまま、その配置だけを素のアイテム群へ戻せます。

画面

パーツを編集するときは、画面全体が切り替わるのではなく、 モニター上の文脈を保ったままそのパーツの中に入ります。 周りとの位置関係を見ながら中身を直せます。 パーツの配置を選んでいるとき、インスペクタは 「この配置 (座標・引数・表示条件)」と「参照先のパーツ (定義・使用箇所・全体への反映)」を分けて表示します。 どちらを触っているのかが分かるようにするためです。

動的な値

アイテムの各プロパティには、固定値のほかに Lua 式や Sim I/O の入力 (in1b1 など) を割り当てられます。インスペクタ上で切り替えます。 パーツの引数 (params) は number または bool で、それぞれプレビュー用の式を持ちます。 プレビュー実行のときはこの式が使われ、実行時は呼び出し側から渡された値が使われます。

生成される Lua

Design は3層の Lua を生成します。本物の onTick / onDraw は一番上の層にしかありません。
必要な層だけを require できます。 モニター全体をそのまま使うなら一番上を、描画関数だけ自分のコードから呼びたいなら下の層を require します。使わなかった上の層は結合時に取り除かれます。 生成された Lua は読み取り専用です。Design が正本で、生成物は派生物だからです。 Explorer では Design ノードの下に鍵アイコン付きの仮想ノードとして並び、開くと ヘッダーに require("<キー>") のバッジが付いたタブが開きます。
Design が生成する仮想モジュールのキー (ui.pfdui.pfd.view.<key> など) は、 実ファイルと衝突できません。ファイルや Design の作成・名前変更、パーツのキー変更のいずれでも、 衝突する操作は拒否されます。

プレビュー

Design を編集すると、少し間を置いて自動で再コンパイルされ、プレビューが更新されます。 コンパイルに成功したときだけ差し替わります。 編集の途中で一時的に壊れた状態になっても、プレビューが真っ黒になることはありません。 プレビューは通常の実行とは独立した専用の実行単位で動くため、 メインの実行を止めずに確認できます。

スニペット

よく使うパーツやアイテムの組み合わせはスニペットとして登録できます。 スニペットはワークスペース全体で共有され、.scode/snippets.json に保存されるので、 zip のエクスポート・インポートにも自動的に含まれます。

履歴

Design の履歴もファイル履歴に記録されます。 記録されるのは Design 全体の内容で、復元は1回の操作でまとめて行われます。
旧バージョンの Design は新バージョンでは読めません。自動変換もしません。 旧バージョンからの移行については旧バージョンのデータを救出するを参照してください。