use std::{
ffi::{c_float, c_uint},
mem::MaybeUninit,
};
use fmod_sys::*;
use crate::Attributes3D;
use crate::studio::EventInstance;
use crate::{FmodResultExt, Result};
impl EventInstance {
pub fn set_3d_attributes(&self, attributes: Attributes3D) -> Result<()> {
let mut attributes = attributes.into();
unsafe {
FMOD_Studio_EventInstance_Set3DAttributes(self.inner.as_ptr(), &raw mut attributes)
.to_result()
}
}
pub fn get_3d_attributes(&self) -> Result<Attributes3D> {
let mut attributes = MaybeUninit::zeroed();
unsafe {
FMOD_Studio_EventInstance_Get3DAttributes(self.inner.as_ptr(), attributes.as_mut_ptr())
.to_result()?;
let attributes = attributes.assume_init().into();
Ok(attributes)
}
}
pub fn set_listener_mask(&self, mask: c_uint) -> Result<()> {
unsafe { FMOD_Studio_EventInstance_SetListenerMask(self.inner.as_ptr(), mask).to_result() }
}
pub fn get_listener_mask(&self) -> Result<c_uint> {
let mut mask = 0;
unsafe {
FMOD_Studio_EventInstance_GetListenerMask(self.inner.as_ptr(), &raw mut mask)
.to_result()?;
}
Ok(mask)
}
pub fn get_min_max_distance(&self) -> Result<(c_float, c_float)> {
let mut min = 0.0;
let mut max = 0.0;
unsafe {
FMOD_Studio_EventInstance_GetMinMaxDistance(
self.inner.as_ptr(),
&raw mut min,
&raw mut max,
)
.to_result()?;
}
Ok((min, max))
}
}