rust/lib-hedgewars-engine/src/instance.rs
author unC0Rr
Thu, 22 Nov 2018 13:39:51 +0100
changeset 14272 3152d9fdb499
child 14293 b8871dd33ec4
permissions -rw-r--r--
- Move EngineInstance into a separate module - Refactor ipc a bit and process messages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     1
use hedgewars_engine_messages::messages::{
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     2
    ConfigEngineMessage::*, EngineMessage::*, KeystrokeAction::*, SyncedEngineMessage::*,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     3
    UnorderedEngineMessage::*, UnsyncedEngineMessage::*, *
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     4
};
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     5
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     6
use super::{ipc::IPC, world::World};
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     7
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     8
#[repr(C)]
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     9
pub struct EngineInstance {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    10
    pub world: World,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    11
    pub ipc: IPC,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    12
}
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    13
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    14
impl EngineInstance {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    15
    pub fn new() -> Self {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    16
        let world = World::new();
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    17
        Self {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    18
            world,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    19
            ipc: IPC::new(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    20
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    21
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    22
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    23
    pub fn render<R, C>(
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    24
        &self,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    25
        context: &mut gfx::Encoder<R, C>,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    26
        target: &gfx::handle::RenderTargetView<R, gfx::format::Rgba8>,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    27
    ) where
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    28
        R: gfx::Resources,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    29
        C: gfx::CommandBuffer<R>,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    30
    {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    31
        context.clear(target, [0.0, 0.5, 0.0, 1.0]);
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    32
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    33
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    34
    fn process_unordered_message(&mut self, message: &UnorderedEngineMessage) {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    35
        match message {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    36
            Pong => println!("Pong!"),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    37
            _ => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    38
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    39
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    40
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    41
    fn process_config_message(&mut self, message: &ConfigEngineMessage) {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    42
        match message {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    43
            SetSeed(seed) => self.world.set_seed(seed.as_bytes()),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    44
            _ => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    45
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    46
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    47
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    48
    pub fn process_ipc_queue(&mut self) {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    49
        let messages: Vec<EngineMessage> = self.ipc.iter().collect();
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    50
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    51
        for message in messages {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    52
            println!("Processing message: {:?}", message);
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    53
            match message {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    54
                Unknown => println!("Unknown message"),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    55
                Empty => println!("Empty message") ,
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    56
                Synced(_, _) => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    57
                Unsynced(_) => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    58
                Unordered(unordered_message) => self.process_unordered_message(&unordered_message),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    59
                Config(config_message) => self.process_config_message(&config_message)
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    60
            }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    61
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    62
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    63
}