Repository navigation
Releases: johnrnyquist/Swash
Releases · johnrnyquist/Swash
Release list
Swash 1.2.0
This release makes Swash's engine diagnostics configurable. The engine's informational notices are now gated behind a log-level toggle so they no longer print unconditionally — quiet by default in shipping apps, while still surfacing genuine warnings during development.
Highlights
- Added
SwashLog, a configurable diagnostic logger with aLevel(none/error/warning/info/debug) and a swappable outputhandler. - Engine notices that were previously unconditional
print()calls now route throughSwashLog. - Sensible defaults:
.warningunder DEBUG,.nonein release — so a linked app stays silent unless it opts in withSwashLog.level = .debug.
Added
- Sources/Swash/core/SwashLog.swift
Changed
Engine.removeEntities(named:)"did not contain entity" notice is now logged at.info.Entity.remove(componentClass:)"does not exist" notice is now logged at.info.SystemList.add(system:)duplicate-add notice is now logged at.warning.
Compatibility Notes
- Additive public API —
SwashLogis new; no existing symbols were changed or removed. Source-compatible with 1.1.0. - One intentional behavior change: those three notices no longer print unconditionally. In release they are silent by default; under DEBUG the two
.infonotices are suppressed while.warningstill prints. Consumers relying on the old console output can restore it withSwashLog.level = .debug, or redirect it viaSwashLog.handler.
Stats Since 1.1.0
- 1 commit
- 4 files changed
- 55 insertions, 3 deletions
Swash 1.1.0
This release includes substantial ECS core refinements, improved signal and node/family behavior, broader API ergonomics, stronger system identity handling, additional tick support, major test expansion, and upgraded project documentation.
Highlights
- Added FixedTickProvider.
- Added optional name field to Engine.
- Added Engine helpers for bulk entity removal and component/entity discovery.
- Added remove(systemType:) support.
- Expanded and modernized README with a practical quick start.
- Strengthened identity/equality/hash behavior across core types.
- Improved node pooling and update-complete listener correctness.
- Expanded and improved test coverage.
Added
- Sources/Swash/tick/FixedTickProvider.swift
- Tests/SwashTests/ListIteratingSystemTests.swift
- Tests/SwashTests/SystemListTests.swift
Changed
- Engine, Entity, Node, System, Family, ComponentMatchingFamily, NodeList, SystemList, Signaler stack, and tick providers were refactored and hardened.
- Family protocol naming cleanup from IFamily.swift to Family.swift.
- Better type-name handling via String(reflecting:).
- System behavior now prevents duplicate additions and improves identity-based comparisons.
- Documentation and examples updated.
Removed
- Sources/Swash/core/UtilityFunctions.swift
- Tests/SwashTests/SwashTests.swift
- IDE metadata entries under .idea
Fixes
- Corrected updateComplete listener signature/cache-release behavior in family/node-pool update path.
- Multiple linked-list and cleanup lifecycle fixes in systems and nodes.
- Component add/remove signaling tightened to dispatch only when references actually change.
Compatibility Notes
- There are API and behavior changes across core ECS/signal internals since 1.0.0.
- Recommended for users upgrading from 1.0.0: run full game/system tests and verify custom systems that depend on listener lifecycle, entity identity assumptions, or system registration order.
Stats Since 1.0.0
- 98 commits
- 47 files changed
- 1681 insertions, 1352 deletions
Full Changelog: 1.0.0...1.1.0