The next little game in the series where I make a fancy rogue 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.
roguish/main.cpp

85 lines
2.1 KiB

#include "gui.hpp"
#include "dinkyecs.hpp"
#include "systems.hpp"
#include "events.hpp"
#include "components.hpp"
#include "dbc.hpp"
#include "collider.hpp"
#include "render.hpp"
#include "config.hpp"
#include "ftxui/screen/terminal.hpp" // for SetColorSupport, Color, TrueColor
using namespace ftxui;
/*
* This needs to be turned into a real world generator
* system.
*/
void configure_world(DinkyECS::World &world, Map &game_map) {
const auto &config = world.get_the<MapConfig>();
// this sets up the gui event system
world.set_the<Events::GUI>(Events::GUI::START);
// configure a player as a fact of the world
Player player{world.entity()};
world.set_the<Player>(player);
spatial_map collider;
world.set_the<spatial_map>(collider);
world.set<Position>(player.entity, {game_map.place_entity(0)});
world.set<Motion>(player.entity, {0, 0});
world.set<Combat>(player.entity, {100, 10});
world.set<Tile>(player.entity, {config.PLAYER_TILE});
auto enemy = world.entity();
world.set<Position>(enemy, {game_map.place_entity(1)});
world.set<Motion>(enemy, {0,0});
world.set<Combat>(enemy, {20, 10});
world.set<Tile>(enemy, {config.ENEMY_TILE});
auto enemy2 = world.entity();
world.set<Position>(enemy2, {game_map.place_entity(2)});
world.set<Motion>(enemy2, {0,0});
world.set<Combat>(enemy2, {20, 10});
world.set<Tile>(enemy2, {"*"});
auto gold = world.entity();
world.set<Position>(gold, {game_map.place_entity(game_map.room_count() - 1)});
world.set<Treasure>(gold, {100});
world.set<Tile>(gold, {"$"});
}
int main() {
DinkyECS::World world;
Config config("./assets/config.json");
world.set_the<Config>(config);
auto map = config["map"];
world.set_the<MapConfig>({
map["WALL_TILE"],
map["FLOOR_TILE"],
map["PLAYER_TILE"],
map["ENEMY_TILE"],
map["BG_TILE"]
});
auto enemy = config["enemy"];
world.set_the<EnemyConfig>({
enemy["HEARING_DISTANCE"]
});
Map game_map(GAME_MAP_X, GAME_MAP_Y);
game_map.generate();
configure_world(world, game_map);
System::init_positions(world);
GUI gui(world, game_map);
return gui.main();
}