use fmod_sys::*;
use std::ffi::{c_float, c_int};
use crate::studio::{CommandReplay, PlaybackState};
#[cfg(doc)]
use crate::studio::CommandReplayFlags;
use crate::{FmodResultExt, Result};
impl CommandReplay {
pub fn start(&self) -> Result<()> {
unsafe { FMOD_Studio_CommandReplay_Start(self.inner.as_ptr()).to_result() }
}
pub fn stop(&self) -> Result<()> {
unsafe { FMOD_Studio_CommandReplay_Stop(self.inner.as_ptr()).to_result() }
}
pub fn get_current_command(&self) -> Result<(c_int, c_float)> {
let mut command_index = 0;
let mut current_time = 0.0;
unsafe {
FMOD_Studio_CommandReplay_GetCurrentCommand(
self.inner.as_ptr(),
&raw mut command_index,
&raw mut current_time,
)
.to_result()?;
}
Ok((command_index, current_time))
}
pub fn get_playback_state(&self) -> Result<PlaybackState> {
let mut state = 0;
unsafe {
FMOD_Studio_CommandReplay_GetPlaybackState(self.inner.as_ptr(), &raw mut state)
.to_result()?;
let state = state.try_into()?;
Ok(state)
}
}
pub fn set_paused(&self, paused: bool) -> Result<()> {
unsafe {
FMOD_Studio_CommandReplay_SetPaused(self.inner.as_ptr(), paused.into()).to_result()
}
}
pub fn get_paused(&self) -> Result<bool> {
let mut paused = FMOD_BOOL::FALSE;
unsafe {
FMOD_Studio_CommandReplay_GetPaused(self.inner.as_ptr(), &raw mut paused)
.to_result()?;
}
Ok(paused.into())
}
pub fn seek_to_command(&self, index: c_int) -> Result<()> {
unsafe { FMOD_Studio_CommandReplay_SeekToCommand(self.inner.as_ptr(), index).to_result() }
}
pub fn seek_to_time(&self, time: c_float) -> Result<()> {
unsafe { FMOD_Studio_CommandReplay_SeekToTime(self.inner.as_ptr(), time).to_result() }
}
}