Skip to main content

KfaSprite

Struct KfaSprite 

Source
pub struct KfaSprite {
    pub limbs: Vec<Sprite>,
    pub hinges: Vec<Hinge>,
    pub hinge_sort: Vec<usize>,
    pub kfaval: Vec<i16>,
    pub p: [f32; 3],
    pub s: [f32; 3],
    pub h: [f32; 3],
    pub f: [f32; 3],
}
Expand description

One animated KFA sprite — bones + hinges + per-bone live animation values.

The host owns one of these per animated model, updates kfaval[] over time, and passes it to roxlap-core’s draw_kfa_sprite each frame. Construction is data-only (this crate); rendering is in roxlap-core.

Fields§

§limbs: Vec<Sprite>

One crate::sprite::Sprite per bone. Limb i’s (s, h, f, p) is computed per frame by the renderer from the parent’s transform + hinge math; the kv6 field holds the bone’s kv6 mesh and never changes.

§hinges: Vec<Hinge>

Bone hierarchy. Mirror of voxlap’s kfatype.hinge[].

§hinge_sort: Vec<usize>

Topological sort of bone indices — populated once at construction, used by the renderer’s per-frame loop.

§kfaval: Vec<i16>

Per-bone animation value. Voxlap’s vx5.kfaval[]. Q15 angle (full circle = 65536). Host updates per frame.

§p: [f32; 3]

World-space anchor of the root limb’s hinge.p[0]. The root limb is positioned so hinge.p[0] lands at this point given the world basis below.

§s: [f32; 3]

World-space basis for the root limb. Mirror of vx5sprite.{s, h, f} for the root.

§h: [f32; 3]§f: [f32; 3]

Implementations§

Source§

impl KfaSprite

Source

pub fn new(limbs: Vec<Sprite>, hinges: Vec<Hinge>, root_pos: [f32; 3]) -> Self

Build a KFA sprite from a list of (Sprite, Hinge) bones. limbs.len() must equal hinges.len(). The first bone with parent < 0 is the root.

kfaval is initialised to all zeros; the host should set per-bone angles before / between render calls.

§Panics

Panics if limbs.len() != hinges.len().

Trait Implementations§

Source§

impl Clone for KfaSprite

Source§

fn clone(&self) -> KfaSprite

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

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