Files
tactical-shooter/addons/netfox.internals/history-buffer.gd
T
shawn e7299b17e9 Phase 7: netfox + godot-jolt stack upgrade
Stack installed:
- netfox v1.35.3 (core + extras + noray + internals)
- godot-jolt v0.16.0-stable

Architecture:
- Server: ENet transport (works headless, no netfox deps)
- Client/Editor: netfox rollback (RollbackSynchronizer, TickInterpolator)

New/modified:
- docs/migration-netfox-plan.md — migration architecture
- scripts/network/network_manager.gd — netfox-aware ENet fallback
- scripts/network/player.gd — clean base player
- client/characters/player_netfox.gd — rollback player w/ WeaponManager
- client/characters/input/player_net_input.gd — BaseNetInput subclass
- client/characters/character/fps_character_controller.gd — netfox input feed
- client/weapons/ — weapon data, registry, TacticalWeaponHitscan, WeaponManager
- client/scripts/round_replicator.gd — client-side round state bridge
- server/scripts/round_manager.gd — improved state machine
- server/scripts/plugin_api/plugin_manager.gd — refined plugin system
- config: enemy_tag, ally_tag for meatball targeting

Removed: old C++ SimulationServer GDExtension (replaced by netfox rollback)
2026-07-02 17:39:22 -04:00

71 lines
1.3 KiB
GDScript

extends RefCounted
class_name _HistoryBuffer
# Maps ticks (int) to arbitrary data
var _buffer: Dictionary = {}
func get_snapshot(tick: int):
if _buffer.has(tick):
return _buffer[tick]
else:
return null
func set_snapshot(tick: int, data):
_buffer[tick] = data
func get_buffer() -> Dictionary:
return _buffer
func get_earliest_tick() -> int:
return _buffer.keys().min()
func get_latest_tick() -> int:
return _buffer.keys().max()
func get_closest_tick(tick: int) -> int:
if _buffer.has(tick):
return tick
if _buffer.is_empty():
return -1
var earliest_tick = get_earliest_tick()
if tick < earliest_tick:
return earliest_tick
var latest_tick = get_latest_tick()
if tick > latest_tick:
return latest_tick
return _buffer.keys() \
.filter(func (key): return key < tick) \
.max()
func get_history(tick: int):
var closest_tick = get_closest_tick(tick)
return _buffer.get(closest_tick)
func trim(earliest_tick_to_keep: int):
var ticks := _buffer.keys()
for tick in ticks:
if tick < earliest_tick_to_keep:
_buffer.erase(tick)
func clear():
_buffer.clear()
func size() -> int:
return _buffer.size()
func is_empty() -> bool:
return _buffer.is_empty()
func has(tick) -> bool:
return _buffer.has(tick)
func ticks() -> Array:
return _buffer.keys()
func erase(tick):
_buffer.erase(tick)