fmod/studio/
flags.rs

1// Copyright (c) 2024 Melody Madeline 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#![allow(missing_docs)]
7
8use fmod_sys::*;
9use std::ffi::c_uint;
10
11bitflags::bitflags! {
12    /// Studio System initialization flags.
13    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
14    pub struct InitFlags: c_uint {
15        /// Use defaults for all initialization options.
16        const NORMAL                = FMOD_STUDIO_INIT_NORMAL;
17        /// Enable live update.
18        const LIVEUPDATE            = FMOD_STUDIO_INIT_LIVEUPDATE;
19        /// Load banks even if they reference plug-ins that have not been loaded.
20        const ALLOW_MISSING_PLUGINS = FMOD_STUDIO_INIT_ALLOW_MISSING_PLUGINS;
21        /// Disable asynchronous processing and perform all processing on the calling thread instead.
22        ///
23        /// This flag cannot be used normally as this crate has guardrails preventing it.
24        /// It is still here for completeness' sake, though.
25        const SYNCHRONOUS_UPDATE    = FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE;
26        /// Defer timeline callbacks until the main update.
27        const DEFERRED_CALLBACKS    = FMOD_STUDIO_INIT_DEFERRED_CALLBACKS;
28        /// No additional threads are created for bank and resource loading.
29        const LOAD_FROM_UPDATE      = FMOD_STUDIO_INIT_LOAD_FROM_UPDATE;
30        /// Enables detailed memory usage statistics. Increases memory footprint and impacts performance.
31        const MEMORY_TRACKING       = FMOD_STUDIO_INIT_MEMORY_TRACKING;
32    }
33}
34
35impl From<FMOD_STUDIO_INITFLAGS> for InitFlags {
36    fn from(value: FMOD_STUDIO_INITFLAGS) -> Self {
37        InitFlags::from_bits_truncate(value)
38    }
39}
40
41impl From<InitFlags> for FMOD_STUDIO_INITFLAGS {
42    fn from(value: InitFlags) -> Self {
43        value.bits()
44    }
45}
46
47bitflags::bitflags! {
48    /// Flags for controlling bank loading.
49    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
50    pub struct LoadBankFlags: c_uint {
51        /// Standard behavior.
52        const NORMAL             = FMOD_STUDIO_LOAD_BANK_NORMAL;
53        /// Bank loading occurs asynchronously rather than occurring immediately.
54        const NONBLOCKING        = FMOD_STUDIO_LOAD_BANK_NONBLOCKING;
55        /// Force samples to decompress into memory when they are loaded, rather than staying compressed.
56        const DECOMPRESS_SAMPLES = FMOD_STUDIO_LOAD_BANK_DECOMPRESS_SAMPLES;
57        /// Ignore the encryption key specified by `AdvancedSettings` when loading sounds from this bank (assume the sounds in the bank are not encrypted).
58        const UNENCRYPTED        = FMOD_STUDIO_LOAD_BANK_UNENCRYPTED;
59    }
60}
61
62impl From<FMOD_STUDIO_LOAD_BANK_FLAGS> for LoadBankFlags {
63    fn from(value: FMOD_STUDIO_LOAD_BANK_FLAGS) -> Self {
64        LoadBankFlags::from_bits_truncate(value)
65    }
66}
67
68impl From<LoadBankFlags> for FMOD_STUDIO_LOAD_BANK_FLAGS {
69    fn from(value: LoadBankFlags) -> Self {
70        value.bits()
71    }
72}
73
74bitflags::bitflags! {
75    /// Flags describing the behavior of a parameter.
76    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
77    pub struct ParameterFlags: c_uint {
78        /// Read only.
79        const READONLY = FMOD_STUDIO_PARAMETER_READONLY;
80        /// Automatic parameter.
81        const AUTOMATIC = FMOD_STUDIO_PARAMETER_AUTOMATIC;
82        /// Global parameter.
83        const GLOBAL = FMOD_STUDIO_PARAMETER_GLOBAL;
84        /// Discrete parameter that operates on integers (whole numbers) rather than continuous fractional numbers.
85        const DISCRETE = FMOD_STUDIO_PARAMETER_DISCRETE;
86        /// Labeled discrete parameter that has a label for each integer value.
87        /// This flag is never set in banks built with FMOD Studio versions prior to 2.01.10.
88        /// If this flag is set, `DISCRETE` is also set.
89        const LABELED = FMOD_STUDIO_PARAMETER_LABELED;
90    }
91}
92
93impl From<FMOD_STUDIO_PARAMETER_FLAGS> for ParameterFlags {
94    fn from(value: FMOD_STUDIO_PARAMETER_FLAGS) -> Self {
95        ParameterFlags::from_bits_truncate(value)
96    }
97}
98
99impl From<ParameterFlags> for FMOD_STUDIO_PARAMETER_FLAGS {
100    fn from(value: ParameterFlags) -> Self {
101        value.bits()
102    }
103}
104
105bitflags::bitflags! {
106    /// Flags controling command capture.
107    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
108    pub struct CommandCaptureFlags: c_uint {
109        /// Use default options.
110        const NORMAL = FMOD_STUDIO_COMMANDCAPTURE_NORMAL;
111        /// Call file flush on every command.
112        const FILE_FLUSH = FMOD_STUDIO_COMMANDCAPTURE_FILEFLUSH;
113        /// The initial state of banks and instances is captured, unless this flag is set.
114        const SKIP_INITIAL_STATE = FMOD_STUDIO_COMMANDCAPTURE_SKIP_INITIAL_STATE;
115    }
116}
117
118impl From<FMOD_STUDIO_COMMANDCAPTURE_FLAGS> for CommandCaptureFlags {
119    fn from(value: FMOD_STUDIO_COMMANDCAPTURE_FLAGS) -> Self {
120        CommandCaptureFlags::from_bits_truncate(value)
121    }
122}
123
124impl From<CommandCaptureFlags> for FMOD_STUDIO_COMMANDCAPTURE_FLAGS {
125    fn from(value: CommandCaptureFlags) -> Self {
126        value.bits()
127    }
128}
129
130bitflags::bitflags! {
131    /// Flags controlling command replay.
132    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
133    pub struct CommandReplayFlags: c_uint {
134        /// Use default options.
135        const NORMAL = FMOD_STUDIO_COMMANDCAPTURE_NORMAL;
136        /// Do not free resources at the end of playback.
137        const SKIP_CLEANUP = FMOD_STUDIO_COMMANDREPLAY_SKIP_CLEANUP;
138        /// Play back at maximum speed, ignoring the timing of the original replay.
139        const FAST_FORWARD = FMOD_STUDIO_COMMANDREPLAY_FAST_FORWARD;
140        /// Skip commands related to bank loading.
141        const SKIP_BANK_LOAD = FMOD_STUDIO_COMMANDREPLAY_SKIP_BANK_LOAD;
142    }
143}
144
145impl From<FMOD_STUDIO_COMMANDREPLAY_FLAGS> for CommandReplayFlags {
146    fn from(value: FMOD_STUDIO_COMMANDREPLAY_FLAGS) -> Self {
147        CommandReplayFlags::from_bits_truncate(value)
148    }
149}
150
151impl From<CommandReplayFlags> for FMOD_STUDIO_COMMANDREPLAY_FLAGS {
152    fn from(value: CommandReplayFlags) -> Self {
153        value.bits()
154    }
155}
156
157bitflags::bitflags! {
158    /// A mask used to determine what callbacks can or cannot be called.
159    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
160    pub struct EventCallbackMask: c_uint {
161        const CREATED = FMOD_STUDIO_EVENT_CALLBACK_CREATED;
162        const DESTROYED = FMOD_STUDIO_EVENT_CALLBACK_DESTROYED;
163        const STARTING = FMOD_STUDIO_EVENT_CALLBACK_STARTING;
164        const STARTED = FMOD_STUDIO_EVENT_CALLBACK_STARTED;
165        const RESTARTED = FMOD_STUDIO_EVENT_CALLBACK_RESTARTED;
166        const STOPPED = FMOD_STUDIO_EVENT_CALLBACK_STOPPED;
167        const START_FAILED = FMOD_STUDIO_EVENT_CALLBACK_START_FAILED;
168        const CREATE_PROGRAMMER_SOUND = FMOD_STUDIO_EVENT_CALLBACK_CREATE_PROGRAMMER_SOUND;
169        const DESTROY_PROGRAMMER_SOUND = FMOD_STUDIO_EVENT_CALLBACK_DESTROY_PROGRAMMER_SOUND;
170        const PLUGIN_CREATED = FMOD_STUDIO_EVENT_CALLBACK_PLUGIN_CREATED;
171        const PLUGIN_DESTROYED = FMOD_STUDIO_EVENT_CALLBACK_PLUGIN_DESTROYED;
172        const TIMELINE_MARKER = FMOD_STUDIO_EVENT_CALLBACK_TIMELINE_MARKER;
173        const TIMELINE_BEAT = FMOD_STUDIO_EVENT_CALLBACK_TIMELINE_BEAT;
174        const SOUND_PLAYED = FMOD_STUDIO_EVENT_CALLBACK_SOUND_PLAYED;
175        const SOUND_STOPPED = FMOD_STUDIO_EVENT_CALLBACK_SOUND_STOPPED;
176        const REAL_TO_VIRTUAL = FMOD_STUDIO_EVENT_CALLBACK_REAL_TO_VIRTUAL;
177        const VIRTUAL_TO_REAL = FMOD_STUDIO_EVENT_CALLBACK_VIRTUAL_TO_REAL;
178        const START_EVENT_COMMAND = FMOD_STUDIO_EVENT_CALLBACK_START_EVENT_COMMAND;
179        const NESTED_TIMELINE_BEAT = FMOD_STUDIO_EVENT_CALLBACK_NESTED_TIMELINE_BEAT;
180        const ALL = FMOD_STUDIO_EVENT_CALLBACK_ALL;
181    }
182}
183
184impl From<FMOD_STUDIO_EVENT_CALLBACK_TYPE> for EventCallbackMask {
185    fn from(value: FMOD_STUDIO_EVENT_CALLBACK_TYPE) -> Self {
186        EventCallbackMask::from_bits_truncate(value)
187    }
188}
189
190impl From<EventCallbackMask> for FMOD_STUDIO_EVENT_CALLBACK_TYPE {
191    fn from(value: EventCallbackMask) -> Self {
192        value.bits()
193    }
194}
195
196bitflags::bitflags! {
197    /// A mask used to determine what callbacks can or cannot be called.
198    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
199    pub struct SystemCallbackMask: c_uint {
200        const PREUPDATE = FMOD_STUDIO_SYSTEM_CALLBACK_PREUPDATE;
201        const POSTUPDATE = FMOD_STUDIO_SYSTEM_CALLBACK_POSTUPDATE;
202        const BANK_UNLOAD = FMOD_STUDIO_SYSTEM_CALLBACK_BANK_UNLOAD;
203        const LIVEUPDATE_CONNECTED = FMOD_STUDIO_SYSTEM_CALLBACK_LIVEUPDATE_CONNECTED;
204        const LIVEUPDATE_DISCONNECTED = FMOD_STUDIO_SYSTEM_CALLBACK_LIVEUPDATE_DISCONNECTED;
205    }
206}
207
208impl From<FMOD_STUDIO_SYSTEM_CALLBACK_TYPE> for SystemCallbackMask {
209    fn from(value: FMOD_STUDIO_SYSTEM_CALLBACK_TYPE) -> Self {
210        SystemCallbackMask::from_bits_truncate(value)
211    }
212}
213
214impl From<SystemCallbackMask> for FMOD_STUDIO_SYSTEM_CALLBACK_TYPE {
215    fn from(value: SystemCallbackMask) -> Self {
216        value.bits()
217    }
218}