Skip to content

Commit 91301e9

Browse files
committed
ADD support cdb uniqueIds in sheet lists
1 parent 1c3bac4 commit 91301e9

File tree

1 file changed

+44
-13
lines changed

1 file changed

+44
-13
lines changed

src/electron.renderer/importer/enu/CastleDb.hx

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@ package importer.enu;
22

33

44
// Rough CastleDB JSON typedef
5+
56
private typedef CastleDbJson = {
6-
var sheets : Array<{
7+
var sheets : Array<CastleDbSheet>;
8+
}
9+
10+
private typedef CastleDbSheet = {
11+
var name : String;
12+
var columns : Array<{
13+
var typeStr : String;
714
var name : String;
8-
var columns : Array<{
9-
var typeStr : String;
10-
var name : String;
11-
}>;
12-
var props : {
13-
var hasGroup : Bool;
14-
var displayIcon : Null<String>;
15-
}
16-
var lines : Array<Dynamic>;
1715
}>;
16+
var props : {
17+
var hasGroup : Bool;
18+
var displayIcon : Null<String>;
19+
}
20+
var lines : Array<Dynamic>;
1821
}
1922

2023
private typedef CastleDbTile = {
@@ -41,6 +44,14 @@ class CastleDb extends importer.ExternalEnum {
4144
if( json==null )
4245
return [];
4346

47+
function _getSheet(id:String) : Null<CastleDbSheet> {
48+
for(sheet in json.sheets) {
49+
if( sheet.name==id )
50+
return sheet;
51+
}
52+
return null;
53+
}
54+
4455
var parseds : Array<ParsedExternalEnum> = [];
4556
for(sheet in json.sheets) {
4657
// Check columns first and look for Unique IDs
@@ -73,14 +84,34 @@ class CastleDb extends importer.ExternalEnum {
7384
}
7485
parseds.push(enu);
7586

87+
88+
function getExploredLines() {
89+
if( sheet.name.indexOf("@")<0 )
90+
return sheet.lines;
91+
else {
92+
// Sub lists
93+
// WARNING: this only works for lists in first level. Lists in lists are not supported yet!
94+
var baseSheetId = sheet.name.split("@")[0];
95+
var subListId = sheet.name.split("@")[1];
96+
var allLines = [];
97+
for(line in _getSheet(baseSheetId).lines) {
98+
var subList : Array<Dynamic> = Reflect.field(line, subListId);
99+
for(subLine in subList??[])
100+
allLines.push(subLine);
101+
}
102+
return allLines;
103+
}
104+
}
105+
76106
// Lookup or create icons tileset
77107
var cdbTd : data.def.TilesetDef = null;
78108
if( tileColumn!=null ) {
79109
var project = Editor.ME.project;
80-
for(line in sheet.lines) {
110+
for(line in getExploredLines()) {
81111
var t = Reflect.field(line, tileColumn);
82112
if( t==null || t.file==null )
83113
continue;
114+
84115
var rawIconPath = Std.string(t.file);
85116
var cdbIconPath = dn.FilePath.fromFile(sourceFp.directory + sourceFp.slash() + rawIconPath);
86117
for(td in project.defs.tilesets) {
@@ -110,7 +141,7 @@ class CastleDb extends importer.ExternalEnum {
110141
}
111142

112143
var uniq = new Map();
113-
for(line in sheet.lines) {
144+
for(line in getExploredLines()) {
114145
var e = Reflect.field(line, idColumn);
115146
if( e==null || StringTools.trim(e).length==0 )
116147
continue;
@@ -140,8 +171,8 @@ class CastleDb extends importer.ExternalEnum {
140171
});
141172
}
142173
}
143-
144174
}
145175
return parseds;
146176
}
177+
147178
}

0 commit comments

Comments
 (0)