better structure

This commit is contained in:
2025-06-28 03:51:13 +02:00
parent 551a062021
commit f401d4a995
9 changed files with 93 additions and 85 deletions
+6 -4
View File
@@ -1,3 +1,5 @@
use std::sync::Arc;
use crossterm::event::KeyEvent;
use crate::{
@@ -13,13 +15,13 @@ impl Event for KeyEvent {
}
pub trait KeyPressEventHandler {
fn on_keypress(&mut self, events: &mut EventManager, event: Box<KeyEvent>);
fn on_keypress(&mut self, events: &Arc<EventManager>, event: Box<KeyEvent>);
}
pub struct KeyPressExtension;
impl Extension for KeyPressExtension {
fn init(&mut self, _: &mut Screen, events: &mut EventManager) {
fn init(&mut self, _: &mut Screen, events: &Arc<EventManager>) {
crossterm::terminal::enable_raw_mode().unwrap();
crate::utils::clear().unwrap();
crate::utils::hide_cursor().unwrap();
@@ -31,9 +33,9 @@ impl Extension for KeyPressExtension {
});
}
fn tick_start(&mut self, _: &mut Screen, _: &mut EventManager) {}
fn tick_start(&mut self, _: &mut Screen, _: &Arc<EventManager>) {}
fn tick_end(&mut self, _: &mut Screen, events: &mut 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) => {
+8 -6
View File
@@ -1,30 +1,32 @@
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: &mut EventManager);
fn tick_start(&mut self, screen: &mut Screen, events: &mut EventManager);
fn tick_end(&mut self, screen: &mut Screen, events: &mut EventManager);
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: &mut EventManager) {
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: &mut EventManager) {
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: &mut EventManager) {
fn tick_end(&mut self, screen: &mut Screen, events: &Arc<EventManager>) {
for ext in &mut self.0 {
ext.tick_end(screen, events);
}
+6 -4
View File
@@ -1,13 +1,15 @@
use crate::extensions::Extension;
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, _: &mut crate::events::EventManager) {}
fn init(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {}
fn tick_end(&mut self, _: &mut crate::Screen, _: &mut crate::events::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, _: &mut crate::events::EventManager) {}
fn tick_start(&mut self, _: &mut crate::Screen, _: &Arc<EventManager>) {}
}