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

fn register_required_components( requiree: ComponentId, components: &mut Components, storages: &mut Storages, required_components: &mut RequiredComponents, inheritance_depth: u16, )

Registers required components.
Source§

fn register_component_hooks(hooks: &mut ComponentHooks)

Called when registering this component, allowing mutable access to its ComponentHooks.
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 Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId), )

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§

fn register_required_components( components: &mut Components, storages: &mut Storages, 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<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>

Convert 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>

Convert 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)

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

Convert &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
where T: Any + Send + Sync,

Source§

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

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

fn get_components(self, func: &mut impl FnMut(StorageType, OwningPtr<'_>))

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,