Make it so the canvas for the map view is calculated based on the font size, which will allow for zooming.

This commit is contained in:
Zed A. Shaw 2024-10-21 00:12:04 -04:00
parent 9f1e9717a0
commit 02a45d890f
3 changed files with 33 additions and 18 deletions

24
gui.cpp
View file

@ -50,18 +50,30 @@ sf::Color GUI::color(Value val) {
return VALUES[size_t(val)];
}
GUI::GUI() : $game_map(GAME_MAP_X, GAME_MAP_Y),
$canvas(VIEW_PORT_X * 2, VIEW_PORT_Y * 4),
GUI::GUI() :
$game_map(GAME_MAP_X, GAME_MAP_Y),
$window(sf::VideoMode(VIDEO_X,VIDEO_Y), "Roguish"),
$screen(SCREEN_X, SCREEN_Y),
$map_screen(VIEW_PORT_X, VIEW_PORT_Y)
$map_screen(0,0)
{
$font.loadFromFile("./assets/text.otf");
// calculate display size
sf::Glyph base_glyph = $font.getGlyph(L'', MAP_FONT_SIZE, false);
auto bounds = base_glyph.bounds;
$view_port = {
size_t(std::ceil((VIDEO_X - GAME_MAP_POS) / bounds.width)),
size_t(std::ceil(VIDEO_Y / bounds.height))
};
// set canvas to best size
$canvas = Canvas($view_port.x * 2, $view_port.y * 4);
$map_screen = Screen($view_port.x, $view_port.y);
int res = $hit_buf.loadFromFile("./assets/hit.wav");
dbc::check(res, "failed to load hit.wav");
$hit_sound.setBuffer($hit_buf);
$font.loadFromFile("./assets/text.otf");
$ui_text.setFont($font);
$ui_text.setPosition(0,0);
$ui_text.setCharacterSize(UI_FONT_SIZE);
@ -74,7 +86,7 @@ void GUI::create_renderer() {
auto player = $world.get<Player>();
$map_view = Renderer([&] {
System::draw_map($world, $game_map, $canvas, VIEW_PORT_X, VIEW_PORT_Y);
System::draw_map($world, $game_map, $canvas, $view_port.x, $view_port.y);
return canvas($canvas);
});