-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathpile_reserve.lua
61 lines (51 loc) · 1.31 KB
/
pile_reserve.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-- Reserve.lua
local Pile = require 'pile'
local Util = require 'util'
---@class (exact) Reserve : Pile
---@field __index Reserve
---@field new function
local Reserve = {}
Reserve.__index = Reserve
setmetatable(Reserve, {__index = Pile})
function Reserve.new(o)
o.category = 'Reserve'
o.fanType = o.fanType or 'FAN_DOWN'
o.moveType = 'MOVE_TOP_ONLY'
-- don't draw graphics if pile is redundant when all cards have left it
o.nodraw = true
o = Pile.prepare(o)
table.insert(_G.BAIZE.piles, o)
table.insert(_G.BAIZE.reserves, o)
return setmetatable(o, Reserve)
end
-- vtable functions
---@return string|nil
function Reserve:acceptTailError(tail)
return 'Cannot move a card to a Reserve'
end
-- use Pile.tailTapped
-- use Pile.collect
---@return integer
function Reserve:unsortedPairs()
-- they're all unsorted, even if they aren't
if #self.cards == 0 then
return 0
end
return #self.cards - 1
end
function Reserve:movableTails()
-- same as Cell:movableTails
local tails = {}
if #self.cards > 0 then
local card = self:peek()
if not card.prone then
local tail = {card}
local homes = Util.findHomesForTail(tail)
for _, home in ipairs(homes) do
table.insert(tails, {tail=tail, dst=home.dst})
end
end
end
return tails
end
return Reserve