Meter is improved but needs a few more things.
This commit is contained in:
parent
3d44b7ccc5
commit
1950f45f46
5 changed files with 141 additions and 22 deletions
100
demos/meters.cpp
Normal file
100
demos/meters.cpp
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
#include "guecs/sfml/backend.hpp"
|
||||
#include "guecs/sfml/components.hpp"
|
||||
#include "guecs/uistack.hpp"
|
||||
#include "guecs/ui.hpp"
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
#include <flat_map>
|
||||
#include <fmt/core.h>
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
struct TestMeters {
|
||||
guecs::UI $gui{};
|
||||
|
||||
void init() {
|
||||
$gui.position(0, 0, 1280, 720);
|
||||
$gui.layout("[meter1][=meter2][meter3][meter4]");
|
||||
|
||||
for(auto& [name, cell] : $gui.cells()) {
|
||||
auto gui_id = $gui.entity(name);
|
||||
|
||||
$gui.set<guecs::Rectangle>(gui_id, {4, {0, 255, 0, 255}});
|
||||
$gui.set<guecs::Meter>(gui_id, {1.0f, {255, 0, 0, 255}, 4});
|
||||
$gui.set<guecs::Effect>(gui_id, {});
|
||||
$gui.set<guecs::Text>(gui_id, {guecs::to_wstring(name)});
|
||||
$gui.set<guecs::Clickable>(gui_id, {
|
||||
[&, gui_id, name](auto) {
|
||||
auto& meter = $gui.get<guecs::Meter>(gui_id);
|
||||
meter.percent = meter.percent - 0.1f;
|
||||
if(meter.percent < 0.0f) {
|
||||
meter.percent = 1.0f;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$gui.init();
|
||||
}
|
||||
|
||||
void render(sf::RenderTarget& target) {
|
||||
$gui.render(target);
|
||||
}
|
||||
|
||||
bool mouse(float x, float y, guecs::Modifiers mods) {
|
||||
return $gui.mouse(x, y, mods);
|
||||
}
|
||||
|
||||
void update() {
|
||||
}
|
||||
};
|
||||
|
||||
int main() {
|
||||
try {
|
||||
sfml::Backend backend;
|
||||
guecs::init(&backend);
|
||||
|
||||
sf::RenderWindow window(sf::VideoMode({1280, 720}), "Meter Tester");
|
||||
window.setVerticalSyncEnabled(true);
|
||||
window.setFramerateLimit(60);
|
||||
window.setPosition({0,0});
|
||||
TestMeters gui;
|
||||
gui.init();
|
||||
|
||||
while(window.isOpen()) {
|
||||
while (const auto event = window.pollEvent()) {
|
||||
if(event->is<sf::Event::Closed>()) {
|
||||
window.close();
|
||||
}
|
||||
|
||||
if(const auto* mouse = event->getIf<sf::Event::MouseButtonPressed>()) {
|
||||
if(mouse->button == sf::Mouse::Button::Left) {
|
||||
sf::Vector2f pos = window.mapPixelToCoords(mouse->position);
|
||||
gui.mouse(pos.x, pos.y, false);
|
||||
}
|
||||
} else if(const auto* key = event->getIf<sf::Event::KeyPressed>()) {
|
||||
using KEY = sf::Keyboard::Scan;
|
||||
|
||||
switch(key->scancode) {
|
||||
case KEY::Q:
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gui.update();
|
||||
gui.render(window);
|
||||
window.display();
|
||||
|
||||
std::this_thread::sleep_for(100ms);
|
||||
}
|
||||
} catch(const std::system_error& e) {
|
||||
std::cout << "WARNING: On OSX you'll get this error on shutdown.\n";
|
||||
std::cout << "Caught system_error with code "
|
||||
"[" << e.code() << "] meaning "
|
||||
"[" << e.what() << "]\n";
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue