use minifb::MouseButton;
use qilin::game::context::GameContext;
use qilin::game::game::Game;
use qilin::render::canvas::Canvas;
use qilin::render::color::Color;
use qilin::render::sketch::Sketch;
use qilin::scene::Scene;
use qilin::simplified::vec2;
use qilin::types::{Button, GameConfig, FPS30};
use qilin::ScaleMode;
use qilin::WindowOptions;
struct InputScene {
color: Color,
}
impl Scene for InputScene {
fn new() -> Self
where
Self: Sized,
{
Self {
color: Color::WHITE,
}
}
fn enter(&mut self) { println!("Click and hover on shapes to change color!") }
fn update(&mut self, canvas: &mut Canvas, ctx: &mut GameContext) {
let mut sketch = Sketch::new();
sketch
.circle(vec2(100, 100), 50, self.color)
.rect(vec2(200, 200), 200, 10, self.color);
if ctx.clicked_on_sketch(&sketch, Button::Mouse(MouseButton::Left)) {
self.color = Color::BLUE;
} else if ctx.hovering_on_sketch(&sketch) {
self.color = Color::RED;
} else {
self.color = Color::WHITE;
}
canvas.draw(&sketch);
}
fn fixed_update(&mut self, _canvas: &mut Canvas, _ctx: &mut GameContext) {
}
fn exit(&mut self) {}
}
fn main() {
Game::new::<InputScene>() .with_config(GameConfig {
title: "My Input".to_string(), update_rate_limit: FPS30, width: 800, height: 600, fixed_time_step: Default::default(), window: WindowOptions {
scale_mode: ScaleMode::AspectRatioStretch, resize: true, ..Default::default()
},
})
.play()
.expect("Failed to play game");
}