bevy_tnua::controller

Struct TnuaController

Source
pub struct TnuaController { /* private fields */ }
Expand description

The main component used for interaction with the controls and animation code.

Every frame, the game code should feed input this component on every controlled entity. What should be fed is:

  • A basis - this is the main movement command - usually TnuaBuiltinWalk, but there can be others. It is the game code’s responsibility to ensure only one basis is fed at any given time, because basis can hold state and replacing the basis type restarts the state.

    Refer to the documentation of the implementors of TnuaBasis for more information.

  • Zero or more actions - these are movements like jumping, dashing, crouching, etc. Multiple actions can be fed, but only one can be active at any given moment. Unlike basis, there is a smart mechanism for deciding which action to use and which to discard, so it is safe to feed many actions at the same frame.

    Refer to the documentation of the implementors of TnuaAction for more information.

Without TnuaControllerPlugin this component will not do anything.

Implementations§

Source§

impl TnuaController

Source

pub fn basis<B: TnuaBasis>(&mut self, basis: B)

Feed a basis - the main movement command - with its default name.

Source

pub fn named_basis<B: TnuaBasis>(&mut self, name: &'static str, basis: B)

Feed a basis - the main movement command - with a custom name.

This should only be used if the same basis type needs to be used with different names to allow, for example, different animations. Otherwise prefer to use the default name with basis.

Source

pub fn neutralize_basis(&mut self)

Instruct the basis to pretend the user provided no input this frame.

The exact meaning is defined in the basis’ neutralize method, but generally it means that fields that typically come from a configuration will not be touched, and only fields that are typically set by user input get nullified.

Source

pub fn basis_name(&self) -> Option<&'static str>

The name of the currently running basis.

When using the basis with it’s default name, prefer to match this against TnuaBasis::NAME and not against a string literal.

Source

pub fn dynamic_basis(&self) -> Option<&dyn DynamicBasis>

A dynamic accessor to the currently running basis.

Source

pub fn concrete_basis<B: TnuaBasis>(&self) -> Option<(&B, &B::State)>

The currently running basis, together with its state.

This is mainly useful for animation. When multiple basis types are used in the game, basis_name be used to determine the type of the current basis first, to avoid having to try multiple downcasts.

Source

pub fn concrete_basis_mut<B: TnuaBasis>( &mut self, ) -> Option<(&B, &mut B::State)>

The currently running basis, together with its state, as mutable. Useful if you need to touch the state of a running action to respond to game events.

Source

pub fn action<A: TnuaAction>(&mut self, action: A)

Feed an action with its default name.

Source

pub fn named_action<A: TnuaAction>(&mut self, name: &'static str, action: A)

Feed an action with a custom name.

This should only be used if the same action type needs to be used with different names to allow, for example, different animations. Otherwise prefer to use the default name with action.

Source

pub fn prolong_action(&mut self)

Re-feed the same action that is currently active.

This is useful when matching on action_name and wanting to continue feeding the exact same action with the exact same input without having to use concrete_action.

Source

pub fn action_name(&self) -> Option<&'static str>

The name of the currently running action.

When using an action with it’s default name, prefer to match this against TnuaAction::NAME and not against a string literal.

Source

pub fn dynamic_action(&self) -> Option<&dyn DynamicAction>

A dynamic accessor to the currently running action.

Source

pub fn concrete_action<A: TnuaAction>(&self) -> Option<(&A, &A::State)>

The currently running action, together with its state.

This is mainly useful for animation. When multiple action types are used in the game, action_name be used to determine the type of the current action first, to avoid having to try multiple downcasts.

Source

pub fn concrete_action_mut<A: TnuaAction>( &mut self, ) -> Option<(&A, &mut A::State)>

The currently running action, together with its state, as mutable. Useful if you need to touch the state of a running action to respond to game events.

If the action is replaced, the state will be lost. If you need to keep the state, you should store it separately.

Source

pub fn action_flow_status(&self) -> &TnuaActionFlowStatus

Indicator for the state and flow of movement actions.

Query this every frame to keep track of the actions. For air actions, TnuaAirActionsTracker is easier to use (and uses this behind the scenes)

The benefits of this over querying action_name every frame are:

  • action_flow_status can indicate when the same action has been fed again immediately after stopping or cancelled into itself.
  • action_flow_status shows an ActionEnded when the action is no longer fed, even if the action is still active (termination sequence)
Source

pub fn is_airborne(&self) -> Result<bool, TnuaControllerHasNoBasis>

Checks if the character is currently airborne.

The check is done based on the basis, and is equivalent to getting the controller’s dynamic_basis and checking its is_airborne method.

Trait Implementations§

Source§

impl Component for TnuaController
where Self: Send + Sync + 'static,

A component’s Required Components are inserted whenever it is inserted. Note that this will also insert the required components of the required components, recursively, in depth-first order.

Source§

const STORAGE_TYPE: StorageType = bevy::ecs::component::StorageType::Table

A constant indicating the storage type used for this component.
Source§

type Mutability = Mutable

A marker type to assist Bevy with determining if this component is mutable, or immutable. Mutable components will have [Component<Mutability = Mutable>], while immutable components will instead have [Component<Mutability = Immutable>]. Read more
Source§

fn register_required_components( requiree: ComponentId, components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, inheritance_depth: u16, recursion_check_stack: &mut Vec<ComponentId>, )

Registers required components.
Source§

fn clone_behavior() -> ComponentCloneBehavior

Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§

fn register_component_hooks(hooks: &mut ComponentHooks)

👎Deprecated since 0.16.0: Use the individual hook methods instead (e.g., Component::on_add, etc.)
Called when registering this component, allowing mutable access to its ComponentHooks.
Source§

fn on_add() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_add ComponentHook for this Component if one is defined.
Source§

fn on_insert() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_insert ComponentHook for this Component if one is defined.
Source§

fn on_replace() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_replace ComponentHook for this Component if one is defined.
Source§

fn on_remove() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_remove ComponentHook for this Component if one is defined.
Source§

fn on_despawn() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_despawn ComponentHook for this Component if one is defined.
Source§

fn map_entities<E>(_this: &mut Self, _mapper: &mut E)
where E: EntityMapper,

Maps the entities on this component using the given EntityMapper. This is used to remap entities in contexts like scenes and entity cloning. When deriving Component, this is populated by annotating fields containing entities with #[entities] Read more
Source§

impl Default for TnuaController

Source§

fn default() -> TnuaController

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<C> Bundle for C
where C: Component,

Source§

fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )

Source§

fn register_required_components( components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, )

Registers components that are required by the components in this Bundle.
Source§

fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )

Gets this Bundle’s component ids. This will be None if the component has not been registered.
Source§

impl<C> BundleFromComponents for C
where C: Component,

Source§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>,

Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &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)

Converts &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> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<C> DynamicBundle for C
where C: Component,

Source§

type Effect = ()

An operation on the entity that happens after inserting this bundle.
Source§

fn get_components( self, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using default().

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,