Skip to main content

homm5_types/player/
mod.rs

1use serde::{Serialize, Deserialize};
2use strum_macros::{EnumString, EnumIter};
3use crate::{common::{Trigger, FileRef}, Homm5Type, town::TownType};
4
5#[derive(Debug, Serialize, Deserialize, EnumString, Clone, EnumIter, Eq, PartialEq, Hash)]
6pub enum PlayerID {
7    #[serde(rename = "PLAYER_NONE")]
8    PlayerNone,
9    #[serde(rename = "PLAYER_1")]
10    Player1,
11    #[serde(rename = "PLAYER_2")]
12    Player2,
13    #[serde(rename = "PLAYER_3")]
14    Player3,
15    #[serde(rename = "PLAYER_4")]
16    Player4,
17    #[serde(rename = "PLAYER_5")]
18    Player5,
19    #[serde(rename = "PLAYER_6")]
20    Player6,
21    #[serde(rename = "PLAYER_7")]
22    Player7,
23    #[serde(rename = "PLAYER_8")]
24    Player8,
25}
26
27#[derive(Serialize, Deserialize, Debug, Clone)]
28#[serde(rename = "Item")]
29pub struct BannedRace {
30    pub race: TownType
31}
32
33#[derive(Serialize, Deserialize, Debug, Clone)]
34pub struct BannedHeroesRaces {
35    #[serde(rename = "Item")]
36    pub items: Option<Vec<String>>
37}
38
39#[derive(Serialize, Deserialize, Debug, Clone)]
40pub struct AllowedHeroes {
41    #[serde(rename = "Item")]
42    pub items: Option<Vec<String>>
43}
44
45#[derive(Serialize, Deserialize, Debug, Clone)]
46pub struct TavernFilter {
47    #[serde(rename = "BannedHeroesRaces")]
48    pub banned_heroes_races: Option<BannedHeroesRaces>,
49    #[serde(rename = "BannedHeroes")]
50    pub banned_heroes: Vec<String>,
51    #[serde(rename = "AllowedHeroes")]
52    pub allowed_heroes: Option<AllowedHeroes>
53}
54
55#[derive(Serialize, Deserialize, Debug, Clone)]
56#[serde(rename = "Item")]
57pub struct Player {
58    #[serde(rename = "MainTown")]
59    pub main_town: String,
60    #[serde(rename = "MainHero")]
61    pub main_hero: String,
62    #[serde(rename = "ActivePlayer")]
63    pub active_player: bool,
64    #[serde(rename = "Team")]
65    pub team: usize,
66    #[serde(rename = "CanBeHumanPlayer")]
67    pub can_be_human_player: bool,
68    #[serde(rename = "CanBeComputerPlayer")]
69    pub can_be_computer_player: bool,
70    #[serde(rename = "Behaviour")]
71    pub behaviour: String,
72    #[serde(rename = "CaptureAbility")]
73    pub capture_ability: u8,
74    #[serde(rename = "StartHero")]
75    pub start_hero: String,
76    #[serde(rename = "HeroInTown")]
77    pub hero_in_town: bool,
78    #[serde(rename = "ReserveHeroes")]
79    pub reserve_heroes: Vec<String>,
80    #[serde(rename = "AddHeroTrigger")]
81    pub add_hero_trigger: Trigger,
82    #[serde(rename = "RemoveHeroTrigger")]
83    pub remove_hero_trigger: Trigger,
84    #[serde(rename = "VictoryMessageRef")]
85    pub victory_message_ref: FileRef,
86    #[serde(rename = "DefeatMessageRef")]
87    pub defeat_message_ref: FileRef,
88    #[serde(rename = "Race")]
89    pub race: String,
90    #[serde(rename = "Colour")]
91    pub color: String,
92    #[serde(rename = "CanBeDisabled")]
93    pub can_be_disabled: bool,
94    #[serde(rename = "Attractors")]
95    pub attractors: Vec<String>,
96    #[serde(rename = "TavernFilter")]
97    pub tavern_filter: TavernFilter,
98    #[serde(rename = "DenyFogOfWarForAllies")]
99    pub deny_fog_of_war_for_allies: Vec<String>
100}
101
102impl Homm5Type for Player {
103}