#5 - fixed interpolation & rollback

This commit is contained in:
Martin Slachta
2026-08-05 15:20:56 +02:00
parent 2e95c941ba
commit 0e639abcd2
14 changed files with 243 additions and 40 deletions
@@ -25,8 +25,6 @@
namespace tw {
typedef HistoryBuffer<long, glm::vec3> EntityPositionHistory;
entt::entity
ClientWorldController::create_entity(const std::string& name, glm::vec3 position) {
const auto entity = m_world->registry().create();
@@ -82,8 +80,8 @@ void ClientWorldController::spawn_entity(const std::string& name, uint32_t serve
if(m_controlled_server_id.has_value() && m_controlled_server_id.value() == server_id) {
try_bind_player_entity();
} else {
m_interpolator.register_entity(entity);
}
m_interpolator.register_entity(entity);
}
ClientWorldController::ClientWorldController(
@@ -165,9 +163,9 @@ void ClientWorldController::try_bind_player_entity() {
position
));
// if(m_world->registry().all_of<net::EntityPositionInterpolation>(entity)) {
// m_world->registry().remove<net::EntityPositionInterpolation>(entity);
// }
if(m_world->registry().all_of<net::EntityPositionInterpolation>(entity)) {
m_world->registry().remove<net::EntityPositionInterpolation>(entity);
}
}
@@ -187,7 +185,6 @@ void ClientWorldController::update_network() {
});
m_replicator_client.record_prediction(m_frame_idx);
// m_world->registry().view<Transform>()
@@ -216,10 +213,11 @@ void ClientWorldController::update(double delta_time) {
if(controller) {
// controller->set_input(m_network_frame_idx, input);
m_replicator_client.set_input(m_network_frame_idx, input);
m_replicator_client.record_prediction(m_network_frame_idx);
}
}
// m_physics_world->step(m_network_frame_idx, JoltPhysicsWorld::FIXED_DELTA_TIME, true);
m_physics_world->step(m_network_frame_idx, JoltPhysicsWorld::FIXED_DELTA_TIME, true);
m_network_frame_idx++;
}
@@ -230,7 +228,7 @@ void ClientWorldController::update(double delta_time) {
// TODO: The third person controller could pull
Transform* player_transform = m_world->registry().try_get<Transform>(m_player_entity.value());
if(player_transform) {
m_player_controller.set_target(player_transform->position());
// m_player_controller.set_target(player_transform->position());
}
}