godot-shooter / files / items / LevelItemGenerator.gd
LevelItemGenerator.gd
212b7b25 2023-11-08 Pavel Safronov | 1 | class_name LevelItemGenerator |
| 2 | ||
16938031 2023-11-17 Pavel Safronov | 3 | const Utils = preload("res://utils/Utils.gd") |
212b7b25 2023-11-08 Pavel Safronov | 4 | var generated_count: int = 0 |
| 5 | var simultaneous_count: int = 1 | |
| 6 | ||
| 7 | var item_count: int | |
| 8 | var creator_name: String | |
| 9 | var instance_object: Object | |
| 10 | var group_name: String | |
| 11 | ||
| 12 | func _init(count, creator, instance, group, sim_count = 1) -> void: | |
| 13 | item_count = count | |
| 14 | creator_name = creator | |
| 15 | group_name = group | |
| 16 | instance_object = instance | |
| 17 | simultaneous_count = sim_count | |
| 18 | ||
7929daa8 2023-11-30 Pavel Safronov | 19 | # runs the generator, returns is_done, a boolean |
212b7b25 2023-11-08 Pavel Safronov | 20 | func run(node: Node) -> bool: |
| 21 | var items = node.get_tree().get_nodes_in_group(group_name) | |
| 22 | var generated_enough = generated_count == item_count | |
| 23 | var finished = generated_enough && items.size() == 0 | |
| 24 | if finished: | |
| 25 | return true | |
| 26 | if generated_enough: | |
7929daa8 2023-11-30 Pavel Safronov | 27 | return true |
212b7b25 2023-11-08 Pavel Safronov | 28 | var should_add = items.size() < simultaneous_count |
| 29 | if should_add: | |
| 30 | var item: Node = funcref(instance_object, creator_name).call_func() | |
| 31 | item.add_to_group(group_name) | |
| 32 | node.add_child(item) | |
| 33 | generated_count += 1 | |
7929daa8 2023-11-30 Pavel Safronov | 34 | var is_done = not should_add |
| 35 | return is_done |