gba-sprite-engine/engine/include/engine/palette/palette_manager.h

79 lines
2.1 KiB
C
Raw Normal View History

2018-08-01 16:03:16 +02:00
//
// Created by Wouter Groeneveld on 27/07/18.
//
#ifndef GBA_SPRITE_ENGINE_PALETTE_MANAGER_H
#define GBA_SPRITE_ENGINE_PALETTE_MANAGER_H
#include <engine/gba/tonc_memmap.h>
2018-08-01 16:03:16 +02:00
#include <engine/gba/tonc_types.h>
#include "combined_palette.h"
2018-08-01 16:03:16 +02:00
#define PALETTE_BANK_SIZE 16
#define PALETTE_MAX_SIZE 256
2018-08-04 10:43:27 +02:00
int getBits(int number, int k, int p);
2018-08-01 16:03:16 +02:00
class CombinedPalette;
2018-08-01 16:03:16 +02:00
class PaletteManager {
protected:
2018-08-06 09:50:53 +02:00
const COLOR *data;
2018-08-01 16:03:16 +02:00
int size;
virtual void* paletteAddress() = 0;
virtual PALBANK* paletteBank() = 0;
2018-08-01 16:03:16 +02:00
public:
PaletteManager();
2018-08-06 09:50:53 +02:00
PaletteManager(const COLOR paletteData[]) : PaletteManager(paletteData, PALETTE_MAX_SIZE) {}
PaletteManager(const COLOR paletteData[], int size);
2018-08-01 16:03:16 +02:00
CombinedPalette* operator+(const PaletteManager& other);
2018-08-01 16:03:16 +02:00
void persist();
void persistToBank(int bank);
COLOR change(int bank, int index, COLOR newColor);
COLOR get(int bank, int index) { return paletteBank()[bank][index]; }
2018-08-04 10:43:27 +02:00
void increaseBrightness(u32 intensity);
static COLOR modify(COLOR color, u32 intensity);
2018-08-04 10:43:27 +02:00
static COLOR color(u32 r, u32 g, u32 b);
static u32 red(COLOR r);
static u32 green(COLOR r);
static u32 blue(COLOR r);
2018-08-01 16:03:16 +02:00
};
class BackgroundPaletteManager : public PaletteManager {
protected:
void *paletteAddress() override {
2018-08-01 16:03:16 +02:00
return pal_bg_mem;
}
PALBANK *paletteBank() override {
return pal_bg_bank;
}
2018-08-01 16:03:16 +02:00
public:
BackgroundPaletteManager() : PaletteManager() {}
2018-08-06 09:50:53 +02:00
BackgroundPaletteManager(const COLOR paletteData[]) : PaletteManager(paletteData) {}
BackgroundPaletteManager(const COLOR paletteData[], int size) : PaletteManager(paletteData, size) {}
2018-08-01 16:03:16 +02:00
};
class ForegroundPaletteManager : public PaletteManager {
protected:
void *paletteAddress() override {
2018-08-01 16:03:16 +02:00
return pal_obj_mem;
}
PALBANK *paletteBank() override {
return pal_obj_bank;
}
2018-08-01 16:03:16 +02:00
public:
2018-08-06 09:50:53 +02:00
ForegroundPaletteManager(const COLOR paletteData[]) : PaletteManager(paletteData) {}
ForegroundPaletteManager(const COLOR paletteData[], int size) : PaletteManager(paletteData, size) {}
2018-08-01 16:03:16 +02:00
};
#endif //GBA_SPRITE_ENGINE_PALETTE_MANAGER_H