52 lines
1.0 KiB
GDScript
52 lines
1.0 KiB
GDScript
extends Node
|
|
class_name ScarcityManager
|
|
|
|
# ScarcityManager - Handles weighted random, tile generation for gameplay balance
|
|
|
|
const TILES = [7, 8, 9, 10]
|
|
const SPECIAL_TILES = [11, 12, 13, 14]
|
|
|
|
# Weights (higher = more common)
|
|
# Standard tiles: Heart, Diamond, Star, Coin
|
|
const TILE_WEIGHTS = {
|
|
7: 100, # Heart
|
|
8: 100, # Diamond
|
|
9: 100, # Star
|
|
10: 100 # Coin
|
|
}
|
|
|
|
# Special tiles: Burn, Spawn, Freeze, Block, Invisible
|
|
const SPECIAL_WEIGHTS = {
|
|
11: 5,
|
|
12: 5,
|
|
13: 5,
|
|
14: 5
|
|
}
|
|
|
|
static func get_random_tile_id() -> int:
|
|
var rng = RandomNumberGenerator.new()
|
|
rng.randomize()
|
|
|
|
var total_weight = 0
|
|
var pool = {}
|
|
|
|
# Add standard tiles
|
|
for id in TILE_WEIGHTS:
|
|
pool[id] = TILE_WEIGHTS[id]
|
|
total_weight += TILE_WEIGHTS[id]
|
|
|
|
# Add special tiles
|
|
for id in SPECIAL_WEIGHTS:
|
|
pool[id] = SPECIAL_WEIGHTS[id]
|
|
total_weight += SPECIAL_WEIGHTS[id]
|
|
|
|
var roll = rng.randi_range(0, total_weight - 1)
|
|
var current = 0
|
|
|
|
for id in pool:
|
|
current += pool[id]
|
|
if roll < current:
|
|
return id
|
|
|
|
return 7 # Fallback to Heart
|