Skip to content

Releases: johnrnyquist/Swash

Swash 1.2.0

Choose a tag to compare

@johnrnyquist johnrnyquist released this 14 Jun 18:13

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 a Level (none/error/warning/info/debug) and a swappable output handler.
  • Engine notices that were previously unconditional print() calls now route through SwashLog.
  • Sensible defaults: .warning under DEBUG, .none in release — so a linked app stays silent unless it opts in with SwashLog.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 — SwashLog is 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 .info notices are suppressed while .warning still prints. Consumers relying on the old console output can restore it with SwashLog.level = .debug, or redirect it via SwashLog.handler.

Stats Since 1.1.0

  • 1 commit
  • 4 files changed
  • 55 insertions, 3 deletions

Swash 1.1.0

Choose a tag to compare

@johnrnyquist johnrnyquist released this 10 Jun 23:51

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

1.0.0

Choose a tag to compare

@johnrnyquist johnrnyquist released this 01 Jan 22:47

At long last I’m giving this the 1.0.0.