X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnet%2Fnet.cpp;h=18abb9250a7912b264829060cc11bdafba725551;hb=d2eb51ad9759eeee743b04aee6f1ae69132fc706;hp=e6af690aeacb36f16ad0c289843b3df456833ffe;hpb=d4c71969df4f6b5e6b750c98268d30ca6784908b;p=blank.git diff --git a/src/net/net.cpp b/src/net/net.cpp index e6af690..18abb92 100644 --- a/src/net/net.cpp +++ b/src/net/net.cpp @@ -124,7 +124,9 @@ ClientConnection::ClientConnection(Server &server, const IPaddress &addr) , conn(addr) , player(nullptr) , spawns() -, confirm_wait(0) { +, confirm_wait(0) +, player_update_pack(0) +, player_update_timer(1500) { conn.SetHandler(this); } @@ -308,6 +310,10 @@ void ClientConnection::On(const Packet::Login &pack) { response.WritePlayer(*new_player); response.WriteWorldName(server.GetWorld().Name()); conn.Send(server.GetPacket(), server.GetSocket()); + // set up update tracking + player_update_pack = pack.Seq(); + player_update_timer.Reset(); + player_update_timer.Start(); } else { // aw no :( cout << "rejected login from player \"" << name << '"' << endl; @@ -323,7 +329,13 @@ void ClientConnection::On(const Packet::Part &) { void ClientConnection::On(const Packet::PlayerUpdate &pack) { if (!HasPlayer()) return; - pack.ReadPlayer(Player()); + int pack_diff = int16_t(pack.Seq()) - int16_t(player_update_pack); + bool overdue = player_update_timer.HitOnce(); + player_update_timer.Reset(); + if (pack_diff > 0 || overdue) { + player_update_pack = pack.Seq(); + pack.ReadPlayer(Player()); + } }