Skip to main content

altv_internal_core_resource/base_objects/extra_pools/
world_object.rs

1use 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}