Refactored the GUECS system to have its own namespace then got Meter to work.
This commit is contained in:
parent
9c66e870d2
commit
722d55d948
9 changed files with 206 additions and 177 deletions
91
guecs.hpp
Normal file
91
guecs.hpp
Normal file
|
@ -0,0 +1,91 @@
|
|||
#pragma once
|
||||
#include "color.hpp"
|
||||
#include "dinkyecs.hpp"
|
||||
#include "lel.hpp"
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <SFML/Graphics.hpp>
|
||||
#include "texture.hpp"
|
||||
|
||||
namespace guecs {
|
||||
using std::shared_ptr, std::make_shared;
|
||||
|
||||
struct Textual {
|
||||
std::string label;
|
||||
shared_ptr<sf::Font> font = nullptr;
|
||||
shared_ptr<sf::Text> text = nullptr;
|
||||
|
||||
void init(lel::Cell &cell, shared_ptr<sf::Font> font_ptr) {
|
||||
font = font_ptr;
|
||||
text = make_shared<sf::Text>(*font, label);
|
||||
|
||||
auto bounds = text->getLocalBounds();
|
||||
auto text_cell = lel::center(bounds.size.x, bounds.size.y, cell);
|
||||
// this stupid / 2 is because SFML renders from baseline rather than from the claimed bounding box
|
||||
text->setPosition({float(text_cell.x), float(text_cell.y) - text_cell.h / 2});
|
||||
}
|
||||
};
|
||||
|
||||
struct Clickable {
|
||||
int event = 0;
|
||||
};
|
||||
|
||||
struct Sprite {
|
||||
std::string name;
|
||||
std::shared_ptr<sf::Sprite> sprite = nullptr;
|
||||
std::shared_ptr<sf::Texture> texture = nullptr;
|
||||
};
|
||||
|
||||
struct Rectangle {
|
||||
shared_ptr<sf::RectangleShape> shape = nullptr;
|
||||
|
||||
void init(lel::Cell& cell) {
|
||||
sf::Vector2f size{(float)cell.w, (float)cell.h};
|
||||
if(shape == nullptr) shape = make_shared<sf::RectangleShape>(size);
|
||||
shape->setPosition({float(cell.x + 3), float(cell.y + 3)});
|
||||
shape->setSize({float(cell.w - 6), float(cell.h - 6)});
|
||||
shape->setFillColor(ColorValue::DARK_MID);
|
||||
shape->setOutlineColor(ColorValue::MID);
|
||||
shape->setOutlineThickness(1);
|
||||
}
|
||||
};
|
||||
|
||||
struct Meter {
|
||||
float percent = 1.0f;
|
||||
Rectangle bar;
|
||||
|
||||
void init(lel::Cell& cell) {
|
||||
bar.init(cell);
|
||||
}
|
||||
};
|
||||
|
||||
struct CellName {
|
||||
std::string name;
|
||||
};
|
||||
|
||||
class UI {
|
||||
public:
|
||||
DinkyECS::World $world;
|
||||
shared_ptr<sf::Font> $font = nullptr;
|
||||
lel::Parser $parser;
|
||||
std::string $grid = "";
|
||||
|
||||
UI();
|
||||
|
||||
void position(int x, int y, int width, int height);
|
||||
void layout(std::string grid);
|
||||
DinkyECS::Entity entity(std::string name);
|
||||
|
||||
inline lel::CellMap& cells() {
|
||||
return $parser.cells;
|
||||
}
|
||||
|
||||
inline DinkyECS::World& world() {
|
||||
return $world;
|
||||
}
|
||||
|
||||
void init(TexturePack& textures);
|
||||
void render(sf::RenderWindow& window);
|
||||
void mouse(sf::RenderWindow &window);
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue