pub struct Site {
    pub origin: Vec2<i32>,
    name: Option<String>,
    pub tiles: TileGrid,
    pub plots: Store<Plot>,
    pub plazas: Vec<Id<Plot>>,
    pub roads: Vec<Id<Plot>>,
    pub economy: Option<Box<Economy>>,
    pub kind: Option<SiteKind>,
}Fields§
§origin: Vec2<i32>§name: Option<String>§tiles: TileGrid§plots: Store<Plot>§plazas: Vec<Id<Plot>>§roads: Vec<Id<Plot>>§economy: Option<Box<Economy>>§kind: Option<SiteKind>Implementations§
Source§impl Site
 
impl Site
pub fn filter_plots<'a, F: FnMut(&'a Plot) -> bool>( &'a self, f: F, ) -> Filter<impl ExactSizeIterator<Item = &'a Plot>, impl FnMut(&&'a Plot) -> bool>
pub fn any_plot<F: FnMut(&Plot) -> bool>(&self, f: F) -> bool
pub fn meta(&self) -> Option<SiteKindMeta>
pub fn economy_mut(&mut self) -> &mut Economy
pub fn do_economic_simulation(&self) -> bool
pub fn trade_information(&self, id: Id<Site>) -> Option<SiteInformation>
pub fn radius(&self) -> f32
pub fn spawn_rules(&self, wpos: Vec2<i32>) -> SpawnRules
pub fn bounds(&self) -> Aabr<i32>
pub fn plot(&self, id: Id<Plot>) -> &Plot
pub fn plots(&self) -> impl ExactSizeIterator<Item = &Plot> + '_
pub fn plazas(&self) -> impl ExactSizeIterator<Item = Id<Plot>> + '_
pub fn create_plot(&mut self, plot: Plot) -> Id<Plot>
pub fn blit_aabr(&mut self, aabr: Aabr<i32>, tile: Tile)
pub fn create_road( &mut self, land: &Land<'_>, a: Vec2<i32>, b: Vec2<i32>, w: u16, kind: RoadKind, ) -> Option<Id<Plot>>
pub fn find_aabr( &mut self, search_pos: Vec2<i32>, area_range: Range<u32>, min_dims: Extent2<u32>, ) -> Option<(Aabr<i32>, Vec2<i32>, Vec2<i32>, Option<i32>)>
pub fn find_roadside_aabr( &mut self, rng: &mut impl Rng, area_range: Range<u32>, min_dims: Extent2<u32>, ) -> Option<(Aabr<i32>, Vec2<i32>, Vec2<i32>, Option<i32>)>
pub fn find_rural_aabr( &mut self, rng: &mut impl Rng, area_range: Range<u32>, min_dims: Extent2<u32>, ) -> Option<(Aabr<i32>, Vec2<i32>, Vec2<i32>, Option<i32>)>
pub fn make_plaza_at( &mut self, land: &Land<'_>, index: IndexRef<'_>, tile_aabr: Aabr<i32>, rng: &mut impl Rng, road_kind: RoadKind, ) -> Option<Id<Plot>>
pub fn make_plaza( &mut self, land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, generator_stats: &mut SitesGenMeta, site_name: &str, road_kind: RoadKind, ) -> Option<Id<Plot>>
pub fn demarcate_obstacles(&mut self, land: &Land<'_>)
Sourcepub fn make_initial_plaza(
    &mut self,
    land: &Land<'_>,
    index: IndexRef<'_>,
    rng: &mut impl Rng,
    plaza_radius: u32,
    search_inner_radius: u32,
    search_width: u32,
    generator_stats: &mut SitesGenMeta,
    site_name: &str,
    road_kind: RoadKind,
) -> Option<Id<Plot>>
 
pub fn make_initial_plaza( &mut self, land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, plaza_radius: u32, search_inner_radius: u32, search_width: u32, generator_stats: &mut SitesGenMeta, site_name: &str, road_kind: RoadKind, ) -> Option<Id<Plot>>
The find_roadside_aabr function wants to have an existing plaza or road. This function is used to find a suitable location for the first plaza in a town, which has the side-effect of creating at least one road. This function is more expensive than the make_plaza function but fails to find a plaza location only if there are no suitable locations within the entire search radius.
It works by exhaustively finding all tiles within a ring pattern around the town center where the tile and all surrounding tiles to the plaza radius are not hazards or roads. It then chooses the tile with the minimum distance from the town center as the plaza location. See the comments in common/src/spiral.rs for more information on the spiral ring pattern.
demarcate_obstacles() should be called before this function to mark the obstacles and roads. (Cliff Towns are an exception).
Sourcepub fn make_initial_plaza_default(
    &mut self,
    land: &Land<'_>,
    index: IndexRef<'_>,
    rng: &mut impl Rng,
    generator_stats: &mut SitesGenMeta,
    site_name: &str,
    road_kind: RoadKind,
) -> Option<Id<Plot>>
 
pub fn make_initial_plaza_default( &mut self, land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, generator_stats: &mut SitesGenMeta, site_name: &str, road_kind: RoadKind, ) -> Option<Id<Plot>>
This is make_initial_plaza with default options/parameters. This calls make_initial_plaza with the default parameters for the plaza_radius and search_inner_radius. The plaza_radius will be in the range 1-3, and the search_inner_radius will be 7 + plaza_radius. The search_width will be PLAZA_MAX_SEARCH_RADIUS - search_inner_radius. The search_inner_radius is approximately the same distance from the center of town as for the original make_plaza function, so this function will place the initial plaza and roads near where the original make_plaza function would place them in the case where the site is clear of hazards.
This default plaza generation function is used for generating cities, cliff towns, savannah towns, and coastal towns. The other town types (terracotta, myrmidon, desert city) have a central feature so they use specific plaza generation parameters and call the make_initial_plaza function directly.
demarcate_obstacles() should be called before this function to mark the obstacles and roads.
pub fn name(&self) -> Option<&str>
pub fn generate_mine( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_citadel( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_gnarling( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_adlet( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, index: IndexRef<'_>, ) -> Self
pub fn generate_terracotta( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_myrmidon( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_giant_tree( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_city( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, size: f32, calendar: Option<&Calendar>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_glider_course( land: &Land<'_>, _index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_cliff_town( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_savannah_town( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_coastal_town( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_desert_city( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, generator_stats: &mut SitesGenMeta, ) -> Self
pub fn generate_farm( is_desert: bool, rng: &mut impl Rng, site: &mut Site, land: &Land<'_>, ) -> bool
pub fn generate_barn( is_desert: bool, rng: &mut impl Rng, site: &mut Site, land: &Land<'_>, index: IndexRef<'_>, ) -> bool
pub fn generate_haniwa( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_chapel_site( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_pirate_hideout( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_jungle_ruin( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_rock_circle( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_troll_cave( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_camp( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_cultist( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_sahagin( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_vampire_castle( land: &Land<'_>, rng: &mut impl Rng, origin: Vec2<i32>, ) -> Self
pub fn generate_bridge( land: &Land<'_>, index: IndexRef<'_>, rng: &mut impl Rng, start_chunk: Vec2<i32>, end_chunk: Vec2<i32>, ) -> Self
pub fn wpos_tile_pos(&self, wpos2d: Vec2<i32>) -> Vec2<i32>
pub fn wpos_tile(&self, wpos2d: Vec2<i32>) -> &Tile
pub fn tile_wpos(&self, tile: Vec2<i32>) -> Vec2<i32>
pub fn tile_center_wpos(&self, tile: Vec2<i32>) -> Vec2<i32>
pub fn render_tile(&self, canvas: &mut Canvas<'_>, tpos: Vec2<i32>)
pub fn render(&self, canvas: &mut Canvas<'_>, dynamic_rng: &mut impl Rng)
pub fn apply_supplement( &self, dynamic_rng: &mut impl Rng, wpos2d: Vec2<i32>, supplement: &mut ChunkSupplement, )
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Site
impl RefUnwindSafe for Site
impl Send for Site
impl Sync for Site
impl Unpin for Site
impl UnwindSafe for Site
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
 
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
    T: CheckedCast<Dst>,
 
fn checked_as<Dst>(self) -> Option<Dst>where
    T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
    Src: CheckedCast<Dst>,
 
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
    Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
 
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Conv for T
 
impl<T> Conv for T
§impl<T> FmtForward for T
 
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
 
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
 
fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
 
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
 
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
 
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
 
fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
 
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
 
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
 
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
 
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
    Dst: LosslessTryFrom<Src>,
 
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
    Dst: LosslessTryFrom<Src>,
Source§fn lossless_try_into(self) -> Option<Dst>
 
fn lossless_try_into(self) -> Option<Dst>
Source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
    Dst: LossyFrom<Src>,
 
impl<Src, Dst> LossyInto<Dst> for Srcwhere
    Dst: LossyFrom<Src>,
Source§fn lossy_into(self) -> Dst
 
fn lossy_into(self) -> Dst
Source§impl<T> OverflowingAs for T
 
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
    T: OverflowingCast<Dst>,
 
fn overflowing_as<Dst>(self) -> (Dst, bool)where
    T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
    Src: OverflowingCast<Dst>,
 
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
    Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
 
fn overflowing_cast_from(src: Src) -> (Dst, bool)
§impl<T> Pipe for Twhere
    T: ?Sized,
 
impl<T> Pipe for Twhere
    T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
 
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
 
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R,
) -> R
 
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
 
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
 
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
 
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
 
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
 
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
    T: SaturatingCast<Dst>,
 
fn saturating_as<Dst>(self) -> Dstwhere
    T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
    Src: SaturatingCast<Dst>,
 
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
    Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
 
fn saturating_cast_from(src: Src) -> Dst
Source§impl<Context> SubContext<Context> for Context
 
impl<Context> SubContext<Context> for Context
fn sub_context(self) -> Context
§impl<T> Tap for T
 
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
 
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
 
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
 
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
 
impl<T> TryConv for T
§impl<T> TryDefault for Twhere
    T: Default,
 
impl<T> TryDefault for Twhere
    T: Default,
§fn try_default() -> Result<T, String>
 
fn try_default() -> Result<T, String>
§fn unwrap_default() -> Self
 
fn unwrap_default() -> Self
try_default and panics on an error case.