Create a Tile Map
With the tiles
feature installed and our RenderTiles2D
render pass setup, we can create a TileMap
component and add it an entity. We need to have a sprite sheet loaded before the creation so this example assume a handle to a sprite sheet exists.
extern crate amethyst;
use amethyst::{
core::{
math::{Point3, Vector3},
transform::Transform,
},
tiles::{Tile, TileMap},
};
use amethyst::{
assets::Handle,
prelude::*,
renderer::SpriteSheet,
};
#[derive(Clone, Default)]
struct SimpleTile;
impl Tile for SimpleTile {
fn sprite(&self, _coords: Point3<u32>, _: &World) -> Option<usize> {
Some(1)
}
}
pub fn load_sprite_sheet() -> Handle<SpriteSheet> {
unimplemented!();
}
#[derive(Debug)]
struct ExampleState;
impl SimpleState for ExampleState {
fn on_start(&mut self, mut data: StateData<'_, GameData<'_, '_>>) {
let world = data.world;
let sprite_sheet_handle = load_sprite_sheet();
// ...
init_map(world, sprite_sheet_handle.clone())
}
}
fn init_map(world: &mut World, sprite_sheet_handle: Handle<SpriteSheet>) {
let map = TileMap::<SimpleTile>::new(
Vector3::new(10, 10, 1), // The dimensions of the map
Vector3::new(16, 16, 1), // The dimensions of each tile
Some(sprite_sheet_handle),
);
let transform = Transform::default();
world
.create_entity()
.with(map)
.with(transform)
.build();
}
fn main() {}
The tile map component was created and added to the entity we created and thats it! Check out the tiles example in the examples directory.