1use fmod_sys::*;
8use lanyard::Utf8CString;
9use std::ffi::{c_float, c_int};
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12#[cfg_attr(target_env = "msvc", repr(i32))]
14#[cfg_attr(not(target_env = "msvc"), repr(u32))]
15pub enum LoadingState {
16 Unloading = FMOD_STUDIO_LOADING_STATE_UNLOADING,
17 Unloaded = FMOD_STUDIO_LOADING_STATE_UNLOADED,
18 Loading = FMOD_STUDIO_LOADING_STATE_LOADING,
19 Loaded = FMOD_STUDIO_LOADING_STATE_LOADED,
20 Error(Error) = FMOD_STUDIO_LOADING_STATE_ERROR,
21}
22
23impl LoadingState {
24 pub fn try_from_ffi(value: FMOD_STUDIO_LOADING_STATE, error: Option<Error>) -> Result<Self> {
25 match value {
26 FMOD_STUDIO_LOADING_STATE_UNLOADING => Ok(LoadingState::Unloading),
27 FMOD_STUDIO_LOADING_STATE_UNLOADED => Ok(LoadingState::Unloaded),
28 FMOD_STUDIO_LOADING_STATE_LOADING => Ok(LoadingState::Loading),
29 FMOD_STUDIO_LOADING_STATE_LOADED => Ok(LoadingState::Loaded),
30 FMOD_STUDIO_LOADING_STATE_ERROR => error
31 .map(LoadingState::Error)
32 .ok_or(Error::Fmod(FMOD_RESULT::FMOD_ERR_INVALID_PARAM)),
33 _ => Err(Error::EnumFromPrivitive {
34 name: "LoadingState",
35 primitive: i64::from(value),
36 }),
37 }
38 }
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq)]
42#[derive(
43 num_enum::TryFromPrimitive,
44 num_enum::IntoPrimitive,
45 num_enum::UnsafeFromPrimitive
46)]
47#[cfg_attr(target_env = "msvc", repr(i32))]
49#[cfg_attr(not(target_env = "msvc"), repr(u32))]
50pub enum StopMode {
51 AllowFadeout = FMOD_STUDIO_STOP_ALLOWFADEOUT,
52 Immediate = FMOD_STUDIO_STOP_IMMEDIATE,
53}
54
55#[derive(Debug, Clone, Copy, PartialEq, Eq)]
56#[derive(
57 num_enum::TryFromPrimitive,
58 num_enum::IntoPrimitive,
59 num_enum::UnsafeFromPrimitive
60)]
61#[cfg_attr(target_env = "msvc", repr(i32))]
63#[cfg_attr(not(target_env = "msvc"), repr(u32))]
64pub enum ParameterKind {
65 GameControlled = FMOD_STUDIO_PARAMETER_GAME_CONTROLLED,
66 AutomaticDistance = FMOD_STUDIO_PARAMETER_AUTOMATIC_DISTANCE,
67 AutomaticEventConeAngle = FMOD_STUDIO_PARAMETER_AUTOMATIC_EVENT_CONE_ANGLE,
68 AutomaticEventOrientation = FMOD_STUDIO_PARAMETER_AUTOMATIC_EVENT_ORIENTATION,
69 AutomaticDirection = FMOD_STUDIO_PARAMETER_AUTOMATIC_DIRECTION,
70 AutomaticElevation = FMOD_STUDIO_PARAMETER_AUTOMATIC_ELEVATION,
71 AutomaticListenerOrientation = FMOD_STUDIO_PARAMETER_AUTOMATIC_LISTENER_ORIENTATION,
72 AutomaticSpeed = FMOD_STUDIO_PARAMETER_AUTOMATIC_SPEED,
73 AutomaticSpeedAbsolute = FMOD_STUDIO_PARAMETER_AUTOMATIC_SPEED_ABSOLUTE,
74 AutomaticDistanceNormalized = FMOD_STUDIO_PARAMETER_AUTOMATIC_DISTANCE_NORMALIZED,
75}
76
77#[derive(Clone, PartialEq, Debug)]
78pub enum UserPropertyKind {
79 Int(c_int),
80 Bool(bool),
81 Float(c_float),
82 String(Utf8CString),
83}
84
85#[derive(Debug, Clone, Copy, PartialEq, Eq)]
86#[derive(
87 num_enum::TryFromPrimitive,
88 num_enum::IntoPrimitive,
89 num_enum::UnsafeFromPrimitive
90)]
91#[cfg_attr(target_env = "msvc", repr(i32))]
93#[cfg_attr(not(target_env = "msvc"), repr(u32))]
94pub enum PlaybackState {
95 Playing = FMOD_STUDIO_PLAYBACK_PLAYING,
96 Sustaining = FMOD_STUDIO_PLAYBACK_SUSTAINING,
97 Stopped = FMOD_STUDIO_PLAYBACK_STOPPED,
98 Starting = FMOD_STUDIO_PLAYBACK_STARTING,
99 Stopping = FMOD_STUDIO_PLAYBACK_STOPPING,
100}
101
102#[derive(Debug, Clone, Copy, PartialEq, Eq)]
103#[derive(
104 num_enum::TryFromPrimitive,
105 num_enum::IntoPrimitive,
106 num_enum::UnsafeFromPrimitive
107)]
108#[cfg_attr(target_env = "msvc", repr(i32))]
110#[cfg_attr(not(target_env = "msvc"), repr(u32))]
111pub enum EventProperty {
112 ChannelPriority = FMOD_STUDIO_EVENT_PROPERTY_CHANNELPRIORITY,
113 ScheduleDelay = FMOD_STUDIO_EVENT_PROPERTY_SCHEDULE_DELAY,
114 ScheduleLookahead = FMOD_STUDIO_EVENT_PROPERTY_SCHEDULE_LOOKAHEAD,
115 MinimumDistance = FMOD_STUDIO_EVENT_PROPERTY_MINIMUM_DISTANCE,
116 MaximumDistance = FMOD_STUDIO_EVENT_PROPERTY_MAXIMUM_DISTANCE,
117 Cooldown = FMOD_STUDIO_EVENT_PROPERTY_COOLDOWN,
118}
119
120#[derive(Debug, Clone, Copy, PartialEq, Eq)]
121#[derive(
122 num_enum::TryFromPrimitive,
123 num_enum::IntoPrimitive,
124 num_enum::UnsafeFromPrimitive
125)]
126#[cfg_attr(target_env = "msvc", repr(i32))]
128#[cfg_attr(not(target_env = "msvc"), repr(u32))]
129pub enum InstanceType {
130 None = FMOD_STUDIO_INSTANCETYPE_NONE,
131 System = FMOD_STUDIO_INSTANCETYPE_SYSTEM,
132 EventDescription = FMOD_STUDIO_INSTANCETYPE_EVENTDESCRIPTION,
133 EventInstance = FMOD_STUDIO_INSTANCETYPE_EVENTINSTANCE,
134 ParameterInstance = FMOD_STUDIO_INSTANCETYPE_PARAMETERINSTANCE,
135 Bus = FMOD_STUDIO_INSTANCETYPE_BUS,
136 Vca = FMOD_STUDIO_INSTANCETYPE_VCA,
137 Bank = FMOD_STUDIO_INSTANCETYPE_BANK,
138 CommandReplay = FMOD_STUDIO_INSTANCETYPE_COMMANDREPLAY,
139}