Skip to content

Commit

Permalink
Added multi-worlds new format export (#231)
Browse files Browse the repository at this point in the history
  • Loading branch information
deepnight committed Jan 20, 2022
1 parent f00e87d commit dabc519
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 22 deletions.
68 changes: 46 additions & 22 deletions src/electron.renderer/data/Project.hx
Expand Up @@ -232,6 +232,18 @@ class Project {
p.appBuildId = JsonTools.readFloat(json.appBuildId, -1);
p.nextUid = JsonTools.readInt( json.nextUid, 0 );

// Advanced flags
if( (cast json).advancedOptionFlags!=null )
json.flags = (cast json).advancedOptionFlags;
if( json.flags!=null )
for(f in json.flags ) {
var ev = try JsonTools.readEnum(ldtk.Json.ProjectFlag, f, true)
catch(_) null;

if( ev!=null )
p.flags.set(ev, true);
}

p.defaultPivotX = JsonTools.readFloat( json.defaultPivotX, 0 );
p.defaultPivotY = JsonTools.readFloat( json.defaultPivotY, 0 );
p.defaultGridSize = JsonTools.readInt( json.defaultGridSize, Project.DEFAULT_GRID_SIZE );
Expand All @@ -254,25 +266,28 @@ class Project {

p.defs = Definitions.fromJson(p, json.defs);

for( lvlJson in JsonTools.readArray(json.levels) )
p.levels.push( Level.fromJson(p, lvlJson) );

if( (cast json).advancedOptionFlags!=null )
json.flags = (cast json).advancedOptionFlags;
if( json.flags!=null )
for(f in json.flags ) {
var ev = try JsonTools.readEnum(ldtk.Json.ProjectFlag, f, true)
catch(_) null;

if( ev!=null )
p.flags.set(ev, true);
}
// Levels
if( p.hasFlag(MultiWorlds) )
for( lvlJson in JsonTools.readArray(json.worlds[0].levels) )
p.levels.push( Level.fromJson(p, lvlJson) );
else
for( lvlJson in JsonTools.readArray(json.levels) )
p.levels.push( Level.fromJson(p, lvlJson) );

// World
var defLayout : ldtk.Json.WorldLayout = dn.Version.lower(json.jsonVersion, "0.6") ? LinearHorizontal : Free;
p.worldLayout = JsonTools.readEnum( ldtk.Json.WorldLayout, json.worldLayout, false, defLayout );
p.worldGridWidth = JsonTools.readInt( json.worldGridWidth, p.defaultLevelWidth );
p.worldGridHeight = JsonTools.readInt( json.worldGridHeight, p.defaultLevelHeight );
if( p.hasFlag(MultiWorlds) ) {
var worldJson = json.worlds[0];
p.worldLayout = JsonTools.readEnum( ldtk.Json.WorldLayout, worldJson.worldLayout, false, defLayout );
p.worldGridWidth = JsonTools.readInt( worldJson.worldGridWidth, p.defaultLevelWidth );
p.worldGridHeight = JsonTools.readInt( worldJson.worldGridHeight, p.defaultLevelHeight );
}
else {
p.worldLayout = JsonTools.readEnum( ldtk.Json.WorldLayout, json.worldLayout, false, defLayout );
p.worldGridWidth = JsonTools.readInt( json.worldGridWidth, p.defaultLevelWidth );
p.worldGridHeight = JsonTools.readInt( json.worldGridHeight, p.defaultLevelHeight );
}

if( dn.Version.lower(json.jsonVersion, "0.6") )
p.reorganizeWorld();

Expand Down Expand Up @@ -453,9 +468,9 @@ class Project {
appBuildId: Const.getAppBuildId(),
nextUid: nextUid,

worldLayout: JsonTools.writeEnum(worldLayout, false),
worldGridWidth: worldGridWidth,
worldGridHeight: worldGridHeight,
worldLayout: hasFlag(MultiWorlds) ? null : JsonTools.writeEnum(worldLayout, false),
worldGridWidth: hasFlag(MultiWorlds) ? null : worldGridWidth,
worldGridHeight: hasFlag(MultiWorlds) ? null : worldGridHeight,

defaultPivotX: JsonTools.writeFloat( defaultPivotX ),
defaultPivotY: JsonTools.writeFloat( defaultPivotY ),
Expand Down Expand Up @@ -483,9 +498,18 @@ class Project {
},

defs: defs.toJson(this),
levels: levels.map( (l)->l.toJson() ),

worlds: [],
levels: hasFlag(MultiWorlds) ? [] : levels.map( (l)->l.toJson() ),

worlds: !hasFlag(MultiWorlds) ? [] : [
{
worldLayout: JsonTools.writeEnum(worldLayout, false),
worldGridWidth: worldGridWidth,
worldGridHeight: worldGridHeight,
iid: "TODO",
identifier: "TODO",
levels: levels.map( (l)->l.toJson() ),
}
],
}

return json;
Expand Down
5 changes: 5 additions & 0 deletions src/electron.renderer/ui/modal/panel/EditProject.hx
Expand Up @@ -6,6 +6,7 @@ class EditProject extends ui.modal.Panel {
var allAdvancedOptions = [
ldtk.Json.ProjectFlag.ExportPreCsvIntGridFormat,
ldtk.Json.ProjectFlag.PrependIndexToLevelFileNames,
ldtk.Json.ProjectFlag.MultiWorlds,
];

public function new() {
Expand Down Expand Up @@ -295,6 +296,10 @@ class EditProject extends ui.modal.Panel {
jLabel.text("Prefix level file names with their index in array");
jInput.attr("title", L.t._("If enabled, external level file names will be prefixed with an index reflecting their position in the internal array.\nThis is NOT recommended because, with versioning systems (such as GIT), inserting a new level means renaming files of all subsequent levels in the array.\nThis option used to be the default behavior but was changed in version 0.10.0."));

case MultiWorlds:
jLabel.text("Multi-worlds support");
jInput.attr("title", L.t._("If enabled, levels will be stored in a 'worlds' array at the root of the project JSON instead of the root itself directly."));

case _:
}

Expand Down

0 comments on commit dabc519

Please sign in to comment.