Skip to main content

HashWfcConstraint

Struct HashWfcConstraint 

Source
pub struct HashWfcConstraint<Pat, V> { /* private fields */ }
Expand description

An implementation for WfcConstrain that stores the information for each pattern in a hash table and also keeps track of a which values each pattern may represent, so that patterns may be translated into tiles after wave function collapse is complete.

Implementations§

Source§

impl<Pat, V> HashWfcConstraint<Pat, V>
where Pat: Eq + Hash,

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<Pat, V> Default for HashWfcConstraint<Pat, V>

Source§

fn default() -> HashWfcConstraint<Pat, V>

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

impl<Pat, V> WfcConstrain for HashWfcConstraint<Pat, V>
where Pat: Eq + Hash + Clone + TilePattern,

Source§

type Offset = <Pat as TilePattern>::Offset

The offset type that is used to specify the ways in which one pattern may be adjacent to another pattern.
Source§

type Pattern = Pat

The type of patterns that wave function collapse will choose.
Source§

fn all_patterns( &self, ) -> impl Iterator<Item = &<HashWfcConstraint<Pat, V> as WfcConstrain>::Pattern>

Iterator for all the patterns that wave function collapse is allowed to choose. Note that any pattern with a probability of 0.0 must not be included.
Source§

fn probability_of( &self, pattern: &<HashWfcConstraint<Pat, V> as WfcConstrain>::Pattern, ) -> f32

The probability of choosing a given pattern when there are no restrictions on patterns in any of the adjacent cells. This should be between 0.0 and 1.0.
True if the from pattern may be chosen when the to pattern has already been chosen for the cell at position offset relative to from.

Auto Trait Implementations§

§

impl<Pat, V> Freeze for HashWfcConstraint<Pat, V>

§

impl<Pat, V> RefUnwindSafe for HashWfcConstraint<Pat, V>

§

impl<Pat, V> Send for HashWfcConstraint<Pat, V>
where Pat: Send, V: Send,

§

impl<Pat, V> Sync for HashWfcConstraint<Pat, V>
where Pat: Sync, V: Sync,

§

impl<Pat, V> Unpin for HashWfcConstraint<Pat, V>
where Pat: Unpin, V: Unpin,

§

impl<Pat, V> UnwindSafe for HashWfcConstraint<Pat, V>
where Pat: UnwindSafe, V: UnwindSafe,

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