## This config defines what to include when serializing ## It can be appled to the world as a whole or to specific entities ## This way you can define project level defaults and override them for specific cases class_name GECSSerializeConfig extends Resource ## Include all components (true) or only specific components (false) @export var include_all_components: bool = true ## Which component types to include in serialization (only used when include_all_components = false) @export var components: Array = [] ## Whether to include relationships in serialization @export var include_relationships: bool = true ## Whether to include related entities in serialization (Related entities are entities referenced by relationships from the serialized entities) @export var include_related_entities: bool = true ## Helper method to determine if a component should be included in serialization func should_include_component(component: Component) -> bool: var comp_type = component.get_script() return include_all_components or components.any(func(type): return comp_type == type) ## Merge this config with another config, with the other config taking priority func merge_with(other: GECSSerializeConfig) -> GECSSerializeConfig: if other == null: return self var merged = GECSSerializeConfig.new() merged.include_all_components = other.include_all_components merged.components = other.components.duplicate() merged.include_relationships = other.include_relationships merged.include_related_entities = other.include_related_entities return merged