A weird game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
turings-tarpit/gui.cpp

98 lines
2.4 KiB

#include "gui.hpp"
#include <stdlib.h> // for EXIT_SUCCESS
#include <chrono> // for milliseconds
#include <fmt/core.h>
#include <memory> // for allocator, shared_ptr
#include <string> // for operator+, to_string
#include <vector>
#include <SFML/Audio.hpp>
#include <nlohmann/json.hpp>
#include "builder.hpp"
#include <fstream>
#include <iostream>
#include "sound.hpp"
using std::string, std::vector;
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) {
// _lines.push_back(msg);
std::cout << msg << std::endl;
}
void GUI::main_loop() {
$gui.render(sfml.window);
// $gui.debug_layout(sfml.window);
sfml.handle_events();
// sfml.update_entities();
sfml.update_log(_lines);
}
void GUI::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) {
sfml.change_face("build_failed");
sound::stop("building");
if(play_sound) {
sound::play("build_failed");
}
output(fmt::format("!!! BUILD FAILED. Your command correct? '{}'", command));
}
void GUI::you_died() {
sfml.change_face("you_died");
sound::stop("building");
sound::play("you_died");
output("!!!! YOU DIED! !!!! Learn to code luser.");
output("YOU DIED!");
}
void GUI::building() {
sfml.change_face("building");
output("############# START ############");
output(">>>> Will it Build?");
sound::play("building");
}