1
Fork 0
mirror of https://github.com/Steffo99/hella-farm.git synced 2024-11-29 03:24:23 +00:00

Create SpawnerChoice selecting a random subspawner to spawn things from

This commit is contained in:
Steffo 2024-04-14 21:21:43 +02:00
parent 4f18cdaa65
commit 510d14fd4c
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
2 changed files with 37 additions and 0 deletions

View file

@ -0,0 +1,34 @@
extends Node
class_name SpawnerChoice
@export var spawners: Array[Spawner] = []
@export var weights: Array[int] = []
func compute_total_weight() -> int:
var total = 0
for weight in weights:
if weight < 0:
Log.e(self, "Weight with negative value detected.")
total += weight
return total
func select_spawner() -> Spawner:
var total = compute_total_weight()
var sampled = Random.rng.randi_range(0, total - 1)
var idx = -1
while sampled >= 0:
idx += 1
sampled -= weights[idx]
return spawners[idx]
func spawn():
select_spawner().spawn()
func _ready():
if len(spawners) != len(weights):
Log.e(self, "Spawners and weights are different lengths.")
if compute_total_weight() <= 0:
Log.e(self, "Weight total is less or equal to 0.")

View file

@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://cokdfsk6rgeup"]
[node name="SpawnerChoice" type="Node"]