2025-09-17 12:17:32 +02:00
|
|
|
class_name ItemSpawn extends Node2D
|
|
|
|
|
|
|
|
|
|
@export var common_items : Array[PackedScene]
|
|
|
|
|
@export var rare_items : Array[PackedScene]
|
2025-09-20 02:20:43 +02:00
|
|
|
static var unique_items : Array[PackedScene] = []
|
2025-09-17 12:17:32 +02:00
|
|
|
|
2025-09-23 12:20:33 +02:00
|
|
|
@export var rarity_bonus : float = 0
|
2025-09-17 12:17:32 +02:00
|
|
|
@export var guarantee_rare : bool = false
|
|
|
|
|
|
2025-09-23 12:20:33 +02:00
|
|
|
@export var unique_base_chance = .02
|
|
|
|
|
@export var rare_base_chance = .04
|
2025-09-17 12:17:32 +02:00
|
|
|
@export var unique_bonus_multiplier = .025
|
|
|
|
|
@export var rare_bonus_multiplier = .1
|
|
|
|
|
|
|
|
|
|
var remove_after_spawn = false
|
|
|
|
|
|
2025-09-17 12:37:09 +02:00
|
|
|
func choose_pool() -> Array[PackedScene]:
|
2025-09-17 12:17:32 +02:00
|
|
|
var unique_chance = unique_base_chance + unique_bonus_multiplier * rarity_bonus
|
2025-09-23 12:20:33 +02:00
|
|
|
var rare_chance = rare_base_chance + rare_bonus_multiplier * rarity_bonus
|
2025-09-17 12:17:32 +02:00
|
|
|
|
|
|
|
|
var random = randf()
|
2025-09-17 12:37:09 +02:00
|
|
|
if random < unique_chance && unique_items.size() > 0:
|
2025-09-17 12:17:32 +02:00
|
|
|
remove_after_spawn = true
|
|
|
|
|
return unique_items
|
|
|
|
|
elif random < unique_chance + rare_chance || guarantee_rare:
|
|
|
|
|
return rare_items
|
2025-09-17 12:37:09 +02:00
|
|
|
return common_items
|
|
|
|
|
|
2025-09-17 12:17:32 +02:00
|
|
|
func _ready():
|
|
|
|
|
var pool = choose_pool()
|
|
|
|
|
var index = randi_range(0, pool.size() - 1)
|
|
|
|
|
var packed_scene : PackedScene = pool[index]
|
2025-09-17 14:05:11 +02:00
|
|
|
if remove_after_spawn:
|
2025-09-17 23:43:52 +02:00
|
|
|
unique_items.remove_at(index)
|
2025-09-17 12:37:09 +02:00
|
|
|
var object = packed_scene.instantiate()
|
|
|
|
|
add_child.call_deferred(object)
|
2025-09-17 12:53:16 +02:00
|
|
|
object.reparent.call_deferred(get_parent())
|
2025-09-20 02:20:43 +02:00
|
|
|
|
|
|
|
|
static func refill_unique_item_pool():
|
|
|
|
|
unique_items = [
|
2025-09-23 12:20:33 +02:00
|
|
|
load("res://items/permanent_items/backslash/backslash.tscn"),
|
|
|
|
|
load("res://items/permanent_items/high_jump/high_jump.tscn"),
|
|
|
|
|
load("res://items/permanent_items/upslash/upslash.tscn"),
|
2025-09-20 12:42:20 +02:00
|
|
|
load("res://items/active_items/horizontal_dash/horizontal_dash.tscn")
|
2025-09-20 02:20:43 +02:00
|
|
|
]
|