From ba78b90209c5fd3a183043ad3f5110c4a60bf335 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Wed, 27 Oct 2021 21:16:29 +0300 Subject: feat: control camera with VIM keys --- src/main.rs | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'src/main.rs') 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; } } -- cgit v1.2.3