#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Category {
Init,
Sprites,
Shapes,
BlendMask,
Subscreen,
Keyboard,
Mouse,
Gamepad,
Sound,
Text,
Overlay,
DebugLog,
}
impl Category {
pub fn name_ja(self) -> &'static str {
match self {
Category::Init => "初期化 / ウィンドウ",
Category::Sprites => "画像・スプライト",
Category::Shapes => "図形描画",
Category::BlendMask => "ブレンド / マスク",
Category::Subscreen => "サブスクリーン",
Category::Keyboard => "入力 - キーボード",
Category::Mouse => "入力 - マウス",
Category::Gamepad => "入力 - ゲームパッド",
Category::Sound => "サウンド",
Category::Text => "テキスト",
Category::Overlay => "オーバーレイウィンドウ",
Category::DebugLog => "デバッグログ",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VerifyMethod {
Visual,
VisualInteractive,
Audio,
Log,
Auto,
}
pub struct ChecklistItem {
pub id: u32,
pub category: Category,
pub api: &'static str,
pub description: &'static str,
pub method: VerifyMethod,
}
use Category::*;
use VerifyMethod::*;
pub const CHECKLIST: &[ChecklistItem] = &[
ChecklistItem { id: 1, category: Init, api: "init(config: WindowConfig)", description: "Win32 ウィンドウ・wgpu デバイスを構築し初期化する。以降の全 API はこの呼び出し後にのみ使える", method: Visual },
ChecklistItem { id: 2, category: Init, api: "advance_frame() -> bool", description: "1フレーム進める(入力確定→GPU描画→メッセージ処理)。ウィンドウが閉じられると false", method: VisualInteractive },
ChecklistItem { id: 3, category: Init, api: "delta_time() -> f32", description: "前フレームからの経過秒数", method: Visual },
ChecklistItem { id: 4, category: Init, api: "elapsed_time() -> f64", description: "起動からの累計経過秒数", method: Visual },
ChecklistItem { id: 5, category: Init, api: "set_window_position(x: i32, y: i32)", description: "ウィンドウの画面上の位置を移動する", method: Visual },
ChecklistItem { id: 6, category: Init, api: "window_position() -> (i32, i32)", description: "ウィンドウの画面上の位置を取得する", method: Visual },
ChecklistItem { id: 7, category: Init, api: "set_window_size(w: i32, h: i32)", description: "ウィンドウのクライアント領域サイズを変更する", method: Visual },
ChecklistItem { id: 8, category: Init, api: "window_size() -> (i32, i32)", description: "ウィンドウのクライアント領域サイズを取得する", method: Visual },
ChecklistItem { id: 9, category: Init, api: "set_screen_size(w: i32, h: i32)", description: "仮想解像度(描画座標系)を変更する", method: Visual },
ChecklistItem { id: 10, category: Init, api: "screen_size() -> (i32, i32)", description: "仮想解像度を取得する", method: Visual },
ChecklistItem { id: 11, category: Init, api: "show_cursor(visible: bool)", description: "マウスカーソルの表示/非表示を切り替える", method: Visual },
ChecklistItem { id: 12, category: Init, api: "MAIN_SCREEN: u32 = 0", description: "メインウィンドウを示す描画ターゲット定数", method: Visual },
ChecklistItem { id: 13, category: Sprites, api: "load_image(path: &str) -> u32", description: "画像ファイル(WIC経由: PNG/JPEG/BMP/TIFF/GIF/WebP等)を読み込みハンドルを返す。失敗時は代替スプライト(8x8マゼンタ)を返す", method: Visual },
ChecklistItem { id: 14, category: Sprites, api: "load_div_image(path: &str, count: usize, tile_w: i32, tile_h: i32) -> Vec<u32>", description: "スプライトシートをタイル単位で分割ロードする。タイル数よりcountが多い場合は代替スプライトで埋める", method: Visual },
ChecklistItem { id: 15, category: Sprites, api: "free_image(handle: u32)", description: "指定ハンドルの画像を解放する", method: Visual },
ChecklistItem { id: 16, category: Sprites, api: "free_all_images()", description: "全画像を解放する", method: Visual },
ChecklistItem { id: 17, category: Sprites, api: "image_size(handle: u32) -> (i32, i32)", description: "スプライト/サブスクリーンのサイズを取得する(無効ハンドルは(0,0))", method: Visual },
ChecklistItem { id: 18, category: Sprites, api: "draw_image(target: u32, x: i32, y: i32, handle: u32)", description: "等倍・無回転でスプライトを描画する", method: Visual },
ChecklistItem { id: 19, category: Sprites, api: "draw_image_ex(target: u32, x: i32, y: i32, handle: u32, params: DrawImageParams)", description: "拡大縮小・回転・反転・アルファ指定つきで描画する", method: Visual },
ChecklistItem { id: 20, category: Shapes, api: "draw_fill(target: u32, color: Color)", description: "ターゲット全体を単色で塗りつぶす", method: Visual },
ChecklistItem { id: 21, category: Shapes, api: "draw_pixel(target: u32, x: i32, y: i32, color: Color)", description: "1ピクセルを描画する", method: Visual },
ChecklistItem { id: 22, category: Shapes, api: "draw_line(target: u32, x1, y1, x2, y2: i32, color: Color)", description: "直線を描画する", method: Visual },
ChecklistItem { id: 23, category: Shapes, api: "draw_rectangle(target: u32, x, y, w, h: i32, color: Color, filled: bool)", description: "矩形を描画する(塗り/枠線)", method: Visual },
ChecklistItem { id: 24, category: Shapes, api: "draw_circle(target: u32, cx, cy, radius: i32, color: Color, filled: bool)", description: "円を描画する(塗り/枠線)", method: Visual },
ChecklistItem { id: 25, category: Shapes, api: "draw_triangle(target: u32, x1,y1,x2,y2,x3,y3: i32, color: Color, filled: bool)", description: "三角形を描画する(塗り/枠線)", method: Visual },
ChecklistItem { id: 26, category: Shapes, api: "clear(target: u32)", description: "描画コマンドキューをクリアする", method: Visual },
ChecklistItem { id: 27, category: Shapes, api: "Color::rgb(r, g, b) -> Color", description: "不透明色を作る(a=255)", method: Auto },
ChecklistItem { id: 28, category: Shapes, api: "Color::rgba(r, g, b, a) -> Color", description: "アルファ指定で色を作る", method: Auto },
ChecklistItem { id: 29, category: Shapes, api: "Color::WHITE/BLACK/RED/GREEN/BLUE/YELLOW/CYAN/MAGENTA", description: "定義済み定数", method: Auto },
ChecklistItem { id: 30, category: BlendMask, api: "set_blend(blend: BlendMode)", description: "以後のdraw_image/draw_image_exの合成モードを設定する", method: Visual },
ChecklistItem { id: 31, category: BlendMask, api: "set_mask(x: i32, y: i32, handle: u32)", description: "以後の画像描画にマスク(アルファ形状マスク)を適用する", method: Visual },
ChecklistItem { id: 32, category: BlendMask, api: "reset_mask()", description: "マスクを解除する", method: Visual },
ChecklistItem { id: 33, category: Subscreen, api: "create_screen(w: i32, h: i32) -> u32", description: "オフスクリーンのレンダーターゲットを作成し、スプライトとしても使える画像ハンドルを返す", method: Visual },
ChecklistItem { id: 34, category: Keyboard, api: "is_pressed(key: KeyCode) -> bool", description: "指定キーが押されている間true", method: VisualInteractive },
ChecklistItem { id: 35, category: Keyboard, api: "is_just_pressed(key: KeyCode) -> bool", description: "押した瞬間だけtrue", method: VisualInteractive },
ChecklistItem { id: 36, category: Keyboard, api: "is_released(key: KeyCode) -> bool", description: "離した瞬間だけtrue", method: VisualInteractive },
ChecklistItem { id: 37, category: Mouse, api: "mouse_position() -> (i32, i32)", description: "現在のカーソル座標(仮想スクリーン座標)", method: Visual },
ChecklistItem { id: 38, category: Mouse, api: "mouse_delta() -> (i32, i32)", description: "前フレームからの移動量", method: VisualInteractive },
ChecklistItem { id: 39, category: Mouse, api: "is_mouse_pressed(btn: MouseButton) -> bool", description: "押している間true", method: VisualInteractive },
ChecklistItem { id: 40, category: Mouse, api: "is_mouse_just_pressed(btn: MouseButton) -> bool", description: "押した瞬間だけtrue", method: VisualInteractive },
ChecklistItem { id: 41, category: Mouse, api: "is_mouse_released(btn: MouseButton) -> bool", description: "離した瞬間だけtrue", method: VisualInteractive },
ChecklistItem { id: 42, category: Mouse, api: "mouse_wheel() -> i32", description: "ホイール回転量(上=正、1ノッチ=120)", method: VisualInteractive },
ChecklistItem { id: 43, category: Gamepad, api: "is_pad_pressed(pad_id: usize, btn: PadButton) -> bool", description: "押している間true(実機コントローラー必須)", method: VisualInteractive },
ChecklistItem { id: 44, category: Gamepad, api: "is_pad_just_pressed(pad_id: usize, btn: PadButton) -> bool", description: "押した瞬間だけtrue", method: VisualInteractive },
ChecklistItem { id: 45, category: Gamepad, api: "is_pad_released(pad_id: usize, btn: PadButton) -> bool", description: "離した瞬間だけtrue", method: VisualInteractive },
ChecklistItem { id: 46, category: Gamepad, api: "pad_axis(pad_id: usize, axis: PadAxis) -> f32", description: "指定軸の値(-1.0〜1.0)", method: VisualInteractive },
ChecklistItem { id: 47, category: Gamepad, api: "is_pad_connected(pad_id: usize) -> bool", description: "接続中かどうか", method: Visual },
ChecklistItem { id: 48, category: Gamepad, api: "pad_count() -> usize", description: "接続中のコントローラー数", method: Visual },
ChecklistItem { id: 49, category: Sound, api: "load_sound(path: &str) -> u32", description: "WAV(PCM 8/16-bit)またはOGG Vorbisを読み込む。失敗時は0", method: Audio },
ChecklistItem { id: 50, category: Sound, api: "play_sound(handle: u32, looping: bool)", description: "再生する(looping=trueでループ)。再生中に呼ぶと最初から再生し直す", method: Audio },
ChecklistItem { id: 51, category: Sound, api: "stop_sound(handle: u32)", description: "再生を停止する", method: Audio },
ChecklistItem { id: 52, category: Sound, api: "set_volume(handle: u32, volume: f32)", description: "音量を設定する(0.0〜1.0)", method: Audio },
ChecklistItem { id: 53, category: Sound, api: "free_sound(handle: u32)", description: "音声データを解放する(再生中なら停止してから)", method: Audio },
ChecklistItem { id: 54, category: Sound, api: "free_all_sounds()", description: "全音声を解放する", method: Audio },
ChecklistItem { id: 55, category: Text, api: "load_font(path: &str, size: u32) -> u32", description: "TTF/OTF/TTCフォントを読み込む。失敗時は0", method: Auto },
ChecklistItem { id: 56, category: Text, api: "get_text_width(text: &str, font_id: u32) -> i32", description: "描画時の幅(ピクセル)を返す", method: Auto },
ChecklistItem { id: 57, category: Text, api: "draw_text(target: u32, x: i32, y: i32, text: impl AsRef<str>, color: Color)", description: "デフォルトフォントで描画する", method: Visual },
ChecklistItem { id: 58, category: Text, api: "draw_text_ex(target: u32, x: i32, y: i32, text: impl AsRef<str>, color: Color, font: u32)", description: "指定フォントで描画する", method: Visual },
ChecklistItem { id: 59, category: Text, api: "set_font_file(path: &str)", description: "デフォルトフォントファイルを変更する(次回描画時に再ロード)", method: Visual },
ChecklistItem { id: 60, category: Text, api: "set_font_size(size: u32)", description: "デフォルトフォントサイズを変更する(次回描画時に再ロード)", method: Visual },
ChecklistItem { id: 61, category: Overlay, api: "overlay_visible(visible: bool)", description: "オーバーレイの表示/非表示を切り替える", method: Visual },
ChecklistItem { id: 62, category: Overlay, api: "overlay_draw_image(x: i32, y: i32, handle: u32)", description: "スプライトをオーバーレイに描画する", method: Visual },
ChecklistItem { id: 63, category: Overlay, api: "overlay_draw_image_ex(x, y: i32, handle: u32, params: DrawImageParams)", description: "拡張パラメータ付きで描画する", method: Visual },
ChecklistItem { id: 64, category: Overlay, api: "overlay_draw_text(x, y: i32, text: impl AsRef<str>, color: Color)", description: "テキストをオーバーレイに描画する", method: Visual },
ChecklistItem { id: 65, category: Overlay, api: "overlay_blend_set(blend: BlendMode)", description: "オーバーレイのブレンドモードを設定する", method: Visual },
ChecklistItem { id: 66, category: Overlay, api: "overlay_clear()", description: "オーバーレイの描画キューをクリアする", method: Visual },
ChecklistItem { id: 67, category: DebugLog, api: "log_info!(...)", description: "[情報]接頭辞で出力", method: Log },
ChecklistItem { id: 68, category: DebugLog, api: "log_warn!(...)", description: "[警告]接頭辞で出力", method: Log },
ChecklistItem { id: 69, category: DebugLog, api: "log_error!(...)", description: "[エラー]接頭辞で出力", method: Log },
];
pub const RUN_ORDER: &[Category] = &[
Init, Shapes, Sprites, BlendMask, Subscreen,
Keyboard, Mouse, Gamepad,
Text, Sound,
Overlay, DebugLog,
];
pub fn manual_items_for(cat: Category) -> Vec<&'static ChecklistItem> {
CHECKLIST.iter().filter(|i| i.category == cat && i.method != VerifyMethod::Auto).collect()
}
pub fn manual_total() -> usize {
CHECKLIST.iter().filter(|i| i.method != VerifyMethod::Auto).count()
}