use rand::RngExt;
use ratatui::layout::Rect;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum GoldenVariant {
Lucky,
Frenzy,
Buff,
}
impl GoldenVariant {
pub fn random() -> Self {
let r: f64 = rand::rng().random();
if r < 0.6 {
Self::Lucky
} else if r < 0.8 {
Self::Frenzy
} else {
Self::Buff
}
}
}
#[derive(Clone)]
pub struct GoldenCuque {
pub frac_x: f32,
pub frac_y: f32,
pub life_ticks: u32,
pub variant: GoldenVariant,
}
pub const GOLDEN_LIFE_TICKS: u32 = 220; pub const GOLDEN_COOLDOWN_MIN: u32 = 400; pub const GOLDEN_COOLDOWN_MAX: u32 = 1600; const SPAWN_INSET_X: f32 = 0.08;
const SPAWN_INSET_Y: f32 = 0.10;
pub fn next_cooldown() -> u32 {
rand::rng().random_range(GOLDEN_COOLDOWN_MIN..=GOLDEN_COOLDOWN_MAX)
}
pub fn spawn_in(_biscuit: Rect) -> GoldenCuque {
let mut r = rand::rng();
let frac_x = r.random_range(SPAWN_INSET_X..=(1.0 - SPAWN_INSET_X));
let frac_y = r.random_range(SPAWN_INSET_Y..=(1.0 - SPAWN_INSET_Y));
GoldenCuque {
frac_x,
frac_y,
life_ticks: GOLDEN_LIFE_TICKS,
variant: GoldenVariant::random(),
}
}