use crate::prelude::*;
use soloud_sys::soloud as ffi;
#[repr(i32)]
#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
pub enum SfxrPreset {
Coin = 0,
Laser = 1,
Explosion = 2,
PowerUp = 3,
Hurt = 4,
Jump = 5,
Blip = 6,
}
#[derive(Debug)]
pub struct Sfxr {
inner: *mut ffi::Sfxr,
}
crate::macros::audio::impl_audio_ext!(Sfxr);
impl Sfxr {
pub fn load_preset(&mut self, preset: SfxrPreset, rand_seed: i32) -> Result<(), SoloudError> {
ffi_call!(ffi::Sfxr_loadPreset(self.inner, preset as i32, rand_seed))
}
pub fn reset_params(&mut self) {
unsafe { ffi::Sfxr_resetParams(self.inner) }
}
pub fn load_params(&mut self, path: &std::path::Path) -> Result<(), SoloudError> {
let path = path
.to_str()
.ok_or(SoloudError::Internal(SoloudErrorKind::FileLoadFailed))?;
let path = std::ffi::CString::new(path)?;
ffi_call!(ffi::Sfxr_loadParams(self.inner, path.as_ptr()))
}
pub fn load_params_mem(&mut self, params: &[u8]) -> Result<(), SoloudError> {
ffi_call!(ffi::Sfxr_loadParamsMemEx(
self.inner,
params.as_ptr() as *mut _,
params.len() as u32,
1,
1,
))
}
}