Reworked the gui to use GUECS now so lots of code soon to die.

master
Zed A. Shaw 2 days ago
parent e78340a0cd
commit 70c2ce7d51
  1. 29
      assets/config.json
  2. 1
      assets/tiles.json
  3. 16
      color.hpp
  4. 12
      constants.hpp
  5. 52
      gui.cpp
  6. 4
      gui.hpp
  7. 1
      main.cpp
  8. 14
      sfmlbackend.cpp
  9. 6
      sfmlbackend.hpp

@ -0,0 +1,29 @@
{
"sounds": {
"you_died": "./assets/you_died.mp3",
"build_success": "./assets/build_success.mp3",
"build_failed": "./assets/build_failed.mp3",
"building": "./mysounds/building.mp3"
},
"sprites": {
"build_success": {
"path": "./assets/build_success.png",
"frame_width": 240,
"frame_height": 240},
"you_died": {
"path": "./assets/you_died.png",
"frame_width": 240,
"frame_height": 240},
"build_failed": {
"path": "./assets/build_failed.png",
"frame_width": 240,
"frame_height": 240},
"building": {
"path": "./assets/building.png",
"frame_width": 240,
"frame_height": 240}
},
"graphics": {
"smooth_textures": false
}
}

@ -2,14 +2,14 @@
#include <SFML/Graphics/Color.hpp>
namespace ColorValue {
const sf::Color BLACK{0, 0, 0};
const sf::Color DARK_DARK{10, 10, 10};
const sf::Color DARK_MID{30, 30, 30};
const sf::Color DARK_LIGHT{60, 60, 60};
const sf::Color MID{100, 100, 100};
const sf::Color LIGHT_DARK{150, 150, 150};
const sf::Color LIGHT_MID{200, 200, 200};
const sf::Color LIGHT_LIGHT{230, 230, 230};
const sf::Color BLACK{1, 4, 2};
const sf::Color DARK_DARK{9, 29, 16};
const sf::Color DARK_MID{14, 50, 26};
const sf::Color DARK_LIGHT{0, 109, 44};
const sf::Color MID{63, 171, 92};
const sf::Color LIGHT_DARK{161, 217, 155};
const sf::Color LIGHT_MID{199, 233, 192};
const sf::Color LIGHT_LIGHT{229, 245, 224};
const sf::Color WHITE{255, 255, 255};
const sf::Color TRANSPARENT = sf::Color::Transparent;
}

@ -4,20 +4,18 @@
#include "color.hpp"
#include <array>
constexpr const int TEXTURE_WIDTH=256;
constexpr const int TEXTURE_HEIGHT=256;
constexpr const int SCREEN_WIDTH=1280;
constexpr const int SCREEN_HEIGHT=720;
constexpr const int SCREEN_WIDTH= 1920 / 2;
constexpr const int SCREEN_HEIGHT= 1080 / 2;
constexpr const bool VSYNC=false;
constexpr const int FRAME_LIMIT=60;
constexpr const int GUECS_PADDING = 3;
constexpr const int GUECS_BORDER_PX = 1;
constexpr const int GUECS_FONT_SIZE = 30;
const sf::Color GUECS_FILL_COLOR = ColorValue::DARK_MID;
constexpr const int GUECS_FONT_SIZE = 40;
const sf::Color GUECS_FILL_COLOR = ColorValue::DARK_DARK;
const sf::Color GUECS_TEXT_COLOR = ColorValue::LIGHT_LIGHT;
const sf::Color GUECS_BG_COLOR = ColorValue::MID;
const sf::Color GUECS_BG_COLOR = ColorValue::BLACK;
const sf::Color GUECS_BORDER_COLOR = ColorValue::MID;
constexpr const char *FONT_FILE_NAME="assets/text.ttf";

@ -14,7 +14,41 @@
using std::string, std::vector;
GUI::GUI(SFMLBackend &backend) : gui(backend) {
GUI::GUI(SFMLBackend &backend) : sfml(backend) {
using namespace guecs;
$gui.position(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
$gui.layout(
"[*%(200,300)face|_|*%(100,300)stats|*%(200,500)log|_]"
"[_|_|_|_|_]"
"[_|_|_|_|_]"
"[*%(300,200)clock|_|_|_|_]"
"[_|_|_|_|_]"
"[hp_bar]");
$gui.world().set_the<Background>({$gui.$parser, ColorValue::DARK_MID});
for(auto& [name, cell] : $gui.cells()) {
auto ent = $gui.entity(name);
$gui.set<Rectangle>(ent, {});
}
auto face = $gui.entity("face");
$gui.set<Sprite>(face, {"building"});
auto stats = $gui.entity("stats");
$gui.set<Textual>(stats, {L"STATS"});
auto log = $gui.entity("log");
$gui.set<Textual>(log, {L"LOG"});
auto clock = $gui.entity("clock");
$gui.set<Label>(clock, {L"00:00:00", 110});
auto hp_bar = $gui.entity("hp_bar");
$gui.set<Meter>(hp_bar, {});
$gui.init();
}
void GUI::output(const string msg) {
@ -23,20 +57,22 @@ void GUI::output(const string msg) {
}
void GUI::main_loop() {
gui.handle_events();
gui.update_entities();
gui.update_log(_lines);
$gui.render(sfml.window);
// $gui.debug_layout(sfml.window);
sfml.handle_events();
// sfml.update_entities();
sfml.update_log(_lines);
}
void GUI::build_success() {
gui.change_face("build_success");
sfml.change_face("build_success");
sound::stop("building");
sound::play("build_success");
output("BUILD FINISHED!");
}
void GUI::build_failed(bool play_sound, const string &command) {
gui.change_face("build_failed");
sfml.change_face("build_failed");
sound::stop("building");
if(play_sound) {
@ -47,7 +83,7 @@ void GUI::build_failed(bool play_sound, const string &command) {
}
void GUI::you_died() {
gui.change_face("you_died");
sfml.change_face("you_died");
sound::stop("building");
sound::play("you_died");
output("!!!! YOU DIED! !!!! Learn to code luser.");
@ -55,7 +91,7 @@ void GUI::you_died() {
}
void GUI::building() {
gui.change_face("building");
sfml.change_face("building");
output("############# START ############");
output(">>>> Will it Build?");
sound::play("building");

@ -3,6 +3,7 @@
#include <string>
#include "game_engine.hpp"
#include "sfmlbackend.hpp"
#include "guecs.hpp"
using std::string;
@ -10,7 +11,8 @@ class Builder;
class GUI {
std::vector<string> _lines;
SFMLBackend &gui;
SFMLBackend &sfml;
guecs::UI $gui;
public:

@ -19,6 +19,7 @@ int main()
while(backend.is_open()) {
builder.event(BuildEvent::GO);
gui.main_loop();
backend.window.display();
}
builder.event(BuildEvent::QUIT);

@ -33,14 +33,11 @@ std::array<sf::Color, 10> VALUES{
};
SFMLBackend::SFMLBackend(GameEngine &g)
: window(sf::VideoMode({X_DIM, Y_DIM}), "Turing's Tarpit"),
: window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Turing's Tarpit"),
game(g), current_face(textures::get("building"))
{
}
void SFMLBackend::Window_update() {
window.display();
}
sf::Color SFMLBackend::value(Value level) {
return VALUES.at(int(level));
@ -57,8 +54,8 @@ void SFMLBackend::handle_events() {
}
sf::Vector2f translate(int x, int y) {
float step_x = X_DIM / TEXT_SIZE;
float step_y = (Y_DIM - 12) / TEXT_SIZE;
float step_x = SCREEN_WIDTH / TEXT_SIZE;
float step_y = (SCREEN_HEIGHT - 12) / TEXT_SIZE;
sf::Vector2f position{step_x * x, step_y * y * 2};
@ -121,7 +118,6 @@ void SFMLBackend::update_entities() {
string time = fmt::format("{:%H:%M:%OS}", elapsed_time);
write_text(7, 14, time, 2.0f);
Window_update();
}
void SFMLBackend::change_face(const string& name) {
@ -150,8 +146,8 @@ void SFMLBackend::startup() {
window.setPosition({0,0});
window.setFramerateLimit(FPS);
window.setVerticalSyncEnabled(true);
window.setFramerateLimit(FRAME_LIMIT);
window.setVerticalSyncEnabled(VSYNC);
}
bool SFMLBackend::is_open() {

@ -18,10 +18,6 @@ enum class Value {
LIGHT_LIGHT, WHITE, TRANSPARENT
};
constexpr int FPS=30;
constexpr int X_DIM = 1920 / 2;
constexpr int Y_DIM = 1080 / 2;
constexpr int TEXT_SIZE = 48;
constexpr Value TEXT_COLOR = Value::LIGHT_LIGHT;
constexpr int Y_LINES = 23;
@ -35,6 +31,7 @@ enum class Button {
};
class SFMLBackend {
public:
sf::ContextSettings settings;
sf::RenderWindow window;
std::chrono::time_point<std::chrono::system_clock> clock_start;
@ -45,7 +42,6 @@ class SFMLBackend {
GameEngine &game;
textures::SpriteTexture current_face;
public:
SFMLBackend(GameEngine &g);
// prevent copy

Loading…
Cancel
Save