pub enum AttenuationModel {
Linear,
InverseDistance,
Exponential {
rolloff: f32,
},
None,
}Expand description
Audio attenuation model for distance-based volume falloff.
Controls how audio volume decreases with distance from the listener. Different models provide different falloff curves for realistic or stylized audio behavior.
§Models
- Linear: Linear falloff (volume = 1 - distance/max_distance)
- InverseDistance: Realistic inverse distance falloff (volume = 1 / (1 + distance))
- Exponential: Exponential falloff (volume = (1 - distance/max_distance)^rolloff)
- None: No attenuation (constant volume regardless of distance)
§Examples
use goud_engine::ecs::components::AttenuationModel;
let linear = AttenuationModel::Linear;
let inverse = AttenuationModel::InverseDistance;
let exponential = AttenuationModel::Exponential { rolloff: 2.0 };
let none = AttenuationModel::None;
assert_eq!(linear.name(), "Linear");
assert_eq!(inverse.name(), "InverseDistance");Variants§
Linear
Linear falloff: volume = max(0, 1 - distance/max_distance)
InverseDistance
Inverse distance falloff: volume = 1 / (1 + distance)
Exponential
Exponential falloff: volume = max(0, (1 - distance/max_distance)^rolloff)
None
No attenuation (constant volume)
Implementations§
Source§impl AttenuationModel
impl AttenuationModel
Sourcepub fn compute_attenuation(&self, distance: f32, max_distance: f32) -> f32
pub fn compute_attenuation(&self, distance: f32, max_distance: f32) -> f32
Computes the attenuation factor (0.0-1.0) based on distance.
§Arguments
distance: Distance from listener (must be >= 0)max_distance: Maximum distance for attenuation (must be > 0)
§Returns
Volume multiplier in range [0.0, 1.0]
§Examples
use goud_engine::ecs::components::AttenuationModel;
let model = AttenuationModel::Linear;
assert_eq!(model.compute_attenuation(0.0, 100.0), 1.0);
assert_eq!(model.compute_attenuation(50.0, 100.0), 0.5);
assert_eq!(model.compute_attenuation(100.0, 100.0), 0.0);
assert_eq!(model.compute_attenuation(150.0, 100.0), 0.0); // Beyond maxTrait Implementations§
Source§impl Clone for AttenuationModel
impl Clone for AttenuationModel
Source§fn clone(&self) -> AttenuationModel
fn clone(&self) -> AttenuationModel
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for AttenuationModel
impl Debug for AttenuationModel
Source§impl Default for AttenuationModel
impl Default for AttenuationModel
Source§fn default() -> AttenuationModel
fn default() -> AttenuationModel
Returns AttenuationModel::InverseDistance as the default (most realistic).
Source§impl<'de> Deserialize<'de> for AttenuationModel
impl<'de> Deserialize<'de> for AttenuationModel
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<AttenuationModel, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<AttenuationModel, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Display for AttenuationModel
impl Display for AttenuationModel
Source§impl PartialEq for AttenuationModel
impl PartialEq for AttenuationModel
Source§impl Serialize for AttenuationModel
impl Serialize for AttenuationModel
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl Copy for AttenuationModel
impl StructuralPartialEq for AttenuationModel
Auto Trait Implementations§
impl Freeze for AttenuationModel
impl RefUnwindSafe for AttenuationModel
impl Send for AttenuationModel
impl Sync for AttenuationModel
impl Unpin for AttenuationModel
impl UnsafeUnpin for AttenuationModel
impl UnwindSafe for AttenuationModel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().