fmod/studio/
enums.rs

1// Copyright (c) 2024 Lily Lyons
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
7use fmod_sys::*;
8use lanyard::Utf8CString;
9use std::ffi::{c_float, c_int};
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12// stupid enum repr hack
13#[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// stupid enum repr hack
48#[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// stupid enum repr hack
62#[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// stupid enum repr hack
92#[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// stupid enum repr hack
109#[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// stupid enum repr hack
127#[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}