std は、すべての Kagari プログラムとともにコンパイルされるライブラリです。Kagari で書かれており、#[builtin] が付いたアイテムはコンパイラまたはエンジンが提供します。
設計は、ビジュアルノベルのスタジオが実際に作っているものに沿っています:名前付きスロットを持つキャラクター、ルール画像や単色を通した背景トランジション、プリセットのモーション、タイトルカード、イントロとループを持つ BGM、行に結び付いたボイス、プレイヤーが見たものから解放されるギャラリー。他のエンジンがスタジオのマクロに任せている部分を、std は型付きで検査される値として提供します。
モジュール
| モジュール | 内容 | 種別 | ページ |
|---|---|---|---|
std | String、Vec、Range、Rat、Decimal、Option、Result、Eq、Integer、RandChoose、Asset、アセット型、asset、system_font | const fn | std |
std::prelude | すべてのモジュールにインポートされる名前 | — | std::prelude |
std::time | Duration、ZERO、ms、secs | const fn | std::time |
std::narrative | Step、push_step、rng_choose、Say、Choice、Meta、Narrative とそのレコード | pushdown fn(push_step、rng_choose、Meta::write)、fn(Narrative、Meta::get/set)、const fn(meta) | std::narrative |
std::narrative::text | Text、t![…] のビルトイン、ToText、テキスト効果、TextStyle | const fn | std::narrative::text |
std::screen | Screen、エンティティ、プロパティ、レイヤー、Hud、カメラ、選択肢メニュー、座標、色 | const fn | std::screen |
std::screen::anim | Easing、Tween、Transition、Motion とプリセット | const fn | std::screen::anim |
std::screen::audio | チャンネル、ループ、サウンド、フェード | const fn | std::screen::audio |
std::stage | Character、hide_all、side_face | const fn | std::stage |
std::system | System、Settings、Setting、モード、既読・既見の集合、バインディング | fn(ハンドル、既見の集合)、const fn(コンストラクタ) | std::system |
std::system::nav | モード間の移動、物語の開始とロード | fn | std::system::nav |
std::system::saves | セーブスロットとその情報 | fn | std::system::saves |
std::ui | Element、シグナル、コンポーネント、UI フォームの展開先 | fn | std::ui |
std::ui::style | Paint、Look、ButtonStyle、SliderStyle | const fn | std::ui::style |
プレリュード
すべてのモジュールはプレリュードを暗黙にインポートします。std::prelude の名前は use なしで使えます。モジュール内で宣言した名前やインポートした名前は、プレリュードの名前より優先されます。
それ以外はパスを指定してインポートします。
use std::screen::anim::rule_with;use std::narrative::text::speed;設計規則
ライブラリのすべてのアイテムは次の規則に従います。まだ調べていないアイテムでも、何を期待できるかがわかります。
- 種別。
Screenを作る・変えるもの、すべてのアニメーション・トランジション・テキスト効果の値、すべての座標ヘルパーはconst fnです。- 実行中のゲームに対するエンジンの視点、設定とメタの読み取り、ナビゲーション、セーブ、UI は
fnです。 pushdown fnはpush_step、rng_choose、Meta::writeだけです。- タイムラインの意味を持つエンジン所有の状態は、
#[builtin]のメソッドを持つ#[builtin]型です。単純なデータ(座標、色、トゥイーン、スタイル)は、pubフィールドとconst fnのビルダーを持つ通常の構造体です。
- 単位。
- 位置と長さは、デザイン解像度
System::resolutionにおけるi32/u32のピクセルです。 - 時間は
time::Duration(ミリ秒単位の整数)です。 - 割合(アンカー、拡大率、不透明度、音量)は
Decimalで、0.5のようなリテラルで書きます。不透明度と音量の範囲は0.0..=1.0です。 - 設定の音量は
Int<0, 100>です。 - 単位付き文字列はなく、どの量にも第二の尺度はありません。
- 位置と長さは、デザイン解像度
- 隠れたデフォルトはありません。 アニメーションのコンストラクタはすべて長さを明示的に受け取ります。暗黙の値は中立的なものだけです:イージング
Linear、遅延 0、ルールのぼかし 0、繰り返し 1、恒等変換。 - 変更にはアニメーションが必要です。 目に見えるプロパティはすべて、
Prop<T>(補間され、Tweenを受け取る)かレイヤー(ImageLayer、LabelLayer、MovieLayer。Transitionで差し替える)です。補間できないレイアウト設定(set_plane、set_z、set_anchor、set_flip、set_fill_size、gate)だけが直接のセッターです。Change<T>、Swap、ChannelChangeは#[must_use]で、apply_animationのない変更は起こりません(警告W3023)。 - アニメーションは開始状態も終了状態も変えません。 ステップの論理画面とは、レンダー後の永続的な状態です:コンポーネントを持つエンティティに加え、Hud、カメラ、画面フィルター、オーディオチャンネル。スナップショット、等価性、一貫性検査が使うのはこれです。
TweenとTransitionは、常に古い値からchangeで設定した値へ進みます。Motionは相対的な経路で、恒等(オフセット 0、拡大率 1、回転 0)で終わらなければなりません。そうでなければ定数評価エラーです。- タイムライン、予約されたアニメーション、ワンショットのサウンド、選択肢メニューはそのステップだけのもので、論理画面には含まれません。
- したがって、クリック(ステップのタイムラインを完了させる)、スキップ、
animations設定のオフが論理画面を変えることはありません。
- コンポーネントの集合は固定です。 スタジオはコンポーネントを追加しません。
const fnのヘルパーと定数データでライブラリを拡張します。std::stageはそのような層の例です。 - オーバーロードや型変換なしで型検査できます。 アセット型を受け取る関数はトレイト境界を使い、補間もトレイト境界を使います。少数の特別なシグネチャ(
nav::start)は std アイテムのコンパイラ規則 に記載しています。トレイトを宣言するのはstdだけで、すべて#[builtin]です:Eq、Integer、RandChoose、Asset、Step、ToText、ShaderArg、Shader。ゲームがこれらを実装することはありません。Eqは自動で、ShaderArgは#[shader_arg]で得られます。 - 参照は共有ポインタです。
const fnとfnのコードではローカル変数に束縛できるので、レンダーはエンティティを一度名指しして、複数の文で変更できます。pushdown fnでは引数としてのみ使えます。
例:
const fn hanako_appears(mut screen: Screen) -> Screen { let hanako = screen.entity(HANAKO); hanako.image().change(HANAKO::SMILE).apply_animation(cut()); hanako.opacity().change(1.0).apply_animation(tween(ms(300))); screen}最終更新日 2026年10月29日