use ggez::{event, graphics, Context, GameResult};
use std::{env, path};
struct MainState {
frames: usize,
}
impl MainState {
fn new(ctx: &mut Context) -> GameResult<MainState> {
ctx.gfx.add_font(
"LiberationMono",
graphics::FontData::from_path(ctx, "/LiberationMono-Regular.ttf")?,
);
let s = MainState { frames: 0 };
Ok(s)
}
}
impl event::EventHandler<ggez::GameError> for MainState {
fn update(&mut self, _ctx: &mut Context) -> GameResult {
Ok(())
}
fn draw(&mut self, ctx: &mut Context) -> GameResult {
let mut canvas = graphics::Canvas::from_frame(
ctx,
graphics::CanvasLoadOp::Clear([0.1, 0.2, 0.3, 1.0].into()),
);
let offset = self.frames as f32 / 10.0;
let dest_point = ggez::glam::Vec2::new(offset, offset);
canvas.draw(
graphics::Text::new("Hello, world!")
.set_font("LiberationMono")
.set_scale(48.),
dest_point,
);
canvas.finish(ctx)?;
self.frames += 1;
if (self.frames % 100) == 0 {
println!("FPS: {}", ctx.time.fps());
}
Ok(())
}
}
pub fn main() -> GameResult {
let resource_dir = if let Ok(manifest_dir) = env::var("CARGO_MANIFEST_DIR") {
let mut path = path::PathBuf::from(manifest_dir);
path.push("resources");
path
} else {
path::PathBuf::from("./resources")
};
let cb = ggez::ContextBuilder::new("helloworld", "ggez").add_resource_path(resource_dir);
let (mut ctx, event_loop) = cb.build()?;
let state = MainState::new(&mut ctx)?;
event::run(ctx, event_loop, state)
}