1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
use pixel_game_lib::{
vek::Extent2,
window::{Key, WindowConfig},
};
/// Define a game state with a simple counter.
struct GameState {
/// Simple number that will be incremented when the mouse is pressed.
///
/// For each number a pixel is drawn.
pub pixels_to_draw: usize,
}
/// Open an empty window.
fn main() {
// Active modifiable state
let state = GameState { pixels_to_draw: 0 };
// Window configuration with huge pixels
let window_config = WindowConfig {
buffer_size: Extent2::new(64, 64),
scaling: 8,
..Default::default()
};
// Open the window and start the game-loop
pixel_game_lib::window(
state,
window_config.clone(),
// Update loop exposing input events we can handle, this is where you would handle the game logic
|state, input, _mouse, _dt| {
// Increment when mouse is clicked
if input.mouse_held(0) {
state.pixels_to_draw += 1;
}
// Exit when escape is pressed
input.key_pressed(Key::Escape)
},
// Render loop exposing the pixel buffer we can mutate
move |state, canvas, _dt| {
// Ensure that we don't draw pixels outside of the canvas
let max_pixels_to_draw = window_config.buffer_size.product();
let pixels_to_draw = state.pixels_to_draw.min(max_pixels_to_draw);
// Draw a red color for each pixel
canvas.raw_buffer()[0..pixels_to_draw].fill(0xFFFF0000);
},
)
.expect("Error opening window");
}