|
|
|
|
@ -8,23 +8,38 @@ ControlPanel::ControlPanel() { |
|
|
|
|
void ControlPanel::init(sf::Vector2f size) { |
|
|
|
|
$gui.position(0, size.y, size.x, WINDOW_HEIGHT - size.y); |
|
|
|
|
$gui.layout( |
|
|
|
|
"[pause |*%(200, 400)code|_]" |
|
|
|
|
"[step |_|_]" |
|
|
|
|
"[play |_|_]" |
|
|
|
|
"[restart|_|_]" |
|
|
|
|
"[Pause |*%(200, 400)code|_]" |
|
|
|
|
"[Step |_|_]" |
|
|
|
|
"[Play |_|_]" |
|
|
|
|
"[Restart|_|_]" |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
for(auto& [name, cell] : $gui.cells()) { |
|
|
|
|
auto id = $gui.entity(name); |
|
|
|
|
$gui.set<guecs::Rectangle>(id, {}); |
|
|
|
|
$gui.set<guecs::Text>(id, {guecs::to_wstring(name)}); |
|
|
|
|
if(name != "code") { |
|
|
|
|
$gui.set<guecs::Clickable>(id, {[name](auto) { |
|
|
|
|
fmt::println("CLICKED {}", name); |
|
|
|
|
}}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto id = $gui.entity("Pause"); |
|
|
|
|
$gui.set<guecs::Clickable>(id, {[&](auto) { |
|
|
|
|
$paused = true; |
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
id = $gui.entity("Step"); |
|
|
|
|
$gui.set<guecs::Clickable>(id, {[&](auto) { |
|
|
|
|
$step = true; |
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
id = $gui.entity("Play"); |
|
|
|
|
$gui.set<guecs::Clickable>(id, {[&](auto) { |
|
|
|
|
$paused = false; |
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
id = $gui.entity("Restart"); |
|
|
|
|
$gui.set<guecs::Clickable>(id, {[&](auto) { |
|
|
|
|
$restart = true; |
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
$gui.init(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -33,6 +48,20 @@ void ControlPanel::render(sf::RenderTarget& window) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ControlPanel::update(Chip8& vm) { |
|
|
|
|
if($restart) { |
|
|
|
|
vm.needs_restart = true; |
|
|
|
|
$restart = false; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vm.paused = $paused; |
|
|
|
|
|
|
|
|
|
if($step && $paused) { |
|
|
|
|
vm.Cycle(); |
|
|
|
|
vm.needs_render = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$step = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool ControlPanel::mouse(float x, float y, guecs::Modifiers mods) { |
|
|
|
|
|