diff -r 1aac8a62be6f -r 3152d9fdb499 rust/lib-hedgewars-engine/src/instance.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rust/lib-hedgewars-engine/src/instance.rs Thu Nov 22 13:39:51 2018 +0100 @@ -0,0 +1,63 @@ +use hedgewars_engine_messages::messages::{ + ConfigEngineMessage::*, EngineMessage::*, KeystrokeAction::*, SyncedEngineMessage::*, + UnorderedEngineMessage::*, UnsyncedEngineMessage::*, * +}; + +use super::{ipc::IPC, world::World}; + +#[repr(C)] +pub struct EngineInstance { + pub world: World, + pub ipc: IPC, +} + +impl EngineInstance { + pub fn new() -> Self { + let world = World::new(); + Self { + world, + ipc: IPC::new(), + } + } + + pub fn render( + &self, + context: &mut gfx::Encoder, + target: &gfx::handle::RenderTargetView, + ) where + R: gfx::Resources, + C: gfx::CommandBuffer, + { + context.clear(target, [0.0, 0.5, 0.0, 1.0]); + } + + fn process_unordered_message(&mut self, message: &UnorderedEngineMessage) { + match message { + Pong => println!("Pong!"), + _ => unimplemented!(), + } + } + + fn process_config_message(&mut self, message: &ConfigEngineMessage) { + match message { + SetSeed(seed) => self.world.set_seed(seed.as_bytes()), + _ => unimplemented!(), + } + } + + pub fn process_ipc_queue(&mut self) { + let messages: Vec = self.ipc.iter().collect(); + + for message in messages { + println!("Processing message: {:?}", message); + match message { + Unknown => println!("Unknown message"), + Empty => println!("Empty message") , + Synced(_, _) => unimplemented!(), + Unsynced(_) => unimplemented!(), + Unordered(unordered_message) => self.process_unordered_message(&unordered_message), + Config(config_message) => self.process_config_message(&config_message) + } + } + } +}