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