Skip to main content

TileSetWfcConstraint

Struct TileSetWfcConstraint 

Source
pub struct TileSetWfcConstraint(/* private fields */);
Expand description

A hash table based wave function collapse constraint that maps PatternBits objects to sets of TileDefinitionHandle. Each handle refers to a tile, and each tile is assigned a pattern and a frequency. The sum of the frequencies of all a pattern’s tiles becomes the frequency of the pattern, which is then normalized into a probability between 0.0 and 1.0 for use as a constraint for a TileSetWfcPropagator which will perform the wave function collapse.

Implementations§

Source§

impl TileSetWfcConstraint

Source

pub fn fill_pattern_map( &mut self, tile_set: &TileSet, pattern_property: TileSetPropertyNine, frequency_property: Option<TileSetPropertyF32>, terrain_freq: &FxHashMap<TileTerrainId, f32>, ) -> Result<(), FillPatternMapError>

Clear the data from this constraint and replace it with new data based upon the given tile set and property UUIDs. All of the tiles of the tile set are searched and each one’s pattern property is checked for a center value that matches one of the keys of terrain_freq. When such a tile is found, it is inserted into the map using the pattern property value as the pattern and the frequency property value as the frequency.

  • tile_set: The tile set to iterate through.
  • pattern_property: The UUID of a nine-slice property in tile_set that will be used for the pattern of each tile. The center value of the nine-slice is the terrain, unless the center value is 0, in which case the tile is ignored.
  • frequency_property: The UUID of a float property in tile_set that will be used for the frequency of each tile. If None, then every tile has frequency 1.0.
  • terrain_freq: A hash map of the terrains that will be used in wave function collapse. Tiles whose center value are not keys in this hash map will be ignored. Tiles whose center value are keys in this hash map will have their frequency multiplied by the corresponding value in the hash map to calculate the final frequency of the tile. This allows terrains to have their frequency weighted, and allows unwanted terrains to be excluded.

Note: Terrain 0 is treated specially. It has one pattern, the all-zeros default PatternBits, and it corresponds to the empty tile. Tiles whose pattern value have 0 in the center are presumed to be not intended to be part of the wave function collapse, since 0 is the default value. The frequency of choosing empty tiles in wave function collapse can be controlled by setting terrain_freq[0] to some value.

Methods from Deref<Target = HashWfcConstraint<PatternBits, TileDefinitionHandle>>§

Source

pub fn is_empty(&self) -> bool

True if this constraint contains no patterns.

Source

pub fn clear(&mut self)

Remove all data, reseting this object to empty so it is ready to be reused with new pattern data.

Source

pub fn add(&mut self, pattern: Pat, frequency: f32, value: V)
where Pat: Debug, V: Debug,

Add a new value to the data with the given pattern and frequency. The frequency does not need to be between 0.0 and 1.0. Frequencies of 0.0 or less will be silently ignored, and frequencies will be automatically normalized into probabilities when finalize is called.

Source

pub fn finalize(&mut self)

Calculate the probability of each pattern based on the frequencies of all values that were added with add. The sum of the frequencies is calculated and then each frequency is divided by the sum to normalize the frequencies into probabilities between 0.0 and 1.0.

Source

pub fn finalize_with_terrain_normalization<Ter, F>(&mut self, terrain: F)
where Ter: Hash + Eq, F: Fn(&Pat) -> Ter,

Calculate the probability of each pattern based on the frequencies of all values that were added with add. Divide the frequency of each pattern by the total number of patterns in that pattern’s terrain so that terrains with many patterns are not given an advantage over terrains with few patterns. The terrain function is used to determine the terrain of each pattern. The sum of the frequencies is calculated and then each frequency is divided by the sum to normalize the frequencies into probabilities between 0.0 and 1.0.

Source

pub fn get_random<R>(&self, rng: &mut R, pattern: &Pat) -> Option<&V>
where R: Rng + ?Sized,

A random value that matches the given pattern, based upon previous calls to add. Often there may be more than one tile that matches a particular pattern, and so this method helps with the final step after wave function collapse: converting the chosen patterns into actual tiles.

Trait Implementations§

Source§

impl Default for TileSetWfcConstraint

Source§

fn default() -> TileSetWfcConstraint

Returns the “default value” for a type. Read more
Source§

impl Deref for TileSetWfcConstraint

Source§

type Target = HashWfcConstraint<PatternBits, TileDefinitionHandle>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for TileSetWfcConstraint

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.

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> AsyncTaskResult for T
where T: Any + Send + 'static,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

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> 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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &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)

Converts &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> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
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<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T, U> ObjectOrVariant<T> for U

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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, 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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