extends Node class_name LayeredEntityContainer var entities := { "under" : [], "base" : [], "above" : [] } func _ready() -> void: LevelEventBus.layer_entity_created.connect(on_entity_spawned) LevelEventBus.layer_entity_killed.connect(on_entity_killed) for layer in entities.keys(): entities[layer].resize(FieldParams.COLUMNS * FieldParams.ROWS) ## Checks if tile is occupied. [br] ## If position or layer are invalid, returns true func is_occupied(position : int, layer : StringName) -> bool: if position >= FieldParams.COLUMNS * FieldParams.ROWS or entities.has(layer) == false: return true return not entities[layer][position] == null func on_entity_spawned(entity : Entity) -> void: if entities.has(entity.layer) == false: return var index = FieldParams.indexify(entity.get_parent().global_position) if index >= FieldParams.COLUMNS * FieldParams.ROWS or is_occupied(index,entity.layer): return entities[entity.layer][index] = entity func on_entity_killed(context : Entity.KilledContext) -> void: var entity = context.target var index = FieldParams.indexify(entity.get_parent().global_position) if is_occupied(index,entity.layer) == false: return entities[entity.layer][index] = null