Skip to content

Commit b44c256

Browse files
committed
Add comments to ShieldBatteryData fields, restructure data storage slightly to avoid repetition.
1 parent 07668fc commit b44c256

File tree

1 file changed

+27
-33
lines changed

1 file changed

+27
-33
lines changed

broodrep/src/shieldbattery.rs

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub enum ShieldBatteryDataError {
1717
#[derive(Debug, Clone)]
1818
pub enum ShieldBatteryData {
1919
Version0(ShieldBatteryDataV0),
20-
Version1(ShieldBatteryDataV1),
20+
Version1(ShieldBatteryDataV0, ShieldBatteryDataV1),
2121
}
2222

2323
#[derive(Debug, Clone)]
@@ -32,64 +32,64 @@ pub struct ShieldBatteryDataV0 {
3232

3333
#[derive(Debug, Clone)]
3434
pub struct ShieldBatteryDataV1 {
35-
// Same as v0 at the beginning
36-
pub starcraft_exe_build: u32,
37-
pub shieldbattery_version: String,
38-
pub team_game_main_players: [u8; 4],
39-
pub starting_races: [u8; 12],
40-
pub game_id: u128,
41-
pub user_ids: [u32; 8],
42-
// New fields in v1
4335
game_logic_version: u16,
4436
}
4537

4638
impl ShieldBatteryData {
39+
/// The build number of the StarCraft executable used to play the game.
4740
pub fn starcraft_exe_build(&self) -> u32 {
4841
match self {
4942
ShieldBatteryData::Version0(data) => data.starcraft_exe_build,
50-
ShieldBatteryData::Version1(data) => data.starcraft_exe_build,
43+
ShieldBatteryData::Version1(data, _) => data.starcraft_exe_build,
5144
}
5245
}
5346

47+
/// The version string of the ShieldBattery client used to play the game.
5448
pub fn shieldbattery_version(&self) -> &str {
5549
match self {
5650
ShieldBatteryData::Version0(data) => &data.shieldbattery_version,
57-
ShieldBatteryData::Version1(data) => &data.shieldbattery_version,
51+
ShieldBatteryData::Version1(data, _) => &data.shieldbattery_version,
5852
}
5953
}
6054

55+
/// Which players were the "main" players in a team game (e.g. Team Melee).
6156
pub fn team_game_main_players(&self) -> &[u8; 4] {
6257
match self {
6358
ShieldBatteryData::Version0(data) => &data.team_game_main_players,
64-
ShieldBatteryData::Version1(data) => &data.team_game_main_players,
59+
ShieldBatteryData::Version1(data, _) => &data.team_game_main_players,
6560
}
6661
}
6762

63+
/// The starting race for each player in the game.
6864
pub fn starting_races(&self) -> &[u8; 12] {
6965
match self {
7066
ShieldBatteryData::Version0(data) => &data.starting_races,
71-
ShieldBatteryData::Version1(data) => &data.starting_races,
67+
ShieldBatteryData::Version1(data, _) => &data.starting_races,
7268
}
7369
}
7470

71+
/// The game's ID on ShieldBattery (a UUID as a u128).
7572
pub fn game_id(&self) -> u128 {
7673
match self {
7774
ShieldBatteryData::Version0(data) => data.game_id,
78-
ShieldBatteryData::Version1(data) => data.game_id,
75+
ShieldBatteryData::Version1(data, _) => data.game_id,
7976
}
8077
}
8178

79+
/// The ShieldBattery user IDs of the players ingame, in the same order as the players in the
80+
/// replay header.
8281
pub fn user_ids(&self) -> &[u32; 8] {
8382
match self {
8483
ShieldBatteryData::Version0(data) => &data.user_ids,
85-
ShieldBatteryData::Version1(data) => &data.user_ids,
84+
ShieldBatteryData::Version1(data, _) => &data.user_ids,
8685
}
8786
}
8887

88+
/// The version of ShieldBattery game logic modifications used to play the game.
8989
pub fn game_logic_version(&self) -> Option<u16> {
9090
match self {
9191
ShieldBatteryData::Version0(_) => None,
92-
ShieldBatteryData::Version1(data) => Some(data.game_logic_version),
92+
ShieldBatteryData::Version1(_, data) => Some(data.game_logic_version),
9393
}
9494
}
9595
}
@@ -113,27 +113,21 @@ pub fn parse_shieldbattery_section(
113113
let mut user_ids = [0u32; 8];
114114
data.read_u32_into::<LE>(&mut user_ids)?;
115115

116+
let v0 = ShieldBatteryDataV0 {
117+
starcraft_exe_build,
118+
shieldbattery_version,
119+
team_game_main_players,
120+
starting_races,
121+
game_id,
122+
user_ids,
123+
};
116124
if version == 0 {
117-
Ok(ShieldBatteryData::Version0(ShieldBatteryDataV0 {
118-
starcraft_exe_build,
119-
shieldbattery_version,
120-
team_game_main_players,
121-
starting_races,
122-
game_id,
123-
user_ids,
124-
}))
125+
Ok(ShieldBatteryData::Version0(v0))
125126
} else
126127
/* if version >= 1 */
127128
{
128129
let game_logic_version = data.read_u16::<LE>()?;
129-
Ok(ShieldBatteryData::Version1(ShieldBatteryDataV1 {
130-
starcraft_exe_build,
131-
shieldbattery_version,
132-
team_game_main_players,
133-
starting_races,
134-
game_id,
135-
user_ids,
136-
game_logic_version,
137-
}))
130+
let v1 = ShieldBatteryDataV1 { game_logic_version };
131+
Ok(ShieldBatteryData::Version1(v0, v1))
138132
}
139133
}

0 commit comments

Comments
 (0)