rust-samp-sdk 3.6.0

Low-level FFI bindings for the SA-MP AMX virtual machine and open.mp native component ABI. Used internally by `rust-samp`; depend on it directly only if you need raw access without the higher-level macros and lifecycle.
Documentation
//! `IPlayerObject` — generated by `cargo xtask gen-omp` from `Server/Components/Objects/objects.hpp`.
//! Implemented by `PlayerObject` in the server's `Objects`.
//!
//! Do not edit: change `xtask/omp-wrappers.toml` or the generator and
//! regenerate. Slots are clang's layout of the header for each ABI, checked
//! against the official binaries by `cargo xtask check-abi --generated`.

#![allow(unused_imports)]

use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
use crate::omp::types::{
    Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
    UID, Vector2, Vector3, Vector4, WorldTimePoint,
};
use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
use crate::omp::*;

slots! {
    /// `void IBaseObject::setDrawDistance(float)`
    SLOT_SET_DRAW_DISTANCE: usize = 6, 5;
    /// `float IBaseObject::getDrawDistance()`
    SLOT_GET_DRAW_DISTANCE: usize = 7, 6;
    /// `void IBaseObject::setModel(int)`
    SLOT_SET_MODEL: usize = 8, 7;
    /// `int IBaseObject::getModel()`
    SLOT_GET_MODEL: usize = 9, 8;
    /// `void IBaseObject::setCameraCollision(bool)`
    SLOT_SET_CAMERA_COLLISION: usize = 10, 9;
    /// `bool IBaseObject::getCameraCollision()`
    SLOT_GET_CAMERA_COLLISION: usize = 11, 10;
    /// `void IBaseObject::move(const ObjectMoveData &)`
    SLOT_MOVE: usize = 12, 11;
    /// `bool IBaseObject::isMoving()`
    SLOT_IS_MOVING: usize = 13, 12;
    /// `void IBaseObject::stop()`
    SLOT_STOP: usize = 14, 13;
    /// `const ObjectMoveData & IBaseObject::getMovingData()`
    SLOT_GET_MOVING_DATA: usize = 15, 14;
    /// `void IBaseObject::attachToVehicle(IVehicle &, Vector3, Vector3)`
    SLOT_ATTACH_TO_VEHICLE: usize = 16, 15;
    /// `void IBaseObject::resetAttachment()`
    SLOT_RESET_ATTACHMENT: usize = 17, 16;
    /// `const ObjectAttachmentData & IBaseObject::getAttachmentData()`
    SLOT_GET_ATTACHMENT_DATA: usize = 18, 17;
    /// `bool IBaseObject::getMaterialData(uint32_t, const ObjectMaterialData *&)`
    SLOT_GET_MATERIAL_DATA: usize = 19, 18;
    /// `void IBaseObject::setMaterial(uint32_t, int, StringView, StringView, Colour)`
    SLOT_SET_MATERIAL: usize = 20, 19;
    /// `void IBaseObject::setMaterialText(uint32_t, StringView, ObjectMaterialSize, StringView, int, bool, Colour, Colour, ObjectMaterialTextAlign)`
    SLOT_SET_MATERIAL_TEXT: usize = 21, 20;
    /// `void IPlayerObject::attachToObject(IPlayerObject &, Vector3, Vector3)`
    SLOT_ATTACH_TO_OBJECT: usize = 22, 21;
    /// `void IPlayerObject::attachToPlayer(IPlayer &, Vector3, Vector3)`
    SLOT_ATTACH_TO_PLAYER: usize = 23, 22;
}

virtual_fns! {
    /// `void IBaseObject::setDrawDistance(float)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_set_draw_distance(
        player_object: IPlayerObject,
        draw_distance: f32,
    ) = [0, SLOT_SET_DRAW_DISTANCE];

    /// `float IBaseObject::getDrawDistance()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_draw_distance(
        player_object: IPlayerObject,
    ) -> f32 = [0, SLOT_GET_DRAW_DISTANCE] or 0.0;

    /// `void IBaseObject::setModel(int)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_set_model(player_object: IPlayerObject, model: i32) = [0, SLOT_SET_MODEL];

    /// `int IBaseObject::getModel()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_model(player_object: IPlayerObject) -> i32 = [0, SLOT_GET_MODEL] or 0;

    /// `void IBaseObject::setCameraCollision(bool)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_set_camera_collision(
        player_object: IPlayerObject,
        collision: bool,
    ) = [0, SLOT_SET_CAMERA_COLLISION];

    /// `bool IBaseObject::getCameraCollision()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_camera_collision(
        player_object: IPlayerObject,
    ) -> bool = [0, SLOT_GET_CAMERA_COLLISION] or false;

    /// `void IBaseObject::move(const ObjectMoveData &)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_move(player_object: IPlayerObject, data: &ObjectMoveData) = [0, SLOT_MOVE];

    /// `bool IBaseObject::isMoving()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_is_moving(
        player_object: IPlayerObject,
    ) -> bool = [0, SLOT_IS_MOVING] or false;

    /// `void IBaseObject::stop()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_stop(player_object: IPlayerObject) = [0, SLOT_STOP];

    /// `const ObjectMoveData & IBaseObject::getMovingData()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_moving_data(
        player_object: IPlayerObject,
    ) -> *const ObjectMoveData = [0, SLOT_GET_MOVING_DATA] or std::ptr::null();

    /// `void IBaseObject::attachToVehicle(IVehicle &, Vector3, Vector3)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_attach_to_vehicle(
        player_object: IPlayerObject,
        vehicle: *mut IVehicle,
        offset: Vector3,
        rotation: Vector3,
    ) = [0, SLOT_ATTACH_TO_VEHICLE];

    /// `void IBaseObject::resetAttachment()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_reset_attachment(
        player_object: IPlayerObject,
    ) = [0, SLOT_RESET_ATTACHMENT];

    /// `const ObjectAttachmentData & IBaseObject::getAttachmentData()`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_attachment_data(
        player_object: IPlayerObject,
    ) -> *const ObjectAttachmentData = [0, SLOT_GET_ATTACHMENT_DATA] or std::ptr::null();

    /// `bool IBaseObject::getMaterialData(uint32_t, const ObjectMaterialData *&)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    #[must_use]
    pub fn player_object_material_data(
        player_object: IPlayerObject,
        material_index: u32,
        out: *mut *const ObjectMaterialData,
    ) -> bool = [0, SLOT_GET_MATERIAL_DATA] or false;

    /// `void IBaseObject::setMaterial(uint32_t, int, StringView, StringView, Colour)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_set_material(
        player_object: IPlayerObject,
        material_index: u32,
        model: i32,
        texture_library: StringView,
        texture_name: StringView,
        colour: Colour,
    ) = [0, SLOT_SET_MATERIAL];

    /// `void IBaseObject::setMaterialText(uint32_t, StringView, ObjectMaterialSize, StringView, int, bool, Colour, Colour, ObjectMaterialTextAlign)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_set_material_text(
        player_object: IPlayerObject,
        material_index: u32,
        text: StringView,
        material_size: i32,
        font_face: StringView,
        font_size: i32,
        bold: bool,
        font_colour: Colour,
        background_colour: Colour,
        align: i32,
    ) = [0, SLOT_SET_MATERIAL_TEXT];

    /// `void IPlayerObject::attachToObject(IPlayerObject &, Vector3, Vector3)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_attach_to_object(
        player_object: IPlayerObject,
        object: *mut IPlayerObject,
        offset: Vector3,
        rotation: Vector3,
    ) = [0, SLOT_ATTACH_TO_OBJECT];

    /// `void IPlayerObject::attachToPlayer(IPlayer &, Vector3, Vector3)`.
    ///
    /// # Safety
    /// `player_object` must be a live `IPlayerObject`.
    pub fn player_object_attach_to_player(
        player_object: IPlayerObject,
        player: *mut IPlayer,
        offset: Vector3,
        rotation: Vector3,
    ) = [0, SLOT_ATTACH_TO_PLAYER];
}