#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 "save.hpp" #include "lights.hpp" #include "ftxui/screen/terminal.hpp" // for SetColorSupport, Color, TrueColor #include #include #if defined(_WIN64) || defined(_WIN32) #include #endif using namespace ftxui; using lighting::LightSource; namespace fs = std::filesystem; /* * 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(); // configure a player as a fact of the world Player player{world.entity()}; world.set_the(player); world.set(player.entity, {game_map.place_entity(0)}); world.set(player.entity, {0, 0}); world.set(player.entity, {100, 10}); world.set(player.entity, {config.PLAYER_TILE}); world.set(player.entity, {5}); world.set(player.entity, {6,1}); auto enemy = world.entity(); world.set(enemy, {game_map.place_entity(1)}); world.set(enemy, {0,0}); world.set(enemy, {20, 10}); world.set(enemy, {config.ENEMY_TILE}); auto enemy2 = world.entity(); world.set(enemy2, {game_map.place_entity(2)}); world.set(enemy2, {0,0}); world.set(enemy2, {20, 10}); world.set(enemy2, {"*"}); world.set(enemy2, {7,1}); auto gold = world.entity(); world.set(gold, {game_map.place_entity(3)}); world.set(gold, {100}); world.set(gold, {"$"}); auto wall_torch = world.entity(); world.set(wall_torch, {game_map.place_entity(4)}); world.set(wall_torch, {2,3}); world.set(wall_torch, {"☀"}); } const int GAME_MAP_X = 40; const int GAME_MAP_Y = 40; int main(int argc, char *argv[]) { #if defined(_WIN64) || defined(_WIN32) _setmode(_fileno(stdout), _O_U16TEXT); #endif DinkyECS::World world; Map game_map(GAME_MAP_X, GAME_MAP_Y); save::load_configs(world); if(argc == 2) { fmt::println("Loading save file {}", argv[1]); fs::path save_path{argv[1]}; save::from_file(save_path, world, game_map); } else { game_map.generate(); configure_world(world, game_map); } spatial_map collider; world.set_the(collider); System::init_positions(world); GUI gui(world, game_map); return gui.main(); }