alestane

Asynchronous handling

Feb 9th, 2012
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 0.92 KB | None | 0 0
  1. local function monsterTurn(self, completion)
  2.     transition.to(self, {time=1000, onComplete=completion}) -- whatever actual things take care of the action here
  3. end
  4.  
  5. local function newMonster()
  6.     return {TakeTurn = monsterTurn}
  7. end
  8.  
  9. local allMonsters = {}
  10.  
  11. for i=1,3 do
  12.     allMonsters[i] = newMonster()
  13. end
  14.  
  15. local function dmTurn(event)
  16.     if event.choice ~= "dm" then return end
  17.     local monstersThisTurn = {}
  18.     for -, monster in ipairs(allMonsters) do
  19.         monstersThisTurn[i], monstersThisTurn[monster] = monster, i
  20.     end
  21.     local function finishMonsterTurn(monster)
  22.         local i = monstersThisTurn[monster]
  23.         monstersThisTurn[monster] = nil
  24.         table.remove(monstersThisTurn, i)
  25.         if monstersThisTurn[1] then
  26.             monstersThisTurn[1]:TakeTurn(finishMonsterTurn)
  27.         else
  28.             Runtime:dispatchEvent{name='Turn'; choice='Player'}
  29.         end
  30.     end
  31.     monstersThisTurn[1]:TakeTurn(finishMonsterTurn)
  32. end
  33.  
  34. Runtime:addEventListener('Turn', dmTurn)
Advertisement
Add Comment
Please, Sign In to add comment