Icons now scale via aspect ratio, but it's still not as robust as it should be. I also think that Sprite should just work this way or stretch if an option is given, which would make Icon kind of pointless.
This commit is contained in:
parent
e128de3244
commit
b7cfa4db2d
1 changed files with 14 additions and 13 deletions
|
@ -45,19 +45,16 @@ namespace guecs {
|
|||
|
||||
void Sprite::init(lel::Cell &cell) {
|
||||
auto sprite_texture = BACKEND->get_sprite(name);
|
||||
auto bounds = sprite_texture.frame_size;
|
||||
|
||||
sf::IntRect rect{{0,0},sprite_texture.frame_size};
|
||||
sf::IntRect rect{{0,0}, bounds};
|
||||
sprite = make_shared<sf::Sprite>(*sprite_texture.texture, rect);
|
||||
|
||||
sprite->setPosition({
|
||||
float(cell.x + padding),
|
||||
float(cell.y + padding)});
|
||||
|
||||
auto bounds = sprite->getLocalBounds();
|
||||
sprite->setPosition({float(cell.x + padding), float(cell.y + padding)});
|
||||
|
||||
sprite->setScale({
|
||||
float(cell.w - padding * 2) / bounds.size.x,
|
||||
float(cell.h - padding * 2) / bounds.size.y});
|
||||
float(cell.w - padding * 2) / float(bounds.x),
|
||||
float(cell.h - padding * 2) / float(bounds.y)});
|
||||
}
|
||||
|
||||
void Sprite::render(sf::RenderWindow& window, sf::Shader *shader_ptr) {
|
||||
|
@ -75,21 +72,25 @@ namespace guecs {
|
|||
|
||||
void Icon::init(lel::Cell &cell) {
|
||||
auto sprite_texture = BACKEND->get_icon(name);
|
||||
auto bounds = sprite_texture.frame_size;
|
||||
|
||||
sf::IntRect rect{{0,0},sprite_texture.frame_size};
|
||||
fmt::println("ICON SIZE: {},{}; {},{}",
|
||||
rect.position.x, rect.position.y,
|
||||
rect.size.x, rect.size.y);
|
||||
sf::IntRect rect{{0,0}, bounds};
|
||||
sprite = make_shared<sf::Sprite>(*sprite_texture.texture, rect);
|
||||
|
||||
sprite->setPosition({ float(cell.x + padding), float(cell.y + padding)});
|
||||
|
||||
float a_ratio = float(bounds.x) / float(bounds.y);
|
||||
float x_scale = float(cell.w - padding * 2) / float(bounds.x);
|
||||
float y_new_size = (float(bounds.x) * x_scale) / a_ratio;
|
||||
float y_scale = float(cell.h - padding * 2) / y_new_size;
|
||||
|
||||
sprite->setScale({x_scale, y_scale});
|
||||
}
|
||||
|
||||
void Icon::render(sf::RenderWindow& window, sf::Shader *shader_ptr) {
|
||||
window.draw(*sprite, shader_ptr);
|
||||
}
|
||||
|
||||
|
||||
void Rectangle::init(lel::Cell& cell) {
|
||||
sf::Vector2f size{float(cell.w) - padding * 2, float(cell.h) - padding * 2};
|
||||
if(shape == nullptr) shape = make_shared<sf::RectangleShape>(size);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue