simple/
simple.rs

1use tinybit::events::{events, Event, KeyCode, KeyEvent, EventModel};
2use tinybit::{
3    term_size, Camera, Renderer, ScreenPos, ScreenSize, StdoutTarget, Viewport,
4    WorldPos, WorldSize, Pixel
5};
6
7fn main() {
8    let (width, height) = term_size().expect("Can't get the term size? Can't play the game!");
9
10    // Viewport
11    let viewport_size = ScreenSize::new(width / 2, height / 2);
12    let mut viewport = Viewport::new(ScreenPos::new(0, 4), viewport_size);
13
14    // Camera
15    let (width, height) = (width as i64, height as i64);
16    let camera_size = WorldSize::new(width / 2, height / 2);
17    let camera_pos = WorldPos::new(width, height);
18    let camera = Camera::new(camera_pos, camera_size);
19
20    // Renderer
21    let stdout_renderer = StdoutTarget::new().expect("Failed to enter raw mode");
22    let mut renderer = Renderer::new(stdout_renderer);
23
24    // Player
25    let mut player = ('@', camera_pos);
26
27    let (_, events) = events::<()>(EventModel::Fps(20));
28    for event in events {
29        match event {
30            Event::User(()) => {}
31            Event::Tick => {
32                let pixel = Pixel::new(player.0, camera.to_screen(player.1), None, None);
33                viewport.draw_pixel(pixel);
34                let _ = renderer.render(&mut viewport);
35                viewport.swap_buffers();
36            }
37            Event::Key(KeyEvent { code: KeyCode::Esc, ..  }) => break,
38            Event::Key(KeyEvent { code: kc, .. }) => {
39                match kc {
40                    KeyCode::Left => { player.1.x -= 1; }
41                    KeyCode::Right => { player.1.x += 1; }
42                    KeyCode::Up => { player.1.y -= 1; }
43                    KeyCode::Down => { player.1.y += 1; }
44                    _ => {}
45                }
46            }
47            Event::Resize(_w, _h) => {}
48        }
49    }
50}