ifself.STATE == self.STATES.SHOP then self:update_shop(dt) end
而在game.lua中找到Game:update_shop(dt),可以找到这样的封装函数:
1 2 3 4 5 6 7 8
if G.load_shop_jokers then --从G.shop_jokers.cards池子里获取并渲染ui G.load_shop_jokers = nil else for i = 1, G.GAME.shop.joker_max - #G.shop_jokers.cards do G.shop_jokers:emplace(create_card_for_shop(G.shop_jokers)) end end
local total_rate = joker_rate + tarot_rate + planet_rate + playing_card_rate + spectral_rate local polled_rate = pseudorandom(pseudoseed('cdt'..G.GAME.round_resets.ante)) * total_rate local check_rate = 0
for _, v inipairs({ {type='Joker', val=G.GAME.joker_rate}, {type='Tarot', val=G.GAME.tarot_rate}, {type='Planet', val=G.GAME.planet_rate}, {type=(G.GAME.used_vouchers["v_illusion"] and pseudorandom(pseudoseed('illusion')) > 0.6) and'Enhanced'or'Base', val=G.GAME.playing_card_rate}, {type='Spectral', val=G.GAME.spectral_rate}, }) do if polled_rate > check_rate and polled_rate <= check_rate + v.val then -- 命中 v.type 这一类:创建卡与UI,然后跳出 end check_rate = check_rate + v.val -- 推进累积区间 end
functionpseudoseed(key, predict_seed) if key == 'seed'thenreturnmath.random() end --伪随机种子 if predict_seed then local _pseed = pseudohash(key..(predict_seed or'')) _pseed = math.abs(tonumber(string.format("%.13f", (2.134453429141+_pseed*1.72431234)%1))) return (_pseed + (pseudohash(predict_seed) or0))/2 end
ifnot G.GAME.pseudorandom[key] then G.GAME.pseudorandom[key] = pseudohash(key..(G.GAME.pseudorandom.seed or'')) end
G.GAME.pseudorandom[key] = math.abs(tonumber(string.format("%.13f", (2.134453429141+G.GAME.pseudorandom[key]*1.72431234)%1))) return (G.GAME.pseudorandom[key] + (G.GAME.pseudorandom.hashed_seed or0))/2 end
functionpseudorandom(seed, min, max) --伪随机 iftype(seed) == 'string'then seed = pseudoseed(seed) end math.randomseed(seed) ifminandmaxthenreturnmath.random(min, max) elsereturnmath.random() end end