Maraiah/maraiah/map/bonk.rs

55 lines
1.3 KiB
Rust
Raw Normal View History

2019-04-01 00:39:47 -07:00
//! `SoundRand` type.
2019-06-13 18:09:07 -07:00
use crate::{err::*, fixed::{Angle, Fixed}};
2019-04-01 06:05:06 -07:00
use bitflags::bitflags;
2019-04-01 00:39:47 -07:00
/// Reads a `bonk` chunk.
pub fn read(b: &[u8]) -> ResultS<(SoundRand, usize)>
{
read_data! {
endian: BIG, buf: b, size: 32, start: 0, data {
2019-04-01 06:05:06 -07:00
let flags = u16[0] flag SoundRandFlags;
2019-04-01 00:39:47 -07:00
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];
}
}
2019-04-01 06:05:06 -07:00
Ok((SoundRand{flags, index, vol_nrm, vol_dta, prd_nrm, prd_dta, yaw_nrm,
2019-04-01 00:39:47 -07:00
yaw_dta, pit_nrm, pit_dta}, 32))
}
/// A randomly played sound definition.
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
2019-06-21 18:34:10 -07:00
#[derive(Clone, Debug, Eq, PartialEq)]
2019-04-01 00:39:47 -07:00
pub struct SoundRand
{
2019-04-01 06:05:06 -07:00
pub flags: SoundRandFlags,
2019-04-01 00:39:47 -07:00
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,
}
2019-04-01 06:05:06 -07:00
bitflags! {
/// Flags for `SoundRand`.
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
pub struct SoundRandFlags: u16
{
const NO_DIRECTION = 1;
}
}
2019-04-01 00:39:47 -07:00
// EOF