rustraight 0.5.2

A simple 2D game library for Rust, inspired by DXLib
// テキスト描画 API の動作確認用サンプル。
// 必要アセット: 検証素材/fonts/{Mamelon-3.5-Hi-Regular.otf, YDWaosagi.otf}
//
// 確認対象: load_font / get_text_width / draw_text / draw_text_ex / set_font_file / set_font_size

use rustraight::prelude::*;

fn asset(rel: &str) -> String {
    format!("{}/検証素材/{}", env!("CARGO_MANIFEST_DIR"), rel)
}

const SAMPLE: &str = "こんにちは rustraight 0123";

fn main() {
    init(WindowConfig {
        title: String::from("09_text"),
        width: 900,
        height: 420,
        screen_width: 900,
        screen_height: 420,
        ..Default::default()
    });

    let font_a_path = asset("fonts/Mamelon-3.5-Hi-Regular.otf");
    let font_b_path = asset("fonts/YDWaosagi.otf");
    let font_a = load_font(&font_a_path, 28);
    let font_b = load_font(&font_b_path, 28);

    let width_a = get_text_width(SAMPLE, font_a);
    let width_b = get_text_width(SAMPLE, font_b);

    // 存在しないフォントパス → load_font は失敗して 0 を返すはず
    let bad_font = load_font("no_such_font.ttf", 16);

    let mut default_size = 20u32;

    while advance_frame() {
        draw_fill(MAIN_SCREEN, Color::rgb(15, 15, 20));

        draw_text(MAIN_SCREEN, 10, 6, "1: デフォルトフォントをMamelonに切替  2: YDWaosagiに切替  +/-: set_font_sizeを変更", Color::YELLOW);

        // load_font + draw_text_ex: 2種のカスタムフォントを比較
        draw_text_ex(MAIN_SCREEN, 20, 50, SAMPLE, Color::WHITE, font_a);
        draw_text(MAIN_SCREEN, 20, 90, format!("font_a (Mamelon)  get_text_width = {width_a}px"), Color::CYAN);

        draw_text_ex(MAIN_SCREEN, 20, 130, SAMPLE, Color::WHITE, font_b);
        draw_text(MAIN_SCREEN, 20, 170, format!("font_b (YDWaosagi)  get_text_width = {width_b}px"), Color::CYAN);

        // set_font_file / set_font_size: デフォルトフォント(draw_text)の切替
        if is_just_pressed(KeyCode::Digit1) { set_font_file(&font_a_path); }
        if is_just_pressed(KeyCode::Digit2) { set_font_file(&font_b_path); }
        if is_just_pressed(KeyCode::Equal) { default_size += 2; set_font_size(default_size); }
        if is_just_pressed(KeyCode::Minus) { default_size = (default_size - 2).max(8); set_font_size(default_size); }

        draw_text(MAIN_SCREEN, 20, 230, format!("draw_text (デフォルトフォント, size={default_size})"), Color::GREEN);
        draw_text(MAIN_SCREEN, 20, 260, SAMPLE, Color::WHITE);

        draw_text(MAIN_SCREEN, 20, 320, format!("load_font(存在しないパス) の戻り値: {bad_font} (0=失敗)"), Color::RED);
    }
}