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)
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
from more_itertools import consume # noqa: F401
|
||||
|
||||
|
||||
# copied from jaraco.itertools 6.1
|
||||
def ensure_unique(iterable, key=lambda x: x):
|
||||
"""
|
||||
Wrap an iterable to raise a ValueError if non-unique values are encountered.
|
||||
|
||||
>>> list(ensure_unique('abc'))
|
||||
['a', 'b', 'c']
|
||||
>>> consume(ensure_unique('abca'))
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: Duplicate element 'a' encountered.
|
||||
"""
|
||||
seen = set()
|
||||
seen_add = seen.add
|
||||
for element in iterable:
|
||||
k = key(element)
|
||||
if k in seen:
|
||||
raise ValueError(f"Duplicate element {element!r} encountered.")
|
||||
seen_add(k)
|
||||
yield element
|
||||
Reference in New Issue
Block a user