Code Monkey home page Code Monkey logo

bevy_ecs_tilemap's Introduction

bevy_ecs_tilemap

Crates.io docs license Crates.io

A tilemap rendering plugin for bevy. It is more ECS friendly as it makes tiles entities.

Features

  • A tile per entity.
  • Fast rendering using a chunked approach.
  • Layers and sparse tile maps.
  • GPU powered animations.
  • Isometric and Hexagonal tile maps.
  • Examples for integration with Tiled and LDTK editors.

Screenshots

iso hex

How Does This Work?

Quite simple there is a tile per entity. Behind the scenes the tiles are split into chunks that each have their own mesh which is sent to the GPU in an optimal way.

Why Use This Instead of X?

Because each tile is an entity of its own editing tiles is super easy and convenient. This allows you to tag entities for updating and makes stuff like animation easier. Want to have a mining simulation where damage is applied to tiles? That’s easy with this plugin:

struct Damage {
    amount: u32,
}

fn update_damage(
    mut query: Query<(&mut TileTexture, &Damage), Changed<Damage>>,
) {
    for (mut tile_texture, damage) in query.iter_mut() {
        tile_texture.0 = TILE_DAMAGE_OFFSET + damage.amount;
    }
}

Examples

  • accessing_tiles – An example showing how one can access tiles from the map object by using tile map coordinates.
  • animation – Basic CPU animation example.
  • basic - The simplest example of how to create a tile map.
  • bench - A stress test of the map rendering system. Takes a while to load.
  • chunking - A simple example showing how to implement an infinite tilemap by spawning multiple chunks.
  • colors - Showcases how each tile can have an individual color.
  • frustum_cull_test - An environment for testing frustum culling.
  • game_of_life - A game of life simulator.
  • hexagon_column - A map that is meshed using “pointy” hexagons.
  • hexagon_generation - Shows how to generate hexagonal maps.
  • hexagon_row - A map that is meshed using flat hexagons.
  • iso_diamond - An isometric meshed map using diamond ordering.
  • iso_staggered - An isometric meshed map using staggered ordering.
  • layers - An example of how you can use multiple map entities/components for “layers”.
  • ldtk - An example of loading and rendering of a LDTK map. We recommend checking out bevy_ecs_ldtk(https://crates.io/crates/bevy_ecs_ldtk).
  • mouse_to_tile - Shows how to convert a mouse cursor position into a tile position.
  • move_tile - Shows how to move a tile without despawning and respawning it.
  • random_map - A bench of editing all of the tiles every 100 ms.
  • remove_tiles - An example showing how you can remove tiles by using map_query
  • spacing - Shows how to load tilemap textures that contain spacing between the tiles.
  • tiled - An example of loading and rendering of a Tiled editor map.
  • tiled_rotated - An example of loading and rendering of a Tiled editor map with flipping and rotation.
  • visibility - An example showcasing visibility of tiles and chunks.

Running Examples

cargo run --release --example basic

Running examples on web

This can be made simple with wasm-server-runner.

After that's installed and configured, run:

cargo run --target wasm32-unknown-unknown --example animation --release --features atlas

Note: You must use the atlas feature when targeting the web. See #283.

Bevy Compatibility

bevy bevy_ecs_tilemap
main bevy-track
0.10 0.10
0.9 0.9
0.8 0.8
0.8 0.7
0.7 0.6
0.6 0.5

Asset credits

bevy_ecs_tilemap's People

Contributors

alice-i-cecile avatar antoinepaulinb7 avatar b-reif avatar bjorn avatar bzm3r avatar carnagion avatar dauthdaert avatar devusercontact avatar divark avatar elabajaba avatar frederickjjoubert avatar icorderi avatar inodentry avatar johanhelsing avatar johnthecoolingfan avatar martinmolin avatar mbolt35 avatar mrgvsv avatar mwbryant avatar noahshomette avatar perlindgren avatar piefayth avatar rparrett avatar stararawn avatar tec27 avatar tehsmeely avatar theleonsver1 avatar theseatoad avatar trouv avatar virtualritz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.