#[non_exhaustive]pub struct MapData<M: MapTrait, T: TilesetTrait, Mus> {
pub id: M,
pub width: u8,
pub height: u8,
pub tileset: T,
pub music: Mus,
pub blocks: Vec<u8>,
pub warps: Vec<WarpPoint<M>>,
pub npcs: Vec<NpcDefinition>,
pub signs: Vec<Sign>,
pub connections: MapConnections<M>,
}Expand description
Complete runtime data for a loaded map.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.id: M§width: u8§height: u8§tileset: T§music: Mus§blocks: Vec<u8>Block data — the actual tile layout. Each byte is a block index into the tileset’s block definitions. Size = width * height.
warps: Vec<WarpPoint<M>>§npcs: Vec<NpcDefinition>§signs: Vec<Sign>§connections: MapConnections<M>Implementations§
Source§impl<M: MapTrait, T: TilesetTrait, Mus> MapData<M, T, Mus>
impl<M: MapTrait, T: TilesetTrait, Mus> MapData<M, T, Mus>
Sourcepub fn new(
id: M,
width: u8,
height: u8,
tileset: T,
music: Mus,
blocks: Vec<u8>,
warps: Vec<WarpPoint<M>>,
npcs: Vec<NpcDefinition>,
signs: Vec<Sign>,
connections: MapConnections<M>,
) -> Self
pub fn new( id: M, width: u8, height: u8, tileset: T, music: Mus, blocks: Vec<u8>, warps: Vec<WarpPoint<M>>, npcs: Vec<NpcDefinition>, signs: Vec<Sign>, connections: MapConnections<M>, ) -> Self
Create a new MapData with all fields.
Examples found in repository?
examples/hello_dotzuki.rs (lines 370-374)
361fn build_town_map() -> MapData<MapId, Tileset, ()> {
362 let blocks: Vec<u8> = vec![
363 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
364 0xFF, 0x01, 0x01, 0x01, 0xFF,
365 0xFF, 0x01, 0x01, 0x01, 0xFF,
366 0xFF, 0x01, 0x01, 0x01, 0xFF,
367 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
368 ];
369 let npcs = vec![NpcDefinition::new(0, 2, 2, NpcMovementType::Stationary, Direction::Down, 0, 0)];
370 MapData::new(
371 MapId(0), 5, 5, Tileset(0), (),
372 blocks, vec![], npcs, vec![],
373 MapConnections::default(),
374 )
375}Sourcepub fn set_block(&mut self, block_x: u8, block_y: u8, block_id: u8) -> bool
pub fn set_block(&mut self, block_x: u8, block_y: u8, block_id: u8) -> bool
Replace the block at BLOCK coords (block_x, block_y) with block_id.
Returns false (no-op) if the coordinates fall outside the map. The
collision and rendering systems read blocks live every frame, so the
change takes effect immediately with no cache to invalidate. The change
is transient: a map reload rebuilds blocks, so callers that need a
persistent change must re-apply it on map entry.
Trait Implementations§
Source§impl<'de, M, T, Mus> Deserialize<'de> for MapData<M, T, Mus>
impl<'de, M, T, Mus> Deserialize<'de> for MapData<M, T, Mus>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl<M, T, Mus> Freeze for MapData<M, T, Mus>
impl<M, T, Mus> RefUnwindSafe for MapData<M, T, Mus>
impl<M, T, Mus> Send for MapData<M, T, Mus>
impl<M, T, Mus> Sync for MapData<M, T, Mus>
impl<M, T, Mus> Unpin for MapData<M, T, Mus>
impl<M, T, Mus> UnsafeUnpin for MapData<M, T, Mus>
impl<M, T, Mus> UnwindSafe for MapData<M, T, Mus>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more