Refactoring the GUECS UI::render and the components so that it's just calling a .render on each one. This will then let me allow registering any components people want.
This commit is contained in:
parent
a9e219ea96
commit
4d71f552aa
7 changed files with 108 additions and 69 deletions
|
|
@ -24,6 +24,10 @@ namespace guecs {
|
|||
text->setCharacterSize(size);
|
||||
}
|
||||
|
||||
void Textual::render(sf::RenderWindow& window, sf::Shader *shader_ptr) {
|
||||
window.draw(*text, shader_ptr);
|
||||
}
|
||||
|
||||
void Textual::update(const wstring& new_content) {
|
||||
content = new_content;
|
||||
text->setString(content);
|
||||
|
|
@ -56,6 +60,10 @@ namespace guecs {
|
|||
float(cell.h - padding * 2) / bounds.size.y});
|
||||
}
|
||||
|
||||
void Sprite::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);
|
||||
|
|
@ -65,15 +73,24 @@ namespace guecs {
|
|||
shape->setOutlineThickness(border_px);
|
||||
}
|
||||
|
||||
void Rectangle::render(sf::RenderWindow& window, sf::Shader *shader_ptr) {
|
||||
window.draw(*shape, shader_ptr);
|
||||
}
|
||||
|
||||
void Meter::init(lel::Cell& cell, Rectangle& bg) {
|
||||
bg.shape->setFillColor(color);
|
||||
init(cell);
|
||||
}
|
||||
|
||||
void Meter::init(lel::Cell& cell) {
|
||||
bar.init(cell);
|
||||
}
|
||||
|
||||
void Meter::render(lel::Cell& cell) {
|
||||
void Meter::render(lel::Cell& cell, sf::RenderWindow& window, sf::Shader *shader_ptr) {
|
||||
float level = std::clamp(percent, 0.0f, 1.0f) * float(cell.w);
|
||||
// ZED: this 6 is a border width, make it a thing
|
||||
bar.shape->setSize({std::max(level, 0.0f), float(cell.h - 6)});
|
||||
window.draw(*bar.shape, shader_ptr);
|
||||
}
|
||||
|
||||
void Sound::play(bool hover) {
|
||||
|
|
@ -104,13 +121,17 @@ namespace guecs {
|
|||
assert(shape != nullptr && "failed to make rectangle");
|
||||
}
|
||||
|
||||
void Background::render(sf::RenderWindow& window) {
|
||||
window.draw(*shape);
|
||||
}
|
||||
|
||||
void Effect::init(lel::Cell &cell) {
|
||||
$shader = BACKEND->shader_get(name);
|
||||
$shader->setUniform("u_resolution", sf::Vector2f({float(cell.w), float(cell.h)}));
|
||||
$clock = std::make_shared<sf::Clock>();
|
||||
}
|
||||
|
||||
void Effect::step() {
|
||||
void Effect::render() {
|
||||
sf::Time cur_time = $clock->getElapsedTime();
|
||||
float u_time = cur_time.asSeconds();
|
||||
|
||||
|
|
@ -129,12 +150,20 @@ namespace guecs {
|
|||
$u_time_end = u_time.asSeconds() + duration;
|
||||
}
|
||||
|
||||
shared_ptr<sf::Shader> Effect::checkout_ptr() {
|
||||
sf::Shader* Effect::get_shader(bool is_shape) {
|
||||
sf::Shader *shader_ptr = nullptr;
|
||||
|
||||
if(BACKEND->shader_updated()) {
|
||||
$shader = BACKEND->shader_get(name);
|
||||
}
|
||||
|
||||
return $shader;
|
||||
if($active) {
|
||||
$shader->setUniform("is_shape", is_shape);
|
||||
// NOTE: this is needed because SFML doesn't handle shared_ptr
|
||||
shader_ptr = $shader.get();
|
||||
}
|
||||
|
||||
return shader_ptr;
|
||||
}
|
||||
|
||||
void Effect::stop() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue