define_api_id!(0x1d69_ec55_ed04_461d, "world-v3");
pub use crate::world_v0::BoneWeightFlags;
pub use crate::world_v0::EntityHandle;
pub use crate::world_v0::MeshHandle;
pub use crate::world_v0::Ray;
pub use crate::world_v0::ENTITY_HANDLE_INVALID;
use crate::FFIResult;
use bytemuck::Pod;
use bytemuck::Zeroable;
#[ark_api_macros::ark_bindgen(imports = "ark-world-v3")]
mod world {
use super::*;
#[derive(Copy, Clone, Default, Debug, Pod, Zeroable)]
#[repr(C)]
pub struct RaycastQuery {
pub ray: Ray,
pub layer_mask: u64,
pub ignore_entity: EntityHandle,
pub max_distance: f32,
pub _pad: u32,
}
#[derive(Copy, Clone, Default, Debug, Pod, Zeroable)]
#[repr(C)]
pub struct RaycastHit {
pub point: [f32; 3],
pub normal: [f32; 3],
pub entity: EntityHandle,
pub distance: f32,
pub _pad: u32,
}
impl RaycastHit {
pub fn invalid() -> Self {
Self {
point: [std::f32::NAN; 3],
normal: [std::f32::NAN; 3],
entity: ENTITY_HANDLE_INVALID,
distance: std::f32::NAN,
_pad: 0,
}
}
}
#[derive(Copy, Clone, Debug, Pod, Zeroable)]
#[repr(C, align(16))]
pub struct BoneTransform {
pub rot: [f32; 4],
pub pos: [f32; 3],
pub _pad: u32,
}
#[derive(Debug, Copy, Clone, Pod, Zeroable)]
#[repr(C)]
pub struct SdfProgramDesc {
pub num_opcodes: u32,
pub opcodes_ptr: u32,
pub num_constants: u32,
pub constants_ptr: u32,
}
#[derive(Debug, Copy, Clone, Pod, Zeroable)]
#[repr(C)]
pub struct SdfSkinDesc {
pub base_sdf_entity: EntityHandle,
pub num_bone_entities: u32,
pub bone_entities_ptr: u32,
pub num_rest_from_shape: u32,
pub rest_from_shape_ptr: u32,
}
#[derive(Debug, Copy, Clone, Pod, Zeroable)]
#[repr(C)]
pub struct SdfSkinDesc2 {
pub base_sdf_entity: EntityHandle,
pub num_bone_entities: u32,
pub bone_entities_ptr: u32,
pub num_rest_from_shape: u32,
pub rest_from_shape_ptr: u32,
pub replacement_mesh: MeshHandle,
pub bone_weight_flags: BoneWeightFlags,
pub bone_weight_bias: f32,
pub bone_weight_falloff: f32,
pub reserved0: u32,
}
#[derive(Debug, Copy, Clone, Pod, Zeroable)]
#[repr(C)]
pub struct MorphTargetDesc {
pub num_weights: u32,
pub weights_ptr: u32,
pub names_ptr: u32,
}
#[derive(Debug, Copy, Clone, Pod, Zeroable)]
#[repr(C)]
pub struct WorldMaterialsDesc {
pub materials_len: u32,
pub materials_ptr: u32,
}
extern "C" {
#[deprecated_infallible]
pub fn entities_in_contact(a: EntityHandle, b: EntityHandle) -> bool;
#[deprecated_infallible]
pub fn entity_contact_count(a: EntityHandle) -> u32;
#[deprecated_infallible]
pub fn retrieve_entities_in_contact(a: EntityHandle, entities: &mut [EntityHandle]) -> u32;
#[deprecated_infallible]
pub fn raycast(raycast: &RaycastQuery) -> RaycastHit;
#[deprecated_infallible]
pub fn raycast_batched(raycasts: &[RaycastQuery], hits: &mut [RaycastHit]);
#[deprecated_infallible]
pub fn create_body_immediate(e: EntityHandle);
#[deprecated_infallible]
pub fn set_collision_matrix_rows(first_row: u32, rows: &[u64]);
#[deprecated(note = "use `create_data` instead")] pub fn create_mesh_from_gltf(gltf_data: &[u8], buffer_data: &[u8])
-> FFIResult<MeshHandle>;
}
}
pub use world::*;