brickrust 1.11.2+brickrust-001

A library which allows Brick Rigs modding
#![allow(nonstandard_style)]
pub static mut gworld: *mut *mut UWorld = core::ptr::null_mut();

use crate::ue::coreuobject::EObjectFlags;
use crate::ue::fname::{FName, NAME_NONE};
use crate::ue::uclass::UClass;
use crate::ue::fmath::*;

use super::actor::AActor;

#[repr(C)]
pub struct UWorld
{

}

#[repr(C)]
pub struct FActorSpawnParameters
{
    pub name: FName,
    pub template: *mut AActor,
    pub owner: *mut AActor,
    pub instigator: *mut AActor,
    pub override_level: *mut (),
    pub flags: u8,
    pub object_flags: EObjectFlags,
}

impl FActorSpawnParameters
{
    pub fn new() -> FActorSpawnParameters
    {
        FActorSpawnParameters {
            name: NAME_NONE,
            template: core::ptr::null_mut(),
            owner: core::ptr::null_mut(),
            instigator: core::ptr::null_mut(),
            override_level: core::ptr::null_mut(),
            flags: 0, 
            object_flags: EObjectFlags::RF_Transactional, 
        }

    }
}

type fnSpawnActor = unsafe extern "C" fn(world: *mut UWorld, class: *mut UClass, location: *const FVector, rotation: *const FRotator, params: *const FActorSpawnParameters ) -> *mut AActor;
pub(crate) static mut SpawnActor_ptr: Option<fnSpawnActor> = None;

impl UWorld
{
    #[inline]
    pub unsafe fn SpawnActor(&mut self, class: *mut UClass, location: *const FVector, rotation: *const FRotator, params: *const FActorSpawnParameters ) -> *mut AActor {
        (SpawnActor_ptr.unwrap())(self, class, location, rotation, params)
    }
}

pub unsafe fn GWorld() -> &'static mut UWorld
{
    return &mut **gworld;
}