use crate::time::{Duration, Instant};
use crate::{enums, flags, AnglePrecision, Position, SkinColor, SnapId, Velocity};
use arrayvec::ArrayString;
use serde::{Deserialize, Serialize};
use vek::Vec2;
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct GameInfo {
pub flags: flags::GameFlags,
pub game_state_flags: flags::GameStateFlags,
pub round_start_tick: Instant,
pub warmup_timer: Duration,
pub score_limit: i32,
pub time_limit: Duration,
pub round_num: i32,
pub round_current: i32,
pub flags_ex: flags::GameFlagsEx,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Laser {
pub to: Position,
pub from: Position,
pub start_tick: Instant,
pub owner: Option<SnapId>,
pub kind: enums::LaserType,
pub switch_number: u8,
pub flags: flags::LaserFlags,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct MapProjectile {
pub pos: Position,
pub direction: Vec2<i32>,
pub kind: enums::ActiveWeapon,
pub start_tick: Instant,
pub switch_number: u8,
pub tune_zone: u8,
pub flags: flags::ProjectileFlags,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Pickup {
pub pos: Position,
pub kind: enums::Powerup,
pub switch_number: u8,
pub flags: flags::PickupFlags,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Player {
pub name: ArrayString<15>,
pub clan: ArrayString<11>,
pub country: i32,
pub skin: ArrayString<23>,
pub use_custom_color: bool,
pub color_body: SkinColor,
pub color_feet: SkinColor,
pub flags: flags::PlayerFlags,
pub auth_level: enums::Authed,
pub team: i32,
pub local: bool,
pub teeworlds_team: enums::ClientTeam,
pub score: i32,
pub latency: i32,
pub tee: Option<Tee>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Projectile {
pub pos: Position,
pub direction: Vec2<i32>,
pub kind: enums::ActiveWeapon,
pub start_tick: Instant,
pub owner: SnapId,
pub tune_zone: u8,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct PvpFlag {
pub pos: Position,
pub pvp_team: enums::PvpTeam,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Tee {
pub tick: Instant,
pub pos: Position,
pub vel: Velocity,
pub angle: AnglePrecision,
pub direction: enums::Direction,
pub jumped: flags::JumpFlags,
pub hooked_player: Option<SnapId>,
pub hook_state: enums::HookState,
pub hook_tick: Duration,
pub hook_pos: Position,
pub hook_direction: Velocity,
pub flags: flags::TeeFlags, pub health: i32,
pub armor: i32,
pub ammo_count: i32,
pub weapon: enums::ActiveWeapon,
pub emote: enums::Emote,
pub attack_tick: Instant,
pub freeze_end: Instant,
pub jumps: i32,
pub tele_checkpoint: i32,
pub strong_weak_id: i32,
pub jumped_total: i32,
pub ninja_activation_tick: Instant,
pub freeze_start: Instant,
pub target: Position,
pub tune_zone_override: Option<u8>,
}