Expand description
A thin crate for people who just want to use ldtk files freely.
§Why did I create this nonsense?
- LDtk-rs
uses code generation, it does not get autocomplete support from rust-analyzer.Also, there are special license restrictions on using that crate. - ldtk_rust uses
.except()
inside the crate, you can’t handle errors.
§Supported LDtk file versions
^1.5
§Usage
cargo add ldtk2
use std::{error::Error, path::Path, convert::TryInto};
use ldtk2::Ldtk;
fn main() -> Result<(), Box<dyn Error>> {
let map = Ldtk::from_path("tests/example.ldtk")?;
// or
let map: Ldtk = Path::new("tests/example.ldtk").try_into()?;
// or
let map = Ldtk::from_str(include_str!("../tests/example.ldtk"))?;
// or
let map: Ldtk = include_str!("../tests/example.ldtk").try_into()?;
Ok(())
}
Re-exports§
pub use serde_json;
Structs§
- This complex section isn’t meant to be used by game devs at all, as these rules are completely resolved internally by the editor before any saving. You should just ignore this part.
- If you’re writing your own LDtk importer, you should probably just ignore most stuff in the
defs
section, as it contains data that are mostly important to the editor. To keep you away from thedefs
section and avoid some unnecessary JSON parsing, important data from definitions is often duplicated in fields prefixed with a double underscore (eg.__identifier
or__type
). The 2 only definition types you might need here are Tilesets and Enums. - In a tileset definition, enum based tag infos
- This section is mostly only intended for the LDtk editor app itself. You can safely ignore it.
- This object is not actually used by LDtk. It ONLY exists to force explicit references to all types, to make sure QuickType finds them and integrate all of them. Otherwise, Quicktype will drop types that are not explicitely used.
- This object is just a grid-based coordinate used in Field values.
- IntGrid value definition
- IntGrid value group definition
- IntGrid value instance
- This file is a JSON schema of files created by LDtk level editor (https://ldtk.io).
- This section contains all the level data. It can be found in 2 distinct forms, depending on Project current settings: - If “Separate level files” is disabled (default): full level data is embedded inside the main Project JSON file, - If “Separate level files” is enabled: level data is stored in separate standalone
.ldtkl
files (one per level). In this case, the main Project JSON file will still contain most level data, except heavy sections, like thelayerInstances
array (which will be null). TheexternalRelPath
string points to theldtkl
file. Aldtkl
file is just a JSON file containing exactly what is described below. - Level background image position info
- Nearby level info
- This object describes the “location” of an Entity instance in the project worlds.
- In a tileset definition, user defined meta-data of a tile.
- This structure represents a single tile from a given Tileset.
- The
Tileset
definition is the most important part among project definitions. It contains some extra informations about each integrated tileset. If you only had to parse one definition section, that would be the one. - This object represents a custom sub rectangle in a Tileset image.
- IMPORTANT: this type is available as a preview. You can rely on it to update your importers, for when it will be officially available. A World contains multiple levels, and it has its own layout settings.
Enums§
- Possible values:
Any
,OnlySame
,OnlyTags
,OnlySpecificEntity
- Checker mode Possible values:
None
,Horizontal
,Vertical
- Possible values:
Hidden
,ValueOnly
,NameAndValue
,EntityTile
,LevelTile
,Points
,PointStar
,PointPath
,PointPathLoop
,RadiusPx
,RadiusGrid
,ArrayCountWithLabel
,ArrayCountNoLabel
,RefLinkBetweenPivots
,RefLinkBetweenCenters
- Possible values:
Above
,Center
,Beneath
- Possible values:
ZigZag
,StraightArrow
,CurvedArrow
,ArrowsLine
,DashedLine
- Naming convention for Identifiers (first-letter uppercase, full uppercase etc.) Possible values:
Capitalize
,Uppercase
,Lowercase
,Free
- “Image export” option when saving project. Possible values:
None
,OneImagePerLayer
,OneImagePerLevel
,LayersAndLevels
- Possible values:
DiscardOldOnes
,PreventAdding
,MoveLastOne
- If TRUE, the maxCount is a “per world” limit, if FALSE, it’s a “per level”. Possible values:
PerLayer
,PerLevel
,PerWorld
- Possible values:
Rectangle
,Ellipse
,Tile
,Cross
- Defines how tileIds array is used Possible values:
Single
,Stamp
- An enum describing how the the Entity tile is rendered inside the Entity bounds. Possible values:
Cover
,FitInside
,Repeat
,Stretch
,FullSizeCropped
,FullSizeUncropped
,NineSlice
- Type of the layer as Haxe Enum Possible values:
IntGrid
,Entities
,Tiles
,AutoLayer
- Possible values:
Manual
,AfterLoad
,BeforeSave
,AfterSave