#[cfg(feature = "dep_arrow")]
use arrow_convert::{ArrowDeserialize, ArrowField, ArrowSerialize};
use crate::filters::SC2ReplayFilters;
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[cfg_attr(
feature = "dep_arrow",
derive(ArrowField, ArrowSerialize, ArrowDeserialize)
)]
pub struct UnitPosition {
pub tag: u32,
pub x: i32,
pub y: i32,
}
#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
#[cfg_attr(
feature = "dep_arrow",
derive(ArrowField, ArrowSerialize, ArrowDeserialize)
)]
pub struct UnitPositionsEvent {
pub first_unit_index: u32,
pub items: Vec<i32>,
}
impl UnitPositionsEvent {
pub fn to_unit_positions_vec(self) -> Vec<UnitPosition> {
let mut unit_index = self.first_unit_index as i32;
let mut res = vec![];
for relative_unit_pos in self.items.chunks_exact(3) {
unit_index += relative_unit_pos[0];
let x = relative_unit_pos[1] * 4;
let y = relative_unit_pos[2] * 4;
res.push(UnitPosition {
tag: unit_index as u32,
x,
y,
});
}
res
}
pub fn should_skip(&self, _filters: &SC2ReplayFilters) -> bool {
false
}
}