megalith/src/world/generation/feature/generation_feature.gd

44 lines
1.2 KiB
GDScript

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