From 1a221a2a523e85a71c093fe7cc9739338af9705c Mon Sep 17 00:00:00 2001 From: Andrea Dahnberg Date: Sun, 18 Jan 2026 20:52:49 +0100 Subject: [PATCH 1/4] Update Rapier physics drivers --- .../physics/rapier_driver_2d.gd.off | 30 +++++++++++++++--- .../physics/rapier_driver_3d.gd.off | 31 +++++++++++++++---- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/addons/netfox.extras/physics/rapier_driver_2d.gd.off b/addons/netfox.extras/physics/rapier_driver_2d.gd.off index 7d91bbc7..aecccf48 100644 --- a/addons/netfox.extras/physics/rapier_driver_2d.gd.off +++ b/addons/netfox.extras/physics/rapier_driver_2d.gd.off @@ -1,18 +1,38 @@ + extends PhysicsDriver class_name RapierDriver2D +var _state: StateManager2D + +var _stored_states: int = 0 + + func _init_physics_space() -> void: physics_space = get_viewport().world_2d.space PhysicsServer2D.space_set_active(physics_space, false) + _state = StateManager2D.new() + _state.root_node = self + _state.set_max_cache_length(ProjectSettings.get_setting("netfox/rollback/history_limit", 64)) + _state.set_rolling_cache(true) + add_child(_state) + + func _physics_step(delta) -> void: RapierPhysicsServer2D.space_step(physics_space, delta) RapierPhysicsServer2D.space_flush_queries(physics_space) - + + func _snapshot_space(tick: int) -> void: - snapshots[tick] = RapierPhysicsServer2D.export_binary(physics_space) + _state.cache_state(physics_space, tick) + + +func _rollback_space(tick: int) -> void: + # With rolling cache, tick states are ordered by age with the newest at 0 + var offset = NetworkTime.tick - tick + if (offset >= _stored_states): + return -func _rollback_space(tick) -> void: - if snapshots.has(tick): - RapierPhysicsServer2D.import_binary(physics_space, snapshots[tick]) + _stored_states = min(_stored_states + 1, _state.max_cache_length) + _state.load_cached_state(physics_space, offset) diff --git a/addons/netfox.extras/physics/rapier_driver_3d.gd.off b/addons/netfox.extras/physics/rapier_driver_3d.gd.off index 78f78ea3..de143414 100644 --- a/addons/netfox.extras/physics/rapier_driver_3d.gd.off +++ b/addons/netfox.extras/physics/rapier_driver_3d.gd.off @@ -2,17 +2,36 @@ extends PhysicsDriver class_name RapierDriver3D +var _state: StateManager3D + +var _stored_states: int = 0 + + func _init_physics_space() -> void: - physics_space = get_viewport().world_3d.space + physics_space = get_viewport().world_2d.space PhysicsServer3D.space_set_active(physics_space, false) + _state = StateManager3D.new() + _state.root_node = self + _state.set_max_cache_length(ProjectSettings.get_setting("netfox/rollback/history_limit", 64)) + _state.set_rolling_cache(true) + add_child(_state) + + func _physics_step(delta) -> void: RapierPhysicsServer3D.space_step(physics_space, delta) RapierPhysicsServer3D.space_flush_queries(physics_space) - + + func _snapshot_space(tick: int) -> void: - snapshots[tick] = RapierPhysicsServer3D.export_binary(physics_space) + _state.cache_state(physics_space, tick) + + +func _rollback_space(tick: int) -> void: + # With rolling cache, tick states are ordered by age with the newest at 0 + var offset = NetworkTime.tick - tick + if (offset >= _stored_states): + return -func _rollback_space(tick) -> void: - if snapshots.has(tick): - RapierPhysicsServer3D.import_binary(physics_space, snapshots[tick]) + _stored_states = min(_stored_states + 1, _state.max_cache_length) + _state.load_cached_state(physics_space, offset) From e719c9d8912b173a191742dad51abd6e2505c6b7 Mon Sep 17 00:00:00 2001 From: Andrea Dahnberg Date: Sun, 25 Jan 2026 14:24:00 +0100 Subject: [PATCH 2/4] Update rapier_driver_3d.gd.off Co-authored-by: Raphael LEMAS <52014731+RaphaelLEMAS@users.noreply.github.com> --- addons/netfox.extras/physics/rapier_driver_3d.gd.off | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/netfox.extras/physics/rapier_driver_3d.gd.off b/addons/netfox.extras/physics/rapier_driver_3d.gd.off index de143414..e996cda8 100644 --- a/addons/netfox.extras/physics/rapier_driver_3d.gd.off +++ b/addons/netfox.extras/physics/rapier_driver_3d.gd.off @@ -8,7 +8,7 @@ var _stored_states: int = 0 func _init_physics_space() -> void: - physics_space = get_viewport().world_2d.space + physics_space = get_viewport().world_3d.space PhysicsServer3D.space_set_active(physics_space, false) _state = StateManager3D.new() From c79077bb33b5befbf7f3b8961be7f28e1758f0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20G=C3=A1lffy?= Date: Thu, 12 Mar 2026 12:38:05 +0100 Subject: [PATCH 3/4] bv --- addons/netfox.extras/plugin.cfg | 2 +- addons/netfox.internals/plugin.cfg | 2 +- addons/netfox.noray/plugin.cfg | 2 +- addons/netfox/plugin.cfg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/netfox.extras/plugin.cfg b/addons/netfox.extras/plugin.cfg index 1f740a43..55762cac 100644 --- a/addons/netfox.extras/plugin.cfg +++ b/addons/netfox.extras/plugin.cfg @@ -3,5 +3,5 @@ name="netfox.extras" description="Game-specific utilities for Netfox" author="Tamas Galffy and contributors" -version="1.40.1" +version="1.40.2" script="netfox-extras.gd" diff --git a/addons/netfox.internals/plugin.cfg b/addons/netfox.internals/plugin.cfg index dc8d2e47..b6828819 100644 --- a/addons/netfox.internals/plugin.cfg +++ b/addons/netfox.internals/plugin.cfg @@ -3,5 +3,5 @@ name="netfox.internals" description="Shared internals for netfox addons" author="Tamas Galffy and contributors" -version="1.40.1" +version="1.40.2" script="plugin.gd" diff --git a/addons/netfox.noray/plugin.cfg b/addons/netfox.noray/plugin.cfg index b34782d6..7df56226 100644 --- a/addons/netfox.noray/plugin.cfg +++ b/addons/netfox.noray/plugin.cfg @@ -3,5 +3,5 @@ name="netfox.noray" description="Bulletproof your connectivity with noray integration for netfox" author="Tamas Galffy and contributors" -version="1.40.1" +version="1.40.2" script="netfox-noray.gd" diff --git a/addons/netfox/plugin.cfg b/addons/netfox/plugin.cfg index 8318d2c1..c5d1da3c 100644 --- a/addons/netfox/plugin.cfg +++ b/addons/netfox/plugin.cfg @@ -3,5 +3,5 @@ name="netfox" description="Shared internals for netfox addons" author="Tamas Galffy and contributors" -version="1.40.1" +version="1.40.2" script="netfox.gd" From f64dba65dedebf6a0bad7971d7fb09864eb88cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20G=C3=A1lffy?= Date: Thu, 12 Mar 2026 12:40:51 +0100 Subject: [PATCH 4/4] docs --- docs/netfox.extras/guides/physics.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/netfox.extras/guides/physics.md b/docs/netfox.extras/guides/physics.md index f4c984ae..73aaecf5 100644 --- a/docs/netfox.extras/guides/physics.md +++ b/docs/netfox.extras/guides/physics.md @@ -25,6 +25,10 @@ stepping or use an alternate physics addon that exposes stepping. its builds are provided as-is, and are not associated with Godot nor the PR's author. +!!!note + The current version of the Rapier drivers were tested against Godot Rapier + version **0.8.26**. + ## Enabling Physics Engine Rollback To enable physics rollback, add the appropriate physics driver node to the root