1use crate::{Error, Result};
8use fmod_sys::*;
9use lanyard::Utf8CString;
10use std::ffi::{c_float, c_int};
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
14#[cfg_attr(target_env = "msvc", repr(i32))]
16#[cfg_attr(not(target_env = "msvc"), repr(u32))]
17pub enum LoadingState {
18 Unloading = FMOD_STUDIO_LOADING_STATE_UNLOADING,
20 Unloaded = FMOD_STUDIO_LOADING_STATE_UNLOADED,
22 Loading = FMOD_STUDIO_LOADING_STATE_LOADING,
24 Loaded = FMOD_STUDIO_LOADING_STATE_LOADED,
26 Error(Error) = FMOD_STUDIO_LOADING_STATE_ERROR,
28}
29
30impl LoadingState {
31 pub fn try_from_ffi(value: FMOD_STUDIO_LOADING_STATE, error: Option<Error>) -> Result<Self> {
33 match value {
34 FMOD_STUDIO_LOADING_STATE_UNLOADING => Ok(LoadingState::Unloading),
35 FMOD_STUDIO_LOADING_STATE_UNLOADED => Ok(LoadingState::Unloaded),
36 FMOD_STUDIO_LOADING_STATE_LOADING => Ok(LoadingState::Loading),
37 FMOD_STUDIO_LOADING_STATE_LOADED => Ok(LoadingState::Loaded),
38 FMOD_STUDIO_LOADING_STATE_ERROR => {
39 error.map(LoadingState::Error).ok_or(Error::InvalidParam)
40 }
41 _ => Err(Error::EnumFromPrivitive {
42 name: "LoadingState",
43 primitive: i64::from(value),
44 }),
45 }
46 }
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq)]
51#[derive(
52 num_enum::TryFromPrimitive,
53 num_enum::IntoPrimitive,
54 num_enum::UnsafeFromPrimitive
55)]
56#[cfg_attr(target_env = "msvc", repr(i32))]
58#[cfg_attr(not(target_env = "msvc"), repr(u32))]
59pub enum StopMode {
60 AllowFadeout = FMOD_STUDIO_STOP_ALLOWFADEOUT,
62 Immediate = FMOD_STUDIO_STOP_IMMEDIATE,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq)]
68#[derive(
69 num_enum::TryFromPrimitive,
70 num_enum::IntoPrimitive,
71 num_enum::UnsafeFromPrimitive
72)]
73#[cfg_attr(target_env = "msvc", repr(i32))]
75#[cfg_attr(not(target_env = "msvc"), repr(u32))]
76pub enum ParameterKind {
77 GameControlled = FMOD_STUDIO_PARAMETER_GAME_CONTROLLED,
79 AutomaticDistance = FMOD_STUDIO_PARAMETER_AUTOMATIC_DISTANCE,
81 AutomaticEventConeAngle = FMOD_STUDIO_PARAMETER_AUTOMATIC_EVENT_CONE_ANGLE,
83 AutomaticEventOrientation = FMOD_STUDIO_PARAMETER_AUTOMATIC_EVENT_ORIENTATION,
85 AutomaticDirection = FMOD_STUDIO_PARAMETER_AUTOMATIC_DIRECTION,
87 AutomaticElevation = FMOD_STUDIO_PARAMETER_AUTOMATIC_ELEVATION,
89 AutomaticListenerOrientation = FMOD_STUDIO_PARAMETER_AUTOMATIC_LISTENER_ORIENTATION,
91 AutomaticSpeed = FMOD_STUDIO_PARAMETER_AUTOMATIC_SPEED,
93 AutomaticSpeedAbsolute = FMOD_STUDIO_PARAMETER_AUTOMATIC_SPEED_ABSOLUTE,
95 AutomaticDistanceNormalized = FMOD_STUDIO_PARAMETER_AUTOMATIC_DISTANCE_NORMALIZED,
97}
98
99#[derive(Clone, PartialEq, Debug)]
101pub enum UserPropertyKind {
102 Int(c_int),
104 Bool(bool),
106 Float(c_float),
108 String(Utf8CString),
110}
111
112#[derive(Debug, Clone, Copy, PartialEq, Eq)]
114#[derive(
115 num_enum::TryFromPrimitive,
116 num_enum::IntoPrimitive,
117 num_enum::UnsafeFromPrimitive
118)]
119#[cfg_attr(target_env = "msvc", repr(i32))]
121#[cfg_attr(not(target_env = "msvc"), repr(u32))]
122pub enum PlaybackState {
123 Playing = FMOD_STUDIO_PLAYBACK_PLAYING,
125 Sustaining = FMOD_STUDIO_PLAYBACK_SUSTAINING,
127 Stopped = FMOD_STUDIO_PLAYBACK_STOPPED,
129 Starting = FMOD_STUDIO_PLAYBACK_STARTING,
131 Stopping = FMOD_STUDIO_PLAYBACK_STOPPING,
133}
134
135#[derive(Debug, Clone, Copy, PartialEq, Eq)]
137#[derive(
138 num_enum::TryFromPrimitive,
139 num_enum::IntoPrimitive,
140 num_enum::UnsafeFromPrimitive
141)]
142#[cfg_attr(target_env = "msvc", repr(i32))]
144#[cfg_attr(not(target_env = "msvc"), repr(u32))]
145pub enum EventProperty {
146 ChannelPriority = FMOD_STUDIO_EVENT_PROPERTY_CHANNELPRIORITY,
148 ScheduleDelay = FMOD_STUDIO_EVENT_PROPERTY_SCHEDULE_DELAY,
150 ScheduleLookahead = FMOD_STUDIO_EVENT_PROPERTY_SCHEDULE_LOOKAHEAD,
152 MinimumDistance = FMOD_STUDIO_EVENT_PROPERTY_MINIMUM_DISTANCE,
154 MaximumDistance = FMOD_STUDIO_EVENT_PROPERTY_MAXIMUM_DISTANCE,
156 Cooldown = FMOD_STUDIO_EVENT_PROPERTY_COOLDOWN,
158}
159
160#[derive(Debug, Clone, Copy, PartialEq, Eq)]
162#[derive(
163 num_enum::TryFromPrimitive,
164 num_enum::IntoPrimitive,
165 num_enum::UnsafeFromPrimitive
166)]
167#[cfg_attr(target_env = "msvc", repr(i32))]
169#[cfg_attr(not(target_env = "msvc"), repr(u32))]
170pub enum InstanceType {
171 None = FMOD_STUDIO_INSTANCETYPE_NONE,
173 System = FMOD_STUDIO_INSTANCETYPE_SYSTEM,
175 EventDescription = FMOD_STUDIO_INSTANCETYPE_EVENTDESCRIPTION,
177 EventInstance = FMOD_STUDIO_INSTANCETYPE_EVENTINSTANCE,
179 ParameterInstance = FMOD_STUDIO_INSTANCETYPE_PARAMETERINSTANCE,
181 Bus = FMOD_STUDIO_INSTANCETYPE_BUS,
183 Vca = FMOD_STUDIO_INSTANCETYPE_VCA,
185 Bank = FMOD_STUDIO_INSTANCETYPE_BANK,
187 CommandReplay = FMOD_STUDIO_INSTANCETYPE_COMMANDREPLAY,
189}