pub struct AxisDeadZone { /* private fields */ }
Expand description
A scaled version of AxisExclusion
with the bounds
set to AxisBounds::magnitude(1.0)
that normalizes non-excluded input values into the “live zone”,
the remaining range within the bounds after dead zone exclusion.
§Examples
use bevy::prelude::*;
use leafwing_input_manager::prelude::*;
// Exclude values between -0.2 and 0.3
let deadzone = AxisDeadZone::new(-0.2, 0.3);
// Another way to create an AxisDeadzone.
let exclusion = AxisExclusion::new(-0.2, 0.3);
assert_eq!(exclusion.scaled(), deadzone);
// The ways to create an AxisProcessor.
let processor = AxisProcessor::from(deadzone);
assert_eq!(processor, AxisProcessor::DeadZone(deadzone));
// The bounds after normalization.
let bounds = deadzone.bounds();
assert_eq!(bounds.min(), -1.0);
assert_eq!(bounds.max(), 1.0);
for value in -300..300 {
let value = value as f32 * 0.01;
// Values within the dead zone are treated as zero.
if -0.2 <= value && value <= 0.3 {
assert!(deadzone.within_exclusion(value));
assert_eq!(deadzone.normalize(value), 0.0);
}
// Values within the live zone are scaled linearly.
else if -1.0 <= value && value < -0.2 {
assert!(deadzone.within_livezone_lower(value));
let expected = f32::inverse_lerp(-1.0, -0.2, value) - 1.0;
assert!((deadzone.normalize(value) - expected).abs() <= f32::EPSILON);
} else if 0.3 < value && value <= 1.0 {
assert!(deadzone.within_livezone_upper(value));
let expected = f32::inverse_lerp(0.3, 1.0, value);
assert!((deadzone.normalize(value) - expected).abs() <= f32::EPSILON);
}
// Values outside the bounds are restricted to the range.
else {
assert!(!deadzone.within_bounds(value));
assert_eq!(deadzone.normalize(value), value.clamp(-1.0, 1.0));
}
}
Implementations§
source§impl AxisDeadZone
impl AxisDeadZone
sourcepub const fn extend_dual(self) -> DualAxisDeadZone
pub const fn extend_dual(self) -> DualAxisDeadZone
Creates a DualAxisDeadZone
using self
for both axes.
sourcepub const fn extend_dual_only_x(self) -> DualAxisDeadZone
pub const fn extend_dual_only_x(self) -> DualAxisDeadZone
Creates a DualAxisDeadZone
only using self
for the X-axis.
sourcepub const fn extend_dual_only_y(self) -> DualAxisDeadZone
pub const fn extend_dual_only_y(self) -> DualAxisDeadZone
Creates a DualAxisDeadZone
only using self
to the Y-axis.
sourcepub const fn extend_dual_with_x(self, deadzone_x: Self) -> DualAxisDeadZone
pub const fn extend_dual_with_x(self, deadzone_x: Self) -> DualAxisDeadZone
Creates a DualAxisDeadZone
using self
to the Y-axis with the given bounds_x
to the X-axis.
sourcepub const fn extend_dual_with_y(self, deadzone_y: Self) -> DualAxisDeadZone
pub const fn extend_dual_with_y(self, deadzone_y: Self) -> DualAxisDeadZone
Creates a DualAxisDeadZone
using self
to the X-axis with the given bounds_y
to the Y-axis.
source§impl AxisDeadZone
impl AxisDeadZone
sourcepub const ZERO: Self = _
pub const ZERO: Self = _
Zero-size AxisDeadZone
, only restricting values to the range [-1.0, 1.0]
.
sourcepub fn new(negative_max: f32, positive_min: f32) -> Self
pub fn new(negative_max: f32, positive_min: f32) -> Self
Creates an AxisDeadZone
that excludes input values within the range [negative_max, positive_min]
and then normalizes non-excluded input values into the valid range [-1.0, 1.0]
.
§Requirements
negative_max
<=0.0
<=positive_min
.
§Panics
Panics if the requirements aren’t met.
sourcepub fn symmetric(threshold: f32) -> Self
pub fn symmetric(threshold: f32) -> Self
Creates an AxisDeadZone
that excludes input values within the range [-threshold, threshold]
and then normalizes non-excluded input values into the valid range [-1.0, 1.0]
.
§Requirements
threshold
>=0.0
.
§Panics
Panics if the requirements aren’t met.
sourcepub fn only_positive(positive_min: f32) -> Self
pub fn only_positive(positive_min: f32) -> Self
Creates an AxisDeadZone
that only passes positive values that greater than positive_min
and then normalizes them into the valid range [-1.0, 1.0]
.
§Requirements
positive_min
>=0.0
.
§Panics
Panics if the requirements aren’t met.
sourcepub fn only_negative(negative_max: f32) -> Self
pub fn only_negative(negative_max: f32) -> Self
Creates an AxisDeadZone
that only passes negative values that less than negative_max
and then normalizes them into the valid range [-1.0, 1.0]
.
§Requirements
negative_max
<=0.0
.
§Panics
Panics if the requirements aren’t met.
sourcepub fn exclusion(&self) -> AxisExclusion
pub fn exclusion(&self) -> AxisExclusion
Returns the AxisExclusion
used by this deadzone.
sourcepub fn bounds(&self) -> AxisBounds
pub fn bounds(&self) -> AxisBounds
Returns the AxisBounds
used by this deadzone.
sourcepub fn livezone_lower_min_max(&self) -> (f32, f32)
pub fn livezone_lower_min_max(&self) -> (f32, f32)
Returns the minimum and maximum bounds of the lower live zone used for normalization.
In simple terms, this returns (bounds.min, exclusion.min)
.
sourcepub fn livezone_upper_min_max(&self) -> (f32, f32)
pub fn livezone_upper_min_max(&self) -> (f32, f32)
Returns the minimum and maximum bounds of the upper live zone used for normalization.
In simple terms, this returns (exclusion.max, bounds.max)
.
sourcepub fn within_exclusion(&self, input_value: f32) -> bool
pub fn within_exclusion(&self, input_value: f32) -> bool
Is the given input_value
within the exclusion range?
sourcepub fn within_bounds(&self, input_value: f32) -> bool
pub fn within_bounds(&self, input_value: f32) -> bool
Is the given input_value
within the bounds?
sourcepub fn within_livezone_lower(&self, input_value: f32) -> bool
pub fn within_livezone_lower(&self, input_value: f32) -> bool
Is the given input_value
within the lower live zone?
sourcepub fn within_livezone_upper(&self, input_value: f32) -> bool
pub fn within_livezone_upper(&self, input_value: f32) -> bool
Is the given input_value
within the upper live zone?
Trait Implementations§
source§impl Clone for AxisDeadZone
impl Clone for AxisDeadZone
source§fn clone(&self) -> AxisDeadZone
fn clone(&self) -> AxisDeadZone
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for AxisDeadZone
impl Debug for AxisDeadZone
source§impl Default for AxisDeadZone
impl Default for AxisDeadZone
source§fn default() -> Self
fn default() -> Self
Creates an AxisDeadZone
that excludes input values within the deadzone [-0.1, 0.1]
.
source§impl<'de> Deserialize<'de> for AxisDeadZone
impl<'de> Deserialize<'de> for AxisDeadZone
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl From<AxisDeadZone> for AxisProcessor
impl From<AxisDeadZone> for AxisProcessor
source§fn from(value: AxisDeadZone) -> Self
fn from(value: AxisDeadZone) -> Self
source§impl From<AxisDeadZone> for DualAxisProcessor
impl From<AxisDeadZone> for DualAxisProcessor
source§fn from(deadzone: AxisDeadZone) -> Self
fn from(deadzone: AxisDeadZone) -> Self
source§impl FromReflect for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
impl FromReflect for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
source§fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
Self
from a reflected value.source§fn take_from_reflect(
reflect: Box<dyn Reflect>,
) -> Result<Self, Box<dyn Reflect>>
fn take_from_reflect( reflect: Box<dyn Reflect>, ) -> Result<Self, Box<dyn Reflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moresource§impl GetTypeRegistration for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
impl GetTypeRegistration for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
source§impl Hash for AxisDeadZone
impl Hash for AxisDeadZone
source§impl PartialEq for AxisDeadZone
impl PartialEq for AxisDeadZone
source§impl Reflect for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
impl Reflect for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any
.source§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
source§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Reflect
trait object. Read moresource§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
source§fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
source§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
source§impl Serialize for AxisDeadZone
impl Serialize for AxisDeadZone
source§impl Struct for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
impl Struct for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
source§fn field(&self, name: &str) -> Option<&dyn Reflect>
fn field(&self, name: &str) -> Option<&dyn Reflect>
name
as a &dyn Reflect
.source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
name
as a
&mut dyn Reflect
.source§fn field_at(&self, index: usize) -> Option<&dyn Reflect>
fn field_at(&self, index: usize) -> Option<&dyn Reflect>
index
as a
&dyn Reflect
.source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
index
as a &mut dyn Reflect
.source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.source§impl TypePath for AxisDeadZone
impl TypePath for AxisDeadZone
source§fn type_path() -> &'static str
fn type_path() -> &'static str
source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
source§impl Typed for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
impl Typed for AxisDeadZonewhere
Self: Any + Send + Sync,
AxisExclusion: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
impl Copy for AxisDeadZone
impl Eq for AxisDeadZone
impl StructuralPartialEq for AxisDeadZone
Auto Trait Implementations§
impl Freeze for AxisDeadZone
impl RefUnwindSafe for AxisDeadZone
impl Send for AxisDeadZone
impl Sync for AxisDeadZone
impl Unpin for AxisDeadZone
impl UnwindSafe for AxisDeadZone
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
source§impl<T> GetPath for T
impl<T> GetPath for T
source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read moresource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read moresource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moresource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moresource§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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>
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 more