use rustraight::prelude::*;
fn asset(rel: &str) -> String {
format!("{}/検証素材/{}", env!("CARGO_MANIFEST_DIR"), rel)
}
fn main() {
init(WindowConfig {
title: String::from("04_blend_mask"),
width: 800,
height: 500,
screen_width: 800,
screen_height: 500,
..Default::default()
});
let sprite = load_image(&asset("images/sprite.png"));
let mask = load_image(&asset("images/mask.png"));
while advance_frame() {
draw_fill(MAIN_SCREEN, Color::rgb(15, 15, 20));
let mut x = 0;
while x < 800 {
draw_rectangle(MAIN_SCREEN, x, 40, 10, 160, Color::rgb(60, 60, 90), true);
x += 20;
}
let labels = [("Normal", BlendMode::Normal), ("Add", BlendMode::Add), ("Mul", BlendMode::Mul)];
for (i, (name, mode)) in labels.iter().enumerate() {
let x = 40 + i as i32 * 200;
set_blend(*mode);
draw_image(MAIN_SCREEN, x, 40, sprite);
draw_text(MAIN_SCREEN, x, 210, format!("set_blend({name})"), Color::WHITE);
}
set_blend(BlendMode::Normal);
draw_text(MAIN_SCREEN, 10, 250, "上段: 同じ縞模様の上に3種のブレンドモードでスプライトを重ねた結果", Color::YELLOW);
draw_image(MAIN_SCREEN, 40, 300, sprite);
draw_text(MAIN_SCREEN, 40, 370, "マスク無し", Color::WHITE);
set_mask(240, 300, mask); draw_image(MAIN_SCREEN, 240, 300, sprite);
reset_mask();
draw_text(MAIN_SCREEN, 240, 370, "set_mask 適用 (mask.pngの形状でクリップ)", Color::WHITE);
set_mask(470, 320, mask); draw_image(MAIN_SCREEN, 440, 300, sprite);
reset_mask();
draw_text(MAIN_SCREEN, 440, 370, "マスクをずらした場合(一部だけ見えるはず)", Color::WHITE);
}
}