use bevy::math::Vec3; use bevy::prelude::*; use gems::constants; enum Occupant { None, Green, } struct Cell { x: u8, y: u8, occupant: Occupant, } impl Cell { pub fn new(x: u8, y: u8) -> Cell { Cell { x, y, occupant: Occupant::None, } } } pub fn setup( commands: &mut Commands, asset_server: Res, mut materials: ResMut>, mut texture_atlases: ResMut>, ) { let background = asset_server.load("background.png"); let tileset = asset_server.load("tileset.png"); let atlas = TextureAtlas::from_grid(tileset, Vec2::new(16.0, 16.0), 4, 4); let atlas_handle = texture_atlases.add(atlas); commands .spawn(Camera2dBundle::default()) .spawn(SpriteBundle { material: materials.add(background.into()), transform: Transform { translation: Vec3 { x: 50.0, y: 0.0, z: 0.0, }, scale: Vec3::splat(3.5), ..Default::default() }, ..Default::default() }) .spawn(SpriteSheetBundle { sprite: TextureAtlasSprite::new(8), texture_atlas: atlas_handle.clone(), transform: Transform { translation: Vec3 { x: 225.0, y: -200.0, z: 0.0, }, scale: Vec3::splat(3.5), ..Default::default() }, ..Default::default() }) .spawn(SpriteSheetBundle { sprite: TextureAtlasSprite::new(12), texture_atlas: atlas_handle.clone(), transform: Transform { translation: Vec3 { x: 225.0, y: -200.0 + (-16.0) * 3.5, z: 0.0, }, scale: Vec3::splat(3.5), ..Default::default() }, ..Default::default() }); for i in 0..8 { for j in 0..8 { commands.spawn(SpriteSheetBundle { sprite: TextureAtlasSprite::new(1), texture_atlas: atlas_handle.clone(), transform: Transform { translation: Vec3 { x: ((i as f32) * 16.0 * 3.5) - 320.0, y: ((j as f32) * 16.0 * 3.5) - 170.0, z: 0.0, }, scale: Vec3::splat(3.5), ..Default::default() }, ..Default::default() }); } } } pub struct GemsPlugin; impl Plugin for GemsPlugin { fn build(&self, app: &mut AppBuilder) { app.add_startup_system(setup.system()); } } pub fn main() { App::build() .add_resource(WindowDescriptor { title: "gems".to_string(), width: 800.0, height: 600.0, resizable: false, ..Default::default() }) .add_plugins(DefaultPlugins) .add_plugin(GemsPlugin) .run(); }