Fresh start: replace with naxIO/netfox-cs-sample foundation
Complete replacement of the tactical-shooter project with the netfox-cs-sample (MIT) — a CS 1.6 inspired multiplayer FPS built with Godot 4 and netfox. ## What's new - Full CS-style gameplay: teams (T/CT), rounds, economy, buy menu - 6 weapons: Knife, Glock, USP, AK-47, M4A1, AWP - Bomb plant/defuse with 2 bombsites - Flashbang & smoke grenades - Proper netfox rollback netcode at 64 tick - Network popup UI for host/join - HUD, crosshair, round timer, scoreboard - All netfox singletons registered as autoloads (works in exported builds) ## Architecture - Listen-server (host from client, no dedicated server binary) - Multiplayer-fps game lives at examples/multiplayer-fps/ - Netfox addons registered as autoloads for exported build compat - Godot 4.7 with Forward+ renderer ## Removed - Old headless-server architecture (client_main, server_main, player.gd, etc.) - Custom netfox bootstrap with ENet fallback - Old ChaffGames FPS template (2,420 lines, 844 KB) - SimulationServer GDExtension stub - Godot-jolt physics (netfox sample uses default Godot physics) - Duplicate weapon_data.gd, anti_cheat.gd, round_manager.gd, etc. - Server browser API Python venv (87 MB) - test_range map and modular assets ## Preserved - Git history - Server config at config/default_server_config.cfg - Windows export preset - Build directory (gitignored) Co-authored-by: naxIO <naxIO@users.noreply.github.com>
This commit is contained in:
@@ -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
|
||||
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)
|
||||
|
||||
func _rollback_space(tick) -> void:
|
||||
if snapshots.has(tick):
|
||||
RapierPhysicsServer3D.import_binary(physics_space, snapshots[tick])
|
||||
|
||||
func _snapshot_space(tick: int) -> void:
|
||||
_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
|
||||
|
||||
_stored_states = min(_stored_states + 1, _state.max_cache_length)
|
||||
_state.load_cached_state(physics_space, offset)
|
||||
|
||||
Reference in New Issue
Block a user