use std::ffi::c_void;
use crate::error::UikaErrorCode;
use crate::handles::*;
use crate::reify_types::UikaReifyPropExtra;
pub use crate::handles::FWeakObjectHandle;
#[repr(C)]
pub struct UikaApiTable {
pub version: u32,
pub core: *const UikaCoreApi,
pub property: *const UikaPropertyApi,
pub reflection: *const UikaReflectionApi,
pub memory: *const UikaMemoryApi,
pub container: *const UikaContainerApi,
pub delegate: *const UikaDelegateApi,
pub lifecycle: *const UikaLifecycleApi,
pub reify: *const UikaReifyApi,
pub world: *const UikaWorldApi,
pub logging: *const UikaLoggingApi,
pub func_table: *const *const c_void,
pub func_count: u32,
}
unsafe impl Send for UikaApiTable {}
unsafe impl Sync for UikaApiTable {}
#[repr(C)]
pub struct UikaCoreApi {
pub is_valid: unsafe extern "C" fn(obj: UObjectHandle) -> bool,
pub get_name: unsafe extern "C" fn(
obj: UObjectHandle,
buf: *mut u8,
buf_len: u32,
out_len: *mut u32,
) -> UikaErrorCode,
pub get_class: unsafe extern "C" fn(obj: UObjectHandle) -> UClassHandle,
pub is_a: unsafe extern "C" fn(obj: UObjectHandle, target_class: UClassHandle) -> bool,
pub get_outer: unsafe extern "C" fn(obj: UObjectHandle) -> UObjectHandle,
pub make_fname: unsafe extern "C" fn(name_utf8: *const u8, name_len: u32) -> FNameHandle,
pub fname_to_string: unsafe extern "C" fn(
handle: FNameHandle,
buf: *mut u8,
buf_len: u32,
out_len: *mut u32,
) -> UikaErrorCode,
pub make_weak: unsafe extern "C" fn(obj: UObjectHandle) -> FWeakObjectHandle,
pub resolve_weak: unsafe extern "C" fn(weak: FWeakObjectHandle) -> UObjectHandle,
pub is_weak_valid: unsafe extern "C" fn(weak: FWeakObjectHandle) -> bool,
}
#[repr(C)]
pub struct UikaLoggingApi {
pub log: unsafe extern "C" fn(level: u8, msg: *const u8, msg_len: u32),
}
#[repr(C)]
pub struct UikaLifecycleApi {
pub add_gc_root: unsafe extern "C" fn(obj: UObjectHandle),
pub remove_gc_root: unsafe extern "C" fn(obj: UObjectHandle),
pub register_pinned: unsafe extern "C" fn(obj: UObjectHandle),
pub unregister_pinned: unsafe extern "C" fn(obj: UObjectHandle),
}
#[repr(C)]
pub struct UikaPropertyApi {
pub get_bool: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut bool) -> UikaErrorCode,
pub set_bool: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: bool) -> UikaErrorCode,
pub get_i32: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut i32) -> UikaErrorCode,
pub set_i32: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: i32) -> UikaErrorCode,
pub get_i64: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut i64) -> UikaErrorCode,
pub set_i64: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: i64) -> UikaErrorCode,
pub get_u8: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut u8) -> UikaErrorCode,
pub set_u8: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: u8) -> UikaErrorCode,
pub get_f32: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut f32) -> UikaErrorCode,
pub set_f32: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: f32) -> UikaErrorCode,
pub get_f64: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut f64) -> UikaErrorCode,
pub set_f64: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: f64) -> UikaErrorCode,
pub get_string: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, buf: *mut u8, buf_len: u32, out_len: *mut u32) -> UikaErrorCode,
pub set_string: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, buf: *const u8, len: u32) -> UikaErrorCode,
pub get_fname: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut FNameHandle) -> UikaErrorCode,
pub set_fname: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: FNameHandle) -> UikaErrorCode,
pub get_object: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut UObjectHandle) -> UikaErrorCode,
pub set_object: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: UObjectHandle) -> UikaErrorCode,
pub get_enum: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out: *mut i64) -> UikaErrorCode,
pub set_enum: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, val: i64) -> UikaErrorCode,
pub get_struct: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, out_buf: *mut u8, buf_size: u32) -> UikaErrorCode,
pub set_struct: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle, in_buf: *const u8, buf_size: u32) -> UikaErrorCode,
pub get_property_at: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
index: u32, out_buf: *mut u8, buf_size: u32,
) -> UikaErrorCode,
pub set_property_at: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
index: u32, in_buf: *const u8, buf_size: u32,
) -> UikaErrorCode,
}
#[repr(C)]
pub struct UikaReflectionApi {
pub find_class: unsafe extern "C" fn(name: *const u8, name_len: u32) -> UClassHandle,
pub find_property: unsafe extern "C" fn(
class: UClassHandle,
name: *const u8,
name_len: u32,
) -> FPropertyHandle,
pub get_static_class: unsafe extern "C" fn(name: *const u8, name_len: u32) -> UClassHandle,
pub get_property_size: unsafe extern "C" fn(prop: FPropertyHandle) -> u32,
pub find_struct: unsafe extern "C" fn(name: *const u8, name_len: u32) -> UStructHandle,
pub find_struct_property: unsafe extern "C" fn(
ustruct: UStructHandle,
name: *const u8,
name_len: u32,
) -> FPropertyHandle,
pub find_function: unsafe extern "C" fn(
obj: UObjectHandle,
name: *const u8,
name_len: u32,
) -> UFunctionHandle,
pub alloc_params: unsafe extern "C" fn(func: UFunctionHandle) -> *mut u8,
pub free_params: unsafe extern "C" fn(func: UFunctionHandle, params: *mut u8),
pub call_function: unsafe extern "C" fn(
obj: UObjectHandle,
func: UFunctionHandle,
params: *mut u8,
) -> UikaErrorCode,
pub get_function_param: unsafe extern "C" fn(
func: UFunctionHandle,
name: *const u8,
name_len: u32,
) -> FPropertyHandle,
pub get_property_offset: unsafe extern "C" fn(prop: FPropertyHandle) -> u32,
pub find_function_by_class: unsafe extern "C" fn(
cls: UClassHandle,
name: *const u8,
name_len: u32,
) -> UFunctionHandle,
pub get_element_size: unsafe extern "C" fn(prop: FPropertyHandle) -> u32,
pub get_struct_size: unsafe extern "C" fn(ustruct: UStructHandle) -> u32,
pub initialize_struct: unsafe extern "C" fn(ustruct: UStructHandle, data: *mut u8) -> UikaErrorCode,
pub destroy_struct: unsafe extern "C" fn(ustruct: UStructHandle, data: *mut u8) -> UikaErrorCode,
}
#[repr(C)]
pub struct UikaMemoryApi {
_opaque: u8,
}
#[repr(C)]
pub struct UikaContainerApi {
pub array_len: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle) -> i32,
pub array_get: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
index: i32, out_buf: *mut u8, buf_size: u32, out_written: *mut u32,
) -> UikaErrorCode,
pub array_set: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
index: i32, in_buf: *const u8, buf_size: u32,
) -> UikaErrorCode,
pub array_add: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
in_buf: *const u8, buf_size: u32,
) -> UikaErrorCode,
pub array_remove: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle, index: i32,
) -> UikaErrorCode,
pub array_clear: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
) -> UikaErrorCode,
pub array_element_size: unsafe extern "C" fn(prop: FPropertyHandle) -> u32,
pub map_len: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle) -> i32,
pub map_find: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
key_buf: *const u8, key_size: u32,
out_val_buf: *mut u8, val_size: u32, out_written: *mut u32,
) -> UikaErrorCode,
pub map_add: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
key_buf: *const u8, key_size: u32, val_buf: *const u8, val_size: u32,
) -> UikaErrorCode,
pub map_remove: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
key_buf: *const u8, key_size: u32,
) -> UikaErrorCode,
pub map_clear: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
) -> UikaErrorCode,
pub map_get_pair: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
logical_index: i32,
out_key_buf: *mut u8, key_buf_size: u32, out_key_written: *mut u32,
out_val_buf: *mut u8, val_buf_size: u32, out_val_written: *mut u32,
) -> UikaErrorCode,
pub set_len: unsafe extern "C" fn(obj: UObjectHandle, prop: FPropertyHandle) -> i32,
pub set_contains: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
elem_buf: *const u8, elem_size: u32,
) -> bool,
pub set_add: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
elem_buf: *const u8, elem_size: u32,
) -> UikaErrorCode,
pub set_remove: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
elem_buf: *const u8, elem_size: u32,
) -> UikaErrorCode,
pub set_clear: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
) -> UikaErrorCode,
pub set_get_element: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
logical_index: i32, out_buf: *mut u8, buf_size: u32, out_written: *mut u32,
) -> UikaErrorCode,
pub alloc_temp: unsafe extern "C" fn(prop: FPropertyHandle) -> *mut u8,
pub free_temp: unsafe extern "C" fn(prop: FPropertyHandle, base: *mut u8),
pub array_copy_all: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
out_buf: *mut u8, buf_size: u32,
out_total_written: *mut u32, out_count: *mut i32,
) -> UikaErrorCode,
pub array_set_all: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
in_buf: *const u8, buf_size: u32, count: i32,
) -> UikaErrorCode,
pub map_copy_all: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
out_buf: *mut u8, buf_size: u32,
out_total_written: *mut u32, out_count: *mut i32,
) -> UikaErrorCode,
pub set_copy_all: unsafe extern "C" fn(
obj: UObjectHandle, prop: FPropertyHandle,
out_buf: *mut u8, buf_size: u32,
out_total_written: *mut u32, out_count: *mut i32,
) -> UikaErrorCode,
}
#[repr(C)]
pub struct UikaDelegateApi {
pub bind_delegate: unsafe extern "C" fn(
obj: UObjectHandle,
prop: FPropertyHandle,
callback_id: u64,
) -> UikaErrorCode,
pub unbind_delegate: unsafe extern "C" fn(
obj: UObjectHandle,
prop: FPropertyHandle,
) -> UikaErrorCode,
pub add_multicast: unsafe extern "C" fn(
obj: UObjectHandle,
prop: FPropertyHandle,
callback_id: u64,
) -> UikaErrorCode,
pub remove_multicast: unsafe extern "C" fn(
obj: UObjectHandle,
prop: FPropertyHandle,
callback_id: u64,
) -> UikaErrorCode,
pub broadcast_multicast: unsafe extern "C" fn(
obj: UObjectHandle,
prop: FPropertyHandle,
params: *mut u8,
) -> UikaErrorCode,
}
#[repr(C)]
pub struct UikaReifyApi {
pub create_class: unsafe extern "C" fn(
name: *const u8,
name_len: u32,
parent: UClassHandle,
rust_type_id: u64,
) -> UClassHandle,
pub add_property: unsafe extern "C" fn(
cls: UClassHandle,
name: *const u8,
name_len: u32,
prop_type: u32,
prop_flags: u64,
extra: *const UikaReifyPropExtra,
) -> FPropertyHandle,
pub add_function: unsafe extern "C" fn(
cls: UClassHandle,
name: *const u8,
name_len: u32,
callback_id: u64,
func_flags: u32,
) -> UFunctionHandle,
pub add_function_param: unsafe extern "C" fn(
func: UFunctionHandle,
name: *const u8,
name_len: u32,
prop_type: u32,
param_flags: u64,
extra: *const UikaReifyPropExtra,
) -> UikaErrorCode,
pub finalize_class: unsafe extern "C" fn(cls: UClassHandle) -> UikaErrorCode,
pub get_cdo: unsafe extern "C" fn(cls: UClassHandle) -> UObjectHandle,
pub add_default_subobject: unsafe extern "C" fn(
cls: UClassHandle,
name: *const u8, name_len: u32,
component_class: UClassHandle,
flags: u32,
attach_parent: *const u8, attach_len: u32,
) -> UikaErrorCode,
pub find_default_subobject: unsafe extern "C" fn(
owner: UObjectHandle,
name: *const u8, name_len: u32,
) -> UObjectHandle,
}
pub const UIKA_COMP_ROOT: u32 = 1;
pub const UIKA_COMP_TRANSIENT: u32 = 2;
#[repr(C)]
pub struct UikaWorldApi {
pub spawn_actor: unsafe extern "C" fn(
world: UObjectHandle,
class: UClassHandle,
transform_buf: *const u8,
transform_size: u32,
owner: UObjectHandle,
) -> UObjectHandle,
pub get_all_actors_of_class: unsafe extern "C" fn(
world: UObjectHandle,
class: UClassHandle,
out_buf: *mut UObjectHandle,
buf_capacity: u32,
out_count: *mut u32,
) -> UikaErrorCode,
pub find_object: unsafe extern "C" fn(
class: UClassHandle,
path_utf8: *const u8,
path_len: u32,
) -> UObjectHandle,
pub load_object: unsafe extern "C" fn(
class: UClassHandle,
path_utf8: *const u8,
path_len: u32,
) -> UObjectHandle,
pub get_world: unsafe extern "C" fn(actor: UObjectHandle) -> UObjectHandle,
pub new_object: unsafe extern "C" fn(outer: UObjectHandle, class: UClassHandle) -> UObjectHandle,
pub spawn_actor_deferred: unsafe extern "C" fn(
world: UObjectHandle,
class: UClassHandle,
transform_buf: *const u8,
transform_size: u32,
owner: UObjectHandle,
instigator: UObjectHandle,
collision_method: u8,
) -> UObjectHandle,
pub finish_spawning: unsafe extern "C" fn(
actor: UObjectHandle,
transform_buf: *const u8,
transform_size: u32,
) -> UikaErrorCode,
}