コンテンツにスキップ

パネル UI (NpUi)

NpUi はパネルの内容を記述する小さなビルダーです。プラグインは行の一覧を書くだけで、エディターが内蔵パネルと同じ見た目のコントロールで描画します。Godot を知る必要はありません。

NpUi を使う場所は 2 つです。

登録ポイント項目表示される場所
AddContentTabBuild下部エリアのパネル (ウィンドウメニューから開く)
AddModePanelそのモードのときのツールパネル

すべてのメソッドは同じ NpUi を返します。そのため . でつなげて書きます。行は書いた順に上から下へ並びます。

メソッド描画されるもの変更時
Title(string text)太字のグループ見出し—
Label(string text)文字列 1 行 (折り返しあり)—
Label(Func<string> text)ライブテキスト。表示中は 0.5 秒ごとに読み直す—
Button(string text, Action click, string tooltip = "")ボタン押すと click
Text(string label, string initial, Action<string> changed)名前 + テキスト欄文字を入力するたびに changed
Number(string label, double initial, double min, double max, double step, Action<double> changed)名前 + 数値欄 (上下ボタン)値が変わるたびに changed
Check(string label, bool initial, Action<bool> changed)チェックボックスオン・オフのときに changed
Separator()横の区切り線—

Label(() => …) は、パネルが表示されている間 0.5 秒ごとに関数を呼び直して文字列を更新します。

  • パネルが再表示されたときと、ボタンを押した直後にもすぐ読み直します。
  • 関数は 0.5 秒ごとに呼ばれます。軽い処理にしてください。ワールド全体をスキャンする計算 (Bounds ・ Blocks()) は入れないでください。
  • CountBlocks() のような軽い値や、自分のフィールドに保持しておいた値を表示します。
  • 関数で例外が発生すると、そのプラグインは隔離されます。
登録ポイントいつ作成されるか
AddContentTab の Buildプラグインを有効にするときに 1 回
AddMode の Panelそのモードのパネルが初めて表示されるときに 1 回

一度作成したパネルは作り直しません。そのため Number ・ Text ・ Check の initial は作成した瞬間の値です。後から変わる値は Label(() => …) で表示します。保存済みの設定を欄の初期値として使うには、Register の冒頭で先に Settings を読み込みます。

private int _width = 3;
private bool _lamps = true;
private int _built;
public void Register(INpEditorHost host)
{
_width = host.Settings.GetInt("width", 3); // 先に読み込まないと欄の初期値が合わない
_lamps = host.Settings.GetBool("lamps", true);
host.AddContentTab(new NpContentTab("panel", "도로", () => new NpUi()
.Title("도로 만들기")
.Number("폭", _width, 1, 9, 1, v => { _width = (int)v; host.Settings.SetInt("width", _width); })
.Check("가로등", _lamps, v => { _lamps = v; host.Settings.SetBool("lamps", v); })
.Label(() => $"깐 도로 {_built}개 · 월드 블록 {host.World.CountBlocks():N0}")
.Separator()
.Button("선택 영역에 깔기", () =>
{
if (host.World.Selection is not { } b) { host.Message("먼저 영역을 고르세요"); return; }
_built++;
// … World.Edit で敷く …
}, "선택 상자 바닥에 도로를 깝니다")));
}

パネルを表示するには、ウィンドウメニューで「도로」(道路) をオンにします。

  • 画面の文字列に絵文字・絵文字記号を入れないでください。パネルタイトル (Label 項目) の絵文字記号は画面から取り除かれます。
  • コールバック (click ・ changed) はエディターのメインスレッドで呼ばれます。ここで World.Edit を呼び出してもかまいません。
  • コールバックで例外が発生すると、そのプラグインは隔離されます。プラグインがアンロードされると、パネルも消えます。
  • アイコンボタン・折りたたみグループ・リスト・カラーピッカーはまだありません。
  • エディターの翻訳表にない文字列は翻訳されず、そのまま表示されます。複数言語が必要な場合は、プラグインが自分で選択します。