#include "GameState.hpp"

namespace tw::app {

GameState::GameState(GameContext context, std::unique_ptr<tw::net::ServerConnection> connection)
    : m_context(context),
      m_connection(std::move(connection)),
      m_entity_gui(context.world),
      m_network_gui(*context.metrics)
{
    m_controller = std::make_unique<tw::ClientWorldController>(
        m_context.input_manager,
        m_context.world,
        m_context.physics_world,
        m_context.renderer,
        m_connection.get(),
        m_context.metrics
    );

    m_context.debug_windows->add(&m_entity_gui);
    m_context.debug_windows->add(&m_network_gui);
}

GameState::~GameState() {
    m_context.debug_windows->remove(&m_entity_gui);
    m_context.debug_windows->remove(&m_network_gui);
}

void GameState::update(double delta_time) {
    m_controller->update(delta_time);
    m_context.world->step(delta_time);
}

} // namespace tw::app
