#include "ui/mainApplication.h" #include "ui/mainWindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // IWYU pragma: keep #include #include #include #include #include #include #include #include constexpr ScreenAbsCoord DEFAULT_WINDOW_SIZE {1280, 1024}; class DummyMainApplication : public GameState, public MainApplication { public: int run() { windows.create(DEFAULT_WINDOW_SIZE, "I Like Trains")->setContent(); terrain = world.create(GeoData::loadFromAsciiGrid("test/fixtures/height/SD19.asc")); world.create(terrain); assets = AssetFactory::loadAll("res"); { auto railLinks = world.create(); const auto nodes = materializeRange(std::vector { {315103000, 491067000}, {315977000, 490777000}, {316312000, 490557000}, {316885000, 491330000}, {316510934, 491255979}, {316129566, 490893054}, {315825622, 490833929}, {315106182, 491073714}, {314955393, 490999023}, } | std::views::transform([this](const auto n) { return terrain->positionAt(n); })); Link::Ptr l3; for (std::optional previousDir; const auto [fromPos, toPos] : std::views::pairwise(nodes)) { const auto links = railLinks->create({ .fromEnd = {.position = fromPos, .direction = previousDir}, .toEnd = {.position = toPos, .direction = std::nullopt}, }); for (const auto & link : links) { railLinks->add(terrain.get(), link); } l3 = links.back(); previousDir = links.back()->endAt(toPos)->dir; } const std::shared_ptr train = world.create(l3, 0); auto b47 = assets.at("brush-47").dynamicCast(); for (int N = 0; N < 6; N++) { train->create(b47); } train->orders.clear(); train->orders.create(&train->orders); train->currentActivity = train->orders.current()->createActivity(); std::random_device randomdev {}; std::uniform_real_distribution rotationDistribution {0, two_pi}; std::uniform_int_distribution positionOffsetDistribution {-1500, +1500}; std::uniform_int_distribution treeDistribution {1, 3}; std::uniform_int_distribution treeVariantDistribution {1, 4}; for (auto x = 311000000; x < 311830000; x += 5000) { for (auto y = 491100000; y < 491130000; y += 5000) { world.create(assets.at(std::format("Tree-{:#02}-{}", treeDistribution(randomdev), treeVariantDistribution(randomdev))) .dynamicCast(), Location {terrain->positionAt({{x + positionOffsetDistribution(randomdev), y + positionOffsetDistribution(randomdev)}}), {0, rotationDistribution(randomdev), 0}}); } } } mainLoop(); world.clear(); return 0; } }; int main(int, char **) { return std::make_shared()->run(); }