#include #include "World.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include World::World() : m_runner(m_dispatcher) , m_transport(*this, m_dispatcher) , m_modSystem(m_dispatcher) , m_lastFrameTime{std::chrono::high_resolution_clock::now()} { ctx().emplace(); ctx().emplace(*this, m_dispatcher); ctx().emplace(*this, m_transport, m_dispatcher); ctx().emplace(ctx().at()); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(m_dispatcher, *this, m_transport, ctx().at()); ctx().emplace(m_dispatcher); ctx().emplace(m_dispatcher); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(*this, m_dispatcher); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(*this, m_transport, m_dispatcher); ctx().emplace(*this, m_dispatcher, m_transport); ctx().emplace(m_dispatcher); ctx().emplace(*this, m_transport, m_dispatcher); ctx().emplace(*this, m_transport, m_dispatcher); ctx().emplace(*this, m_dispatcher, m_transport); BehaviorVar::Get()->Init(); } World::~World() = default; void World::Update() noexcept { const auto cNow = std::chrono::high_resolution_clock::now(); const auto cDelta = cNow - m_lastFrameTime; m_lastFrameTime = cNow; const auto cDeltaSeconds = std::chrono::duration_cast>(cDelta).count(); m_dispatcher.trigger(PreUpdateEvent(cDeltaSeconds)); // Force run this before so we get the tasks scheduled to run m_runner.OnUpdate(UpdateEvent(cDeltaSeconds)); m_dispatcher.trigger(UpdateEvent(cDeltaSeconds)); } RunnerService& World::GetRunner() noexcept { return m_runner; } TransportService& World::GetTransport() noexcept { return m_transport; } ModSystem& World::GetModSystem() noexcept { return m_modSystem; } uint64_t World::GetTick() const noexcept { return m_transport.GetClock().GetCurrentTick(); } void World::Create() noexcept { if (!entt::locator::has_value()) { entt::locator::emplace(); } } World& World::Get() noexcept { return entt::locator::value(); }