use crate::bindings::root::ks::SPageFileGraphicEvo;
use crate::wrappers::{ACEvoCarLocation, ACEvoEngineType, ACEvoFlagType, ACEvoStatus};
use super::utils::parse_c_str;
use super::view::View;
pub type GraphicsView<'a> = View<'a, SPageFileGraphicEvo>;
impl<'a> GraphicsView<'a> {
pub fn status(&self) -> ACEvoStatus {
ACEvoStatus::from(self.inner().status)
}
pub fn focused_car_id(&self) -> (u64, u64) {
(self.inner().focused_car_id_a, self.inner().focused_car_id_b)
}
pub fn player_car_id(&self) -> (u64, u64) {
(self.inner().player_car_id_a, self.inner().player_car_id_b)
}
pub fn car_location(&self) -> ACEvoCarLocation {
ACEvoCarLocation::from(self.inner().car_location)
}
pub fn g_forces(&self) -> (f32, f32, f32) {
let page = self.inner();
(page.g_forces_x, page.g_forces_y, page.g_forces_z)
}
pub fn flag(&self) -> ACEvoFlagType {
ACEvoFlagType::from(self.inner().flag)
}
pub fn global_flag(&self) -> ACEvoFlagType {
ACEvoFlagType::from(self.inner().global_flag)
}
pub fn time_of_day(&self) -> (i32, i32, i32) {
let page = self.inner();
(
page.time_of_day_hours,
page.time_of_day_minutes,
page.time_of_day_seconds,
)
}
pub fn engine_type(&self) -> ACEvoEngineType {
ACEvoEngineType::from(self.inner().engine_type)
}
pub fn performance_mode_name(&self) -> &str {
let name = &self.inner().performance_mode_name;
parse_c_str(name)
}
pub fn driver_name(&self) -> &str {
let name = &self.inner().driver_name;
parse_c_str(name)
}
pub fn driver_surname(&self) -> &str {
let name = &self.inner().driver_surname;
parse_c_str(name)
}
pub fn car_model(&self) -> &str {
let name = &self.inner().car_model;
parse_c_str(name)
}
}