use sdk_raw::tf2::class::{
TF_CLASS_DEMOMAN, TF_CLASS_ENGINEER, TF_CLASS_HEAVYWEAPONS, TF_CLASS_MEDIC, TF_CLASS_PYRO,
TF_CLASS_SCOUT, TF_CLASS_SNIPER, TF_CLASS_SOLDIER, TF_CLASS_SPY,
};
use std::ffi::c_int;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum PlayerClass {
#[doc(alias("TF_CLASS_SCOUT"))]
Scout = TF_CLASS_SCOUT as isize,
#[doc(alias("TF_CLASS_SNIPER"))]
Sniper = TF_CLASS_SNIPER as isize,
#[doc(alias("TF_CLASS_SOLDIER"))]
Soldier = TF_CLASS_SOLDIER as isize,
#[doc(alias("TF_CLASS_DEMOMAN"))]
Demoman = TF_CLASS_DEMOMAN as isize,
#[doc(alias("TF_CLASS_MEDIC"))]
Medic = TF_CLASS_MEDIC as isize,
#[doc(alias("TF_CLASS_HEAVYWEAPONS"))]
Heavy = TF_CLASS_HEAVYWEAPONS as isize,
#[doc(alias("TF_CLASS_PYRO"))]
Pyro = TF_CLASS_PYRO as isize,
#[doc(alias("TF_CLASS_SPY"))]
Spy = TF_CLASS_SPY as isize,
#[doc(alias("TF_CLASS_ENGINEER"))]
Engineer = TF_CLASS_ENGINEER as isize,
}
impl PlayerClass {
pub const ALL: [Self; 9] = [
Self::Scout,
Self::Sniper,
Self::Soldier,
Self::Demoman,
Self::Medic,
Self::Heavy,
Self::Pyro,
Self::Spy,
Self::Engineer,
];
pub const fn from_raw(raw: c_int) -> Option<Self> {
match raw {
TF_CLASS_SCOUT => Some(Self::Scout),
TF_CLASS_SNIPER => Some(Self::Sniper),
TF_CLASS_SOLDIER => Some(Self::Soldier),
TF_CLASS_DEMOMAN => Some(Self::Demoman),
TF_CLASS_MEDIC => Some(Self::Medic),
TF_CLASS_HEAVYWEAPONS => Some(Self::Heavy),
TF_CLASS_PYRO => Some(Self::Pyro),
TF_CLASS_SPY => Some(Self::Spy),
TF_CLASS_ENGINEER => Some(Self::Engineer),
_ => None,
}
}
pub const fn scene_directory(self) -> &'static str {
match self {
Self::Scout => "Scout",
Self::Sniper => "Sniper",
Self::Soldier => "Soldier",
Self::Demoman => "Demoman",
Self::Medic => "Medic",
Self::Heavy => "Heavy",
Self::Pyro => "Pyro",
Self::Spy => "Spy",
Self::Engineer => "Engineer",
}
}
pub const fn to_raw(self) -> c_int {
self as c_int
}
}