pub struct TnuaBuiltinJump {
pub height: Float,
pub allow_in_air: bool,
pub upslope_extra_gravity: Float,
pub takeoff_extra_gravity: Float,
pub takeoff_above_velocity: Float,
pub fall_extra_gravity: Float,
pub shorten_extra_gravity: Float,
pub peak_prevention_at_upward_velocity: Float,
pub peak_prevention_extra_gravity: Float,
pub reschedule_cooldown: Option<Float>,
pub input_buffer_time: Float,
}
Expand description
The basic jump action.
This action implements jump physics explained in https://youtu.be/hG9SzQxaCm8 and
https://youtu.be/eeLPL3Y9jjA. Most of its fields have sane defaults - the only field that
must be set is height
, which controls the jump height.
The action must be fed for as long as the player holds the jump button. Once the action stops
being fed, it’ll apply extra gravity to shorten the jump. If the game desires fixed height
jumps instead (where the player cannot make lower jumps by tapping the jump button)
shorten_extra_gravity
should be set to 0.0
.
Fields§
§height: Float
The height the character will jump to.
If shorten_extra_gravity
is higher than 0.0
, the
character may stop the jump in the middle if the jump action is no longer fed (usually when
the player releases the jump button) and the character may not reach its full jump height.
The jump height is calculated from the center of the character at float_height to the
center of the character at the top of the jump. It does not mean the height from the
ground. The float height is calculated by the inspecting the character’s current position
and the basis’ displacement
.
allow_in_air: bool
Allow this action to start even if the character is not touching ground nor in coyote time.
upslope_extra_gravity: Float
Extra gravity for breaking too fast jump from running up a slope.
When running up a slope, the character gets more jump strength to avoid slamming into the slope. This may cause the jump to be too high, so this value is used to brake it.
NOTE: This force will be added to the normal gravity.
takeoff_extra_gravity: Float
Extra gravity for fast takeoff.
Without this, jumps feel painfully slow. Adding this will apply extra gravity until the
vertical velocity reaches below takeoff_above_velocity
,
and increase the initial jump boost in order to compensate. This will make the jump feel
more snappy.
takeoff_above_velocity: Float
The range of upward velocity during takeoff_extra_gravity
is applied.
To disable, set this to Float::INFINITY
rather than zero.
fall_extra_gravity: Float
Extra gravity for falling down after reaching the top of the jump.
NOTE: This force will be added to the normal gravity.
shorten_extra_gravity: Float
Extra gravity for shortening a jump when the player releases the jump button.
NOTE: This force will be added to the normal gravity.
peak_prevention_at_upward_velocity: Float
Used to decrease the time the character spends “floating” at the peak of the jump.
When the character’s upward velocity is above this value,
peak_prevention_extra_gravity
will be added to the
gravity in order to shorten the float time.
This extra gravity is taken into account when calculating the initial jump speed, so the
character is still supposed to reach its full jump height
.
peak_prevention_extra_gravity: Float
Extra gravity for decreasing the time the character spends at the peak of the jump.
NOTE: This force will be added to the normal gravity.
reschedule_cooldown: Option<Float>
A duration, in seconds, after which the character would jump if the jump button was already pressed when the jump became available.
The duration is measured from the moment the jump became available - not from the moment the jump button was pressed.
When set to None
, the character will not jump no matter how long the player holds the
jump button.
If the jump button is held but the jump input is still buffered (see
input_buffer_time
), this setting will have no effect because
the character will simply jump immediately.
input_buffer_time: Float
A duration, in seconds, where a player can press a jump button before a jump becomes possible (typically when a character is still in the air and about the land) and the jump action would still get registered and be executed once the jump is possible.
Trait Implementations§
Source§impl Clone for TnuaBuiltinJump
impl Clone for TnuaBuiltinJump
Source§fn clone(&self) -> TnuaBuiltinJump
fn clone(&self) -> TnuaBuiltinJump
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for TnuaBuiltinJump
impl Debug for TnuaBuiltinJump
Source§impl Default for TnuaBuiltinJump
impl Default for TnuaBuiltinJump
Source§impl TnuaAction for TnuaBuiltinJump
impl TnuaAction for TnuaBuiltinJump
Source§const VIOLATES_COYOTE_TIME: bool = true
const VIOLATES_COYOTE_TIME: bool = true
Source§type State = TnuaBuiltinJumpState
type State = TnuaBuiltinJumpState
Source§fn initiation_decision(
&self,
ctx: TnuaActionContext<'_>,
being_fed_for: &Stopwatch,
) -> TnuaActionInitiationDirective
fn initiation_decision( &self, ctx: TnuaActionContext<'_>, being_fed_for: &Stopwatch, ) -> TnuaActionInitiationDirective
Source§fn apply(
&self,
state: &mut Self::State,
ctx: TnuaActionContext<'_>,
lifecycle_status: TnuaActionLifecycleStatus,
motor: &mut TnuaMotor,
) -> TnuaActionLifecycleDirective
fn apply( &self, state: &mut Self::State, ctx: TnuaActionContext<'_>, lifecycle_status: TnuaActionLifecycleStatus, motor: &mut TnuaMotor, ) -> TnuaActionLifecycleDirective
Source§fn proximity_sensor_cast_range(&self) -> Float
fn proximity_sensor_cast_range(&self) -> Float
Auto Trait Implementations§
impl Freeze for TnuaBuiltinJump
impl RefUnwindSafe for TnuaBuiltinJump
impl Send for TnuaBuiltinJump
impl Sync for TnuaBuiltinJump
impl Unpin for TnuaBuiltinJump
impl UnwindSafe for TnuaBuiltinJump
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§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> 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
Creates Self
using default()
.
Source§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