Giter Club home page Giter Club logo

bevy_tilemap's Introduction

Bevy Tilemap

Bevy Tilemap logo

Chunk based tilemap for Bevy game engine.

Bevy Tilemap allows for Bevy native batch-rendered tiles in maps to be constructed with chunk based loading, efficiently.

Simple yet refined in its implementation, it is meant to attach to other extensible plugins that can enhance its functionality further. Hand-crafted tilemaps with an attentive focus on performance, and low data usage.

WARNING

This project is still experimental and the API will likely break often before the first release. It uses an experimental game engine which too may break the API. Semantic versioning will be followed as much as possible and the contributors will as much as they possibly can try to keep the API stable.

If you have API suggestions, now is the time to do it.

Features

  • Perfect for game jams.
  • Easy to use and mostly stable API with thorough documentation.
  • Endless or constrained tilemaps.
  • Batched rendering of many tiles.

Design

This is not intended to be just another Tilemap. It is meant to be a framework and extensible by design, like Bevy. As well as work done to keep it as close to Bevy API as possible while keeping in mind of Rust API best practices. It is not meant to be complicated and created to be simple to use but give enough functionality to advanced users.

Less time fiddling, more time building

Usage

Add to your Cargo.toml file:

[dependencies]
bevy = 0.3
bevy_tilemap = 0.1

Simple tilemap construction

At the most basic implementation, there is not a whole lot that is required to get the tilemap going as shown below.

use bevy_tilemap::prelude::*;
use bevy::asset::HandleId;
use bevy::prelude::*;

// This must be set in Asset<TextureAtlas>.
let texture_atlas_handle = Handle::weak(HandleId::random::<TextureAtlas>());

let mut tilemap = Tilemap::new(texture_atlas_handle);

// Coordinate point with Z order.
let point = (16, 16, 0);
let tile_index = 0;
tilemap.set_tile(point, tile_index);

tilemap.spawn_chunk_containing_point(point);

Of course, using the Tilemap::builder() this can be constructed with many more advanced features.

  • Texture atlas.
  • Dimensions of the tilemap.
  • Dimensions of a chunk.
  • Dimensions of a tile.
  • Adding Z render layers

With many more features planned for future updates to bring it up to par with other tilemap implementations for other projects.

Future plans

There is still a lot to do but the API is now stable and should be fine for a while now. The next release is focused on added automated methods and system.

  • Auto-tile: Picks the right tile based around the neighbours of the tile.
  • Auto-spawn: Automatically handles spawning and despawning of chunks depending on what the camera is viewing.
  • Auto-configure: Automatically configures the tilemap based on options that it can figure out such as texture sizes and the right size of chunks.
  • Tile import: Imports tiles from a file from multiple formats.
  • Tilemap3: Multiple tilemaps working together to create 3D slices that work together and are aware of each other.

Building

bevy_tilemap is only guranteed to work from stable Rust toolchain and up. This is to be inline with the rest of Bevy engine.

Once you have a development environment, Bevy Tilemap can be fetched using git:

$ git clone --recursive https://github.com/joshuajbouw/bevy_tilemap/

and then built using cargo:

$ cargo build --example random_dungeon

cargo can also be used to run tests:

$ cargo test

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.