omp_gdk/scripting/classes/
mod.rs

1pub mod events;
2pub mod functions;
3
4use std::{ffi::c_void, mem::transmute};
5
6use crate::{players::WeaponSlots, types::vector::Vector3};
7pub use functions::{load_functions, Class_Add as Class_Create};
8
9/// Player Class Information
10#[repr(C)]
11#[derive(Clone, Copy, Debug, Default)]
12pub struct PlayerClass {
13    /// The class's team
14    pub team: u8,
15    /// The class's skin ID            
16    pub skin: i32,
17    /// The class's spawn position         
18    pub spawn: Vector3,
19    /// The class's angle       
20    pub angle: f32,
21    /// The class's weapons          
22    pub weapons: WeaponSlots,
23}
24
25pub struct Class {
26    handle: *const c_void,
27}
28
29impl Class {
30    pub fn new(handle: *const c_void) -> Self {
31        Class { handle }
32    }
33    pub fn get_handle(&self) -> *const c_void {
34        self.handle
35    }
36    pub fn from_id(classid: i32) -> Option<Class> {
37        functions::Class_FromID(classid)
38    }
39    pub fn get_id(&self) -> i32 {
40        functions::Class_GetID(self)
41    }
42
43    pub fn add(
44        team: u8,
45        skin: i32,
46        spawn: Vector3,
47        angle: f32,
48        weapon: WeaponSlots,
49    ) -> Option<Class> {
50        let mut id = 0;
51        functions::Class_Add(
52            team,
53            skin,
54            spawn.x,
55            spawn.y,
56            spawn.z,
57            angle,
58            weapon[0].id as u8,
59            weapon[0].ammo,
60            weapon[1].id as u8,
61            weapon[1].ammo,
62            weapon[2].id as u8,
63            weapon[2].ammo,
64            &mut id,
65        )
66    }
67    pub fn count(&self) -> i32 {
68        functions::Class_Count()
69    }
70    pub fn getdata(&self) -> PlayerClass {
71        let mut data = PlayerClass::default();
72        let (mut weapon1, mut ammo1, mut weapon2, mut ammo2, mut weapon3, mut ammo3): (
73            u8,
74            u32,
75            u8,
76            u32,
77            u8,
78            u32,
79        ) = (0, 0, 0, 0, 0, 0);
80        functions::Class_GetData(
81            self,
82            &mut data.team,
83            &mut data.skin,
84            &mut data.spawn.x,
85            &mut data.spawn.y,
86            &mut data.spawn.z,
87            &mut data.angle,
88            &mut weapon1,
89            &mut ammo1,
90            &mut weapon2,
91            &mut ammo2,
92            &mut weapon3,
93            &mut ammo3,
94        );
95        data.weapons[0].id = unsafe { transmute(weapon1) };
96        data.weapons[0].ammo = ammo1;
97        data.weapons[1].id = unsafe { transmute(weapon2) };
98        data.weapons[1].ammo = ammo2;
99        data.weapons[2].id = unsafe { transmute(weapon3) };
100        data.weapons[2].ammo = ammo3;
101
102        data
103    }
104    pub fn edit(&self, data: PlayerClass) -> bool {
105        functions::Class_Edit(
106            self,
107            data.team,
108            data.skin,
109            data.spawn.x,
110            data.spawn.y,
111            data.spawn.z,
112            data.angle,
113            data.weapons[0].id,
114            data.weapons[0].ammo,
115            data.weapons[1].id,
116            data.weapons[1].ammo,
117            data.weapons[2].id,
118            data.weapons[2].ammo,
119        )
120    }
121}