fix(galaga): fix collision detection with batched updates #138
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Critical bug fix: Enemies weren't being destroyed when hit by bullets. This was caused by two interrelated issues in collision detection.
Problems Fixed:
STALE DATA: bullets and enemies were captured at the start of update-game!, but collision checks happened AFTER bullet position updates. Result: checking collisions with old positions.
RACE CONDITIONS: Each collision in doseq triggered separate swap! calls, but all iterations used the ORIGINAL collections. Multiple collisions on same bullet/enemy caused state corruption.
Solution: Collision Batching
Benefits:
This uses the same collision batching pattern from Asteroids, inspired by Erik Assum's feedback on atomic state updates.
Also updated article documentation to explain the bug and solution with detailed code examples and credit to Erik Assum.