Files
funnygame/rapier/physics.rs
2026-03-03 00:51:04 +02:00

51 lines
1000 B
Rust

/*
* Rapier bindings are defined here
*/
#![allow(nonstandard_style)]
macro_rules! V_malloc {
($t:ty, $count:expr) => {
malloc(size_of::<$t>() * $count) as *mut $t
};
}
use std::ptr::{self, null};
use std::mem::transmute;
use parry3d::shape::{Shape, ShapeType};
use rapier3d::geometry::Ball;
use libc::{malloc, free};
#[repr(C)]
pub struct BallShape_t
{
m_fRadius: f32,
}
pub struct RapierShape_t
{
m_eType: ShapeType,
m_shape: *mut dyn Shape,
}
pub struct RapierPhysics
{
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn CRapierPhysics_CreateBall( ball: BallShape_t ) -> *mut RapierShape_t
{
let rapierShape = Ball::new(ball.m_fRadius);
let rapierShapeMemory: *mut Ball = V_malloc!(Ball, 1);
*rapierShapeMemory = rapierShape;
let shape: RapierShape_t = RapierShape_t { m_eType: ShapeType::Ball, m_shape: rapierShapeMemory };
let shapeMemory: *mut RapierShape_t = V_malloc!(RapierShape_t, 1);
*shapeMemory = shape;
shapeMemory
}