Improve type coercion

This commit is contained in:
Emik 2026-02-25 16:34:29 +01:00
parent 4ce2405288
commit c451fa6d57
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
5 changed files with 24 additions and 8 deletions

View file

@ -495,7 +495,7 @@ local venerable_visage = blind {
table.insert(G.playing_cards, card) table.insert(G.playing_cards, card)
G.deck:emplace(card) G.deck:emplace(card)
play_sound("card1") play_sound "card1"
card:add_to_deck() card:add_to_deck()
end, end,
} }

View file

@ -127,7 +127,7 @@ local finalizers = {
G.hand:unhighlight_all() G.hand:unhighlight_all()
local count = (blind.name == "Cerulean Bell" and 2 or 1) - local count = (blind.name == "Cerulean Bell" and 2 or 1) -
f(G.hand.cards):map(f "ability"):count(f "forced_selection") f(G.hand.cards):map "ability":count "forced_selection"
f(copy):take(count):each(function(v) f(copy):take(count):each(function(v)
v.ability.forced_selection = true v.ability.forced_selection = true

View file

@ -213,7 +213,7 @@ joker {
---@param card Card ---@param card Card
---@param times? integer ---@param times? integer
proc = function(card, times) proc = function(card, times)
local hands = f(G.GAME.hands):where(f "visible"):keys():table() local hands = f(G.GAME.hands):where "visible":keys():table()
pseudoshuffle(hands, pseudoseed "RolandEscapey") pseudoshuffle(hands, pseudoseed "RolandEscapey")
local levels = card.ability.extra.hands * (times or 1) local levels = card.ability.extra.hands * (times or 1)
level_up("all", math.floor(levels / #hands), card) level_up("all", math.floor(levels / #hands), card)
@ -270,7 +270,7 @@ joker {
G.hand_text_area.blind_chips:juice_up() G.hand_text_area.blind_chips:juice_up()
G.hand_text_area.game_chips:juice_up() G.hand_text_area.game_chips:juice_up()
card:start_dissolve() card:start_dissolve()
play_sound("tarot1") play_sound "tarot1"
end) end)
end end
end, end,
@ -377,7 +377,7 @@ joker {
card.getting_sliced = not context.forcetrigger card.getting_sliced = not context.forcetrigger
q(function() q(function()
local scored_cards = f(G.play.cards):where(f "highlighted"):table() local scored_cards = f(G.play.cards):where "highlighted":table()
local copied = {} local copied = {}
if not next(scored_cards) then if not next(scored_cards) then

View file

@ -100,7 +100,7 @@ end
---@param step? nil ---@param step? nil
---@return F | { [K]: V } ---@return F | { [K]: V }
---@overload fun(tbl: number, fpairs?: number, step?: number): F | { [number]: number } ---@overload fun(tbl: number, fpairs?: number, step?: number): F | { [number]: number }
---@overload fun(tbl: string|K): fun(table: { [string|K]: V }): V ---@overload fun(tbl: string): (fun(table: { [string]: V }): V)
---@overload fun(tbl: false): fun(): false ---@overload fun(tbl: false): fun(): false
---@overload fun(tbl: true): fun(): true ---@overload fun(tbl: true): fun(): true
---@overload fun(tbl: nil): F ---@overload fun(tbl: nil): F
@ -193,7 +193,10 @@ end
---@param func F|fun(v: V, k: K): U ---@param func F|fun(v: V, k: K): U
---@return F|{ [K]: U } ---@return F|{ [K]: U }
---@nodiscard ---@nodiscard
---@overload fun(self: F|{ [K]: V }, func: string): F|{ [K]: U }
function f:map(func) function f:map(func)
func = type(func) == "string" and f.index(func) or func
return f.new(function() return f.new(function()
local k, v = self:next() local k, v = self:next()
@ -209,9 +212,11 @@ end
---@param fpairs? fun(t: table<K, V>): (fun(table: table<K, V>, index?: K): K, V) ---@param fpairs? fun(t: table<K, V>): (fun(table: table<K, V>, index?: K): K, V)
---@return F|{ [K]: U } ---@return F|{ [K]: U }
---@nodiscard ---@nodiscard
---@overload fun(self: F|{ [K]: V }, func: string): F|{ [K]: U }
function f:flatmap(func, fpairs) function f:flatmap(func, fpairs)
-- local i = 0 -- local i = 0
local vt, vk, vv, vp local vt, vk, vv, vp
func = type(func) == "string" and f.index(func) or func
return f.new(function() return f.new(function()
if vk then if vk then
@ -256,7 +261,10 @@ end
---@param func F|fun(v: V, k: K): boolean ---@param func F|fun(v: V, k: K): boolean
---@return F|{ [K]: V } ---@return F|{ [K]: V }
---@nodiscard ---@nodiscard
---@overload fun(self: F|{ [K]: V }, func: string): F|{ [K]: V }
function f:where(func) function f:where(func)
func = type(func) == "string" and f.index(func) or func
return f.new(function() return f.new(function()
local k, v local k, v
@ -393,7 +401,10 @@ end
---@param func F|fun(v: V, k: K): boolean ---@param func F|fun(v: V, k: K): boolean
---@return boolean|V ---@return boolean|V
---@nodiscard ---@nodiscard
---@overload fun(self: F|{ [K]: V }, func: string): boolean
function f:any(func) function f:any(func)
func = type(func) == "string" and f.index(func) or func
for k, v in self.next do for k, v in self.next do
if not func or func(v, k) then if not func or func(v, k) then
return v or true return v or true
@ -408,7 +419,10 @@ end
---@param func F|fun(v: V, k: K): boolean ---@param func F|fun(v: V, k: K): boolean
---@return boolean|V ---@return boolean|V
---@nodiscard ---@nodiscard
---@overload fun(self: F|{ [K]: V }, func: string): boolean
function f:all(func) function f:all(func)
func = type(func) == "string" and f.index(func) or func
for k, v in self.next do for k, v in self.next do
if not func or not func(v, k) then if not func or not func(v, k) then
return v and false return v and false
@ -423,8 +437,10 @@ end
---@param func F|fun(v: V, k: K): boolean ---@param func F|fun(v: V, k: K): boolean
---@return integer ---@return integer
---@nodiscard ---@nodiscard
---@overload fun(self: F|{ [K]: V }, func: string): integer
function f:count(func) function f:count(func)
local ret = 0 local ret = 0
func = type(func) == "string" and f.index(func) or func
for k, v in self.next do for k, v in self.next do
if not func or func(v, k) then if not func or func(v, k) then
@ -475,7 +491,7 @@ end
---@generic K, V ---@generic K, V
---@param self F|{ [K]: V } ---@param self F|{ [K]: V }
---@param func? F|fun(v: V, k: K) ---@param func? fun(v: V, k: K)
function f:each(func) function f:each(func)
for k, v in self.next do for k, v in self.next do
if func then if func then

View file

@ -23,7 +23,7 @@ SMODS.Seal {
local tag = Tag(get_next_tag_key "Roland_glass") local tag = Tag(get_next_tag_key "Roland_glass")
if tag.name == "Orbital Tag" then if tag.name == "Orbital Tag" then
local hands = f(G.GAME.hands):where(f "visible"):keys():table() local hands = f(G.GAME.hands):where "visible":keys():table()
tag.ability.orbital_hand = pseudorandom_element(hands, pseudoseed "Roland_glass") tag.ability.orbital_hand = pseudorandom_element(hands, pseudoseed "Roland_glass")
end end