palettes and overworld drawing
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user