diff --git a/include/AMI.h b/include/AMI.h index 052c645..63fb35d 100644 --- a/include/AMI.h +++ b/include/AMI.h @@ -21,8 +21,8 @@ private: std::vector widgets; - ImageWidget ft_logo; - TextWidget choose; - ListWidget missions_widget; + std::unique_ptr ft_logo; + std::unique_ptr choose; + std::unique_ptr missions_widget; std::vector> missions; }; \ No newline at end of file diff --git a/src/AMI.cpp b/src/AMI.cpp index 4a8d109..763efe0 100644 --- a/src/AMI.cpp +++ b/src/AMI.cpp @@ -5,16 +5,16 @@ #include "widgets.h" #include +#include constexpr const char* FT_LOGO_PATH = "resources/Fasttube_Logo-white.bmp"; constexpr const char* AVENIR_FONT_PATH = "resources/Avenir-Book.ttf"; constexpr int AVENIR_PTS = 20; constexpr const char* CHINAT_FONT_PATH = "resources/CHINAT.ttf"; -constexpr int CHINAT_PTS = 20; +constexpr int CHINAT_PTS = 24; constexpr int FT_LOGO_HEIGHT = 40; constexpr int GAP = 5; constexpr int CHOOSE_Y = FT_LOGO_HEIGHT + GAP; -constexpr int MISSION_HEIGHT = 30; constexpr std::array MISSIONS = {"ACCELERATION", "SKIDPAD", "AUTOCROSS", "TRACKDRIVE", "EBS TEST", "INSPECTION", @@ -22,32 +22,33 @@ constexpr std::array MISSIONS = {"ACCELERATION", "SKIDPAD", "AUTOCROSS", AMI::AMI(SDL_Renderer* renderer) : View{renderer}, avenir{util::load_font(AVENIR_FONT_PATH, AVENIR_PTS)}, - chinat{util::load_font(CHINAT_FONT_PATH, CHINAT_PTS)}, - ft_logo{renderer, FT_LOGO_PATH}, choose{renderer, avenir, - "Choose a mission:"}, - missions_widget{renderer, MISSION_HEIGHT, Alignment::CENTER} { - ft_logo.set_height(FT_LOGO_HEIGHT); - ft_logo.set_position(SCREEN_WIDTH / 2, 0); - ft_logo.set_alignment(Alignment::CENTER); - widgets.push_back(&ft_logo); + chinat{util::load_font(CHINAT_FONT_PATH, CHINAT_PTS)} { + ft_logo = std::make_unique(renderer, FT_LOGO_PATH); + ft_logo->set_height(FT_LOGO_HEIGHT); + ft_logo->set_position(SCREEN_WIDTH / 2, 0); + ft_logo->set_alignment(Alignment::CENTER); + widgets.push_back(ft_logo.get()); - choose.set_position(SCREEN_WIDTH / 2, CHOOSE_Y); - choose.set_alignment(Alignment::CENTER); - widgets.push_back(&choose); + choose = std::make_unique(renderer, avenir, "Choose a mission:"); + choose->set_position(SCREEN_WIDTH / 2, CHOOSE_Y); + choose->set_alignment(Alignment::CENTER); + widgets.push_back(choose.get()); - int choose_height = choose.get_height(); - int missions_y = CHOOSE_Y + choose_height + GAP; - int missions_height = SCREEN_HEIGHT - CHOOSE_Y - choose_height - 1; - missions_widget.set_position(0, missions_y); - missions_widget.set_width(SCREEN_WIDTH, false); - missions_widget.set_height(missions_height, false); for (const auto mission : MISSIONS) { missions.push_back(std::make_unique(renderer, chinat, mission)); } + int choose_height = choose->get_height(); + int missions_y = CHOOSE_Y + choose_height + GAP; + int missions_height = SCREEN_HEIGHT - CHOOSE_Y - choose_height - 1; + missions_widget = std::make_unique( + renderer, missions[0]->get_height(), Alignment::CENTER); + missions_widget->set_position(0, missions_y); + missions_widget->set_width(SCREEN_WIDTH, false); + missions_widget->set_height(missions_height, false); for (const auto& mission : missions) { - missions_widget.add_element(mission.get()); + missions_widget->add_element(mission.get()); } - widgets.push_back(&missions_widget); + widgets.push_back(missions_widget.get()); } AMI::~AMI() {