Делаю выбор тайлов для игрушки с палитрой (мобильное приложение, пока тестирую headless через lua main.lua и скриптовый список решений, до touch UI). Два момента выглядят неправильно, и я не пойму, это один баг или два.
- Отклонение с
want = "amber"(третий в палитре) даёт мне следующимx=2 color=green. Обычные отклонения работают нормально. - Дамп history в конце печатает один и тот же цвет и x для каждой записи, от последнего предложения (
x=3 color=green, раз за разом). Сетка при этом получается правильной.
Вывод resume показывает, что решения приходят правильно, так что вряд ли это off-by-one в resume (см. документацию coroutine.resume). History читает сетку с опозданием?
Корутина:
function Proposer.new(palette, start_x)
local proposal = { x = start_x, color = nil }
return coroutine.create(function()
local x = start_x
while true do
local c = palette:next()
proposal.x, proposal.color = x, c
local decision = coroutine.yield(proposal)
if decision.accept then
x = x + 1
elseif decision.want then
palette:seek(decision.want)
end
end
end)
end
И часть Session:step, которая записывает history:
table.insert(self.history, { tile = self.pending, decision = decision })
if decision.accept then
self.grid[self.pending.x] = self.pending.color.name
end
Где теряется янтарный?
