Skip to main content

samp_sdk/omp/generated/
player_objects.rs

1//! `IPlayerObjectData` — generated by `cargo xtask gen-omp` from `Server/Components/Objects/objects.hpp`.
2//! Implemented by `PlayerObjectData` in the server's `Objects`.
3//!
4//! Do not edit: change `xtask/omp-wrappers.toml` or the generator and
5//! regenerate. Slots are clang's layout of the header for each ABI, checked
6//! against the official binaries by `cargo xtask check-abi --generated`.
7
8#![allow(unused_imports)]
9
10use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
11use crate::omp::types::{
12    Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
13    UID, Vector2, Vector3, Vector4, WorldTimePoint,
14};
15use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
16use crate::omp::*;
17
18opaque! {
19    /// Opaque handle for `IPlayerObjectData*`.
20    pub IPlayerObjectData;
21}
22
23/// `PlayerObjectData_UID` in `Server/Components/Objects/objects.hpp`.
24pub const PLAYER_OBJECTS_UID: UID = 0x93d4ed2344b07456;
25
26/// The player's `IPlayerObjectData`, or null when the component providing it is not loaded.
27///
28/// Found by walking the player's extension map for `PLAYER_OBJECTS_UID` — the
29/// virtual `getExtension` does not consult that map. `IExtension`
30/// is `IPlayerObjectData`'s first base, so the extension pointer is the interface pointer.
31///
32/// # Safety
33/// `player` must be a live `IPlayer`.
34#[must_use]
35pub unsafe fn player_objects(player: *mut IPlayer) -> *mut IPlayerObjectData {
36    unsafe { extension(player.cast::<u8>(), PLAYER_OBJECTS_UID) }.cast::<IPlayerObjectData>()
37}
38
39slots! {
40    /// `IPlayerObject * IPlayerObjectData::create(int, Vector3, Vector3, float)`
41    SLOT_CREATE: usize = 3, 3;
42    /// `void IPlayerObjectData::setAttachedObject(int, const ObjectAttachmentSlotData &)`
43    SLOT_SET_ATTACHED_OBJECT: usize = 4, 4;
44    /// `void IPlayerObjectData::removeAttachedObject(int)`
45    SLOT_REMOVE_ATTACHED_OBJECT: usize = 5, 5;
46    /// `bool IPlayerObjectData::hasAttachedObject(int)`
47    SLOT_HAS_ATTACHED_OBJECT: usize = 6, 6;
48    /// `const ObjectAttachmentSlotData & IPlayerObjectData::getAttachedObject(int)`
49    SLOT_GET_ATTACHED_OBJECT: usize = 7, 7;
50    /// `void IPlayerObjectData::beginSelecting()`
51    SLOT_BEGIN_SELECTING: usize = 8, 8;
52    /// `bool IPlayerObjectData::selectingObject()`
53    SLOT_SELECTING_OBJECT: usize = 9, 9;
54    /// `void IPlayerObjectData::endEditing()`
55    SLOT_END_EDITING: usize = 10, 10;
56    /// `void IPlayerObjectData::beginEditing(IObject &)`
57    SLOT_BEGIN_EDITING: usize = 11, 12;
58    /// `void IPlayerObjectData::beginEditing(IPlayerObject &)`
59    SLOT_BEGIN_EDITING_PLAYER_OBJECT: usize = 12, 11;
60    /// `bool IPlayerObjectData::editingObject()`
61    SLOT_EDITING_OBJECT: usize = 13, 13;
62    /// `void IPlayerObjectData::editAttachedObject(int)`
63    SLOT_EDIT_ATTACHED_OBJECT: usize = 14, 14;
64}
65
66virtual_fns! {
67    /// `IPlayerObject * IPlayerObjectData::create(int, Vector3, Vector3, float)`.
68    ///
69    /// # Safety
70    /// `data` must be a live `IPlayerObjectData`.
71    #[must_use]
72    pub fn player_objects_create(
73        data: IPlayerObjectData,
74        model_id: i32,
75        position: Vector3,
76        rotation: Vector3,
77        draw_dist: f32,
78    ) -> *mut IPlayerObject = [0, SLOT_CREATE] or std::ptr::null_mut();
79
80    /// `void IPlayerObjectData::setAttachedObject(int, const ObjectAttachmentSlotData &)`.
81    ///
82    /// # Safety
83    /// `data` must be a live `IPlayerObjectData`.
84    pub fn player_objects_set_attached_object(
85        data: IPlayerObjectData,
86        index: i32,
87        other_data: &ObjectAttachmentSlotData,
88    ) = [0, SLOT_SET_ATTACHED_OBJECT];
89
90    /// `void IPlayerObjectData::removeAttachedObject(int)`.
91    ///
92    /// # Safety
93    /// `data` must be a live `IPlayerObjectData`.
94    pub fn player_objects_remove_attached_object(
95        data: IPlayerObjectData,
96        index: i32,
97    ) = [0, SLOT_REMOVE_ATTACHED_OBJECT];
98
99    /// `bool IPlayerObjectData::hasAttachedObject(int)`.
100    ///
101    /// # Safety
102    /// `data` must be a live `IPlayerObjectData`.
103    #[must_use]
104    pub fn player_objects_has_attached_object(
105        data: IPlayerObjectData,
106        index: i32,
107    ) -> bool = [0, SLOT_HAS_ATTACHED_OBJECT] or false;
108
109    /// `const ObjectAttachmentSlotData & IPlayerObjectData::getAttachedObject(int)`.
110    ///
111    /// # Safety
112    /// `data` must be a live `IPlayerObjectData`.
113    #[must_use]
114    pub fn player_objects_attached_object(
115        data: IPlayerObjectData,
116        index: i32,
117    ) -> *const ObjectAttachmentSlotData = [0, SLOT_GET_ATTACHED_OBJECT] or std::ptr::null();
118
119    /// `void IPlayerObjectData::beginSelecting()`.
120    ///
121    /// # Safety
122    /// `data` must be a live `IPlayerObjectData`.
123    pub fn player_objects_begin_selecting(data: IPlayerObjectData) = [0, SLOT_BEGIN_SELECTING];
124
125    /// `bool IPlayerObjectData::selectingObject()`.
126    ///
127    /// # Safety
128    /// `data` must be a live `IPlayerObjectData`.
129    #[must_use]
130    pub fn player_objects_selecting_object(
131        data: IPlayerObjectData,
132    ) -> bool = [0, SLOT_SELECTING_OBJECT] or false;
133
134    /// `void IPlayerObjectData::endEditing()`.
135    ///
136    /// # Safety
137    /// `data` must be a live `IPlayerObjectData`.
138    pub fn player_objects_end_editing(data: IPlayerObjectData) = [0, SLOT_END_EDITING];
139
140    /// `void IPlayerObjectData::beginEditing(IObject &)`.
141    ///
142    /// # Safety
143    /// `data` must be a live `IPlayerObjectData`.
144    pub fn player_objects_begin_editing(
145        data: IPlayerObjectData,
146        object: *mut IObject,
147    ) = [0, SLOT_BEGIN_EDITING];
148
149    /// `void IPlayerObjectData::beginEditing(IPlayerObject &)`.
150    ///
151    /// # Safety
152    /// `data` must be a live `IPlayerObjectData`.
153    pub fn player_objects_begin_editing_player_object(
154        data: IPlayerObjectData,
155        object: *mut IPlayerObject,
156    ) = [0, SLOT_BEGIN_EDITING_PLAYER_OBJECT];
157
158    /// `bool IPlayerObjectData::editingObject()`.
159    ///
160    /// # Safety
161    /// `data` must be a live `IPlayerObjectData`.
162    #[must_use]
163    pub fn player_objects_editing_object(
164        data: IPlayerObjectData,
165    ) -> bool = [0, SLOT_EDITING_OBJECT] or false;
166
167    /// `void IPlayerObjectData::editAttachedObject(int)`.
168    ///
169    /// # Safety
170    /// `data` must be a live `IPlayerObjectData`.
171    pub fn player_objects_edit_attached_object(
172        data: IPlayerObjectData,
173        index: i32,
174    ) = [0, SLOT_EDIT_ATTACHED_OBJECT];
175}