package data import ( "f1-game/internal/code" "f1-game/internal/extend/rand" ) var ( skillPoolWeightMap map[int32]*rand.Weight[*SkillPoolRow] ) func (p *skillPoolConfig) OnAfterLoad(_ bool) { loadMap := map[int32]*rand.Weight[*SkillPoolRow]{} for poolID, rows := range p.poolIDSkillIDUniMaps { weight := rand.NewMapWeight(rows, func(v *SkillPoolRow) int32 { return v.Weight }) loadMap[poolID] = weight } skillPoolWeightMap = loadMap } func (p *skillPoolConfig) GetWeighter(skillPoolID int32) (*rand.Weight[*SkillPoolRow], bool) { value, found := skillPoolWeightMap[skillPoolID] return value, found } func (p *skillPoolConfig) Random(skillPoolID int32) (*SkillPoolRow, int32) { weighter, ok := SkillPool.GetWeighter(skillPoolID) if !ok { return nil, code.ConfigNotFound_SkillPool } skillPoolRow := weighter.SelectOne() return skillPoolRow, code.OK }