Dynamic tile can also return the setting directly

This commit is contained in:
Gwilym Inzani 2023-08-30 16:14:51 +01:00
parent 5cfa64030a
commit 6853d36a9c
6 changed files with 17 additions and 17 deletions

View file

@ -3,7 +3,7 @@
use agb::display::{ use agb::display::{
palette16::Palette16, palette16::Palette16,
tiled::{RegularBackgroundSize, TileFormat, TileSetting, TiledMap}, tiled::{RegularBackgroundSize, TileFormat, TiledMap},
Priority, Priority,
}; };
@ -42,7 +42,7 @@ fn main(mut gba: agb::Gba) -> ! {
&mut vram, &mut vram,
(x as u16, y as u16).into(), (x as u16, y as u16).into(),
&dynamic_tile.tile_set(), &dynamic_tile.tile_set(),
TileSetting::from_raw(dynamic_tile.tile_index()), dynamic_tile.tile_setting(),
); );
vram.remove_dynamic_tile(dynamic_tile); vram.remove_dynamic_tile(dynamic_tile);

View file

@ -3,9 +3,7 @@
use agb::{ use agb::{
display::{ display::{
tiled::{ tiled::{RegularBackgroundSize, RegularMap, TileFormat, TiledMap, VRamManager},
RegularBackgroundSize, RegularMap, TileFormat, TileSetting, TiledMap, VRamManager,
},
Font, Priority, Font, Priority,
}, },
include_font, include_wav, include_font, include_wav,
@ -110,7 +108,7 @@ fn init_background(bg: &mut RegularMap, vram: &mut VRamManager) {
vram, vram,
(x, y).into(), (x, y).into(),
&background_tile.tile_set(), &background_tile.tile_set(),
TileSetting::from_raw(background_tile.tile_index()), background_tile.tile_setting(),
); );
} }
} }

View file

@ -3,9 +3,7 @@
use agb::{ use agb::{
display::{ display::{
tiled::{ tiled::{RegularBackgroundSize, RegularMap, TileFormat, TiledMap, VRamManager},
RegularBackgroundSize, RegularMap, TileFormat, TileSetting, TiledMap, VRamManager,
},
Font, Priority, Font, Priority,
}, },
include_font, include_wav, include_font, include_wav,
@ -98,7 +96,7 @@ fn init_background(bg: &mut RegularMap, vram: &mut VRamManager) {
vram, vram,
(x, y).into(), (x, y).into(),
&background_tile.tile_set(), &background_tile.tile_set(),
TileSetting::from_raw(background_tile.tile_index()), background_tile.tile_setting(),
); );
} }
} }

View file

@ -3,7 +3,7 @@
use agb::{ use agb::{
display::{ display::{
tiled::{RegularBackgroundSize, TileFormat, TileSetting, TiledMap}, tiled::{RegularBackgroundSize, TileFormat, TiledMap},
Font, Priority, Font, Priority,
}, },
include_font, include_font,
@ -37,7 +37,7 @@ fn main(mut gba: agb::Gba) -> ! {
&mut vram, &mut vram,
(x, y).into(), (x, y).into(),
&background_tile.tile_set(), &background_tile.tile_set(),
TileSetting::from_raw(background_tile.tile_index()), background_tile.tile_setting(),
); );
} }
} }

View file

@ -3,7 +3,7 @@ use core::fmt::{Error, Write};
use crate::fixnum::Vector2D; use crate::fixnum::Vector2D;
use crate::hash_map::HashMap; use crate::hash_map::HashMap;
use super::tiled::{DynamicTile, RegularMap, TileSetting, VRamManager}; use super::tiled::{DynamicTile, RegularMap, VRamManager};
/// The text renderer renders a variable width fixed size /// The text renderer renders a variable width fixed size
/// bitmap font using dynamic tiles as a rendering surface. /// bitmap font using dynamic tiles as a rendering surface.
@ -230,7 +230,7 @@ impl<'a, 'b> TextRenderer<'b> {
vram_manager, vram_manager,
(self.tile_pos.x + *x as u16, self.tile_pos.y + *y as u16).into(), (self.tile_pos.x + *x as u16, self.tile_pos.y + *y as u16).into(),
&tile.tile_set(), &tile.tile_set(),
TileSetting::from_raw(tile.tile_index()), tile.tile_setting(),
); );
} }
} }
@ -294,7 +294,7 @@ mod tests {
&mut vram, &mut vram,
(x, y).into(), (x, y).into(),
&background_tile.tile_set(), &background_tile.tile_set(),
TileSetting::from_raw(background_tile.tile_index()), background_tile.tile_setting(),
); );
} }
} }

View file

@ -10,6 +10,8 @@ use crate::{
memory_mapped::MemoryMapped1DArray, memory_mapped::MemoryMapped1DArray,
}; };
use super::TileSetting;
const TILE_RAM_START: usize = 0x0600_0000; const TILE_RAM_START: usize = 0x0600_0000;
const PALETTE_BACKGROUND: MemoryMapped1DArray<u16, 256> = const PALETTE_BACKGROUND: MemoryMapped1DArray<u16, 256> =
@ -189,9 +191,11 @@ impl DynamicTile<'_> {
} }
#[must_use] #[must_use]
pub fn tile_index(&self) -> u16 { pub fn tile_setting(&self) -> TileSetting {
let difference = self.tile_data.as_ptr() as usize - TILE_RAM_START; let difference = self.tile_data.as_ptr() as usize - TILE_RAM_START;
(difference / TileFormat::FourBpp.tile_size()) as u16 let tile_id = (difference / TileFormat::FourBpp.tile_size()) as u16;
TileSetting::new(tile_id, false, false, 0)
} }
} }