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}