@tool extends Control enum ComposeMode { ALL, ANY, } @export var targetFields: Array[FieldStore.Entity] = [] @export var targetTopics: Array[CategoryStore.Topic] = [] @export var composeMode: ComposeMode = ComposeMode.ALL @export var clickToRefresh: bool = false var state: Watcher = Watcher.new(false) func _ready(): state.changed.connect(rebuild) rebuild() func _process(_delta): state.setState(clickToRefresh) func rebuild(): for i in get_children(): i.queue_free() var files = DirTool.listdir("res://components/Feeds/") for file in files: var feed = load(file).instantiate() as Feed var fieldPassed: bool = true if !targetFields.is_empty(): fieldPassed = checkFieldCondition(feed) var topicPassed: bool = true if !targetTopics.is_empty(): topicPassed = checkTopicCondition(feed) if fieldPassed and topicPassed: add_child(feed) func checkFieldCondition(feed: Feed) -> bool: var passed: bool = true for targetField in targetFields: var haveThis = false for feedField in feed.fields: if feedField == targetField: haveThis = true break passed = haveThis if composeMode == ComposeMode.ALL: if not passed: break elif composeMode == ComposeMode.ANY: if passed: break return passed func checkTopicCondition(feed: Feed) -> bool: var passed: bool = false for targetTopic in targetTopics: var haveThis = feed.topic == targetTopic passed = haveThis if passed: break return passed