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

source

pub fn new( tile_size: Vec2<f32>, tileset: TileSet, terrain_layer: GridWorldLayer ) -> Self

Examples found in repository?
examples/pcg_island.rs (lines 96-113)
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
    fn default() -> Self {
        let mut height = Grid::<f64>::generate(
            SIZE.into(),
            NoiseGenerator::new(Fbm::<SuperSimplex>::default().set_frequency(0.025)),
        );
        height.apply_all(RemapGenerator {
            from: -1.0..1.0,
            to: 0.0..1.0,
        });

        let gradient = Grid::<f64>::generate(
            SIZE.into(),
            |location: Vec2<usize>, size: Vec2<usize>, _| {
                let center = size / 2;
                let x = if location.x >= center.x {
                    location.x - center.x
                } else {
                    center.x - location.x
                } as f64;
                let y = if location.y >= center.y {
                    location.y - center.y
                } else {
                    center.y - location.y
                } as f64;
                let result = (x / center.x as f64).max(y / center.y as f64);
                result * result
            },
        );
        height.apply_all(SubGenerator { other: &gradient });

        let mut biome = Grid::<f64>::generate(
            SIZE.into(),
            NoiseGenerator::new(Fbm::<SuperSimplex>::new(42).set_frequency(0.05)),
        );
        biome.apply_all(RemapGenerator {
            from: -1.0..1.0,
            to: 0.0..1.0,
        });

        let buffer = height
            .into_inner()
            .1
            .into_iter()
            .zip(biome.into_inner().1)
            .map(|(height, biome)| {
                if height > 0.75 {
                    SNOW
                } else if height > 0.6 {
                    ROCK
                } else if height > 0.1 {
                    if biome > 0.8 {
                        SAND
                    } else if biome > 0.5 {
                        GRASS
                    } else {
                        FOREST
                    }
                } else {
                    WATER
                }
            })
            .collect();

        Self {
            world: GridWorld::new(
                10.0.into(),
                TileSet::default()
                    .shader(ShaderRef::name("color"))
                    .mapping(WATER, TileSetItem::default().tint(Rgba::blue()))
                    .mapping(
                        FOREST,
                        TileSetItem::default().tint(Rgba::new_opaque(0.0, 0.5, 0.0)),
                    )
                    .mapping(GRASS, TileSetItem::default().tint(Rgba::green()))
                    .mapping(
                        SAND,
                        TileSetItem::default().tint(Rgba::new_opaque(1.0, 1.0, 0.5)),
                    )
                    .mapping(ROCK, TileSetItem::default().tint(Rgba::gray(0.5)))
                    .mapping(SNOW, TileSetItem::default().tint(Rgba::white())),
                GridWorldLayer::new(TileMap::with_buffer(SIZE.into(), buffer).unwrap()),
            ),
        }
    }
source

pub fn with_position(self, value: Vec2<f32>) -> Self

source

pub fn with_pivot(self, value: Vec2<f32>) -> Self

source

pub fn with_visible_layers(self, value: Range<usize>) -> Self

source

pub fn with_layer(self, layer: GridWorldLayer) -> Self

source

pub fn with_visible_layer(self, layer: GridWorldLayer) -> Self

source

pub fn with_tile_instance(self, instance: TileInstance) -> Self

source

pub fn with_tile_instances( self, instances: impl IntoIterator<Item = TileInstance> ) -> Self

source

pub fn with_colliders(self, grid: Grid<bool>) -> Self

source

pub fn with_collider(self, location: Vec2<usize>) -> Self

source

pub fn insert_tile_instance(&mut self, instance: TileInstance)

source

pub fn remove_tile_instances(&mut self, instance: &TileInstance)

source

pub fn remove_tile_instances_at_location(&mut self, location: Vec2<usize>)

source

pub fn collider(&self, location: Vec2<usize>) -> bool

source

pub fn set_collider(&mut self, location: Vec2<usize>, value: bool)

source

pub fn layers(&self) -> &[GridWorldLayer]

source

pub fn layers_mut(&mut self) -> &mut [GridWorldLayer]

source

pub fn locations_iter(&self) -> impl Iterator<Item = Vec2<usize>>

source

pub fn world_to_local(&self, location: Vec2<f32>) -> Option<Vec2<usize>>

source

pub fn local_to_world(&self, location: Vec2<usize>) -> Vec2<f32>

Trait Implementations§

source§

impl Drawable for GridWorld

source§

fn draw(&self, context: &mut DrawContext, graphics: &mut Graphics<Vertex>)

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
§

impl<T> Finalize for T

§

unsafe fn finalize_raw(data: *mut ())

Safety Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

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.

§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

§

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, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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

§

fn vzip(self) -> V

§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,