@@ -2,19 +2,22 @@ package importer.enu;
22
33
44// Rough CastleDB JSON typedef
5+
56private 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
2023private 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