Files
SpaceBots/addons/netfox.internals/history-buffer.gd

67 lines
1.2 KiB
GDScript3
Raw Normal View History

2026-01-21 23:40:20 +01:00
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_closest_tick(tick: int) -> int:
if _buffer.has(tick):
return tick
if _buffer.is_empty():
return -1
var earliest_tick = _buffer.keys().min()
if tick < earliest_tick:
return earliest_tick
var latest_tick = _buffer.keys().max()
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)