use crate::wasm4::PALETTE;
use crate::Color;
#[repr(u8)]
#[derive(Clone, Copy)]
pub enum PaletteIndex {
P1 = 0,
P2,
P3,
P4,
}
pub struct Palette([Color; 4]);
impl Palette {
pub fn new(colors: [Color; 4]) -> Self {
Self(colors)
}
pub fn set_color(&mut self, index: PaletteIndex, value: Color) {
self.0[index as usize] = value;
}
}
impl From<Palette> for [u32; 4] {
fn from(value: Palette) -> Self {
value.0.map(Into::into)
}
}
impl From<[u32; 4]> for Palette {
fn from(value: [u32; 4]) -> Self {
Palette(value.map(Into::into))
}
}
pub struct SystemPalette {
_private: (),
}
impl SystemPalette {
pub(crate) const fn new() -> Self {
Self { _private: () }
}
pub fn get(&self) -> Palette {
read_system_palette()
}
pub fn set(&self, palette: Palette) {
write_system_palette(palette)
}
}
fn read_system_palette() -> Palette {
unsafe { (*PALETTE).into() }
}
fn write_system_palette(palette: Palette) {
unsafe { *PALETTE = palette.into() }
}