#include #include #include #include "../network/network_internals.h" #include #include namespace deerith { std::unique_ptr universe_thread = {}; std::atomic universe_running = false; void universe_simulation(); } void deerith::begin_connection_to_universe(const char *address, int port) { deerith_assert(!universe_running, "begin_connection_to_universe failed because there is a current running universe"); if (universe_thread && universe_thread->joinable()) universe_thread->join(); universe_thread.reset(); connect_to_server(address, port); universe_running = true; universe_thread = std::make_unique(universe_simulation); } bool deerith::is_universe_running() { return universe_running; } void deerith::universe_simulation() { bool connected = wait_till_connected_to_server(); if (connected) { while (universe_running) { flush_network_events(); wait_for_tick(); } } deerith_trace("Universe stop"); universe_running = false; } void deerith::shutdown_universe() { universe_running = false; if (universe_thread && universe_thread->joinable()) universe_thread->join(); universe_thread.reset(); }