2026-10-09 08:54:31 +02:00

62 lines
1.3 KiB
C++

#include <deerith/universe.h>
#include <deerith/core/log.h>
#include <deerith/core/tick.h>
#include "../network/network_internals.h"
#include <thread>
#include <memory>
namespace deerith
{
std::unique_ptr<std::thread> universe_thread = {};
std::atomic<bool> 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<std::thread>(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();
}