diff options
author | eug-vs <eugene@eug-vs.xyz> | 2021-10-27 21:16:29 +0300 |
---|---|---|
committer | eug-vs <eugene@eug-vs.xyz> | 2021-10-27 21:16:29 +0300 |
commit | ba78b90209c5fd3a183043ad3f5110c4a60bf335 (patch) | |
tree | 1f7b5708c3561988f0cb6a8f3fafca32580e622f /src/main.rs | |
parent | 9d913bd2ca292874c211bd901e7ac4e0784a5c18 (diff) | |
download | pistol-ba78b90209c5fd3a183043ad3f5110c4a60bf335.tar.gz |
feat: control camera with VIM keys
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/src/main.rs b/src/main.rs index 9fec82d..804ddfa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,11 @@ extern crate ncurses; mod camera; mod canvas; -use std::f32::consts::PI; +use std::{f32::consts::PI, time::Instant}; use cgmath::Vector3; use ncurses::*; -use crate::camera::{Buffer, Camera, WIDTH, HEIGHT}; +use crate::camera::{Buffer, Camera, WIDTH, HEIGHT, rotate_z}; fn main() { let mut cam = Camera { @@ -22,14 +22,40 @@ fn main() { initscr(); - for _round in 0..20 { - for i in 0..60 { - cam.time = (i as f32 / 60.0) * 2.0 * PI; - cam.render(); + let time = 0; - clear(); - addstr(&cam.buffer.to_string()); - refresh(); + while true { + clear(); + flushinp(); + + // Render + cam.time = (time as f32 / 60.0) * 2.0 * PI; + let timestamp = Instant::now(); + cam.render(); + addstr(&cam.buffer.to_string()); + addstr(&format!("\nRendered in {:?}\n", timestamp.elapsed()).to_string()); + refresh(); + + // Handle input + let char = getch(); + + let cam_speed = 0.5; + let cam_turn_rate = 30.0; + + if char == 106 || char == 74 { + cam.position -= cam.direction * cam_speed; + } else if char == 107 || char == 75 { + cam.position += cam.direction * cam_speed; + } else if char == 104 { + cam.direction = rotate_z(cam.direction, -2.0 * PI / cam_turn_rate); + } else if char == 108 { + cam.direction = rotate_z(cam.direction, 2.0 * PI / cam_turn_rate); + } else if char == 72 { + cam.position -= rotate_z(cam.direction, PI / 2.0) * cam_speed; + } else if char == 76 { + cam.position += rotate_z(cam.direction, PI / 2.0) * cam_speed; + } else if char == 70 { // F + cam.direction = -cam.direction; } } |