class_name GenerationFeature extends GeneratedElement ## Base class for world features generated during worldgen. ## Set of sub-layers that require generation at each LOD var sub_layers: Dictionary[WorldGen.LOD, Dictionary] = { WorldGen.LOD.LOW: {}, WorldGen.LOD.MEDIUM: {}, WorldGen.LOD.HIGH: {}, } ## Set of LODs at which this feature has been generated var generated: Dictionary[WorldGen.LOD, bool] = {} func _ready() -> void: _discover_sub_layers(self) func _discover_sub_layers(node: Node) -> void: if node is GenerationLayer: for lod in WorldGen.LOD_LIST: sub_layers[lod][node] = false for c: Node in node.get_children(): # Do not walk outside of this scene if c.owner in [owner, self]: _discover_sub_layers(c) func _generate(lod: WorldGen.LOD) -> bool: if lod not in generated: generate_feature(lod) generated[lod] = true for layer: GenerationLayer in sub_layers[lod]: if layer.generate(lod): sub_layers[lod].erase(layer) return not sub_layers[lod] ## Generate elements of this feature. Called by default on the first call to `probe` for this lod. func generate_feature(_lod: WorldGen.LOD) -> void: pass # Implemented in derived type