altv_internal_core_resource/base_objects/extra_pools/
world_object.rs1use crate::{
2 base_objects::{inherit_ptrs, BaseObjectInheritPtrs},
3 helpers::read_cpp_vector3,
4 vector::Vector3,
5 SomeResult, VoidResult,
6};
7use altv_sdk::ffi as sdk;
8use autocxx::prelude::*;
9
10pub type WorldObjectRawPtr = *mut sdk::alt::IWorldObject;
11
12pub trait WorldObject<InheritPtrs: inherit_ptrs::traits::WorldObject>:
13 BaseObjectInheritPtrs<InheritPtrs>
14{
15 fn raw_ptr(&self) -> SomeResult<WorldObjectRawPtr> {
16 Ok(self.inherit_ptrs()?.world_object())
17 }
18
19 fn pos(&self) -> SomeResult<Vector3> {
20 Ok(read_cpp_vector3(unsafe {
21 sdk::IWorldObject::GetPosition(self.raw_ptr()?).within_unique_ptr()
22 }))
23 }
24
25 fn set_pos(&self, pos: impl Into<Vector3>) -> VoidResult {
26 let pos = pos.into();
27 unsafe { sdk::IWorldObject::SetPosition(self.raw_ptr()?, pos.x(), pos.y(), pos.z()) }
28 Ok(())
29 }
30
31 fn dimension(&self) -> SomeResult<i32> {
32 Ok(unsafe { sdk::IWorldObject::GetDimension(self.raw_ptr()?) })
33 }
34
35 fn set_dimension(&self, value: i32) -> VoidResult {
36 unsafe { sdk::IWorldObject::SetDimension(self.raw_ptr()?, value) }
37 Ok(())
38 }
39}