pub struct GridWorld {
pub position: Vec2<f32>,
pub pivot: Vec2<f32>,
pub tile_size: Vec2<f32>,
pub tileset: TileSet,
pub visible_layers: Range<usize>,
/* private fields */
}
Fields§
§position: Vec2<f32>
§pivot: Vec2<f32>
§tile_size: Vec2<f32>
§tileset: TileSet
§visible_layers: Range<usize>
Implementations§
Source§impl GridWorld
impl GridWorld
Sourcepub fn new(
tile_size: Vec2<f32>,
tileset: TileSet,
terrain_layer: GridWorldLayer,
) -> Self
pub fn new( tile_size: Vec2<f32>, tileset: TileSet, terrain_layer: GridWorldLayer, ) -> Self
Examples found in repository?
examples/pcg_island.rs (lines 115-132)
51 fn default() -> Self {
52 let mut height = Grid::<f64>::generate(
53 SIZE.into(),
54 NoiseGenerator::new(Fbm::<SuperSimplex>::default().set_frequency(0.025)),
55 );
56 height.apply_all(RemapGenerator {
57 from: -1.0..1.0,
58 to: 0.0..1.0,
59 });
60
61 let gradient = Grid::<f64>::generate(
62 SIZE.into(),
63 |location: Vec2<usize>, size: Vec2<usize>, _| {
64 let center = size / 2;
65 let x = if location.x >= center.x {
66 location.x - center.x
67 } else {
68 center.x - location.x
69 } as f64;
70 let y = if location.y >= center.y {
71 location.y - center.y
72 } else {
73 center.y - location.y
74 } as f64;
75 let result = (x / center.x as f64).max(y / center.y as f64);
76 result * result
77 },
78 );
79 height.apply_all(SubGenerator { other: &gradient });
80
81 let mut biome = Grid::<f64>::generate(
82 SIZE.into(),
83 NoiseGenerator::new(Fbm::<SuperSimplex>::new(42).set_frequency(0.05)),
84 );
85 biome.apply_all(RemapGenerator {
86 from: -1.0..1.0,
87 to: 0.0..1.0,
88 });
89
90 let buffer = height
91 .into_inner()
92 .1
93 .into_iter()
94 .zip(biome.into_inner().1)
95 .map(|(height, biome)| {
96 if height > 0.75 {
97 SNOW
98 } else if height > 0.6 {
99 ROCK
100 } else if height > 0.1 {
101 if biome > 0.8 {
102 SAND
103 } else if biome > 0.5 {
104 GRASS
105 } else {
106 FOREST
107 }
108 } else {
109 WATER
110 }
111 })
112 .collect();
113
114 Self {
115 world: GridWorld::new(
116 10.0.into(),
117 TileSet::default()
118 .shader(ShaderRef::name("color"))
119 .mapping(WATER, TileSetItem::default().tint(Rgba::blue()))
120 .mapping(
121 FOREST,
122 TileSetItem::default().tint(Rgba::new_opaque(0.0, 0.5, 0.0)),
123 )
124 .mapping(GRASS, TileSetItem::default().tint(Rgba::green()))
125 .mapping(
126 SAND,
127 TileSetItem::default().tint(Rgba::new_opaque(1.0, 1.0, 0.5)),
128 )
129 .mapping(ROCK, TileSetItem::default().tint(Rgba::gray(0.5)))
130 .mapping(SNOW, TileSetItem::default().tint(Rgba::white())),
131 GridWorldLayer::new(TileMap::with_buffer(SIZE.into(), buffer).unwrap()),
132 ),
133 weather_tileset: TileSet::default()
134 .shader(ShaderRef::name("color"))
135 .mapping(
136 CLEAR_SKY,
137 TileSetItem::default().tint(Rgba::new(1.0, 1.0, 1.0, 0.0)),
138 )
139 .mapping(
140 CLOUD_SKY,
141 TileSetItem::default().tint(Rgba::new(1.0, 1.0, 1.0, 0.8)),
142 )
143 .mapping(
144 RAINY_SKY,
145 TileSetItem::default().tint(Rgba::new(0.3, 0.3, 0.3, 0.8)),
146 ),
147 weather_noise: Fbm::<SuperSimplex>::default().set_frequency(0.03),
148 time: 0.0,
149 mouse_position: Default::default(),
150 }
151 }
pub fn with_position(self, value: Vec2<f32>) -> Self
pub fn with_pivot(self, value: Vec2<f32>) -> Self
pub fn with_visible_layers(self, value: Range<usize>) -> Self
pub fn with_layer(self, layer: GridWorldLayer) -> Self
pub fn with_visible_layer(self, layer: GridWorldLayer) -> Self
pub fn with_tile_instance(self, instance: TileInstance) -> Self
pub fn with_tile_instances( self, instances: impl IntoIterator<Item = TileInstance>, ) -> Self
pub fn with_colliders(self, grid: Grid<bool>) -> Self
pub fn with_collider(self, location: Vec2<usize>) -> Self
pub fn insert_tile_instance(&mut self, instance: TileInstance)
pub fn remove_tile_instances(&mut self, instance: &TileInstance)
pub fn remove_tile_instances_at_location(&mut self, location: Vec2<usize>)
pub fn collider(&self, location: Vec2<usize>) -> bool
pub fn set_collider(&mut self, location: Vec2<usize>, value: bool)
pub fn layers(&self) -> &[GridWorldLayer]
pub fn layers_mut(&mut self) -> &mut [GridWorldLayer]
pub fn locations_iter(&self) -> impl Iterator<Item = Vec2<usize>>
pub fn world_to_local(&self, location: Vec2<f32>) -> Option<Vec2<usize>>
pub fn local_to_world(&self, location: Vec2<usize>) -> Vec2<f32>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for GridWorld
impl !RefUnwindSafe for GridWorld
impl !Send for GridWorld
impl !Sync for GridWorld
impl Unpin for GridWorld
impl !UnwindSafe for GridWorld
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
Mutably borrows from an owned value. Read more
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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>
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 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>
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