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:
parent
9f1e9717a0
commit
02a45d890f
3 changed files with 33 additions and 18 deletions
24
gui.cpp
24
gui.cpp
|
@ -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);
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue