diff -r 7732013ce64c -r c5a6e8566425 rust/hedgewars-server/src/server/coretypes.rs --- a/rust/hedgewars-server/src/server/coretypes.rs Tue May 28 17:49:04 2019 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -use serde_derive::{Deserialize, Serialize}; - -pub type ClientId = usize; -pub type RoomId = usize; - -pub const MAX_HEDGEHOGS_PER_TEAM: u8 = 8; - -#[derive(PartialEq, Eq, Clone, Debug)] -pub enum ServerVar { - MOTDNew(String), - MOTDOld(String), - LatestProto(u16), -} - -#[derive(PartialEq, Eq, Clone, Debug)] -pub enum GameCfg { - FeatureSize(u32), - MapType(String), - MapGenerator(u32), - MazeSize(u32), - Seed(String), - Template(u32), - - Ammo(String, Option), - Scheme(String, Vec), - Script(String), - Theme(String), - DrawnMap(String), -} - -#[derive(PartialEq, Eq, Clone, Debug)] -pub struct TeamInfo { - pub owner: String, - pub name: String, - pub color: u8, - pub grave: String, - pub fort: String, - pub voice_pack: String, - pub flag: String, - pub difficulty: u8, - pub hedgehogs_number: u8, - pub hedgehogs: [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize], -} - -#[derive(PartialEq, Eq, Clone, Debug)] -pub struct HedgehogInfo { - pub name: String, - pub hat: String, -} - -#[derive(Clone, Serialize, Deserialize)] -pub struct Ammo { - pub name: String, - pub settings: Option, -} - -#[derive(Clone, Serialize, Deserialize)] -pub struct Scheme { - pub name: String, - pub settings: Vec, -} - -#[derive(Clone, Serialize, Deserialize)] -pub struct RoomConfig { - pub feature_size: u32, - pub map_type: String, - pub map_generator: u32, - pub maze_size: u32, - pub seed: String, - pub template: u32, - - pub ammo: Ammo, - pub scheme: Scheme, - pub script: String, - pub theme: String, - pub drawn_map: Option, -} - -impl RoomConfig { - pub fn new() -> RoomConfig { - RoomConfig { - feature_size: 12, - map_type: "+rnd+".to_string(), - map_generator: 0, - maze_size: 0, - seed: "seed".to_string(), - template: 0, - - ammo: Ammo { - name: "Default".to_string(), - settings: None, - }, - scheme: Scheme { - name: "Default".to_string(), - settings: Vec::new(), - }, - script: "Normal".to_string(), - theme: "\u{1f994}".to_string(), - drawn_map: None, - } - } - - pub fn set_config(&mut self, cfg: GameCfg) { - match cfg { - GameCfg::FeatureSize(s) => self.feature_size = s, - GameCfg::MapType(t) => self.map_type = t, - GameCfg::MapGenerator(g) => self.map_generator = g, - GameCfg::MazeSize(s) => self.maze_size = s, - GameCfg::Seed(s) => self.seed = s, - GameCfg::Template(t) => self.template = t, - - GameCfg::Ammo(n, s) => { - self.ammo = Ammo { - name: n, - settings: s, - } - } - GameCfg::Scheme(n, s) => { - self.scheme = Scheme { - name: n, - settings: s, - } - } - GameCfg::Script(s) => self.script = s, - GameCfg::Theme(t) => self.theme = t, - GameCfg::DrawnMap(m) => self.drawn_map = Some(m), - }; - } - - pub fn to_map_config(&self) -> Vec { - vec![ - self.feature_size.to_string(), - self.map_type.to_string(), - self.map_generator.to_string(), - self.maze_size.to_string(), - self.seed.to_string(), - self.template.to_string(), - ] - } - - pub fn to_game_config(&self) -> Vec { - use crate::server::coretypes::GameCfg::*; - let mut v = vec![ - Ammo(self.ammo.name.to_string(), self.ammo.settings.clone()), - Scheme(self.scheme.name.to_string(), self.scheme.settings.clone()), - Script(self.script.to_string()), - Theme(self.theme.to_string()), - ]; - if let Some(ref m) = self.drawn_map { - v.push(DrawnMap(m.to_string())) - } - v - } -} - -pub struct Replay { - pub config: RoomConfig, - pub teams: Vec, - pub message_log: Vec, -} - -#[derive(PartialEq, Eq, Clone, Debug)] -pub enum VoteType { - Kick(String), - Map(Option), - Pause, - NewSeed, - HedgehogsPerTeam(u8), -} - -pub struct Vote { - pub is_pro: bool, - pub is_forced: bool, -} - -#[derive(Clone, Debug)] -pub struct Voting { - pub ttl: u32, - pub voters: Vec, - pub votes: Vec<(ClientId, bool)>, - pub kind: VoteType, -} - -impl Voting { - pub fn new(kind: VoteType, voters: Vec) -> Voting { - Voting { - kind, - voters, - ttl: 2, - votes: Vec::new(), - } - } -}