package main

type PseudoRNG struct {
	State uint32
}

func NewRNG(seed int64) *PseudoRNG {
	return &PseudoRNG{State: uint32(seed)}
}

func (r *PseudoRNG) NextFloat() float64 {
	calc := (uint64(r.State)*1664525 + 1013904223) % 4294967296
	r.State = uint32(calc)
	return float64(r.State) / 4294967296.0
}

func (r *PseudoRNG) NextRange(min, max float64) float64 {
	return min + (r.NextFloat() * (max - min))
}

func (r *PseudoRNG) PickDef(defs []ObstacleDef) *ObstacleDef {
	if len(defs) == 0 {
		return nil
	}
	idx := int(r.NextRange(0, float64(len(defs))))
	return &defs[idx]
}
