Implement world viewer with support for OBJ worlds

This commit is contained in:
2025-02-16 15:55:21 -05:00
parent f7cf960b62
commit cfc08032e6
11 changed files with 497 additions and 60 deletions
+19 -14
View File
@@ -10,24 +10,29 @@ pub fn generic_palette(color: Color32) -> [Color32; 4] {
GENERIC_PALETTE.map(|brt| shade(brt, color))
}
pub fn parse_palette(palette: u8, brts: &[u8; 8], color: Color32) -> [Color32; 4] {
let shades = [
Color32::BLACK,
shade(brts[0], color),
shade(brts[2], color),
shade(
brts[0].saturating_add(brts[2]).saturating_add(brts[4]),
color,
),
];
pub const fn parse_palette(palette: u8) -> [u8; 4] {
[
Color32::BLACK,
shades[(palette >> 2) as usize & 0x03],
shades[(palette >> 4) as usize & 0x03],
shades[(palette >> 6) as usize & 0x03],
0,
(palette >> 2) & 0x03,
(palette >> 4) & 0x03,
(palette >> 6) & 0x03,
]
}
pub const fn parse_shades(brts: &[u8; 8]) -> [u8; 4] {
[
0,
brts[0],
brts[2],
brts[0].saturating_add(brts[2]).saturating_add(brts[4]),
]
}
pub fn palette_colors(palette: u8, brts: &[u8; 8], color: Color32) -> [Color32; 4] {
let colors = parse_shades(brts).map(|s| shade(s, color));
parse_palette(palette).map(|p| colors[p as usize])
}
pub struct Object {
pub x: i16,
pub lon: bool,