You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SpatialDirection and SpatialAwareness moved into GridForge.Spatial.
Obstacle and blocker identity now use exact BoundsKey values instead of hashed int tokens.
This changes blocker and obstacle APIs, including Blocker.BlockageToken and GridObstacleManager.TryAdd/RemoveObstacle(...).
GridConfiguration is now a readonly, serialization-ready struct. GridCenter is computed, and IsAllocated was removed.
GridVoxelSet is now a standalone GridForge.GridVoxelSet type instead of living under tracer utility code.
Grid, obstacle, occupant, and voxel notifications are now proper events. Consumers should use += / -= instead of assigning delegates directly.
Voxel equality is now reference-based, and scan-cell keys are now grid-local rather than spatial-hash derived.
Highlights
Added MemoryPack support for GridConfiguration, with compatibility shims for netstandard2.1.
Expanded blocker lifecycle support with cache control, reset hooks, safer cached removal, and automatic reapplication when relevant grids are added or removed.
Added GridOccupantManager.TryRegister(...) and TryDeregister(...).
Improved pooling across scan cells, occupant buckets, neighbor caches, and scan-cell maps to reduce allocations.
Added a full BenchmarkDotNet suite under tests/GridForge.Benchmarks covering blockers, grid registration, tracing, scan radius, neighbor caching, occupant waves, and memory behavior.
Fixes and Stability
Fixed bounds snapping, including negative-coordinate handling and correct min/max snap order.
Fixed duplicate-grid collisions by replacing hashed bounds tracking with exact bounds keys and moving spatial hashing to SwiftSparseMap.
Fixed scan-cell key generation and tracer de-duplication issues.
Fixed neighbor direction mapping and cross-grid boundary neighbor traversal for conjoined grids.
Fixed null-occupant handling, cached-blocker null refs, lingering obstacles during voxel/grid release, and grid version overflow.
Hardened delegate/event dispatch so one failing subscriber no longer breaks notifications.
Expanded unit coverage across blockers, managers, grids, voxels, tracer, spatial types, and logging.