|
|
|
@ -66,34 +66,33 @@ namespace guecs { |
|
|
|
|
shape->setFillColor(color); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Shader::init(lel::Cell &cell) { |
|
|
|
|
void Effect::init(lel::Cell &cell) { |
|
|
|
|
$shader_version = shaders::version(); |
|
|
|
|
$shader = shaders::get(name); |
|
|
|
|
$shader->setUniform("u_resolution", sf::Vector2f({float(cell.w), float(cell.h)})); |
|
|
|
|
$clock = std::make_shared<sf::Clock>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Shader::step() { |
|
|
|
|
void Effect::step() { |
|
|
|
|
sf::Time cur_time = $clock->getElapsedTime(); |
|
|
|
|
float u_time = cur_time.asSeconds(); |
|
|
|
|
|
|
|
|
|
if(u_time < $u_time_end) { |
|
|
|
|
$shader->setUniform("u_duration", duration); |
|
|
|
|
$shader->setUniform("u_time_end", $u_time_end); |
|
|
|
|
$shader->setUniform("u_time", u_time); |
|
|
|
|
} else { |
|
|
|
|
$active = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Shader::run() { |
|
|
|
|
$shader = checkout_ptr(); |
|
|
|
|
void Effect::run() { |
|
|
|
|
$active = true; |
|
|
|
|
sf::Time u_time = $clock->getElapsedTime(); |
|
|
|
|
$u_time_end = u_time.asSeconds() + duration; |
|
|
|
|
$shader->setUniform("u_duration", duration); |
|
|
|
|
$shader->setUniform("u_time_end", $u_time_end); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
shared_ptr<sf::Shader> Shader::checkout_ptr() { |
|
|
|
|
shared_ptr<sf::Shader> Effect::checkout_ptr() { |
|
|
|
|
if(shaders::updated($shader_version)) { |
|
|
|
|
$shader = shaders::get(name); |
|
|
|
|
$shader_version = shaders::version(); |
|
|
|
@ -150,7 +149,7 @@ namespace guecs { |
|
|
|
|
rect.init(cell); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$world.query<lel::Cell, Shader>([](auto, auto& cell, auto& shader) { |
|
|
|
|
$world.query<lel::Cell, Effect>([](auto, auto& cell, auto& shader) { |
|
|
|
|
shader.init(cell); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
@ -192,7 +191,7 @@ namespace guecs { |
|
|
|
|
window.draw(*bg.shape); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$world.query<Shader>([&](auto, auto& shader) { |
|
|
|
|
$world.query<Effect>([&](auto, auto& shader) { |
|
|
|
|
if(shader.$active) shader.step(); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
@ -227,8 +226,8 @@ namespace guecs { |
|
|
|
|
if((x >= cell.x && x <= cell.x + cell.w) && |
|
|
|
|
(y >= cell.y && y <= cell.y + cell.h)) |
|
|
|
|
{ |
|
|
|
|
if($world.has<Shader>(ent)) { |
|
|
|
|
auto& shader = $world.get<Shader>(ent); |
|
|
|
|
if($world.has<Effect>(ent)) { |
|
|
|
|
auto& shader = $world.get<Effect>(ent); |
|
|
|
|
shader.run(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|