* Add a method to convert cursor coords to pixel coords
* Add method `window_pos_to_pixel` to Pixels struct
* Converts cursor / window physical coordinates to pixel coords
* Fix formatting
* Return result rather than clamping pixel coordinates
* Use transformation matrices to convert from cursor coord to pixel
* Adds a struct ScalingMatrix that manages the creation and usage
of the transformation matrix used in the renderer.
* Added an inverse function on ScalingMatrix - 4x4 matrix inverse
(This should probably use a library, but it doesn't seem worth
adding a dependancy for one function)
* Optimize matrix multiplication for cursor position calculation
* Use ultraviolet for matrix and vector math
* Add suggested changes
This keeps the split between usize and isize
This also changes the input cursor position to f32, because it was
immediately cast to an f32 for the transformations.
* Move all examples to individual crates
* CI: Add libsdl2
* Use Ubuntu bionic for updated libsdl; 2.0.8
* Clippy
* libudev-dev is a dependency of libsdl2-dev
* Clippy
* Remove unnecessary dev-dependency
* `winit` is actually used in unit tests
* Fix a typo
* Move `simple-invaders` crate
* Add a conways game of life example
* Rustfmt conway example
* Respond to review feedback (p_width/p_height)
* Use line_drawing instead of manual bresenham
* Optimize count_neibs
* Remove inline(never) leftover from when profiling
* Bring back wrapping behavior (without regressing perf)
* Fix missing bounds check
- 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
- 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