A bit more cleanup, but still looking for more organization.
This commit is contained in:
parent
e42647d727
commit
1bb8999610
6 changed files with 50 additions and 34 deletions
|
@ -1,28 +1,30 @@
|
|||
#pragma once
|
||||
#include "dinkyecs.hpp"
|
||||
|
||||
struct Player {
|
||||
namespace Components {
|
||||
struct Player {
|
||||
DinkyECS::Entity entity;
|
||||
};
|
||||
};
|
||||
|
||||
struct Position {
|
||||
struct Position {
|
||||
Point location;
|
||||
};
|
||||
};
|
||||
|
||||
struct Motion {
|
||||
struct Motion {
|
||||
int dx;
|
||||
int dy;
|
||||
};
|
||||
};
|
||||
|
||||
struct Combat {
|
||||
struct Combat {
|
||||
int hp;
|
||||
int damage;
|
||||
};
|
||||
};
|
||||
|
||||
struct Treasure {
|
||||
struct Treasure {
|
||||
int amount;
|
||||
};
|
||||
};
|
||||
|
||||
struct Tile {
|
||||
struct Tile {
|
||||
std::string chr = "!";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
24
gui.cpp
24
gui.cpp
|
@ -26,6 +26,7 @@ using std::string;
|
|||
using namespace fmt;
|
||||
using namespace std::chrono_literals;
|
||||
using namespace ftxui;
|
||||
using namespace Components;
|
||||
|
||||
std::array<sf::Color, 10> VALUES{
|
||||
sf::Color{1, 4, 2}, // black
|
||||
|
@ -116,8 +117,9 @@ void GUI::create_renderer() {
|
|||
});
|
||||
}
|
||||
|
||||
void GUI::handle_events() {
|
||||
bool GUI::handle_events() {
|
||||
sf::Event event;
|
||||
bool event_happened = false;
|
||||
auto player = $world.get<Player>();
|
||||
auto& player_motion = $world.component<Motion>(player.entity);
|
||||
|
||||
|
@ -127,21 +129,28 @@ void GUI::handle_events() {
|
|||
} else if(event.type == sf::Event::KeyPressed) {
|
||||
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
|
||||
player_motion.dx = -1;
|
||||
event_happened = true;
|
||||
} else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
|
||||
player_motion.dx = 1;
|
||||
event_happened = true;
|
||||
} else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
|
||||
player_motion.dy = -1;
|
||||
event_happened = true;
|
||||
} else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
|
||||
player_motion.dy = 1;
|
||||
event_happened = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// COMPOSE system? You create a bunch of callbacks and then combine them into
|
||||
// a single run over the data?
|
||||
return event_happened;
|
||||
}
|
||||
|
||||
void GUI::run_systems() {
|
||||
auto player = $world.get<Player>();
|
||||
System::enemy_pathing($world, $game_map, player);
|
||||
System::motion($world, $game_map);
|
||||
System::combat($world, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::burn() {
|
||||
|
@ -225,7 +234,10 @@ int GUI::main() {
|
|||
|
||||
while($window.isOpen()) {
|
||||
render_scene();
|
||||
handle_events();
|
||||
|
||||
if(handle_events()) {
|
||||
run_systems();
|
||||
}
|
||||
|
||||
std::this_thread::sleep_for(10ms);
|
||||
}
|
||||
|
|
5
gui.hpp
5
gui.hpp
|
@ -48,8 +48,6 @@ class GUI {
|
|||
sf::Font $font;
|
||||
sf::Text $ui_text;
|
||||
sf::Text $map_text;
|
||||
bool $shake_it = false;
|
||||
bool $burn_baby_burn = false;
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> $converter;
|
||||
sf::RenderWindow $window;
|
||||
Screen $screen;
|
||||
|
@ -65,11 +63,12 @@ public:
|
|||
sf::Color color(int val);
|
||||
void create_renderer();
|
||||
void render_scene();
|
||||
void handle_events();
|
||||
bool handle_events();
|
||||
void draw_screen(bool clear=true, float map_off_x=0.0f, float map_off_y=0.0f);
|
||||
void shake();
|
||||
void burn();
|
||||
void configure_world();
|
||||
void run_systems();
|
||||
|
||||
int main();
|
||||
};
|
||||
|
|
|
@ -7,4 +7,5 @@ mkdir subprojects
|
|||
mv packagecache ./subprojects/
|
||||
mkdir builddir
|
||||
cp wraps/*.wrap subprojects/
|
||||
meson setup --default-library=static --prefer-static builddir
|
||||
# on OSX you can't do this with static
|
||||
meson setup builddir
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "systems.hpp"
|
||||
|
||||
using namespace Components;
|
||||
|
||||
void System::enemy_pathing(DinkyECS::World &world, Map &game_map, Player &player) {
|
||||
// move enemies system
|
||||
world.system<Position, Motion>([&](const auto &ent, auto &position, auto &motion) {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
namespace System {
|
||||
void motion(DinkyECS::World &world, Map &game_map);
|
||||
void combat(DinkyECS::World &world, Player &player);
|
||||
void combat(DinkyECS::World &world, Components::Player &player);
|
||||
void draw_entities(DinkyECS::World &world, ftxui::Canvas &canvas);
|
||||
void enemy_pathing(DinkyECS::World &world, Map &game_map, Player &player);
|
||||
void enemy_pathing(DinkyECS::World &world, Map &game_map, Components::Player &player);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue