Skip to content

GridForge v3.0.0

Choose a tag to compare

@mrdav30 mrdav30 released this 11 Mar 05:25
· 72 commits to main since this release

Breaking / Migration Notes

  • ScanManager has been renamed to GridScanManager.
  • 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.