Draw missions at their native height

This commit is contained in:
Jasper Blanckenburg 2022-05-20 15:05:40 +02:00
parent 0b34bac5bc
commit 882a645926
2 changed files with 25 additions and 24 deletions

View File

@ -21,8 +21,8 @@ private:
std::vector<Widget*> widgets;
ImageWidget ft_logo;
TextWidget choose;
ListWidget missions_widget;
std::unique_ptr<ImageWidget> ft_logo;
std::unique_ptr<TextWidget> choose;
std::unique_ptr<ListWidget> missions_widget;
std::vector<std::unique_ptr<Widget>> missions;
};

View File

@ -5,16 +5,16 @@
#include "widgets.h"
#include <array>
#include <memory>
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<ImageWidget>(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<TextWidget>(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<TextWidget>(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<ListWidget>(
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() {