rpfm_lib/files/group_formations/versions/
v2.rs1use bitflags::bitflags;
17use serde_derive::{Serialize, Deserialize};
18
19use crate::error::{Result, RLibError};
20
21bitflags! {
22
23 #[derive(Default, PartialEq, Clone, Debug, Serialize, Deserialize)]
24 pub struct AIPurposeFlags: u32 {
25 const ATTACK = 0b0000_0000_0000_0000_0000_0000_0000_0001;
26 const DEFEND = 0b0000_0000_0000_0000_0000_0000_0000_0010;
27 const RIVER_ATTACK = 0b0000_0000_0000_0000_0000_0000_0000_0100;
28 const RIVER_DEFEND = 0b0000_0000_0000_0000_0000_0000_0000_1000;
29 const UK_4 = 0b0000_0000_0000_0000_0000_0000_0001_0000;
30 const AMBUSH_DEFENCE_BLOCK = 0b0000_0000_0000_0000_0000_0000_0010_0000;
31 const SETTLEMENT_ASSAULT = 0b0000_0000_0000_0000_0000_0000_0100_0000;
32 const SETTLEMENT_AREA_DEFEND_NARROW = 0b0000_0000_0000_0000_0000_0000_1000_0000;
33 const SETTLEMENT_AREA_ATTACK_NARROW = 0b0000_0000_0000_0000_0000_0001_0000_0000;
34 const UK_9 = 0b0000_0000_0000_0000_0000_0010_0000_0000;
35 const NAVAL_ATTACK = 0b0000_0000_0000_0000_0000_0100_0000_0000;
36 const NAVAL_DEFEND = 0b0000_0000_0000_0000_0000_1000_0000_0000;
37 const DEFAULT_DEPLOYMENT = 0b0000_0000_0000_0000_0001_0000_0000_0000;
38 const NAVAL_DEFAULT_DEPLOYMENT = 0b0000_0000_0000_0000_0010_0000_0000_0000;
39 const UK_14 = 0b0000_0000_0000_0000_0100_0000_0000_0000;
40 const UK_15 = 0b0000_0000_0000_0000_1000_0000_0000_0000;
41 const UK_16 = 0b0000_0000_0000_0001_0000_0000_0000_0000;
42 const UK_17 = 0b0000_0000_0000_0010_0000_0000_0000_0000;
43 const UK_18 = 0b0000_0000_0000_0100_0000_0000_0000_0000;
44 const UK_19 = 0b0000_0000_0000_1000_0000_0000_0000_0000;
45 const UK_20 = 0b0000_0000_0001_0000_0000_0000_0000_0000;
46 const UK_21 = 0b0000_0000_0010_0000_0000_0000_0000_0000;
47 const UK_22 = 0b0000_0000_0100_0000_0000_0000_0000_0000;
48 const UK_23 = 0b0000_0000_1000_0000_0000_0000_0000_0000;
49 const UK_24 = 0b0000_0001_0000_0000_0000_0000_0000_0000;
50 const UK_25 = 0b0000_0010_0000_0000_0000_0000_0000_0000;
51 const UK_26 = 0b0000_0100_0000_0000_0000_0000_0000_0000;
52 const UK_27 = 0b0000_1000_0000_0000_0000_0000_0000_0000;
53 const UK_28 = 0b0001_0000_0000_0000_0000_0000_0000_0000;
54 const UK_29 = 0b0010_0000_0000_0000_0000_0000_0000_0000;
55 const UK_30 = 0b0100_0000_0000_0000_0000_0000_0000_0000;
56 const UK_31 = 0b1000_0000_0000_0000_0000_0000_0000_0000;
57 }
58}
59
60#[derive(Default, Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
65#[repr(u32)]
66pub enum EntityType {
67 InfMel = 0,
68 InfSpr = 1,
69 InfPik = 2,
70 InfMis = 3,
71 Com = 4,
72 CavShk = 5,
73 CavMel = 6,
74 CavMis = 7,
75 Chariot = 8,
76 Elph = 9,
77 Spcl = 10,
78 ArtFld = 11,
79 ArtFix = 12,
80 Uk13 = 13,
81 ShpMel = 14,
82 ShpMis = 15,
83 ShpArt = 16,
84 ShpTrn = 17,
85 #[default] Any = 18,
86 Uk19 = 19,
87 Uk20 = 20,
88 Uk21 = 21,
89 Uk22 = 22,
90 Uk23 = 23,
91 Uk24 = 24,
92}
93
94impl TryFrom<u32> for EntityType {
95 type Error = RLibError;
96 fn try_from(value: u32) -> Result<Self> {
97 match value {
98 _ if value == Self::InfMel as u32 => Ok(Self::InfMel),
99 _ if value == Self::InfSpr as u32 => Ok(Self::InfSpr),
100 _ if value == Self::InfPik as u32 => Ok(Self::InfPik),
101 _ if value == Self::InfMis as u32 => Ok(Self::InfMis),
102 _ if value == Self::Com as u32 => Ok(Self::Com),
103 _ if value == Self::CavShk as u32 => Ok(Self::CavShk),
104 _ if value == Self::CavMel as u32 => Ok(Self::CavMel),
105 _ if value == Self::CavMis as u32 => Ok(Self::CavMis),
106 _ if value == Self::Chariot as u32 => Ok(Self::Chariot),
107 _ if value == Self::Elph as u32 => Ok(Self::Elph),
108 _ if value == Self::Spcl as u32 => Ok(Self::Spcl),
109 _ if value == Self::ArtFld as u32 => Ok(Self::ArtFld),
110 _ if value == Self::ArtFix as u32 => Ok(Self::ArtFix),
111 _ if value == Self::Uk13 as u32 => Ok(Self::Uk13),
112 _ if value == Self::ShpMel as u32 => Ok(Self::ShpMel),
113 _ if value == Self::ShpMis as u32 => Ok(Self::ShpMis),
114 _ if value == Self::ShpArt as u32 => Ok(Self::ShpArt),
115 _ if value == Self::ShpTrn as u32 => Ok(Self::ShpTrn),
116 _ if value == Self::Any as u32 => Ok(Self::Any),
117 _ if value == Self::Uk19 as u32 => Ok(Self::Uk19),
118 _ if value == Self::Uk20 as u32 => Ok(Self::Uk20),
119 _ if value == Self::Uk21 as u32 => Ok(Self::Uk21),
120 _ if value == Self::Uk22 as u32 => Ok(Self::Uk22),
121 _ if value == Self::Uk23 as u32 => Ok(Self::Uk23),
122 _ if value == Self::Uk24 as u32 => Ok(Self::Uk24),
123 _ => Err(RLibError::DecodingGroupFormationsUnknownEnumValue("EntityType(v2)".to_string(), value)),
124 }
125 }
126}
127
128impl From<EntityType> for u32 {
129 fn from(value: EntityType) -> u32 {
130 value as u32
131 }
132}