bevy_spritefusion/lib.rs
1//! # bevy_spritefusion
2//!
3//! A Bevy plugin for loading and rendering [Sprite Fusion](https://www.spritefusion.com/) map exports.
4//!
5//! Sprite Fusion is a free, web-based tilemap editor: https://www.spritefusion.com/ now supports Bevy exports!
6//! This plugin loads those exports and converts them to [`bevy_ecs_tilemap`] entities.
7//!
8//! ## Quick Start
9//!
10//! 1. Export your map from Sprite Fusion via the Bevy export button
11//! 2. Place map.json and spritesheet.png files in your `assets/` folder
12//! 3. Load and spawn the map:
13//!
14//! ```rust,ignore
15//! use bevy::prelude::*;
16//! use bevy_spritefusion::prelude::*;
17//!
18//! fn main() {
19//! App::new()
20//! .add_plugins(DefaultPlugins)
21//! .add_plugins(SpriteFusionPlugin)
22//! .add_systems(Startup, spawn_map)
23//! .run();
24//! }
25//!
26//! fn spawn_map(mut commands: Commands, asset_server: Res<AssetServer>) {
27//! commands.spawn(Camera2d);
28//! commands.spawn(SpriteFusionBundle {
29//! map: asset_server.load("map.json"),
30//! tileset: asset_server.load("spritesheet.png"),
31//! ..default()
32//! });
33//! }
34//! ```
35//!
36//! ## Features
37//!
38//! - **Layers**: Each Sprite Fusion layer becomes a separate tilemap
39//! - **Colliders**: Layers marked as colliders get a `Collider` component on their tiles
40//! - **Tile Attributes**: Custom attributes from Sprite Fusion are preserved as `TileAttributes` components. They can be useful for things like areas data, danger zones, etc.
41//! - **bevy_ecs_tilemap Integration**: Full compatibility with the bevy_ecs_tilemap ecosystem
42//!
43//! ## Querying Tiles
44//!
45//! ```rust,ignore
46//! use bevy::prelude::*;
47//! use bevy_spritefusion::prelude::*;
48//!
49//! // Find all tiles with collision
50//! fn find_colliders(query: Query<&TilePos, With<Collider>>) {
51//! for pos in query.iter() {
52//! println!("Collider at ({}, {})", pos.x, pos.y);
53//! }
54//! }
55//!
56//! // Find tiles with specific attributes
57//! fn find_collectibles(query: Query<(&TilePos, &TileAttributes)>) {
58//! for (pos, attrs) in query.iter() {
59//! if attrs.get_bool("isCollectible").unwrap_or(false) {
60//! let value = attrs.get_i64("value").unwrap_or(0);
61//! println!("Collectible at ({}, {}) worth {}", pos.x, pos.y, value);
62//! }
63//! }
64//! }
65//! ```
66
67pub mod loader;
68pub mod plugin;
69pub mod types;
70
71/// Convenient re-exports for common usage.
72pub mod prelude {
73 pub use crate::loader::SpriteFusionMapLoader;
74 pub use crate::plugin::{
75 PendingSpriteFusionMap, SpriteFusionBundle, SpriteFusionMapHandle, SpriteFusionPlugin,
76 SpriteFusionTilesetHandle,
77 };
78 pub use crate::types::{
79 Collider, SpriteFusionLayer, SpriteFusionLayerMarker, SpriteFusionMap,
80 SpriteFusionMapMarker, SpriteFusionTile, TileAttributes,
81 };
82 pub use bevy_ecs_tilemap::prelude::TilePos;
83}