summaryrefslogtreecommitdiff
path: root/2026/games/asrael_io/source/src/color.rs
blob: 1db07867d72cb24e8c3a47fe7955aa2bb76f6478 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
pub type Color = u32;

#[allow(dead_code)]
pub mod db32 {
    pub const BLACK: u8 = 0;
    pub const DARK_PURPLE: u8 = 1;
    pub const MAROON: u8 = 2;
    pub const DARK_BROWN: u8 = 3;
    pub const BROWN: u8 = 4;
    pub const ORANGE: u8 = 5;
    pub const TAN: u8 = 6;
    pub const PEACH: u8 = 7;
    pub const YELLOW: u8 = 8;
    pub const LIME: u8 = 9;
    pub const GREEN: u8 = 10;
    pub const SEA_GREEN: u8 = 11;
    pub const DARK_GREEN: u8 = 12;
    pub const OLIVE: u8 = 13;
    pub const CHARCOAL: u8 = 14;
    pub const NAVY: u8 = 15;
    pub const STEEL_BLUE: u8 = 16;
    pub const INDIGO: u8 = 17;
    pub const BLUE: u8 = 18;
    pub const CYAN: u8 = 19;
    pub const PALE_BLUE: u8 = 20;
    pub const WHITE: u8 = 21;
    pub const GRAY: u8 = 22;
    pub const STONE: u8 = 23;
    pub const DIM_GRAY: u8 = 24;
    pub const SLATE: u8 = 25;
    pub const PURPLE: u8 = 26;
    pub const RED: u8 = 27;
    pub const LIGHT_RED: u8 = 28;
    pub const PINK: u8 = 29;
    pub const MOSS: u8 = 30;
    pub const KHAKI: u8 = 31;
}

const fn from_rgb(r: u8, g: u8, b: u8) -> Color {
    (r as u32) << 16 | (g as u32) << 8 | b as u32
}

#[derive(Clone, Copy)]
pub struct Palette([Color; 256]);

impl Default for Palette {
    fn default() -> Self {
        Self([0; 256])
    }
}

impl Palette {
    pub fn at(&self, index: u8) -> Color {
        self.0[index as usize]
    }

    pub fn from_ase(src: &[aseprite::Color]) -> Self {
        let mut out = [0u32; 256];

        for (dst, s) in out.iter_mut().zip(src) {
            *dst = from_rgb(s.r, s.g, s.b);
        }

        Palette(out)
    }
}