// // Created by sebastian on 02.08.26. // #include "PiecePresenter.h" #include "ecs/standardComponents/MeshComponent.h" #include "ecs/standardComponents/PickableComponent.h" #include "ecs/standardComponents/TransformComponent.h" void ludo::PiecePresenter::spawnPieces(const ludo::LudoGameState &state) { for (const auto& piece : state.getPieces()) { auto entity = m_registry.createEntity(); const auto transform = engine::TransformComponent( m_layout.getWorldPosition(piece.color, piece.state, piece.position), {0,0,0}, {0.334296f, 0.334296f, 0.334296f}); m_registry.addComponent(entity, transform); m_registry.addComponent(entity, engine::MeshComponent(m_pieceModels[std::string(ludo::toString(piece.color))])); m_registry.addComponent(entity, engine::PickableComponent(kPieceRadius)); m_pieceEntities.push_back(entity); } } void ludo::PiecePresenter::onPieceMoved(const ludo::PieceMovedEvent &event, const ludo::LudoGameState &state) { const auto& piece = state.getPieces()[event.pieceIndex]; auto target = m_layout.getWorldPosition(piece.color, piece.state, piece.position); auto entity = m_pieceEntities[event.pieceIndex]; auto& transform = m_registry.getComponent(entity); transform.m_position = target; } std::optional ludo::PiecePresenter::getPieceIndex(std::optional::value_type entity) { auto it = std::ranges::find(m_pieceEntities, entity); if (it == m_pieceEntities.end()) return std::nullopt; return static_cast(std::distance(m_pieceEntities.begin(), it)); }