Entity structure
This commit is contained in:
+16
-1
@@ -1,4 +1,19 @@
|
||||
use osmium::entity::Component;
|
||||
|
||||
pub struct Velocity(pub i32);
|
||||
|
||||
impl Component for Velocity {
|
||||
fn tick(&mut self) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut engine = osmium::init();
|
||||
engine.thread("Main.event", move || {});
|
||||
|
||||
engine.thread("Main.tick", || {});
|
||||
|
||||
let mut my_rect = engine.draw(|r| {
|
||||
// r.draw_rect(0, 0, 10, 10);
|
||||
});
|
||||
|
||||
my_rect.component(Velocity(10));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
pub trait Component {
|
||||
fn init_add(&mut self) {}
|
||||
fn init(&mut self) {}
|
||||
fn tick(&mut self) {}
|
||||
}
|
||||
|
||||
pub struct Entity(pub Vec<Box<dyn Component>>);
|
||||
|
||||
impl Entity {
|
||||
pub fn component<C: Component + 'static>(&mut self, c: C) {
|
||||
self.0.push(Box::new(c));
|
||||
}
|
||||
}
|
||||
+12
@@ -1,17 +1,29 @@
|
||||
pub mod entity;
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn init() -> Engine {
|
||||
Engine {
|
||||
threads: HashMap::new(),
|
||||
entities: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Engine {
|
||||
threads: HashMap<String, Box<dyn FnMut() + Send + Sync>>,
|
||||
entities: Vec<entity::Entity>,
|
||||
}
|
||||
|
||||
pub struct Renderer {}
|
||||
|
||||
impl Engine {
|
||||
pub fn thread<F: FnMut() + Send + Sync + 'static>(&mut self, label: &str, f: F) {
|
||||
self.threads.insert(label.to_string(), Box::new(f));
|
||||
}
|
||||
|
||||
pub fn draw<F: FnMut(&mut Renderer) + 'static>(&self, mut f: F) -> entity::Entity {
|
||||
let mut renderer = Renderer {};
|
||||
(f)(&mut renderer);
|
||||
entity::Entity(Vec::new())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user