Initial commit, begin adding LDtk data types
commit
7f7c358ebd
|
@ -0,0 +1,17 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn build(b: *std.build.Builder) void {
|
||||||
|
// Standard release options allow the person running `zig build` to select
|
||||||
|
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||||
|
const mode = b.standardReleaseOptions();
|
||||||
|
|
||||||
|
const lib = b.addStaticLibrary("zig-ldtk", "src/main.zig");
|
||||||
|
lib.setBuildMode(mode);
|
||||||
|
lib.install();
|
||||||
|
|
||||||
|
const main_tests = b.addTest("src/main.zig");
|
||||||
|
main_tests.setBuildMode(mode);
|
||||||
|
|
||||||
|
const test_step = b.step("test", "Run library tests");
|
||||||
|
test_step.dependOn(&main_tests.step);
|
||||||
|
}
|
|
@ -0,0 +1,161 @@
|
||||||
|
/// 1. LDtk Json root
|
||||||
|
const Root = struct {
|
||||||
|
__header__: __Header__,
|
||||||
|
|
||||||
|
name: []const u8,
|
||||||
|
jsonVersion: u64,
|
||||||
|
defaultPivotX: f64,
|
||||||
|
defaultPivotY: f64,
|
||||||
|
defaultGridSize: u64,
|
||||||
|
bgColor: []const u8,
|
||||||
|
nextUid: u64,
|
||||||
|
|
||||||
|
defs: Defs,
|
||||||
|
|
||||||
|
levels: []Level,
|
||||||
|
|
||||||
|
worldGridHeight: ?u64 = null,
|
||||||
|
worldGridWidth: ?u64 = null,
|
||||||
|
worldLayout: ?WorldLayout = null,
|
||||||
|
worlds: []World,
|
||||||
|
};
|
||||||
|
|
||||||
|
const __Header__ = struct {
|
||||||
|
fileType: []const u8,
|
||||||
|
app: []const u8,
|
||||||
|
appAuthor: []const u8,
|
||||||
|
appVersion: []const u8,
|
||||||
|
url: []const u8,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 1.1. World
|
||||||
|
const World = struct {
|
||||||
|
identifier: []const u8,
|
||||||
|
iid: []const u8,
|
||||||
|
levels: []Level,
|
||||||
|
worldGridHeight: u64,
|
||||||
|
worldGridWidth: u64,
|
||||||
|
worldLayout: WorldLayout,
|
||||||
|
};
|
||||||
|
|
||||||
|
const WorldLayout = enum {
|
||||||
|
Free,
|
||||||
|
GridVania,
|
||||||
|
LinearHorizontal,
|
||||||
|
LinearVertical,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 2. Level
|
||||||
|
const Level = struct {
|
||||||
|
__bgColor: []const u8,
|
||||||
|
__bgPos: ?struct {
|
||||||
|
cropRect: [4]f64,
|
||||||
|
scale: [2]f64,
|
||||||
|
topLeftPx: [2]i64,
|
||||||
|
},
|
||||||
|
__neighbours: []struct {
|
||||||
|
dir: []const u8,
|
||||||
|
levelIid: []const u8,
|
||||||
|
levelUid: ?u64 = null,
|
||||||
|
},
|
||||||
|
bgRelPath: ?[]const u8,
|
||||||
|
externalRelPath: ?[]const u8,
|
||||||
|
fieldInstances: []FieldInstance,
|
||||||
|
identifier: []const u8,
|
||||||
|
iid: []const u8,
|
||||||
|
layerInstances: ?[]LayerInstance,
|
||||||
|
pxHei: u64,
|
||||||
|
pxWid: u64,
|
||||||
|
uid: u64,
|
||||||
|
worldDepth: i64,
|
||||||
|
worldX: i64,
|
||||||
|
worldY: i64,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 2.1. Layer instance
|
||||||
|
const LayerInstance = struct {
|
||||||
|
__cHei: u64,
|
||||||
|
__cWid: u64,
|
||||||
|
__gridSize: u64,
|
||||||
|
__identifier: []const u8,
|
||||||
|
__opacity: f64,
|
||||||
|
__pxTotalOffsetX: i64,
|
||||||
|
__pxTotalOffsetY: i64,
|
||||||
|
__tilesetDefUid: ?u64,
|
||||||
|
__tilesetRelPath: ?[]const u8,
|
||||||
|
__type: []const u8,
|
||||||
|
autoLayerTiles: []TileInstance,
|
||||||
|
entityInstances: []EntityInstance,
|
||||||
|
gridTiles: []TileInstance,
|
||||||
|
iid: []const u8,
|
||||||
|
intGridCsv: []u64,
|
||||||
|
layerDefUid: u64,
|
||||||
|
levelId: u64,
|
||||||
|
overrideTilesetUid: ?u64,
|
||||||
|
pxOffsetX: u64,
|
||||||
|
pxOffsetY: u64,
|
||||||
|
visible: bool,
|
||||||
|
/// WARNING: this deprecated value is no longer exported since version 1.0.0
|
||||||
|
/// Replaced by: intGridCsv
|
||||||
|
intGrid: ?[]IntGrid = null,
|
||||||
|
// seed: u64,
|
||||||
|
// autoTiles: []AutoTile,
|
||||||
|
};
|
||||||
|
|
||||||
|
const __Type = struct {
|
||||||
|
IntGrid, Entities, Tiles, AutoLayer,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 2.2. Tile instance
|
||||||
|
const TileInstance = struct {
|
||||||
|
f: FlipBits,
|
||||||
|
px: [2]i64,
|
||||||
|
src: [2]i64,
|
||||||
|
t: u64,
|
||||||
|
};
|
||||||
|
|
||||||
|
const FlipBits = enum(u4) {
|
||||||
|
NoFlip = 0,
|
||||||
|
XFlip = 1,
|
||||||
|
YFlip = 2,
|
||||||
|
XYFlip = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 2.3. Entity instance
|
||||||
|
const EntityInstance = struct {
|
||||||
|
__grid: [2]i64,
|
||||||
|
__identifier: []const u8,
|
||||||
|
__pivot: [2]f32,
|
||||||
|
__smartColor: []const u8,
|
||||||
|
__tags: [][]const u8,
|
||||||
|
__tile: ?TilesetRectangle,
|
||||||
|
defUid: u64,
|
||||||
|
fieldInstances: []FieldInstance,
|
||||||
|
height: u64,
|
||||||
|
iid: []const u8,
|
||||||
|
px: [2]i64,
|
||||||
|
width: u64,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 2.4. Field Instance
|
||||||
|
const FieldInstance = struct {};
|
||||||
|
/// 2.4.2 Field instance entity reference
|
||||||
|
/// 2.4.3 Field instance grid point
|
||||||
|
/// 3. Definitions
|
||||||
|
const Defs = struct {
|
||||||
|
layers: []Layer,
|
||||||
|
entities: []Entity,
|
||||||
|
tilesets: []Tileset,
|
||||||
|
enums: []Enum,
|
||||||
|
externalEnums: []ExternalEnum,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 3.1. Layer definition
|
||||||
|
/// 3.1.1. Auto-layer rule definition
|
||||||
|
/// 3.2. Entity definition
|
||||||
|
/// 3.2.1. Field definition
|
||||||
|
/// 3.2.2. Tileset rectangle
|
||||||
|
/// 3.3. Tileset definition
|
||||||
|
/// 3.4. Enum definition
|
||||||
|
/// 3.4.1. Enum value definition
|
||||||
|
const Enum = struct {};
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
|
||||||
|
"__header__" : { // Some information header
|
||||||
|
"fileType": "LDtk Project JSON",
|
||||||
|
"app": "LDtk",
|
||||||
|
"appAuthor": "Sebastien Benard",
|
||||||
|
"appVersion": "0.6.3",
|
||||||
|
"url": "..."
|
||||||
|
},
|
||||||
|
|
||||||
|
// Global project settings
|
||||||
|
"name" : "My empty project",
|
||||||
|
"jsonVersion" : 1,
|
||||||
|
"defaultPivotX" : 0.0,
|
||||||
|
"defaultPivotY" : 0.0,
|
||||||
|
"defaultGridSize" : 16,
|
||||||
|
"bgColor" : "#7F8093",
|
||||||
|
"nextUid" : 1,
|
||||||
|
|
||||||
|
"defs" : { // These are elements definitions
|
||||||
|
"layers" : [],
|
||||||
|
"entities" : [],
|
||||||
|
"tilesets" : [],
|
||||||
|
"enums" : [],
|
||||||
|
"externalEnums" : []
|
||||||
|
},
|
||||||
|
|
||||||
|
"levels" : [ // Actual level data
|
||||||
|
{
|
||||||
|
"identifier" : "Level",
|
||||||
|
"uid" : 0,
|
||||||
|
"pxWid" : 256,
|
||||||
|
"pxHei" : 256,
|
||||||
|
"layerInstances" : [] // "null" if levels are separated
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const testing = std.testing;
|
||||||
|
|
||||||
|
test "basic add functionality" {
|
||||||
|
try testing.expect(add(3, 7) == 10);
|
||||||
|
}
|
Loading…
Reference in New Issue