use bevy::prelude::*;
use bevy_ecs_tilemap::prelude::*;
mod helpers;
const QUADRANT_SIDE_LENGTH: u32 = 64;
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(Camera2d);
let texture_handle: Handle<Image> = asset_server.load("tiles.png");
let map_size = TilemapSize {
x: QUADRANT_SIDE_LENGTH * 2,
y: QUADRANT_SIDE_LENGTH * 2,
};
let quadrant_size = TilemapSize {
x: QUADRANT_SIDE_LENGTH,
y: QUADRANT_SIDE_LENGTH,
};
let mut tile_storage = TileStorage::empty(map_size);
let tilemap_entity = commands.spawn_empty().id();
let tilemap_id = TilemapId(tilemap_entity);
fill_tilemap_rect_color(
TileTextureIndex(5),
TilePos { x: 0, y: 0 },
quadrant_size,
Color::srgba(1.0, 0.0, 0.0, 1.0),
tilemap_id,
&mut commands,
&mut tile_storage,
);
fill_tilemap_rect_color(
TileTextureIndex(5),
TilePos {
x: QUADRANT_SIDE_LENGTH,
y: 0,
},
quadrant_size,
Color::srgba(0.0, 1.0, 0.0, 1.0),
tilemap_id,
&mut commands,
&mut tile_storage,
);
fill_tilemap_rect_color(
TileTextureIndex(5),
TilePos {
x: 0,
y: QUADRANT_SIDE_LENGTH,
},
quadrant_size,
Color::srgba(0.0, 0.0, 1.0, 1.0),
tilemap_id,
&mut commands,
&mut tile_storage,
);
fill_tilemap_rect_color(
TileTextureIndex(5),
TilePos {
x: QUADRANT_SIDE_LENGTH,
y: QUADRANT_SIDE_LENGTH,
},
quadrant_size,
Color::srgba(1.0, 1.0, 0.0, 1.0),
tilemap_id,
&mut commands,
&mut tile_storage,
);
let tile_size = TilemapTileSize { x: 16.0, y: 16.0 };
let grid_size = tile_size.into();
commands.entity(tilemap_entity).insert(TilemapBundle {
grid_size,
size: map_size,
storage: tile_storage,
texture: TilemapTexture::Single(texture_handle),
tile_size,
map_type: TilemapType::Square,
anchor: TilemapAnchor::Center,
..Default::default()
});
}
fn main() {
App::new()
.add_plugins(
DefaultPlugins
.set(WindowPlugin {
primary_window: Some(Window {
title: String::from("Color Example"),
..Default::default()
}),
..default()
})
.set(ImagePlugin::default_nearest()),
)
.add_plugins(TilemapPlugin)
.add_systems(Startup, startup)
.add_systems(Update, helpers::camera::movement)
.run();
}