- This works because `wgpu` is a dependency for `pixels`
- But this example should be demonstrating how to ony depend on `pixels` ... And whatever windowing system and event-loop you might want.
* Refactor window creation and size handling
* Require pixel aspect ratio to be > 0
* Fix screen scaling when window is resized
- Ensure the screen retains its correct pixel aspect ratio
- Updated public API on `RenderPass` ... this will continue to be unstable until the initial release
- Add build instructions for the internal shaders
* Implement collision detection
* Minor cleanups.
* Add laser/player collisions
* Add laser collision with bullets and fix fire button repeating
* Add basic shield collisions
* Refactor collision and debug
* Simplify collision and debug by not tracking laser indices
- We don't care about which laser collided, because they get destroyed immediately.
* Don't track laser indicies against bullets either
* DRY and docs
* Adjust the fleet bounding box as invaders are shot
* WIP: Invader AI
- Adds debug mode for visualizing bounding boxes
- Adds rectangle and line drawing (for debug mode)
- Invaders move as a close approximation to the original game
- TODO: Demonstrates that the blit function needs to ignore black pixels (or "transparency")
- TODO: The invader movement code is really bad
* clippy and fmt
* Refactor Invader movement
* Support "transparency" in blit function
* Scale player movement to 60 pixels per second, regardless of frame rate.
* Add assertions in blit to prevent drawing out of bounds
* Add bullets, shoot with space
* Add lasers, and improve the bullet animation a little bit
* fmt
- `SpriteRef` impls `Animation`, `Sprite` does not
- Animation duration and delta time now lives on the struct that handles the animation "state machine"
- Tweak the player animation to 100ms frame duration (was 50ms)
* Refactor SpriteCache and animations
- Animation frames are now enumerated
- Renamed the `Sprites` trait into the more apt `Drawable`
- Moved animation to a default impl on `Drawable`
- Added the Cthulhu invader
- Clarify that `World::step_invaders()` is only needed for handling the invader grid
- Renamed `Cannon` to `Bullet`
* Improve readability of some `SpriteCache` uses.
* Enable clippy in CI
- Removed beta and nightly channels to prevent build breakage
- Fixed some lints noted by `pedantic` and `nursery` level (but not denying these levels by default)
- Accepts a closure (factory function) which itself accepts references to the `wgpu` instances needed for rendering
- This solves a need for creating `RenderPass` objects with a lot of `Option` types and trying to update them dynamically after the fact
- In other words, this is an RAII implementation
- `RenderPass` objects are created during the `PixelsBuilder` build stage
- It should prevent patterns where half-created `RenderPass` objects are necessary
* First pass at CI support
* Fix MSRV (required by wgpu)
* Winit requires MSRV 1.36.0 on Linux, add rustfmt to CI, add CI badge to README
* Don't forget to install rustfmt
- The example app generates a scaled version of pixel Ferris as a test.
- TODO:
- Pixel aspect ratio is still unsupported
- The `RenderPass` trait is incomplete