2026-01-04 23:11:58 +08:00
|
|
|
#include "dll_loader.hpp"
|
2026-01-08 19:37:25 +08:00
|
|
|
#include "cmd_client.hpp"
|
2026-01-09 19:29:39 +08:00
|
|
|
#include "stopwatch.hpp"
|
2026-01-06 16:27:19 +08:00
|
|
|
#include <basalt/char_types.hpp>
|
2026-01-08 20:25:33 +08:00
|
|
|
#include <basalt/engine.hpp>
|
|
|
|
|
#include <basalt/deliver.hpp>
|
2026-01-09 22:50:24 +08:00
|
|
|
#include <spdlog/spdlog.h>
|
2026-01-08 20:25:33 +08:00
|
|
|
|
|
|
|
|
namespace engine = ::basalt::shared::engine;
|
|
|
|
|
using engine::EngineConfig;
|
|
|
|
|
using engine::IEngine;
|
|
|
|
|
namespace deliver = ::basalt::shared::deliver;
|
|
|
|
|
using deliver::DeliverConfig;
|
|
|
|
|
using deliver::IDeliver;
|
2026-01-10 20:02:50 +08:00
|
|
|
namespace object_loader = ::basalt::shared::object_loader;
|
|
|
|
|
using object_loader::IObjectLoader;
|
|
|
|
|
using object_loader::ObjectLoaderConfig;
|
|
|
|
|
namespace anime_loader = ::basalt::shared::anime_loader;
|
|
|
|
|
using anime_loader::AnimeLoaderConfig;
|
|
|
|
|
using anime_loader::IAnimeLoader;
|
2026-01-04 23:11:58 +08:00
|
|
|
|
2026-01-08 19:37:25 +08:00
|
|
|
namespace dll_loader = ::basalt::presenter::dll_loader;
|
|
|
|
|
using dll_loader::DllKind;
|
|
|
|
|
using dll_loader::DllLoader;
|
|
|
|
|
|
|
|
|
|
using ::basalt::presenter::cmd_client::CmdClient;
|
2026-01-09 19:29:39 +08:00
|
|
|
using ::basalt::presenter::stopwatch::Stopwatch;
|
2025-11-25 13:38:17 +08:00
|
|
|
|
|
|
|
|
int main(int argc, char* argv[]) {
|
2026-01-08 19:37:25 +08:00
|
|
|
auto client = CmdClient();
|
2026-01-09 22:50:24 +08:00
|
|
|
spdlog::info("Waiting BasaltTrainer...");
|
2026-01-08 19:37:25 +08:00
|
|
|
auto payload = client.wait_handshake();
|
2026-01-10 17:10:14 +08:00
|
|
|
spdlog::info("BasaltTrainer Requirements:");
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info(BSTEXT("\tHeadless Mode: {}"), payload.headless ? BSTEXT("Yes") : BSTEXT("No"));
|
|
|
|
|
spdlog::info(BSTEXT("\tResolution: {} x {}"), payload.width, payload.height);
|
2026-01-10 17:10:14 +08:00
|
|
|
spdlog::info(BSTEXT("\tEngine: {}"), payload.engine_name);
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info(BSTEXT("\tEngine Device: {}"), payload.engine_device);
|
|
|
|
|
spdlog::info(BSTEXT("\tDeliver: {}"), payload.deliver_name);
|
|
|
|
|
spdlog::info(BSTEXT("\tDeliver Device: {}"), payload.deliver_device);
|
2026-01-10 17:10:14 +08:00
|
|
|
spdlog::info(BSTEXT("\tObject Loader: {}"), payload.object_loader_name);
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info(BSTEXT("\tObject Loader File: {}"), payload.object_loader_file);
|
2026-01-10 17:10:14 +08:00
|
|
|
spdlog::info(BSTEXT("\tAnime Loader: {}"), payload.anime_loader_name);
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info(BSTEXT("\tAnime Loader File: {}"), payload.anime_loader_file);
|
2026-01-10 17:10:14 +08:00
|
|
|
|
|
|
|
|
spdlog::info("Finding plugins...");
|
|
|
|
|
auto engine_dll = DllLoader(DllKind::Engine, payload.engine_name);
|
2026-01-10 20:02:50 +08:00
|
|
|
auto deliver_dll = DllLoader(DllKind::Deliver, payload.deliver_name);
|
2026-01-10 17:10:14 +08:00
|
|
|
auto object_loader_dll = DllLoader(DllKind::ObjectLoader, payload.object_loader_name);
|
|
|
|
|
auto anime_loader_dll = DllLoader(DllKind::AnimeLoader, payload.anime_loader_name);
|
2026-01-06 21:24:47 +08:00
|
|
|
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info("Allocating instances...");
|
|
|
|
|
auto* anime_loader_inst = anime_loader_dll.create_instance<IAnimeLoader>();
|
|
|
|
|
auto* object_loader_inst = object_loader_dll.create_instance<IObjectLoader>();
|
|
|
|
|
auto* deliver_inst = deliver_dll.create_instance<IDeliver>();
|
|
|
|
|
auto* engine_inst = engine_dll.create_instance<IEngine>();
|
2026-01-05 16:51:58 +08:00
|
|
|
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info("Starting up...");
|
|
|
|
|
AnimeLoaderConfig anime_loader_config{.filename = payload.anime_loader_file};
|
|
|
|
|
anime_loader_inst->load(std::move(anime_loader_config));
|
|
|
|
|
ObjectLoaderConfig object_loader_config{.filename = payload.object_loader_file};
|
|
|
|
|
object_loader_inst->load(std::move(object_loader_config));
|
|
|
|
|
//DeliverConfig deliver_config{.device = payload.deliver_device};
|
|
|
|
|
//deliver_inst->startup(std::move(deliver_config));
|
|
|
|
|
EngineConfig engine_config{.headless = payload.headless,
|
|
|
|
|
.width = payload.width,
|
|
|
|
|
.height = payload.height,
|
|
|
|
|
//.deliver = deliver_inst->get_guid(),
|
|
|
|
|
.object_loader = object_loader_inst,
|
|
|
|
|
.anime_loader = anime_loader_inst};
|
|
|
|
|
engine_inst->startup(std::move(engine_config));
|
2026-01-04 23:11:58 +08:00
|
|
|
|
2026-01-09 22:50:24 +08:00
|
|
|
spdlog::info("Start to running.");
|
2026-01-09 19:29:39 +08:00
|
|
|
Stopwatch stopwatch(120);
|
2026-01-04 23:11:58 +08:00
|
|
|
while (true) {
|
2026-01-10 20:02:50 +08:00
|
|
|
auto req_stop = engine_inst->tick();
|
2026-01-09 19:29:39 +08:00
|
|
|
stopwatch.tick();
|
2026-01-08 19:37:25 +08:00
|
|
|
auto can_stop = client.tick(req_stop);
|
2026-01-06 21:24:47 +08:00
|
|
|
if (can_stop) break;
|
2026-01-04 23:11:58 +08:00
|
|
|
}
|
|
|
|
|
|
2026-01-10 20:02:50 +08:00
|
|
|
spdlog::info("Shutting down...");
|
|
|
|
|
engine_inst->shutdown();
|
|
|
|
|
|
|
|
|
|
spdlog::info("Destroying instances...");
|
|
|
|
|
engine_dll.destroy_instance(engine_inst);
|
|
|
|
|
deliver_dll.destroy_instance(deliver_inst);
|
|
|
|
|
object_loader_dll.destroy_instance(object_loader_inst);
|
|
|
|
|
anime_loader_dll.destroy_instance(anime_loader_inst);
|
2026-01-09 22:50:24 +08:00
|
|
|
|
|
|
|
|
spdlog::info("Program stop.");
|
2025-11-25 13:38:17 +08:00
|
|
|
}
|