pub trait CustomDualAxisProcessor:
Send
+ Sync
+ Debug
+ DynClone
+ DynEq
+ DynHash
+ Reflect
+ Serialize {
// Required method
fn process(&self, input_value: Vec2) -> Vec2;
}
Expand description
A trait for creating custom processor that handles dual-axis input values,
accepting a Vec2
input and producing a Vec2
output.
§Examples
use std::hash::{Hash, Hasher};
use bevy::prelude::*;
use bevy::math::FloatOrd;
use serde::{Deserialize, Serialize};
use leafwing_input_manager::prelude::*;
/// Doubles the input, takes its absolute value,
/// and discards results that meet the specified condition on the X-axis.
// If your processor includes fields not implemented Eq and Hash,
// implementation is necessary as shown below.
// Otherwise, you can derive Eq and Hash directly.
#[derive(Debug, Clone, Copy, PartialEq, Reflect, Serialize, Deserialize)]
pub struct DoubleAbsoluteValueThenRejectX(pub f32);
// Add this attribute for ensuring proper serialization and deserialization.
#[serde_typetag]
impl CustomDualAxisProcessor for DoubleAbsoluteValueThenRejectX {
fn process(&self, input_value: Vec2) -> Vec2 {
// Implement the logic just like you would in a normal function.
// You can use other processors within this function.
let value = DualAxisSensitivity::all(2.0).scale(input_value);
let value = value.abs();
let new_x = if value.x == self.0 {
0.0
} else {
value.x
};
Vec2::new(new_x, value.y)
}
}
// Unfortunately, manual implementation is required due to the float field.
impl Eq for DoubleAbsoluteValueThenRejectX {}
impl Hash for DoubleAbsoluteValueThenRejectX {
fn hash<H: Hasher>(&self, state: &mut H) {
// Encapsulate the float field for hashing.
FloatOrd(self.0).hash(state);
}
}
// Remember to register your processor - it will ensure everything works smoothly!
let mut app = App::new();
app.register_dual_axis_processor::<DoubleAbsoluteValueThenRejectX>();
// Now you can use it!
let processor = DoubleAbsoluteValueThenRejectX(4.0);
// Rejected X!
assert_eq!(processor.process(Vec2::splat(2.0)), Vec2::new(0.0, 4.0));
assert_eq!(processor.process(Vec2::splat(-2.0)), Vec2::new(0.0, 4.0));
// Others are just doubled absolute value.
assert_eq!(processor.process(Vec2::splat(6.0)), Vec2::splat(12.0));
assert_eq!(processor.process(Vec2::splat(4.0)), Vec2::splat(8.0));
assert_eq!(processor.process(Vec2::splat(0.0)), Vec2::splat(0.0));
assert_eq!(processor.process(Vec2::splat(-4.0)), Vec2::splat(8.0));
assert_eq!(processor.process(Vec2::splat(-6.0)), Vec2::splat(12.0));
// The ways to create a DualAxisProcessor.
let dual_axis_processor = DualAxisProcessor::Custom(Box::new(processor));
assert_eq!(dual_axis_processor, DualAxisProcessor::from(processor));
Required Methods§
Trait Implementations§
source§impl<'de> Deserialize<'de> for Box<dyn CustomDualAxisProcessor>
impl<'de> Deserialize<'de> for Box<dyn CustomDualAxisProcessor>
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>,
Deserialize this value from the given Serde deserializer. Read more
source§impl FromReflect for Box<dyn CustomDualAxisProcessor>
impl FromReflect for Box<dyn CustomDualAxisProcessor>
source§fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
Constructs a concrete instance of
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>>
Attempts to downcast the given value to
Self
using,
constructing the value using from_reflect
if that fails. Read moresource§impl GetTypeRegistration for Box<dyn CustomDualAxisProcessor>
impl GetTypeRegistration for Box<dyn CustomDualAxisProcessor>
source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
Returns the default
TypeRegistration
for this type.source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Registers other types needed by this type. Read more
source§impl<'hash> Hash for dyn CustomDualAxisProcessor + 'hash
impl<'hash> Hash for dyn CustomDualAxisProcessor + 'hash
source§impl<'hash> Hash for dyn CustomDualAxisProcessor + Send + 'hash
impl<'hash> Hash for dyn CustomDualAxisProcessor + Send + 'hash
source§impl<'hash> Hash for dyn CustomDualAxisProcessor + Sync + 'hash
impl<'hash> Hash for dyn CustomDualAxisProcessor + Sync + 'hash
source§impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + 'eq>> for Box<dyn CustomDualAxisProcessor + 'eq>
impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + 'eq>> for Box<dyn CustomDualAxisProcessor + 'eq>
source§impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + Send + 'eq>> for Box<dyn CustomDualAxisProcessor + Send + 'eq>
impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + Send + 'eq>> for Box<dyn CustomDualAxisProcessor + Send + 'eq>
source§impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + Send + Sync + 'eq>> for Box<dyn CustomDualAxisProcessor + Send + Sync + 'eq>
impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + Send + Sync + 'eq>> for Box<dyn CustomDualAxisProcessor + Send + Sync + 'eq>
source§impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + Sync + 'eq>> for Box<dyn CustomDualAxisProcessor + Sync + 'eq>
impl<'eq> PartialEq<&Box<dyn CustomDualAxisProcessor + Sync + 'eq>> for Box<dyn CustomDualAxisProcessor + Sync + 'eq>
source§impl<'eq> PartialEq for dyn CustomDualAxisProcessor + 'eq
impl<'eq> PartialEq for dyn CustomDualAxisProcessor + 'eq
source§impl<'eq> PartialEq for dyn CustomDualAxisProcessor + Send + 'eq
impl<'eq> PartialEq for dyn CustomDualAxisProcessor + Send + 'eq
source§impl<'eq> PartialEq for dyn CustomDualAxisProcessor + Sync + 'eq
impl<'eq> PartialEq for dyn CustomDualAxisProcessor + Sync + 'eq
source§impl Reflect for Box<dyn CustomDualAxisProcessor>
impl Reflect for Box<dyn CustomDualAxisProcessor>
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
Returns the value as a
&mut dyn Any
.source§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Casts this type to a boxed reflected value.
source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Casts this type to a reflected value.
source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Casts this type to a mutable reflected value.
source§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
Performs a type-checked assignment of a reflected value to this value. Read more
source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Returns a zero-sized enumeration of “kinds” of type. Read more
source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Returns an immutable enumeration of “kinds” of type. Read more
source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Returns a mutable enumeration of “kinds” of type. Read more
source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Returns an owned enumeration of “kinds” of type. Read more
source§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Clones the value as a
Reflect
trait object. Read moresource§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Returns a hash of the value (which includes the type). Read more
source§fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
Returns a “partial equality” comparison result. Read more
source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Returns a serializable version of the value. Read more
source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Indicates whether or not this type is a dynamic type. Read more
source§impl<'a> Serialize for dyn CustomDualAxisProcessor + 'a
impl<'a> Serialize for dyn CustomDualAxisProcessor + 'a
source§impl TypePath for Box<dyn CustomDualAxisProcessor>
impl TypePath for Box<dyn CustomDualAxisProcessor>
source§fn type_path() -> &'static str
fn type_path() -> &'static str
Returns the fully qualified path of the underlying type. Read more
source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Returns a short, pretty-print enabled path to the type. Read more