palettes and overworld drawing

This commit is contained in:
scawful
2022-09-10 16:33:59 -05:00
parent 8cc9adf41a
commit 1244e6855c
14 changed files with 168 additions and 190 deletions

View File

@@ -103,15 +103,17 @@ void Bitmap::CreateTexture(std::shared_ptr<SDL_Renderer> renderer) {
}
// Convert SNESPalette to SDL_Palette for surface.
void Bitmap::ApplyPalette(SNESPalette palette) {
void Bitmap::ApplyPalette(const SNESPalette & palette) {
palette_ = palette;
surface_->format->palette = palette_.GetSDL_Palette();
SDL_SetPaletteColors(surface_->format->palette,
palette_.GetSDL_Palette()->colors,
0, 256);
}
void Bitmap::SetPaletteColor(int id, gfx::snes_color color) {
surface_->format->palette->colors[id].r = color.red;
surface_->format->palette->colors[id].b = color.blue;
surface_->format->palette->colors[id].g = color.green;
void Bitmap::SetPaletteColor(int id, gfx::SNESColor color) {
surface_->format->palette->colors[id].r = color.rgb.x;
surface_->format->palette->colors[id].g = color.rgb.y;
surface_->format->palette->colors[id].b = color.rgb.z;
}
// Creates a vector of bitmaps which are individual 8x8 tiles.

View File

@@ -30,8 +30,8 @@ class Bitmap {
void CreateTexture(std::shared_ptr<SDL_Renderer> renderer);
void ApplyPalette(SNESPalette palette);
void SetPaletteColor(int id, gfx::snes_color color);
void ApplyPalette(const SNESPalette &palette);
void SetPaletteColor(int id, gfx::SNESColor color);
absl::StatusOr<std::vector<Bitmap>> CreateTiles();
absl::Status CreateFromTiles(const std::vector<Bitmap> &tiles);

View File

@@ -64,7 +64,11 @@ char* Convert(const snes_palette pal) {
SNESColor::SNESColor() : rgb(ImVec4(0.f, 0.f, 0.f, 0.f)) {}
SNESColor::SNESColor(snes_color val) { snes = ConvertRGBtoSNES(val); }
SNESColor::SNESColor(snes_color val) {
rgb.x = val.red;
rgb.y = val.blue;
rgb.z = val.green;
}
SNESColor::SNESColor(ImVec4 val) : rgb(val) {
snes_color col;
@@ -83,7 +87,9 @@ void SNESColor::setRgb(ImVec4 val) {
snes = ConvertRGBtoSNES(col);
}
void SNESColor::setRgb(snes_color val) { snes = ConvertRGBtoSNES(val); }
void SNESColor::setSNES(snes_color val) {
rgb = ImVec4(val.red, val.green, val.blue, 1.f);
}
void SNESColor::setSNES(uint16_t val) {
snes = val;
@@ -137,7 +143,7 @@ SNESPalette::SNESPalette(const std::vector<ImVec4>& cols) {
SNESPalette::SNESPalette(const std::vector<snes_color>& cols) {
for (const auto& each : cols) {
SNESColor scol;
scol.setRgb(each);
scol.setSNES(each);
colors.push_back(scol);
}
size_ = cols.size();
@@ -151,7 +157,7 @@ SNESPalette::SNESPalette(const std::vector<SNESColor>& cols) {
}
void SNESPalette::Create(const std::vector<SNESColor>& cols) {
for (const auto& each : cols) {
for (const auto each : cols) {
colors.push_back(each);
}
size_ = cols.size();
@@ -176,6 +182,7 @@ SDL_Palette* SNESPalette::GetSDL_Palette() {
color[i].r = (uint8_t)colors[i].rgb.x * 100;
color[i].g = (uint8_t)colors[i].rgb.y * 100;
color[i].b = (uint8_t)colors[i].rgb.z * 100;
color[i].a = 0;
std::cout << "Color " << i << " added (R:" << color[i].r
<< " G:" << color[i].g << " B:" << color[i].b << ")" << std::endl;
}
@@ -183,10 +190,7 @@ SDL_Palette* SNESPalette::GetSDL_Palette() {
return sdl_palette.get();
}
PaletteGroup::PaletteGroup(uint8_t mSize) {
size = mSize;
palettes.reserve(size);
}
PaletteGroup::PaletteGroup(uint8_t mSize) : size(mSize) {}
} // namespace gfx
} // namespace app

View File

@@ -41,11 +41,13 @@ struct SNESColor {
SNESColor();
explicit SNESColor(ImVec4);
explicit SNESColor(snes_color);
void setRgb(ImVec4);
void setSNES(snes_color);
void setSNES(uint16_t);
uint16_t snes = 0;
ImVec4 rgb;
void setRgb(ImVec4);
void setRgb(snes_color);
void setSNES(uint16_t);
};
class SNESPalette {
@@ -59,7 +61,7 @@ class SNESPalette {
explicit SNESPalette(const std::vector<SNESColor>&);
void Create(const std::vector<SNESColor>&);
void AddColor(SNESColor color) { colors.push_back(color); }
auto GetColor(int i) const { return colors[i]; }
SNESColor operator[](int i) {
@@ -80,6 +82,17 @@ class SNESPalette {
struct PaletteGroup {
PaletteGroup() = default;
explicit PaletteGroup(uint8_t mSize);
void AddPalette(SNESPalette pal) {
palettes.emplace_back(pal);
size = palettes.size();
}
void AddColor(SNESColor color) {
if (size == 0) {
SNESPalette empty_pal;
palettes.emplace_back(empty_pal);
}
palettes[0].AddColor(color);
}
SNESPalette operator[](int i) {
if (i > size) {
std::cout << "PaletteGroup: Index out of bounds" << std::endl;