pub struct FrameInput {Show 31 fields
pub forward: bool,
pub backward: bool,
pub left: bool,
pub right: bool,
pub sprint: bool,
pub interact: bool,
pub jump: bool,
pub ctrl: bool,
pub shift: bool,
pub alt: bool,
pub cmd: bool,
pub move_axis: [f32; 2],
pub look_axis: [f32; 2],
pub captured_button: Option<GamepadButton>,
pub nav: Option<NavDirection>,
pub confirm: bool,
pub back: bool,
pub mouse_dx: f32,
pub mouse_dy: f32,
pub scroll_delta: f32,
pub mouse_x: f32,
pub mouse_y: f32,
pub left_click: bool,
pub left_button_down: bool,
pub right_click: bool,
pub viewport: [f32; 2],
pub top_inset: f32,
pub hud_toggle: bool,
pub escape: bool,
pub captured_key: Option<InputKey>,
pub typed_char: Option<char>,
}Expand description
Per-frame keyboard and mouse input state.
One FrameInput is updated each frame from the window’s keyboard and mouse
state and read by camera and UI behavior. It is maintained automatically and
is never saved with the world.
Fields§
§forward: boolTrue while the move-forward key (W) is held.
backward: boolTrue while the move-backward key (S) is held.
left: boolTrue while the strafe-left key (A) is held.
right: boolTrue while the strafe-right key (D) is held.
sprint: boolTrue while the sprint key (Shift) is held.
interact: boolTrue for exactly one frame when the interact key (E) is pressed.
jump: boolTrue for exactly one frame when the jump key (Space) is pressed.
ctrl: boolTrue while the Control key is held. A modifier used by UI (e.g. a story fast-forwards its dialogue while it is down). Like escape and captured_key it is not frozen while a menu is open.
shift: boolTrue while the Shift key is held. A modifier used by UI (e.g. additive selection in the editor). Unlike sprint it is not frozen while a menu is open, matching ctrl.
alt: boolTrue while the Alt (Option) key is held. A modifier used by UI (e.g. the editor’s orbit drag). Not frozen while a menu is open, matching ctrl.
cmd: boolTrue while the platform’s command modifier is held: the Command key on macOS, where application shortcuts are built on it. Windows and Linux leave this false and use ctrl instead, since the Super key there belongs to the desktop shell. UI that offers a shortcut on both accepts either modifier. Not frozen while a menu is open, matching ctrl.
move_axis: [f32; 2]Gamepad left-stick movement vector [x, y]: x is rightward strafe,
y is forward. Radial deadzone applied, magnitude at most 1, so partial
deflection walks slower. [0.0, 0.0] with no gamepad; frozen (zeroed)
while a menu is open, like the movement keys.
look_axis: [f32; 2]Gamepad right-stick look vector [x, y] in the mouse-delta sign
convention (positive x looks right, positive y looks down), with
deadzone and response curve applied, magnitude at most 1. Unlike the
pixel-based mouse deltas this is a deflection rate: consumers scale it
by their look speed and the frame time. Frozen while a menu is open.
The gamepad button pressed this frame, for one frame, or None.
Surfaced regardless of menu state (like
captured_key) so the settings menu can
capture a button for rebinding.
The UI-navigation pulse this frame, or None. A one-frame
NavDirection produced from a d-pad press (repeating
while held) or a deliberate left-stick deflection. Surfaced regardless
of menu state (like captured_key); menu
focus movement consumes it only while a screen is active, so during
play the d-pad and stick keep their movement meaning.
confirm: boolTrue for exactly one frame when the confirm button (South) is pressed. Surfaced regardless of menu state; menus fire their focused control from it while a screen is active.
back: boolTrue for exactly one frame when the back button (East) is pressed. Surfaced regardless of menu state; menus treat it like Escape while a screen is active.
mouse_dx: f32Accumulated horizontal mouse movement since the last frame (pixels).
mouse_dy: f32Accumulated vertical mouse movement since the last frame (pixels).
scroll_delta: f32Accumulated vertical scroll-wheel movement since the last frame. Positive scrolls the content up (a scrollable UI panel moves its rows up). Cleared each frame like the mouse deltas.
mouse_x: f32Absolute cursor X position in window pixels (origin top-left). Only meaningful when the cursor is not captured.
mouse_y: f32Absolute cursor Y position in window pixels (origin top-left). Only meaningful when the cursor is not captured.
left_click: boolTrue for exactly one frame when the left mouse button is pressed while the cursor is not captured.
True while the left mouse button is held down (cursor not captured).
Unlike left_click this stays true across frames until release, so a
UI drag (e.g. a slider) can track the cursor for its whole duration.
right_click: boolTrue for exactly one frame when the right mouse button is pressed while the cursor is not captured. Used for contextual UI (e.g. a create-at-cursor menu); it never captures the cursor.
viewport: [f32; 2]Live logical viewport size in pixels [width, height]. Used to map
overlay (Screen-owned) UI between its fixed reference resolution and the
window, so menus scale with the window and the cursor still hit-tests
against the scaled controls. [0.0, 0.0] before the backend is ready.
top_inset: f32Height of the window chrome overlapping the top of the render surface,
in the same logical units as viewport. Non-zero
only where the window’s content runs under a transparent title bar
(macOS), leaving the OS window buttons floating over the frame’s
top-left corner: UI anchored to the top of the window starts below this
so it cannot land under them. 0.0 on a window whose content already
begins below its chrome.
hud_toggle: boolTrue for exactly one frame when the HUD-toggle key (F1) is pressed.
escape: boolTrue for exactly one frame when Escape is pressed while the cursor is not captured (menu / UI worlds). Used to fire KeyBinding actions. In worlds that capture the cursor, Escape instead releases the cursor and this stays false.
captured_key: Option<InputKey>The canonical key pressed this frame, for one frame, or None. Surfaced
regardless of menu state (unlike the gameplay keys, which freeze while a
menu is open) so the settings menu can capture a key for rebinding and
scrollable menu lists can react to the arrow keys.
typed_char: Option<char>The printable character typed this frame (Unicode, with shift / layout
applied by the OS), for text-input fields, or None. A one-frame pulse
surfaced regardless of menu state, like
captured_key. Editing keys (Backspace,
Delete, arrows) arrive via captured_key, not here.
Trait Implementations§
Source§impl Clone for FrameInput
impl Clone for FrameInput
Source§fn clone(&self) -> FrameInput
fn clone(&self) -> FrameInput
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Component for FrameInput
impl Component for FrameInput
Source§const NAME: &'static str = "FrameInput"
const NAME: &'static str = "FrameInput"
Source§fn from_baked(bytes: &[u8]) -> Result<FrameInput, CnResult>
fn from_baked(bytes: &[u8]) -> Result<FrameInput, CnResult>
Source§fn inject_locator(&mut self, _locator: PayloadLocator)
fn inject_locator(&mut self, _locator: PayloadLocator)
Source§fn inject_name(&mut self, _id: AssetId)
fn inject_name(&mut self, _id: AssetId)
Source§impl ComponentSlot for FrameInput
impl ComponentSlot for FrameInput
Source§const DISCRIMINANT: u8
const DISCRIMINANT: u8
ComponentId.Source§fn slot(s: &ComponentStorage) -> &Column<FrameInput>
fn slot(s: &ComponentStorage) -> &Column<FrameInput>
Source§fn slot_mut(s: &mut ComponentStorage) -> &mut Column<FrameInput>
fn slot_mut(s: &mut ComponentStorage) -> &mut Column<FrameInput>
Source§impl Debug for FrameInput
impl Debug for FrameInput
Source§impl Default for FrameInput
impl Default for FrameInput
Source§fn default() -> FrameInput
fn default() -> FrameInput
Source§impl<'de> Deserialize<'de> for FrameInput
impl<'de> Deserialize<'de> for FrameInput
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<FrameInput, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<FrameInput, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl From<FrameInput> for ComponentAsset
impl From<FrameInput> for ComponentAsset
Source§fn from(c: FrameInput) -> ComponentAsset
fn from(c: FrameInput) -> ComponentAsset
impl RuntimeComponent for FrameInput
Source§impl Serialize for FrameInput
impl Serialize for FrameInput
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for FrameInput
impl RefUnwindSafe for FrameInput
impl Send for FrameInput
impl Sync for FrameInput
impl Unpin for FrameInput
impl UnsafeUnpin for FrameInput
impl UnwindSafe for FrameInput
Blanket Implementations§
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().