diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index c89c304..fa20611 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -1127,18 +1127,28 @@ void Engine::Render(float elapsedTime) { sendPackTo(m_conn.m_sock_udp, &input, &m_bufout, &m_conn.m_srvsockaddr); lsPck = recvPacks(m_conn.m_sock_udp, &m_buf); - - for (auto& pck : lsPck) { - uint32_t bsize = m_buf.len - (pck - m_buf.ptr); - netprot::Sync sync; - netprot::Output out; - switch (netprot::getType(pck, 1)) { - using enum netprot::PACKET_TYPE; + char* prevptr = nullptr; + for (auto& pck : lsPck) { // We could make a few threads out of this. + Sync sync; + Output out; + if (!prevptr) + prevptr = m_buf.ptr; + uint32_t bsize = m_buf.len - (pck - prevptr); + prevptr = pck; + switch (getType(pck, 1)) { + using enum PACKET_TYPE; case SYNC: - if (!netprot::Deserialize(&sync, pck, &bsize)) {} + if (Deserialize(&sync, pck, &bsize)) { + if (sync.sid != m_conn.getId()) + break; + // TODO: Vérifier si les positions concordent. + } break; case OUTPUT: - if (!netprot::Deserialize(&out, pck, &bsize)) {} + if (Deserialize(&out, pck, &bsize)) { + RemotePlayer* r = (RemotePlayer*)m_players[out.id]; + r->Feed(out); + } break; default: break;