Skip to content

Commit ae465db

Browse files
authored
Merge pull request #2 from FaultyFunctions/main
Add linking of entity reference fields to gm instances
2 parents 41373a6 + 0fc5773 commit ae465db

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

scripts/LDtkParser/LDtkParser.gml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ function LDtkLoad(level_name) {
220220
case "Entities": // instances
221221
var tile_size = this_layer.__gridSize // for scaling
222222

223+
var entity_references = {};
224+
var entity_ref_fetch_list = [];
225+
223226
// for every entity in the level
224227
for(var e = 0; e < array_length(this_layer.entityInstances); ++e) {
225228
var entity = this_layer.entityInstances[e]
@@ -244,13 +247,14 @@ function LDtkLoad(level_name) {
244247

245248
var inst = instance_create_layer(_x, _y, gm_layer_id, oEmpty) // we'll need instance_change() to work around the create event
246249

250+
// add to entity_reference
251+
entity_references[$ entity.iid] = inst;
252+
247253
// TODO: Change this up for objects without sprites
248254
var spr = object_get_sprite(object_id)
249255
var sw = sprite_get_width(spr)
250256
var sh = sprite_get_height(spr)
251257

252-
inst.image_xscale = entity.width / sw
253-
inst.image_yscale = entity.height / sh
254258

255259
// Load the fields
256260

@@ -291,6 +295,14 @@ function LDtkLoad(level_name) {
291295
field_value[@ j] = __LDtkPrepareColor(field_value[j])
292296
}
293297
break
298+
case "EntityRef":
299+
// add to entity_ref_fetch_list so we can add the proper reference later
300+
array_push(entity_ref_fetch_list, {
301+
"gm_instance": inst,
302+
"gm_var_name": gm_field_name,
303+
"entity_ref": field_value.entityIid
304+
})
305+
break
294306
default:
295307
if (string_pos("LocalEnum", field_type)) {
296308
var enum_name_idx = string_pos(".", field_type)
@@ -306,7 +318,6 @@ function LDtkLoad(level_name) {
306318
field_value = __LDtkPrepareEnum(_enum_name, field_value)
307319
}
308320
}
309-
310321
break
311322
}
312323

@@ -326,6 +337,13 @@ function LDtkLoad(level_name) {
326337
__LDtkTrace("Loaded Entity! GM instance id=%", inst)
327338
}
328339

340+
// Add proper instance references to entity reference fields
341+
for (var j = 0; j < array_length(entity_ref_fetch_list); ++j) {
342+
var _fetch = entity_ref_fetch_list[j]
343+
var _gm_inst = _fetch.gm_instance
344+
variable_instance_set(_gm_inst, _fetch.gm_var_name, entity_references[$ _fetch.entity_ref])
345+
}
346+
329347
__LDtkTrace("Loaded an Entities Layer! name=%, gm_name=%", _layer_name, gm_layer_name)
330348
break
331349
case "IntGrid": // just ignore...

0 commit comments

Comments
 (0)