53 lines
1.2 KiB
Rust
53 lines
1.2 KiB
Rust
//! `SoundRand` type.
|
|
|
|
use crate::{err::*, fixed::{Angle, Fixed}};
|
|
|
|
/// Reads a `bonk` chunk.
|
|
pub fn read(b: &[u8]) -> ResultS<(SoundRand, usize)>
|
|
{
|
|
read_data! {
|
|
endian: BIG, buf: b, size: 32, start: 0, data {
|
|
let flags = u16[0] flag SoundRandFlags;
|
|
let index = u16[2];
|
|
let vol_nrm = u16[4];
|
|
let vol_dta = u16[6];
|
|
let prd_nrm = u16[8];
|
|
let prd_dta = u16[10];
|
|
let yaw_nrm = Angle[12];
|
|
let yaw_dta = Angle[14];
|
|
let pit_nrm = Fixed[16];
|
|
let pit_dta = Fixed[20];
|
|
}
|
|
}
|
|
|
|
Ok((SoundRand{flags, index, vol_nrm, vol_dta, prd_nrm, prd_dta, yaw_nrm,
|
|
yaw_dta, pit_nrm, pit_dta}, 32))
|
|
}
|
|
|
|
/// A randomly played sound definition.
|
|
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
pub struct SoundRand {
|
|
pub flags: SoundRandFlags,
|
|
pub index: u16,
|
|
pub vol_nrm: u16,
|
|
pub vol_dta: u16,
|
|
pub prd_nrm: u16,
|
|
pub prd_dta: u16,
|
|
pub yaw_nrm: Angle,
|
|
pub yaw_dta: Angle,
|
|
pub pit_nrm: Fixed,
|
|
pub pit_dta: Fixed,
|
|
}
|
|
|
|
c_bitfield! {
|
|
/// Flags for `SoundRand`.
|
|
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
|
|
pub struct SoundRandFlags: u16 {
|
|
NO_DIRECTION = 0,
|
|
_2 = 1,
|
|
}
|
|
}
|
|
|
|
// EOF
|