rust/lib-hedgewars-engine/src/instance.rs
author S.D.
Tue, 27 Sep 2022 14:59:03 +0300
changeset 15878 fc3cb23fd26f
parent 15809 c3971b38bbfa
child 15891 d52f5d8e75e6
permissions -rw-r--r--
Allow to see rooms of incompatible versions in the lobby For the new clients the room version is shown in a separate column. There is also a hack for previous versions clients: the room vesion specifier is prepended to the room names for rooms of incompatible versions, and the server shows 'incompatible version' error if the client tries to join them.
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::*,
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
     3
    UnorderedEngineMessage::*, UnsyncedEngineMessage::*, *,
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     4
};
15284
ae8e14d14596 Move messages queue to hedgewars-engine-messages lib
unc0rr
parents: 15265
diff changeset
     5
use hedgewars_engine_messages::queue::*;
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
     6
14705
19122a329774 make world renderer optional + fmt
alfadur
parents: 14704
diff changeset
     7
use integral_geometry::{Point, Rect, Size};
14702
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
     8
use landgen::outline_template::OutlineTemplate;
14293
b8871dd33ec4 add gfx setup ffi
alfadur
parents: 14272
diff changeset
     9
15265
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    10
use super::{ipc::*, world::World};
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    11
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    12
pub struct EngineInstance {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    13
    pub world: World,
15265
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    14
    pub ipc_channel: Channel,
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    15
    ipc_queue: MessagesQueue,
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    16
}
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    17
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    18
impl EngineInstance {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    19
    pub fn new() -> Self {
14702
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    20
        let mut world = World::new();
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    21
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    22
        fn template() -> OutlineTemplate {
14705
19122a329774 make world renderer optional + fmt
alfadur
parents: 14704
diff changeset
    23
            let mut template = OutlineTemplate::new(Size::new(4096 * 1, 2048 * 1));
14702
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    24
            template.islands = vec![vec![
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    25
                Rect::from_size_coords(100, 2050, 1, 1),
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    26
                Rect::from_size_coords(100, 500, 400, 1200),
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    27
                Rect::from_size_coords(3600, 500, 400, 1200),
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    28
                Rect::from_size_coords(3900, 2050, 1, 1),
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    29
            ]];
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    30
            template.fill_points = vec![Point::new(1, 0)];
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    31
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    32
            template
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    33
        }
14705
19122a329774 make world renderer optional + fmt
alfadur
parents: 14704
diff changeset
    34
14702
29dbe9ce8b7d add basic map rendering with gl
fkaa
parents: 14294
diff changeset
    35
        world.init(template());
14705
19122a329774 make world renderer optional + fmt
alfadur
parents: 14704
diff changeset
    36
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    37
        Self {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    38
            world,
15265
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    39
            ipc_channel: Channel::new(),
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    40
            ipc_queue: MessagesQueue::new(QueueChatStrategy::LocalGame),
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    41
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    42
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    43
14704
12db7e435ea6 move camera into engine
alfadur
parents: 14702
diff changeset
    44
    pub fn render(&mut self) {
12db7e435ea6 move camera into engine
alfadur
parents: 14702
diff changeset
    45
        self.world.render();
14272
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
    fn process_unordered_message(&mut self, message: &UnorderedEngineMessage) {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    49
        match message {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    50
            Pong => println!("Pong!"),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    51
            _ => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    52
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    53
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    54
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    55
    fn process_config_message(&mut self, message: &ConfigEngineMessage) {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    56
        match message {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    57
            SetSeed(seed) => self.world.set_seed(seed.as_bytes()),
15809
c3971b38bbfa hedgewars-engine (rust)/preview: recognise feature_size cmd and do something with it
sheepluva
parents: 15284
diff changeset
    58
            SetFeatureSize(feature_size) => self.world.set_feature_size(*feature_size),
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    59
            _ => unimplemented!(),
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
    pub fn process_ipc_queue(&mut self) {
15265
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    64
        for message in self.ipc_channel.iter() {
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    65
            self.ipc_queue.push(message);
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    66
        }
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    67
07e909ba4203 Implement ipc queue which takes care of message ordering and timestamps
unC0Rr
parents: 14705
diff changeset
    68
        let messages: Vec<EngineMessage> = self.ipc_queue.iter(0).collect();
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    69
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    70
        for message in messages {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    71
            println!("Processing message: {:?}", message);
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    72
            match message {
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    73
                Unknown => println!("Unknown message"),
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
    74
                Empty => println!("Empty message"),
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    75
                Synced(_, _) => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    76
                Unsynced(_) => unimplemented!(),
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    77
                Unordered(unordered_message) => self.process_unordered_message(&unordered_message),
14294
21be7838a127 Add advance_simulation() function to engine lib, some WIP on frontend
unc0rr
parents: 14293
diff changeset
    78
                Config(config_message) => self.process_config_message(&config_message),
14272
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    79
            }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    80
        }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    81
    }
3152d9fdb499 - Move EngineInstance into a separate module
unC0Rr
parents:
diff changeset
    82
}