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
|
|
|
|
|
2018-08-02 14:24:44 +02:00
|
|
|
#include <engine/gba/tonc_memmap.h>
|
2018-08-01 16:03:16 +02:00
|
|
|
#include <engine/gba/tonc_types.h>
|
2018-08-05 13:35:38 +02:00
|
|
|
#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
|
|
|
|
2018-08-05 13:35:38 +02:00
|
|
|
class CombinedPalette;
|
|
|
|
|
2018-08-01 16:03:16 +02:00
|
|
|
class PaletteManager {
|
|
|
|
protected:
|
|
|
|
const u16 *data;
|
|
|
|
int size;
|
|
|
|
|
2018-08-02 14:24:44 +02:00
|
|
|
virtual void* paletteAddress() = 0;
|
|
|
|
virtual PALBANK* paletteBank() = 0;
|
2018-08-01 16:03:16 +02:00
|
|
|
public:
|
|
|
|
PaletteManager(const u16 paletteData[]) : data(paletteData), size(PALETTE_MAX_SIZE) {}
|
|
|
|
PaletteManager(const u16 paletteData[], int size) : data(paletteData), size(size) {}
|
|
|
|
|
2018-08-05 13:35:38 +02:00
|
|
|
CombinedPalette* operator+(const PaletteManager& other);
|
|
|
|
|
2018-08-01 16:03:16 +02:00
|
|
|
void persist();
|
2018-08-02 14:24:44 +02:00
|
|
|
void persistToBank(int bank);
|
|
|
|
COLOR change(int bank, int index, COLOR newColor);
|
2018-08-05 13:35:38 +02:00
|
|
|
COLOR get(int bank, int index) { return paletteBank()[bank][index]; }
|
2018-08-04 10:43:27 +02:00
|
|
|
void increaseBrightness(u32 intensity);
|
|
|
|
|
2018-08-05 13:35:38 +02:00
|
|
|
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:
|
2018-08-02 14:24:44 +02:00
|
|
|
void *paletteAddress() override {
|
2018-08-01 16:03:16 +02:00
|
|
|
return pal_bg_mem;
|
|
|
|
}
|
2018-08-02 14:24:44 +02:00
|
|
|
|
|
|
|
PALBANK *paletteBank() override {
|
|
|
|
return pal_bg_bank;
|
|
|
|
}
|
|
|
|
|
2018-08-01 16:03:16 +02:00
|
|
|
public:
|
2018-08-02 14:24:44 +02:00
|
|
|
BackgroundPaletteManager() : PaletteManager(nullptr) {}
|
2018-08-01 16:03:16 +02:00
|
|
|
BackgroundPaletteManager(const u16 paletteData[]) : PaletteManager(paletteData) {}
|
|
|
|
BackgroundPaletteManager(const u16 paletteData[], int size) : PaletteManager(paletteData, size) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class ForegroundPaletteManager : public PaletteManager {
|
|
|
|
protected:
|
2018-08-02 14:24:44 +02:00
|
|
|
void *paletteAddress() override {
|
2018-08-01 16:03:16 +02:00
|
|
|
return pal_obj_mem;
|
|
|
|
}
|
2018-08-02 14:24:44 +02:00
|
|
|
|
|
|
|
PALBANK *paletteBank() override {
|
|
|
|
return pal_obj_bank;
|
|
|
|
}
|
|
|
|
|
2018-08-01 16:03:16 +02:00
|
|
|
public:
|
|
|
|
ForegroundPaletteManager(const u16 paletteData[]) : PaletteManager(paletteData) {}
|
|
|
|
ForegroundPaletteManager(const u16 paletteData[], int size) : PaletteManager(paletteData, size) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif //GBA_SPRITE_ENGINE_PALETTE_MANAGER_H
|