123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #[macro_use] extern crate specs_derive;
- use ggez::{
- Context,
- ContextBuilder,
- GameResult,
- event::{self, EventHandler},
- };
- mod nc {
- pub use ncollide2d::bounding_volume::*;
- pub use ncollide2d::broad_phase::*;
- pub use ncollide2d::narrow_phase::*;
- }
- use specs::world::WorldExt;
- pub mod consts;
- pub mod com;
- pub mod game;
- pub mod res;
- pub mod sys;
- pub mod types;
- use game::MyGame;
- impl EventHandler for MyGame {
- fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
- sys::input::systems(self);
- sys::physics::systems(self);
- Ok(())
- }
- fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
- sys::drawing::systems(self, ctx)
- }
- fn key_down_event(
- &mut self,
- ctx: &mut Context,
- keycode: winit::VirtualKeyCode,
- _keymod: ggez::event::KeyMods,
- _repeat: bool,
- ) {
- if keycode == winit::VirtualKeyCode::Escape {
- ggez::event::quit(ctx);
- }
- self.world.write_resource::<res::KeySet>().insert(keycode);
- }
- fn key_up_event(
- &mut self,
- _ctx: &mut Context,
- keycode: winit::VirtualKeyCode,
- _keymod: ggez::event::KeyMods,
- ) {
- self.world.write_resource::<res::KeySet>().remove(&keycode);
- }
- }
- fn main() -> Result<(), ggez::error::GameError> {
- let mut world = specs::World::new();
- com::register(&mut world);
- res::world_from_file(&mut world, "assets/main.tmx");
- // Make a Context and an EventLoop.
- let (mut ctx, mut evloop) = ContextBuilder::new("game", "me")
- .add_resource_path({
- let base = std::env::var("CARGO_MANIFEST_DIR").unwrap();
- let mut path = std::path::PathBuf::from(base);
- path.push("assets");
- path
- })
- .window_mode(ggez::conf::WindowMode {
- width: consts::WINDOW_WIDTH,
- height: consts::WINDOW_HEIGHT,
- ..Default::default()
- })
- .build()?;
- let image = ggez::graphics::Image::new(&mut ctx, "/spritesheet.png")?;
- let mut sprites = ggez::graphics::spritebatch::SpriteBatch::new(image);
- sprites.set_filter(ggez::graphics::FilterMode::Nearest);
- world.insert(sprites);
- world.insert(res::KeySet::new());
- let broad_phase: types::BPhase =
- nc::DBVTBroadPhase::new(0.0f32);
- world.insert(broad_phase);
- let narrow_phase: types::NPhase =
- nc::NarrowPhase::new(
- Box::new(nc::DefaultContactDispatcher::new()),
- Box::new(nc::DefaultProximityDispatcher::new()),
- );
- world.insert(narrow_phase);
- let mut my_game = MyGame { world };
- event::run(&mut ctx, &mut evloop, &mut my_game)
- }
|