class_name CellData extends Resource @export var layer_info: Dictionary = { Constants.TilemapLayers.CORRUPTION: false } var _pos: Vector2i var interaction_display: ProgressBar func _to_string() -> String: return "{%s %s}" % [_pos, layer_info] func _init(pos: Vector2i) -> void: _pos = pos func change_layer(layer: int, data: Variant) -> bool: if layer_info.has(layer) and layer_info[layer] == data: return false layer_info[layer] = data return true func change_resource(data: GameResource) -> void: layer_info[Constants.TilemapLayers.ENVIRONMENT] = data func get_resource() -> GameResource: return layer_info[Constants.TilemapLayers.ENVIRONMENT] as GameResource func has_resource() -> bool: return has_layer(Constants.TilemapLayers.ENVIRONMENT) func is_corrupted() -> bool: return layer_info[Constants.TilemapLayers.CORRUPTION] func has_layer(layer: int) -> bool: return layer_info.has(layer) func interact(timer: Timer) -> void: var is_interactable := has_resource() or has_layer(Constants.TilemapLayers.BUILDINGS) if is_interactable and not interaction_display: timer.timeout.connect(_on_interaction_finished.bind(timer)) timer.start(3) interaction_display = ProgressBar.new() interaction_display.position = Grid.grid_to_world_center(_pos) - Vector2(30, 10) interaction_display.size = Vector2(60, 20) interaction_display.show_percentage = false var tween = timer.get_tree().create_tween() tween.tween_property(interaction_display, "value", 100, 3) timer.get_parent().add_sibling(interaction_display) func _on_interaction_finished(timer: Timer) -> void: timer.timeout.disconnect(_on_interaction_finished) if has_resource(): interaction_display.queue_free() get_resource().gained_resource.emit(get_resource())