62 lines
1.3 KiB
C++
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();
|
|
} |