Maraiah/maraiah/map/fxpx.rs

47 lines
1.0 KiB
Rust
Raw Normal View History

2019-04-01 01:38:51 -07:00
//! `Effect` type.
2019-06-13 18:09:07 -07:00
use crate::{bin::OptU16, err::*, fixed::Fixed};
2019-04-01 01:38:51 -07:00
/// Reads a `FXpx` chunk.
pub fn read(b: &[u8]) -> ResultS<(Effect, usize)>
{
2019-07-05 20:21:11 -07:00
read_data! {
endian: BIG, buf: b, size: 14, start: 0, data {
let collection = u16[0];
let shape = u16[2];
let pitch = Fixed[4];
let flags = u16[8] flag EffectFlags;
let delay = OptU16[10];
let delay_snd = OptU16[12];
}
}
2019-04-01 01:38:51 -07:00
2019-07-05 20:21:11 -07:00
Ok((Effect{collection, shape, pitch, flags, delay, delay_snd}, 14))
2019-04-01 01:38:51 -07:00
}
/// An effect definition.
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
#[derive(Debug, Eq, PartialEq)]
2019-06-25 03:52:21 -07:00
pub struct Effect {
2019-07-05 20:21:11 -07:00
pub collection: u16,
pub shape: u16,
pub pitch: Fixed,
pub flags: EffectFlags,
pub delay: OptU16,
pub delay_snd: OptU16,
2019-04-01 01:38:51 -07:00
}
c_bitfield! {
2019-07-05 20:21:11 -07:00
/// Flags for an effect.
#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))]
pub struct EffectFlags: u16 {
END_ON_LOOP = 0,
END_ON_XFER_LOOP = 1,
SOUND_ONLY = 2,
MAKE_TWIN_VISIBLE = 3,
MEDIA_EFFECT = 4,
}
2019-04-01 01:38:51 -07:00
}
// EOF