Skip to main content

CharacterController

Struct CharacterController 

Source
pub struct CharacterController {
    pub position: Point3<f32>,
    pub velocity: Vector3<f32>,
    pub yaw: f32,
    pub pitch: f32,
    pub height: f32,
    pub radius: f32,
    pub eye_fraction: f32,
    pub on_ground: bool,
    pub walk_speed: f32,
    pub run_speed: f32,
    pub jump_speed: f32,
    pub gravity: f32,
}
Expand description

First-person character controller.

position is the foot point — the lowest Y the player occupies. Eyes sit at position.y + height * eye_fraction.

Fields§

§position: Point3<f32>

Foot position (Y = the floor the player stands on).

§velocity: Vector3<f32>

Current velocity in m/s.

Horizontal components are overwritten by input every tick. The vertical component accumulates gravity between frames.

§yaw: f32

Horizontal look direction, radians. 0 = facing −Z (into the screen). Increases clockwise when viewed from above.

§pitch: f32

Vertical look angle, radians. Clamped to ±~84°.

§height: f32

Standing height in metres.

§radius: f32

Horizontal half-width of the player AABB (metres).

§eye_fraction: f32

Fraction of height at which the eye / camera sits (default 0.86).

§on_ground: bool

true when the character is resting on a solid surface.

§walk_speed: f32

Walk speed (m/s, used when InputState::sprint is false).

§run_speed: f32

Run / sprint speed (m/s).

§jump_speed: f32

Upward velocity applied on jump (m/s).

§gravity: f32

Gravitational acceleration (m/s², positive = downward).

Implementations§

Source§

impl CharacterController

Source

pub fn new(pos: Point3<f32>) -> Self

Create a controller with sensible defaults.

The player spawns at pos with feet touching the floor (Y=pos.y). Call tick once per frame to advance the simulation.

Source

pub fn forward_flat(&self) -> Vector3<f32>

Unit vector pointing forward in the horizontal plane (ignores pitch).

Source

pub fn right_flat(&self) -> Vector3<f32>

Unit vector pointing right in the horizontal plane.

Source

pub fn look_dir(&self) -> Vector3<f32>

Full 3-D look direction (yaw + pitch).

Source

pub fn eye_position(&self) -> Point3<f32>

Camera / eye position in world space.

Source

pub fn look_target(&self) -> Point3<f32>

Point the camera should target (eye_position + look_dir).

Source

pub fn apply_to_camera(&self, engine: &mut K3dengine)

Write the eye position and look target into the engine camera.

Source

pub fn tick(&mut self, input: &InputState, dt: f32, colliders: &[[f32; 6]])

Advance one frame of simulation.

§Arguments
  • input — this frame’s input (direction, look deltas, jump, sprint)
  • dt — elapsed time in seconds (clamp to ≤ 0.05 to avoid tunnelling on lag spikes)
  • colliders — world geometry as [min_x, min_y, min_z, max_x, max_y, max_z] boxes. Include floor, ceiling, and all walls.

Trait Implementations§

Source§

impl Clone for CharacterController

Source§

fn clone(&self) -> CharacterController

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CharacterController

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.