use fmod_sys::*;
use std::ffi::c_int;
use crate::studio::{EventDescription, EventInstance};
#[cfg(doc)]
use crate::studio::Bank;
use crate::{FmodResultExt, Result};
impl EventDescription {
pub fn create_instance(&self) -> Result<EventInstance> {
let mut instance = std::ptr::null_mut();
unsafe {
FMOD_Studio_EventDescription_CreateInstance(self.inner.as_ptr(), &raw mut instance)
.to_result()?;
Ok(EventInstance::from_ffi(instance))
}
}
pub fn instance_count(&self) -> Result<c_int> {
let mut count = 0;
unsafe {
FMOD_Studio_EventDescription_GetInstanceCount(self.inner.as_ptr(), &raw mut count)
.to_result()?;
}
Ok(count)
}
pub fn get_instance_list(&self) -> Result<Vec<EventInstance>> {
let expected_count = self.instance_count()?;
let mut count = 0;
let mut list = vec![std::ptr::null_mut(); expected_count as usize];
unsafe {
FMOD_Studio_EventDescription_GetInstanceList(
self.inner.as_ptr(),
list.as_mut_ptr(),
list.capacity() as c_int,
&raw mut count,
)
.to_result()?;
debug_assert_eq!(count, expected_count);
Ok(std::mem::transmute::<
Vec<*mut fmod_sys::FMOD_STUDIO_EVENTINSTANCE>,
Vec<EventInstance>,
>(list))
}
}
pub fn get_instance_list_into(&self, slice: &mut [Option<EventInstance>]) -> Result<c_int> {
let mut count = 0;
unsafe {
FMOD_Studio_EventDescription_GetInstanceList(
self.inner.as_ptr(),
slice.as_mut_ptr().cast(),
slice.len() as c_int,
&raw mut count,
)
.to_result()?;
Ok(count)
}
}
pub fn release_all_instances(&self) -> Result<()> {
unsafe { FMOD_Studio_EventDescription_ReleaseAllInstances(self.inner.as_ptr()).to_result() }
}
}