Advertisement
alestane

Sokoban movement (adjust player)

Jan 2nd, 2014
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local function move(map, startX, startY, dX, dY)
  2.     local targetX, targetY = startX + dX, startY + dY
  3.     if not map[targetX][targetY] then return startX, startY; end
  4.     if map[targetX][targetY].isBox then
  5.         local slideX, slideY = targetX + dX, targetY + dY
  6.         if not (map[slideX] and map[slideX][slideY] and map[slideX][slideY].isWalkable) then return startX, startY; end
  7.         local empty, box = map[slideX][slideY], map[targetX][targetY]
  8.         local sprite = tileBlox[box.id]
  9.         sprite.x, sprite.y = empty.x, empty.y
  10.         empty.id =  box.id
  11.         empty.isBox = true
  12.         empty.isWalkable = false
  13.         box.id = 0
  14.         box.isWalkable = true
  15.         box.isBox = false
  16.     end
  17.     if map[targetX][targetY].isWalkable then
  18.         local target, origin = map[targetX][targetY], map[startX][startY]
  19.         hero.x, hero.y = target.x, target.y
  20.     end
  21.     return startX, startY
  22. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement