diff --git a/plugins/ldtk/runtime/src/ceramic/LdtkData.hx b/plugins/ldtk/runtime/src/ceramic/LdtkData.hx index 84ff4436b..6ed66d0d6 100644 --- a/plugins/ldtk/runtime/src/ceramic/LdtkData.hx +++ b/plugins/ldtk/runtime/src/ceramic/LdtkData.hx @@ -939,6 +939,11 @@ class LdtkEntityDefinition { */ public var tags:Array; + /** + * An array of field definitions that belong to this entity definition + */ + public var fieldDefs:Array; + public function new(?defs:LdtkDefinitions, ?json:DynamicAccess) { this.defs = defs; @@ -961,6 +966,10 @@ class LdtkEntityDefinition { tileset = defs.ldtkData.findTilesetDef(Std.int(json.get('tilesetId'))); uid = Std.int(json.get('uid')); tags = LdtkDataHelpers.toStringArray(json.get('tags')); + var fieldDefsJson:Array = json.get('fieldDefs'); + fieldDefs = fieldDefsJson != null ? [for (i in 0...fieldDefsJson.length) { + new LdtkFieldDefinition(defs, fieldDefsJson[i]); + }] : []; } } @@ -1014,6 +1023,21 @@ class LdtkEntityDefinition { } + public function fieldDef(identifier:String):LdtkFieldDefinition { + + if (this.fieldDefs != null) { + for (i in 0...this.fieldDefs.length) { + var fieldDef = this.fieldDefs[i]; + if (fieldDef.identifier == identifier) { + return fieldDef; + } + } + } + + return null; + + } + } /** @@ -2792,7 +2816,9 @@ class LdtkFieldInstance { */ public var tile:LdtkTilesetRectangle; - public function new(?ldtkData:LdtkData, ?ldtkWorld:LdtkWorld, ?json:DynamicAccess) { + public function new(?ldtkData:LdtkData, ?ldtkWorld:LdtkWorld, ?json:DynamicAccess, ?def:LdtkFieldDefinition) { + + this.def = def; if (json != null) { var defUid:Int = Std.int(json.get('defUid')); @@ -3199,7 +3225,9 @@ class LdtkEntityInstance { var fieldInstancesJson:Array = json.get('fieldInstances'); fieldInstances = fieldInstancesJson != null ? [for (i in 0...fieldInstancesJson.length) { - new LdtkFieldInstance(ldtkData, ldtkWorld, fieldInstancesJson[i]); + var fieldInstanceJson:haxe.DynamicAccess = fieldInstancesJson[i]; + var identifier = fieldInstanceJson.get('__identifier'); + new LdtkFieldInstance(ldtkData, ldtkWorld, fieldInstanceJson, def.fieldDef(identifier)); }] : []; }