use fmod_sys::*;
use lanyard::{Utf8CStr, Utf8CString};
use std::{ffi::c_int, mem::MaybeUninit};
use crate::studio::{EventDescription, ParameterDescription, ParameterID, get_string_out_size};
use crate::{FmodResultExt, Result};
impl EventDescription {
pub fn get_parameter_description_by_name(
&self,
name: &Utf8CStr,
) -> Result<ParameterDescription> {
let mut description = MaybeUninit::zeroed();
unsafe {
FMOD_Studio_EventDescription_GetParameterDescriptionByName(
self.inner.as_ptr(),
name.as_ptr(),
description.as_mut_ptr(),
)
.to_result()?;
let description = ParameterDescription::from_ffi(description.assume_init());
Ok(description)
}
}
pub fn get_parameter_description_by_id(&self, id: ParameterID) -> Result<ParameterDescription> {
let mut description = MaybeUninit::zeroed();
unsafe {
FMOD_Studio_EventDescription_GetParameterDescriptionByID(
self.inner.as_ptr(),
id.into(),
description.as_mut_ptr(),
)
.to_result()?;
let description = ParameterDescription::from_ffi(description.assume_init());
Ok(description)
}
}
pub fn get_parameter_description_by_index(&self, index: c_int) -> Result<ParameterDescription> {
let mut description = MaybeUninit::zeroed();
unsafe {
FMOD_Studio_EventDescription_GetParameterDescriptionByIndex(
self.inner.as_ptr(),
index,
description.as_mut_ptr(),
)
.to_result()?;
let description = ParameterDescription::from_ffi(description.assume_init());
Ok(description)
}
}
pub fn parameter_description_count(&self) -> Result<c_int> {
let mut count = 0;
unsafe {
FMOD_Studio_EventDescription_GetParameterDescriptionCount(
self.inner.as_ptr(),
&raw mut count,
)
.to_result()?;
}
Ok(count)
}
pub fn get_parameter_label_by_name(
&self,
name: &Utf8CStr,
label_index: c_int,
) -> Result<Utf8CString> {
get_string_out_size(|path, size, ret| unsafe {
FMOD_Studio_EventDescription_GetParameterLabelByName(
self.inner.as_ptr(),
name.as_ptr(),
label_index,
path,
size,
ret,
)
})
}
pub fn get_parameter_label_by_id(
&self,
id: ParameterID,
label_index: c_int,
) -> Result<Utf8CString> {
get_string_out_size(|path, size, ret| unsafe {
FMOD_Studio_EventDescription_GetParameterLabelByID(
self.inner.as_ptr(),
id.into(),
label_index,
path,
size,
ret,
)
})
}
pub fn get_parameter_label_by_index(
&self,
index: c_int,
label_index: c_int,
) -> Result<Utf8CString> {
get_string_out_size(|path, size, ret| unsafe {
FMOD_Studio_EventDescription_GetParameterLabelByIndex(
self.inner.as_ptr(),
index,
label_index,
path,
size,
ret,
)
})
}
}