use fmod_sys::*;
use std::mem::MaybeUninit;
use crate::{FmodResultExt, Result};
use crate::{Geometry, Vector};
impl Geometry {
pub fn set_position(&self, position: Vector) -> Result<()> {
unsafe {
FMOD_Geometry_SetPosition(self.inner.as_ptr(), std::ptr::from_ref(&position).cast())
.to_result()
}
}
pub fn get_position(&self) -> Result<Vector> {
let mut position = MaybeUninit::uninit();
unsafe {
FMOD_Geometry_GetPosition(self.inner.as_ptr(), position.as_mut_ptr()).to_result()?;
let position = position.assume_init().into();
Ok(position)
}
}
pub fn set_rotation(&self, forward: Vector, up: Vector) -> Result<()> {
unsafe {
FMOD_Geometry_SetRotation(
self.inner.as_ptr(),
std::ptr::from_ref(&forward).cast(),
std::ptr::from_ref(&up).cast(),
)
.to_result()
}
}
pub fn get_rotation(&self) -> Result<(Vector, Vector)> {
let mut forward = MaybeUninit::uninit();
let mut up = MaybeUninit::uninit();
unsafe {
FMOD_Geometry_GetRotation(self.inner.as_ptr(), forward.as_mut_ptr(), up.as_mut_ptr())
.to_result()?;
let forward = forward.assume_init().into();
let up = up.assume_init().into();
Ok((forward, up))
}
}
pub fn set_scale(&self, scale: Vector) -> Result<()> {
unsafe {
FMOD_Geometry_SetScale(self.inner.as_ptr(), std::ptr::from_ref(&scale).cast())
.to_result()
}
}
pub fn get_scale(&self) -> Result<Vector> {
let mut scale = MaybeUninit::uninit();
unsafe {
FMOD_Geometry_GetScale(self.inner.as_ptr(), scale.as_mut_ptr()).to_result()?;
let scale = scale.assume_init().into();
Ok(scale)
}
}
}