Files
rthythm_archor_game/resources/time_anchor_frequency_profile.gd
T
2026-07-06 22:59:47 -07:00

35 lines
1.1 KiB
GDScript

class_name TimeAnchorFrequencyProfile
extends Resource
@export var streak_thresholds: Array[int] = [0, 8, 16]
@export var anchors_per_window: Array[int] = [1, 2, 4]
@export var window_beats := 4
func interval_for_streak(streak: int) -> int:
var anchors := anchors_per_window_for_streak(streak)
return maxi(1, int(ceil(float(window_beats) / float(maxi(1, anchors)))))
func anchors_per_window_for_streak(streak: int) -> int:
var count := 1
for index: int in range(streak_thresholds.size()):
if index >= anchors_per_window.size():
break
if streak >= streak_thresholds[index]:
count = clampi(anchors_per_window[index], 1, maxi(1, window_beats))
return count
func anchor_offsets_for_streak(streak: int) -> Array[int]:
var safe_window := maxi(1, window_beats)
var count := anchors_per_window_for_streak(streak)
if count <= 1:
return [safe_window]
if count == 2:
return [maxi(1, int(ceil(float(safe_window) * 0.5))), safe_window]
var offsets: Array[int] = []
for beat_offset: int in range(1, safe_window + 1):
offsets.append(beat_offset)
return offsets