X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fclient%2Fnet.cpp;h=6677f5143d3647d9bd3bc7e24ad1a6ec4beca9b3;hb=150d065f431d665326fd8028748c48a74ad956bb;hp=c3bbb67b40be4d8c7b81ab3d67a62f3ed0cff81b;hpb=4da2ae6f12d7cf4594edb2d560c5c112e9bcd094;p=blank.git diff --git a/src/client/net.cpp b/src/client/net.cpp index c3bbb67..6677f51 100644 --- a/src/client/net.cpp +++ b/src/client/net.cpp @@ -294,8 +294,6 @@ uint16_t Client::SendPlayerUpdate( auto pack = Packet::Make(client_pack); pack.WritePredictedState(prediction); pack.WriteMovement(movement); - pack.WritePitch(pitch); - pack.WriteYaw(yaw); pack.WriteActions(actions); pack.WriteSlot(slot); return conn.Send(client_pack, client_sock); @@ -306,6 +304,18 @@ uint16_t Client::SendPart() { return conn.Send(client_pack, client_sock); } +uint16_t Client::SendMessage( + uint8_t type, + uint32_t ref, + const string &msg +) { + auto pack = Packet::Make(client_pack); + pack.WriteType(type); + pack.WriteReferral(ref); + pack.WriteMessage(msg); + client_pack.len = sizeof(Packet::Header) + Packet::Message::GetSize(msg); + return conn.Send(client_pack, client_sock); +} NetworkedInput::NetworkedInput(World &world, Player &player, Client &client) : PlayerController(world, player) @@ -315,7 +325,7 @@ NetworkedInput::NetworkedInput(World &world, Player &player, Client &client) } -void NetworkedInput::Update(int dt) { +void NetworkedInput::Update(Entity &, float dt) { Invalidate(); UpdatePlayer(); } @@ -332,11 +342,11 @@ void NetworkedInput::PushPlayerUpdate(int dt) { InventorySlot() ); if (player_hist.size() < 16) { - player_hist.emplace_back(state, GetPlayer().GetEntity().TargetVelocity(), dt * 0.001f, packet); + player_hist.emplace_back(state, GetMovement(), dt * 0.001f, packet); } else { auto entry = player_hist.begin(); entry->state = state; - entry->tgt_vel = GetPlayer().GetEntity().TargetVelocity(); + entry->movement = GetMovement(); entry->delta_t = dt * 0.001f; entry->packet = packet; player_hist.splice(player_hist.end(), player_hist, entry); @@ -366,7 +376,9 @@ void NetworkedInput::MergePlayerCorrection(uint16_t seq, const EntityState &corr } } - EntityState &player_state = GetPlayer().GetEntity().GetState(); + glm::vec3 restore_movement(GetMovement()); + + EntityState player_state = GetPlayer().GetEntity().GetState(); Entity replay(GetPlayer().GetEntity()); replay.SetState(corrected_state); @@ -379,7 +391,7 @@ void NetworkedInput::MergePlayerCorrection(uint16_t seq, const EntityState &corr vector col; while (entry != end) { replay.Velocity(entry->state.velocity); - replay.TargetVelocity(entry->tgt_vel); + SetMovement(entry->movement); GetWorld().Update(replay, entry->delta_t); entry->state.chunk_pos = replay.GetState().chunk_pos; entry->state.block_pos = replay.GetState().block_pos; @@ -390,6 +402,7 @@ void NetworkedInput::MergePlayerCorrection(uint16_t seq, const EntityState &corr const float disp_squared = dot(displacement, displacement); if (disp_squared < 16.0f * numeric_limits::epsilon()) { + SetMovement(restore_movement); return; } @@ -408,6 +421,8 @@ void NetworkedInput::MergePlayerCorrection(uint16_t seq, const EntityState &corr displacement *= 0.01f / sqrt(disp_squared); player_state.block_pos += displacement; } + GetPlayer().GetEntity().SetState(player_state); + SetMovement(restore_movement); } void NetworkedInput::StartPrimaryAction() {