Skip to main content

MetaballEntity

Struct MetaballEntity 

Source
pub struct MetaballEntity {
    pub sources: Vec<FieldSource>,
    pub threshold: f32,
    pub hp_ratio: f32,
    pub grid_resolution: u32,
    pub breath_phase: f32,
    pub breath_frequency: f32,
    pub center: Vec3,
    pub rotation: Vec3,
    pub scale: f32,
    pub bounds_half: Vec3,
    pub dirty: bool,
    pub name: String,
}
Expand description

An entity defined by a scalar field from metaball sources.

The visible body is the isosurface at threshold. HP modulates all source strengths, so damage physically reshapes the body. Crits destroy individual sources, punching permanent holes.

Fields§

§sources: Vec<FieldSource>

All field sources making up this entity.

§threshold: f32

Isosurface threshold. Surface exists where field(p) >= threshold.

§hp_ratio: f32

Current HP ratio (0.0 = dead, 1.0 = full HP).

§grid_resolution: u32

Grid resolution for marching cubes extraction. 32 for normal entities, 64 for bosses.

§breath_phase: f32

Current breathing animation phase.

§breath_frequency: f32

Breathing animation frequency (Hz).

§center: Vec3

Entity center in world space.

§rotation: Vec3

Entity rotation (euler angles for simplicity).

§scale: f32

Entity scale.

§bounds_half: Vec3

Bounding box half-extents (auto-computed from sources).

§dirty: bool

Whether the mesh needs re-extraction this frame.

§name: String

Name for debugging.

Implementations§

Source§

impl MetaballEntity

Source

pub fn new(threshold: f32, resolution: u32) -> Self

Source

pub fn with_name(self, name: impl Into<String>) -> Self

Source

pub fn add_source(&mut self, source: FieldSource) -> usize

Add a field source.

Source

pub fn nearest_source(&self, point: Vec3) -> Option<usize>

Find the source nearest to a world-space point.

Source

pub fn find_source(&self, tag: &str) -> Option<usize>

Find a source by tag.

Source

pub fn update(&mut self, dt: f32, time: f32)

Update the entity for a new frame.

  • Advances breathing animation
  • Updates source positions from breathing offsets
  • Decays damage reductions (spring-back)
  • Marks as dirty if anything changed
Source

pub fn evaluate(&self, point: Vec3) -> f32

Evaluate the scalar field at a world-space point.

Source

pub fn evaluate_full(&self, point: Vec3) -> (f32, Vec4, f32)

Evaluate the scalar field and compute color/emission at a point.

Source

pub fn gradient(&self, point: Vec3) -> Vec3

Compute the gradient (normal direction) at a point via central differences.

Source

pub fn normal_at(&self, point: Vec3) -> Vec3

Normal at a point on the isosurface (normalized gradient, pointing outward).

Source

pub fn set_hp(&mut self, ratio: f32)

Set HP ratio. Marks dirty.

Source

pub fn set_center(&mut self, center: Vec3)

Move the entity center. Updates all source positions.

Source

pub fn recompute_bounds(&mut self)

Recompute bounding box from source positions and radii.

Source

pub fn bounds(&self) -> (Vec3, Vec3)

World-space bounding box (min, max).

Source

pub fn active_source_count(&self) -> usize

Number of active (non-destroyed) sources.

Source

pub fn source_count(&self) -> usize

Total active source count.

Source

pub fn is_dead(&self) -> bool

Whether the entity is effectively dead (no visible surface).

Source

pub fn take_dirty(&mut self) -> bool

Consume the dirty flag.

Trait Implementations§

Source§

impl Clone for MetaballEntity

Source§

fn clone(&self) -> Self

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 MetaballEntity

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for MetaballEntity

Source§

fn default() -> Self

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> 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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> 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<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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