Skip to main content

Heightmap

Struct Heightmap 

Source
pub struct Heightmap {
    data: Box<[u16; 256]>,
    map_type: HeightmapType,
    min_y: i32,
    height: i32,
}
Expand description

A heightmap that tracks the highest blocks of a specific type in a chunk.

The heightmap stores heights for each column in a 16x16 chunk. Heights are stored relative to min_y, so data[index] + min_y gives the actual Y coordinate.

Fields§

§data: Box<[u16; 256]>

Height data stored as a flat array of 256 entries (16x16). Each entry stores the height relative to min_y.

§map_type: HeightmapType

The type of this heightmap.

§min_y: i32

The minimum Y coordinate of the world.

§height: i32

The total height of the world.

Implementations§

Source§

impl Heightmap

Source

pub fn new(map_type: HeightmapType, min_y: i32, height: i32) -> Self

Creates a new heightmap with all heights initialized to min_y.

Source

pub const fn from_raw_data( map_type: HeightmapType, min_y: i32, height: i32, data: Box<[u16; 256]>, ) -> Self

Creates a heightmap from raw height data loaded from disk.

Source

pub const fn heightmap_type(&self) -> HeightmapType

Returns the heightmap type.

Source

const fn get_index(local_x: usize, local_z: usize) -> usize

Gets the index into the data array for the given local coordinates.

Source

pub fn get_first_available(&self, local_x: usize, local_z: usize) -> i32

Gets the first available Y coordinate (one above the highest block) at the given position.

Source

pub fn get_highest_taken(&self, local_x: usize, local_z: usize) -> i32

Gets the highest taken Y coordinate at the given position.

Source

pub fn set_height(&mut self, local_x: usize, local_z: usize, height: i32)

Sets the height at the given position.

Source

pub fn update<F>( &mut self, local_x: usize, y: i32, local_z: usize, state: BlockStateId, get_block: F, ) -> bool
where F: Fn(usize, i32, usize) -> BlockStateId,

Updates the heightmap when a block changes.

Returns true if the heightmap was modified.

§Arguments
  • local_x - The local X coordinate (0-15)
  • y - The absolute Y coordinate
  • local_z - The local Z coordinate (0-15)
  • state - The new block state at this position
  • get_block - A function to get block states at other positions for scanning down
Source

pub fn update_for_initial_fill( &mut self, local_x: usize, y: i32, local_z: usize, state: BlockStateId, ) -> bool

Updates this heightmap for a direct write into a previously-air block.

Vanilla’s noise fill writes sections directly and updates the worldgen heightmaps beside those writes. There is no downward scan in that path because blocks are only being added to an empty terrain column.

Source

pub fn raw_data(&self) -> &[u16; 256]

Returns a direct reference to the raw height data array.

Values are stored relative to min_y. Used for persistence.

Source

pub fn get_raw_data(&self) -> Vec<i64>

Gets the raw data as a slice of i64 values for network serialization.

The data is packed using the minimum number of bits required to store the height range (0 to world_height).

Source

const fn calculate_bits_per_value(height: i32) -> usize

Calculates the number of bits required to store heights for a given world height.

Trait Implementations§

Source§

impl Clone for Heightmap

Source§

fn clone(&self) -> Heightmap

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 Heightmap

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

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> IntoShared for T

Source§

fn into_shared(self) -> Arc<Mutex<RawMutex, Self>>

Wraps this value in an Arc<SyncMutex<>>
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more