engine structure

This commit is contained in:
2025-11-26 19:51:09 +01:00
parent f959114327
commit 23144fb802
4 changed files with 44 additions and 4 deletions
+2 -4
View File
@@ -8,12 +8,10 @@ fn main() {
engine.thread("Main.tick", || {}); engine.thread("Main.tick", || {});
let my_rect = engine.entity(|r| { let my_rect = engine.entity(|r| {
r.draw_rect(8, 3, 11, 5, 0x0000ff); r.draw_rect(0, 0, 2, 1, 0x0000ff);
}); });
terminal::clear().unwrap(); engine.start();
my_rect.render(&mut osmium::renderer::Renderer {});
terminal::show_cursor().unwrap(); terminal::show_cursor().unwrap();
} }
+6
View File
@@ -29,4 +29,10 @@ impl Entity {
pub fn render(&mut self, renderer: &mut Renderer) { pub fn render(&mut self, renderer: &mut Renderer) {
(self.render)(renderer) (self.render)(renderer)
} }
pub fn tick(&mut self) {
for comp in &mut self.components {
// comp.tick(self);
}
}
} }
+32
View File
@@ -18,6 +18,10 @@ pub struct Engine {
entities: Vec<entity::Entity>, entities: Vec<entity::Entity>,
} }
pub fn sleep(ms: u64) {
std::thread::sleep(std::time::Duration::from_millis(ms));
}
impl Engine { impl Engine {
pub fn thread<F: FnMut() + Send + Sync + 'static>(&mut self, label: &str, f: F) { pub fn thread<F: FnMut() + Send + Sync + 'static>(&mut self, label: &str, f: F) {
self.threads.insert(label.to_string(), Box::new(f)); self.threads.insert(label.to_string(), Box::new(f));
@@ -30,4 +34,32 @@ impl Engine {
.last_mut() .last_mut()
.expect("Unable to obtain entity (unspawned)") .expect("Unable to obtain entity (unspawned)")
} }
pub fn render(&mut self) {
terminal::clear().unwrap();
let mut renderer = renderer::Renderer::new();
for entity in &mut self.entities {
entity.render(&mut renderer);
}
}
pub fn tick(&mut self) {
terminal::clear().unwrap();
for entity in &mut self.entities {
entity.tick();
}
}
pub fn start(&mut self) {
for thr in &mut self.threads.values() {
// std::thread::spawn(thr);
}
loop {
self.render();
sleep(16);
}
}
} }
+4
View File
@@ -3,6 +3,10 @@ use crate::terminal::{hex_bg, print_liner};
pub struct Renderer {} pub struct Renderer {}
impl Renderer { impl Renderer {
pub fn new() -> Self {
Self {}
}
pub fn draw_rect(&self, x: u16, y: u16, width: u16, height: u16, color: u32) { pub fn draw_rect(&self, x: u16, y: u16, width: u16, height: u16, color: u32) {
let rl = " ".repeat(width as usize) + "\x1b[0m"; let rl = " ".repeat(width as usize) + "\x1b[0m";
let rect = (rl + "\n").repeat(height as usize); let rect = (rl + "\n").repeat(height as usize);