Skip to content

Commit

Permalink
fix: Stop out-of-bounds error caused by writing to wrong array
Browse files Browse the repository at this point in the history
The code was writing to the graphics_objects->image_ptrs array
instead of to an array for button images.
  • Loading branch information
ThePythonator committed Sep 16, 2024
1 parent 51750f7 commit 0fd655c
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 20 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.14)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Uncomment these to put the dlls in the same directory as the executable (useful if you don't have SDL2 installed and you're building from source)
Expand Down
10 changes: 5 additions & 5 deletions include/game/Constants.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ namespace GRAPHICS_OBJECTS {
};
}

namespace BUTTONS {
enum BUTTONS {
UNSELECTED,
HOVERED,
SELECTED
namespace BUTTON_IMAGE_GROUPS {
enum BUTTON_IMAGE_GROUPS {
STANDARD,

TOTAL_BUTTON_IMAGE_GROUPS
};
}

Expand Down
10 changes: 8 additions & 2 deletions src/framework/BaseGame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,7 @@ namespace Framework {
graphics_objects.spritesheet_ptrs = std::vector<Framework::Spritesheet*>(GRAPHICS_OBJECTS::SPRITESHEETS::TOTAL_SPRITESHEETS);
graphics_objects.font_ptrs = std::vector<Framework::Font*>(GRAPHICS_OBJECTS::FONTS::TOTAL_FONTS);
graphics_objects.transition_ptrs = std::vector<Framework::BaseTransition*>(GRAPHICS_OBJECTS::TRANSITIONS::TOTAL_TRANSITIONS);

//graphics_objects.button_image_groups = std::vector<Framework::Button::ButtonImages>(GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::TOTAL_BUTTON_IMAGE_GROUPS);
graphics_objects.button_image_groups = std::vector<Framework::Button::ButtonImages>(GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::TOTAL_BUTTON_IMAGE_GROUPS);

// Load game data
load_data();
Expand Down Expand Up @@ -189,6 +188,13 @@ namespace Framework {
}
graphics_objects.transition_ptrs.clear();

// Clear button images
for (const Framework::Button::ButtonImages& button_images : graphics_objects.button_image_groups) {
delete button_images.unselected;
delete button_images.hovered;
delete button_images.selected;
}

// Clear graphics and window objects
delete graphics_objects.graphics_ptr;
delete graphics_objects.window_ptr;
Expand Down
16 changes: 9 additions & 7 deletions src/game/Game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,20 @@ void Game::load_data() {


// Load button images
// TODO: change from hardcoded values!!!
// TODO: also could change into a single function to create an image from a spritesheet
graphics_objects.image_ptrs[GRAPHICS_OBJECTS::BUTTONS::UNSELECTED] = Framework::create_image(graphics_objects.graphics_ptr, Framework::Vec(64, 16));
graphics_objects.image_ptrs[GRAPHICS_OBJECTS::BUTTONS::UNSELECTED]->set_render_target();
graphics_objects.button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD] = {
.unselected = Framework::create_image(graphics_objects.graphics_ptr, Framework::Vec(64, 16)),
.hovered = Framework::create_image(graphics_objects.graphics_ptr, Framework::Vec(64, 16)),
.selected = Framework::create_image(graphics_objects.graphics_ptr, Framework::Vec(64, 16)),
};

graphics_objects.button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD].unselected->set_render_target();
graphics_objects.spritesheet_ptrs[GRAPHICS_OBJECTS::SPRITESHEETS::MAIN_SPRITESHEET]->rect(Framework::Rect(0, 16, 64, 16), Framework::Vec(0, 0), 1.0f);

graphics_objects.image_ptrs[GRAPHICS_OBJECTS::BUTTONS::HOVERED] = Framework::create_image(graphics_objects.graphics_ptr, Framework::Vec(64, 16));
graphics_objects.image_ptrs[GRAPHICS_OBJECTS::BUTTONS::HOVERED]->set_render_target();
graphics_objects.button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD].hovered->set_render_target();
graphics_objects.spritesheet_ptrs[GRAPHICS_OBJECTS::SPRITESHEETS::MAIN_SPRITESHEET]->rect(Framework::Rect(0, 32, 64, 16), Framework::Vec(0, 0), 1.0f);

graphics_objects.image_ptrs[GRAPHICS_OBJECTS::BUTTONS::SELECTED] = Framework::create_image(graphics_objects.graphics_ptr, Framework::Vec(64, 16));
graphics_objects.image_ptrs[GRAPHICS_OBJECTS::BUTTONS::SELECTED]->set_render_target();
graphics_objects.button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD].selected->set_render_target();
graphics_objects.spritesheet_ptrs[GRAPHICS_OBJECTS::SPRITESHEETS::MAIN_SPRITESHEET]->rect(Framework::Rect(0, 48, 64, 16), Framework::Vec(0, 0), 1.0f);

Framework::SDLUtils::SDL_UnsetRenderTarget(graphics_objects.graphics_ptr->get_renderer());
Expand Down
6 changes: 1 addition & 5 deletions src/game/Stages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ void TitleStage::start() {
buttons = {
Framework::Button(
Framework::Rect(128, 0, 256, 64),
Framework::Button::ButtonImages{
graphics_objects->image_ptrs[GRAPHICS_OBJECTS::BUTTONS::UNSELECTED],
graphics_objects->image_ptrs[GRAPHICS_OBJECTS::BUTTONS::HOVERED],
graphics_objects->image_ptrs[GRAPHICS_OBJECTS::BUTTONS::SELECTED]
},
graphics_objects->button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD],
Framework::Text(graphics_objects->font_ptrs[GRAPHICS_OBJECTS::FONTS::MAIN_FONT], "Play", COLOURS::BLACK, 4.0f)
)
};
Expand Down

0 comments on commit 0fd655c

Please sign in to comment.