extern crate good_web_game as ggez;
use ggez::event;
use ggez::graphics::{self, Color, DrawParam};
use ggez::miniquad;
use ggez::{Context, GameResult};
use glam::*;
const AQUA: graphics::Color = graphics::Color::new(0.0078, 0.7647, 0.6039, 1.0);
struct MainState {
demo_mesh: graphics::Mesh,
square_mesh: graphics::Mesh,
demo_image: graphics::Image,
demo_text: graphics::Text,
demo_spritebatch: graphics::spritebatch::SpriteBatch,
}
impl MainState {
fn new(ctx: &mut Context, quad_ctx: &mut miniquad::GraphicsContext) -> GameResult<MainState> {
let demo_mesh = graphics::Mesh::new_circle(
ctx,
quad_ctx,
graphics::DrawMode::fill(),
Vec2::new(0.0, 0.0),
100.0,
2.0,
AQUA,
)?;
let square_mesh = graphics::Mesh::new_rectangle(
ctx,
quad_ctx,
graphics::DrawMode::fill(),
graphics::Rect::new(0.0, 0.0, 400.0, 400.0),
Color::WHITE,
)?;
let demo_image = graphics::Image::solid(ctx, quad_ctx, 200, AQUA)?;
let demo_text = graphics::Text::new(graphics::TextFragment {
text: "-".to_string(),
color: Some(AQUA),
font: Some(graphics::Font::default()),
scale: Some(graphics::PxScale::from(300.0)),
});
let demo_spritebatch = graphics::spritebatch::SpriteBatch::new(demo_image.clone());
let s = MainState {
demo_mesh,
square_mesh,
demo_image,
demo_text,
demo_spritebatch,
};
Ok(s)
}
}
impl event::EventHandler<ggez::GameError> for MainState {
fn update(
&mut self,
_ctx: &mut Context,
_quad_ctx: &mut miniquad::GraphicsContext,
) -> GameResult {
Ok(())
}
fn draw(&mut self, ctx: &mut Context, quad_ctx: &mut miniquad::GraphicsContext) -> GameResult {
graphics::clear(ctx, quad_ctx, AQUA);
graphics::draw(
ctx,
quad_ctx,
&self.square_mesh,
DrawParam::default().dest(Vec2::new(200.0, 100.0)),
)?;
graphics::draw(
ctx,
quad_ctx,
&self.demo_mesh,
DrawParam::default().dest(Vec2::new(150.0, 200.0)),
)?;
graphics::draw(
ctx,
quad_ctx,
&self.demo_image,
DrawParam::default().dest(Vec2::new(450.0, 200.0)),
)?;
graphics::draw(
ctx,
quad_ctx,
&self.demo_text,
DrawParam::default().dest(Vec2::new(150.0, 135.0)),
)?;
self.demo_spritebatch.add(
DrawParam::default()
.dest(Vec2::new(250.0, 350.0))
.scale(Vec2::new(0.25, 0.25)),
);
self.demo_spritebatch.add(
DrawParam::default()
.dest(Vec2::new(250.0, 425.0))
.scale(Vec2::new(0.1, 0.1)),
);
graphics::draw(
ctx,
quad_ctx,
&self.demo_spritebatch,
DrawParam::default().dest(Vec2::new(0.0, 0.0)),
)?;
self.demo_spritebatch.clear();
graphics::present(ctx, quad_ctx)?;
Ok(())
}
}
pub fn main() -> GameResult {
use std::env;
use std::path;
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")
};
ggez::start(
ggez::conf::Conf::default()
.cache(Some(include_bytes!("resources.tar")))
.physical_root_dir(Some(resource_dir)),
|mut context, quad_ctx| Box::new(MainState::new(&mut context, quad_ctx).unwrap()),
)
}