Slight improvement in the renderer efficiency.
This commit is contained in:
parent
824a384ffd
commit
2ced72a475
1 changed files with 21 additions and 7 deletions
28
render.cpp
28
render.cpp
|
@ -103,7 +103,22 @@ void SFMLRender::draw_main_ui() {
|
||||||
$window.draw($ui_text);
|
$window.draw($ui_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void configure_tile(const sf::Sprite &sprite, sf::FloatRect &sp_bounds, sf::FloatRect bg_bounds, float &width_delta, float &height_delta) {
|
||||||
|
// should look into caching all this instead of calcing it each time
|
||||||
|
sp_bounds = sprite.getLocalBounds();
|
||||||
|
|
||||||
|
// calculate where to center the sprite, but only if it's smaller
|
||||||
|
width_delta = bg_bounds.width > sp_bounds.width ? (bg_bounds.width - sp_bounds.width) / 2 : 0;
|
||||||
|
height_delta = bg_bounds.height > sp_bounds.width ? (bg_bounds.height - sp_bounds.height) / 2 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
void SFMLRender::render_text(std::string &text, float x, float y) {
|
void SFMLRender::render_text(std::string &text, float x, float y) {
|
||||||
|
wchar_t last_tile = '#';
|
||||||
|
sf::FloatRect sp_bounds;
|
||||||
|
float width_delta = 0;
|
||||||
|
float height_delta = 0;
|
||||||
|
sf::Sprite &sprite = get_text_sprite(last_tile);
|
||||||
|
|
||||||
// make a copy so we don't modify the cached one
|
// make a copy so we don't modify the cached one
|
||||||
$ansi.parse(text, [&](sf::Color bg, sf::Color fg, wchar_t tile) {
|
$ansi.parse(text, [&](sf::Color bg, sf::Color fg, wchar_t tile) {
|
||||||
if(tile == '\n') {
|
if(tile == '\n') {
|
||||||
|
@ -114,15 +129,14 @@ void SFMLRender::render_text(std::string &text, float x, float y) {
|
||||||
return; // skip these, just windows junk
|
return; // skip these, just windows junk
|
||||||
} else {
|
} else {
|
||||||
$bg_sprite.setPosition({x, y});
|
$bg_sprite.setPosition({x, y});
|
||||||
sf::Sprite &sprite = get_text_sprite(tile);
|
|
||||||
$bg_sprite.setColor(bg);
|
$bg_sprite.setColor(bg);
|
||||||
|
|
||||||
// should look into caching all this instead of calcing it each time
|
// only get a new sprite if the tile changed
|
||||||
auto sp_bounds = sprite.getLocalBounds();
|
if(last_tile != tile) {
|
||||||
|
last_tile = tile; // update last tile seen
|
||||||
// calculate where to center the sprite, but only if it's smaller
|
sprite = get_text_sprite(tile);
|
||||||
auto width_delta = $bg_bounds.width > sp_bounds.width ? ($bg_bounds.width - sp_bounds.width) / 2 : 0;
|
configure_tile(sprite, sp_bounds, $bg_bounds, width_delta, height_delta);
|
||||||
auto height_delta = $bg_bounds.height > sp_bounds.width ? ($bg_bounds.height - sp_bounds.height) / 2 : 0;
|
}
|
||||||
|
|
||||||
sprite.setPosition({x+width_delta, y+height_delta});
|
sprite.setPosition({x+width_delta, y+height_delta});
|
||||||
sprite.setColor(fg);
|
sprite.setColor(fg);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue