rpfm_lib/files/group_formations/versions/
v1.rs1use bitflags::bitflags;
14use serde_derive::{Serialize, Deserialize};
15
16use crate::error::{Result, RLibError};
17
18bitflags! {
19
20 #[derive(Default, PartialEq, Clone, Debug, Serialize, Deserialize)]
22 pub struct AIPurposeFlags: u32 {
23 const ATTACK = 0b0000_0000_0000_0000_0000_0000_0000_0001;
24 const DEFEND = 0b0000_0000_0000_0000_0000_0000_0000_0010;
25 const RIVER_ATTACK = 0b0000_0000_0000_0000_0000_0000_0000_0100;
26 const UK_3 = 0b0000_0000_0000_0000_0000_0000_0000_1000;
27 const UK_4 = 0b0000_0000_0000_0000_0000_0000_0001_0000;
28 const NAVAL_ATTACK = 0b0000_0000_0000_0000_0000_0000_0010_0000;
29 const NAVAL_DEFEND = 0b0000_0000_0000_0000_0000_0000_0100_0000;
30 const DEFAULT_DEPLOYMENT = 0b0000_0000_0000_0000_0000_0000_1000_0000;
31 const NAVAL_DEFAULT_DEPLOYMENT = 0b0000_0000_0000_0000_0000_0001_0000_0000;
32 const LARGE_MAP_ONLY = 0b0000_0000_0000_0000_0000_0010_0000_0000;
33 const UK_10 = 0b0000_0000_0000_0000_0000_0100_0000_0000;
34 const UK_11 = 0b0000_0000_0000_0000_0000_1000_0000_0000;
35 const UK_12 = 0b0000_0000_0000_0000_0001_0000_0000_0000;
36 const UK_13 = 0b0000_0000_0000_0000_0010_0000_0000_0000;
37 const UK_14 = 0b0000_0000_0000_0000_0100_0000_0000_0000;
38 const UK_15 = 0b0000_0000_0000_0000_1000_0000_0000_0000;
39 const UK_16 = 0b0000_0000_0000_0001_0000_0000_0000_0000;
40 const UK_17 = 0b0000_0000_0000_0010_0000_0000_0000_0000;
41 const UK_18 = 0b0000_0000_0000_0100_0000_0000_0000_0000;
42 const UK_19 = 0b0000_0000_0000_1000_0000_0000_0000_0000;
43 const UK_20 = 0b0000_0000_0001_0000_0000_0000_0000_0000;
44 const UK_21 = 0b0000_0000_0010_0000_0000_0000_0000_0000;
45 const UK_22 = 0b0000_0000_0100_0000_0000_0000_0000_0000;
46 const UK_23 = 0b0000_0000_1000_0000_0000_0000_0000_0000;
47 const UK_24 = 0b0000_0001_0000_0000_0000_0000_0000_0000;
48 const UK_25 = 0b0000_0010_0000_0000_0000_0000_0000_0000;
49 const UK_26 = 0b0000_0100_0000_0000_0000_0000_0000_0000;
50 const UK_27 = 0b0000_1000_0000_0000_0000_0000_0000_0000;
51 const UK_28 = 0b0001_0000_0000_0000_0000_0000_0000_0000;
52 const UK_29 = 0b0010_0000_0000_0000_0000_0000_0000_0000;
53 const UK_30 = 0b0100_0000_0000_0000_0000_0000_0000_0000;
54 const UK_31 = 0b1000_0000_0000_0000_0000_0000_0000_0000;
55 }
56}
57
58#[derive(Default, Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
62#[repr(u32)]
63pub enum EntityType {
64 ArtilleryFixed = 0,
65 ArtilleryFoot = 1,
66 ArtilleryHorse = 2,
67 CavalryCamels = 3,
68 CavalryHeavy = 4,
69 CavalryIrregular = 5,
70 CavalryLancers = 6,
71 CavalryLight = 7,
72 CavalryMissile = 8,
73 CavalryStandard = 9,
74 Dragoons = 10,
75 Elephants = 11,
76 General = 12,
77 InfantryBerserker = 13,
78 InfantryElite = 14,
79 InfantryGrenadiers = 15,
80 InfantryIrregulars = 16,
81 InfantryLight = 17,
82 InfantryLine = 18,
83 InfantryMelee = 19,
84 InfantryMilitia = 20,
85 InfantryMob = 21,
86 InfantrySkirmishers = 22,
87 NavalAdmiral = 23,
88 NavalBombKetch = 24,
89 NavalBrig = 25,
90 NavalDhow = 26,
91 NavalFifthRate = 27,
92 NavalFirstRate = 28,
93 NavalFourthRate = 29,
94 NavalHeavyGalley = 30,
95 NavalIndiaman = 31,
96 NavalLightGalley = 32,
97 NavalLugger = 33,
98 NavalMediumGalley = 34,
99 NavalOverFirstRate = 35,
100 NavalRazee = 36,
101 NavalRocketShip = 37,
102 NavalSecondRate = 38,
103 NavalSixthRate = 39,
104 NavalSloop = 40,
105 NavalSteamShip = 41,
106 NavalThirdRate = 42,
107 NavalXebec = 43,
108 InfantrySpearman = 45,
109 InfantryHeavy = 46,
110 InfantrySpecial = 47,
111 InfantryBow = 48,
112 InfantryMatchlock = 49,
113 InfantrySword = 50,
114 Siege = 51,
115 CavalrySword = 52,
116 NavalHeavyShip = 54,
117 NavalMediumShip = 55,
118 NavalLightShip = 56,
119 NavalCannonShip = 57,
120 NavalGalleon = 58,
121 NavalIronclad = 60,
122 NavalCorvette = 61,
123 NavalFrigate = 62,
124 NavalGunboat = 63,
125 NavalTorpedoboat = 64,
126 #[default] Any = 65,
127}
128
129impl TryFrom<u32> for EntityType {
130 type Error = RLibError;
131 fn try_from(value: u32) -> Result<Self> {
132 match value {
133 _ if value == Self::ArtilleryFixed as u32 => Ok(Self::ArtilleryFixed),
134 _ if value == Self::ArtilleryFoot as u32 => Ok(Self::ArtilleryFoot),
135 _ if value == Self::ArtilleryHorse as u32 => Ok(Self::ArtilleryHorse),
136 _ if value == Self::CavalryCamels as u32 => Ok(Self::CavalryCamels),
137 _ if value == Self::CavalryHeavy as u32 => Ok(Self::CavalryHeavy),
138 _ if value == Self::CavalryIrregular as u32 => Ok(Self::CavalryIrregular),
139 _ if value == Self::CavalryLancers as u32 => Ok(Self::CavalryLancers),
140 _ if value == Self::CavalryLight as u32 => Ok(Self::CavalryLight),
141 _ if value == Self::CavalryMissile as u32 => Ok(Self::CavalryMissile),
142 _ if value == Self::CavalryStandard as u32 => Ok(Self::CavalryStandard),
143 _ if value == Self::Dragoons as u32 => Ok(Self::Dragoons),
144 _ if value == Self::Elephants as u32 => Ok(Self::Elephants),
145 _ if value == Self::General as u32 => Ok(Self::General),
146 _ if value == Self::InfantryBerserker as u32 => Ok(Self::InfantryBerserker),
147 _ if value == Self::InfantryElite as u32 => Ok(Self::InfantryElite),
148 _ if value == Self::InfantryGrenadiers as u32 => Ok(Self::InfantryGrenadiers),
149 _ if value == Self::InfantryIrregulars as u32 => Ok(Self::InfantryIrregulars),
150 _ if value == Self::InfantryLight as u32 => Ok(Self::InfantryLight),
151 _ if value == Self::InfantryLine as u32 => Ok(Self::InfantryLine),
152 _ if value == Self::InfantryMelee as u32 => Ok(Self::InfantryMelee),
153 _ if value == Self::InfantryMilitia as u32 => Ok(Self::InfantryMilitia),
154 _ if value == Self::InfantryMob as u32 => Ok(Self::InfantryMob),
155 _ if value == Self::InfantrySkirmishers as u32 => Ok(Self::InfantrySkirmishers),
156 _ if value == Self::NavalAdmiral as u32 => Ok(Self::NavalAdmiral),
157 _ if value == Self::NavalBombKetch as u32 => Ok(Self::NavalBombKetch),
158 _ if value == Self::NavalBrig as u32 => Ok(Self::NavalBrig),
159 _ if value == Self::NavalDhow as u32 => Ok(Self::NavalDhow),
160 _ if value == Self::NavalFifthRate as u32 => Ok(Self::NavalFifthRate),
161 _ if value == Self::NavalFirstRate as u32 => Ok(Self::NavalFirstRate),
162 _ if value == Self::NavalFourthRate as u32 => Ok(Self::NavalFourthRate),
163 _ if value == Self::NavalHeavyGalley as u32 => Ok(Self::NavalHeavyGalley),
164 _ if value == Self::NavalIndiaman as u32 => Ok(Self::NavalIndiaman),
165 _ if value == Self::NavalLightGalley as u32 => Ok(Self::NavalLightGalley),
166 _ if value == Self::NavalLugger as u32 => Ok(Self::NavalLugger),
167 _ if value == Self::NavalMediumGalley as u32 => Ok(Self::NavalMediumGalley),
168 _ if value == Self::NavalOverFirstRate as u32 => Ok(Self::NavalOverFirstRate),
169 _ if value == Self::NavalRazee as u32 => Ok(Self::NavalRazee),
170 _ if value == Self::NavalRocketShip as u32 => Ok(Self::NavalRocketShip),
171 _ if value == Self::NavalSecondRate as u32 => Ok(Self::NavalSecondRate),
172 _ if value == Self::NavalSixthRate as u32 => Ok(Self::NavalSixthRate),
173 _ if value == Self::NavalSloop as u32 => Ok(Self::NavalSloop),
174 _ if value == Self::NavalSteamShip as u32 => Ok(Self::NavalSteamShip),
175 _ if value == Self::NavalThirdRate as u32 => Ok(Self::NavalThirdRate),
176 _ if value == Self::NavalXebec as u32 => Ok(Self::NavalXebec),
177 _ if value == Self::InfantrySpearman as u32 => Ok(Self::InfantrySpearman),
178 _ if value == Self::InfantryHeavy as u32 => Ok(Self::InfantryHeavy),
179 _ if value == Self::InfantrySpecial as u32 => Ok(Self::InfantrySpecial),
180 _ if value == Self::InfantryBow as u32 => Ok(Self::InfantryBow),
181 _ if value == Self::InfantryMatchlock as u32 => Ok(Self::InfantryMatchlock),
182 _ if value == Self::InfantrySword as u32 => Ok(Self::InfantrySword),
183 _ if value == Self::Siege as u32 => Ok(Self::Siege),
184 _ if value == Self::CavalrySword as u32 => Ok(Self::CavalrySword),
185 _ if value == Self::NavalHeavyShip as u32 => Ok(Self::NavalHeavyShip),
186 _ if value == Self::NavalMediumShip as u32 => Ok(Self::NavalMediumShip),
187 _ if value == Self::NavalLightShip as u32 => Ok(Self::NavalLightShip),
188 _ if value == Self::NavalCannonShip as u32 => Ok(Self::NavalCannonShip),
189 _ if value == Self::NavalGalleon as u32 => Ok(Self::NavalGalleon),
190 _ if value == Self::NavalIronclad as u32 => Ok(Self::NavalIronclad),
191 _ if value == Self::NavalCorvette as u32 => Ok(Self::NavalCorvette),
192 _ if value == Self::NavalFrigate as u32 => Ok(Self::NavalFrigate),
193 _ if value == Self::NavalGunboat as u32 => Ok(Self::NavalGunboat),
194 _ if value == Self::NavalTorpedoboat as u32 => Ok(Self::NavalTorpedoboat),
195 _ if value == Self::Any as u32 => Ok(Self::Any),
196 _ => Err(RLibError::DecodingGroupFormationsUnknownEnumValue("EntityType(v1)".to_string(), value)),
197 }
198 }
199}
200
201impl From<EntityType> for u32 {
202 fn from(value: EntityType) -> u32 {
203 value as u32
204 }
205}