redesign
This commit is contained in:
@@ -1,48 +0,0 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use crossterm::event::KeyEvent;
|
||||
|
||||
use crate::{
|
||||
events::{Close, Event, EventManager},
|
||||
extensions::Extension,
|
||||
Screen,
|
||||
};
|
||||
|
||||
impl Event for KeyEvent {
|
||||
fn as_any(&self) -> &dyn std::any::Any {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
pub trait KeyPressEventHandler {
|
||||
fn on_keypress(&mut self, events: &Arc<EventManager>, event: &KeyEvent);
|
||||
}
|
||||
|
||||
pub struct KeyPressExtension;
|
||||
|
||||
impl Extension for KeyPressExtension {
|
||||
fn init(&mut self, _: &mut Screen, events: &Arc<EventManager>) {
|
||||
crossterm::terminal::enable_raw_mode().unwrap();
|
||||
crate::utils::clear().unwrap();
|
||||
crate::utils::hide_cursor().unwrap();
|
||||
|
||||
events.on(|_, _: &Close| {
|
||||
crossterm::terminal::disable_raw_mode().unwrap();
|
||||
crate::utils::show_cursor().unwrap();
|
||||
crate::utils::clear().unwrap();
|
||||
});
|
||||
}
|
||||
|
||||
fn tick_start(&mut self, _: &mut Screen, _: &Arc<EventManager>) {}
|
||||
|
||||
fn tick_end(&mut self, _: &mut Screen, events: &Arc<EventManager>) {
|
||||
if crossterm::event::poll(std::time::Duration::from_millis(13)).unwrap() {
|
||||
match crossterm::event::read().unwrap() {
|
||||
crossterm::event::Event::Key(e) => {
|
||||
events.dispatch(e);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
pub mod keypress;
|
||||
pub mod tick_rate;
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::{events::EventManager, Screen};
|
||||
|
||||
pub trait Extension {
|
||||
fn init(&mut self, screen: &mut Screen, events: &Arc<EventManager>);
|
||||
fn tick_start(&mut self, screen: &mut Screen, events: &Arc<EventManager>);
|
||||
fn tick_end(&mut self, screen: &mut Screen, events: &Arc<EventManager>);
|
||||
}
|
||||
|
||||
pub struct ExtensionManager(Vec<Box<dyn Extension>>);
|
||||
|
||||
impl Extension for ExtensionManager {
|
||||
fn init(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
|
||||
for ext in &mut self.0 {
|
||||
ext.init(screen, events);
|
||||
}
|
||||
}
|
||||
|
||||
fn tick_start(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
|
||||
for ext in &mut self.0 {
|
||||
ext.tick_start(screen, events);
|
||||
}
|
||||
}
|
||||
|
||||
fn tick_end(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
|
||||
for ext in &mut self.0 {
|
||||
ext.tick_end(screen, events);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ExtensionManager {
|
||||
pub fn new() -> ExtensionManager {
|
||||
ExtensionManager(Vec::new())
|
||||
}
|
||||
pub fn add<E: Extension + 'static>(&mut self, extension: E) {
|
||||
self.0.push(Box::new(extension));
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::{events::EventManager, extensions::Extension};
|
||||
|
||||
pub struct TickRate(pub u8);
|
||||
|
||||
impl Extension for TickRate {
|
||||
fn init(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {}
|
||||
|
||||
fn tick_end(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {
|
||||
std::thread::sleep(std::time::Duration::from_millis(1000 / self.0 as u64));
|
||||
}
|
||||
|
||||
fn tick_start(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {}
|
||||
}
|
||||
Reference in New Issue
Block a user