#[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 530-541)
516fn build_town_map() -> MapData<MapId, Tileset, ()> {
517 let blocks: Vec<u8> = vec![
518 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0x01, 0x01, 0x01, 0xFF,
519 0xFF, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
520 ];
521 let npcs = vec![NpcDefinition::new(
522 0,
523 2,
524 2,
525 NpcMovementType::Stationary,
526 Direction::Down,
527 0,
528 0,
529 )];
530 MapData::new(
531 MapId(0),
532 5,
533 5,
534 Tileset(0),
535 (),
536 blocks,
537 vec![],
538 npcs,
539 vec![],
540 MapConnections::default(),
541 )
542}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>where
M: RefUnwindSafe,
T: RefUnwindSafe,
Mus: RefUnwindSafe,
Vec<WarpPoint<M>>: RefUnwindSafe,
MapConnections<M>: RefUnwindSafe,
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>where
M: UnsafeUnpin,
T: UnsafeUnpin,
Mus: UnsafeUnpin,
Vec<WarpPoint<M>>: UnsafeUnpin,
MapConnections<M>: UnsafeUnpin,
impl<M, T, Mus> UnwindSafe for MapData<M, T, Mus>where
M: UnwindSafe,
T: UnwindSafe,
Mus: UnwindSafe,
Vec<WarpPoint<M>>: UnwindSafe,
MapConnections<M>: UnwindSafe,
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