tile.lua 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. local basexx = require("libraries.basexx")
  2. local t = {}
  3. local sprsrecto = {1,128-(8+24+1),192,24+2, 1} --SpriteSheet Outline Rect
  4. local sprsdraw = {1,128-(8+24)} --SpriteSheet Draw Location
  5. local sprsgrid = {1,128-(8+24),192,8*3,24,3}
  6. local sprssrect = {0,128-(8+24+1),8+2,8+2,8} --SpriteSheet Select Rect
  7. local sprsidrect = {192-(36+13),128-(8+24+9),13,7,7,14}
  8. local sprsbanksY = 128 - (8+24+9)
  9. local sprsbanksgrid = {192-32,sprsbanksY+1,8*4,8,4,1}
  10. local sprsid = 1 --SpriteSheet Selected ID
  11. local sprsmflag = false
  12. local sprsbquads = {} --SpriteSheet 6 BanksQuads
  13. local sprsbank = 1 --Current Selected Bank
  14. for i = 1, 4 do
  15. sprsbquads[i] = api.SpriteMap:image():quad(1,(i*8*3-8*3)+1,_,3*8)
  16. end
  17. local mapgrid = {1,9,192,9*8,24,9}
  18. local mapmflag = false
  19. function t:export(path)
  20. local FileData = api.TileMap:export(path)
  21. if not path then
  22. return basexx.to_base64(FileData:getString())
  23. end
  24. end
  25. --[[function t:load(path)
  26. local map = api.Map
  27. if path then
  28. api.SpriteMap = api.SpriteSheet(api.Image("/"..path..".png"),24,12)
  29. else
  30. api.SpriteMap = api.SpriteSheet(api.ImageData(24*8,12*8):image(),24,12)
  31. end
  32. end]]
  33. function t:_switch()
  34. sprsmflag = false
  35. end
  36. function t:_redraw()
  37. self:redrawMap()
  38. self:redrawSPRS()
  39. end
  40. function t:redrawMap()
  41. api.rect(1,9,api.TileMap:width()*8,api.TileMap:height()*8,1)
  42. api.TileMap:draw(1,9)
  43. end
  44. function t:redrawSPRS()
  45. api.rect(unpack(sprsrecto))
  46. api.SpriteMap:image():draw(sprsdraw[1],sprsdraw[2],sprsdraw[3],sprsdraw[4],sprsdraw[5],sprsbquads[sprsbank])
  47. api.rect_line(unpack(sprssrect))
  48. api.rect(unpack(sprsidrect))
  49. api.color(sprsidrect[6])
  50. local id = sprsid if id < 10 then id = "00"..id elseif id < 100 then id = "0"..id end
  51. api.print(id,sprsidrect[1]+1,sprsidrect[2]+1)
  52. api.SpriteGroup(97,192-32,sprsbanksY,4,1,1,1,api.EditorSheet)
  53. api.EditorSheet:draw(sprsbank+72,192-(40-sprsbank*8),sprsbanksY)
  54. api.rect(sprsidrect[1]-9,sprsidrect[2]-1,8,8,1)
  55. api.SpriteMap:image():draw(sprsidrect[1]-9,sprsidrect[2]-1,0,1,1,api.SpriteMap:quad(sprsid))
  56. end
  57. function t:_mpress(x,y,b,it)
  58. local cx = api.whereInGrid(x,y,sprsbanksgrid)
  59. if cx then
  60. sprsbank = cx
  61. local idbank = api.floor((sprsid-1)/(24*3))+1
  62. if idbank > sprsbank then sprsid = sprsid-(idbank-sprsbank)*24*3 elseif sprsbank > idbank then sprsid = sprsid+(sprsbank-idbank)*24*3 end
  63. self:redrawSPRS()
  64. end
  65. local cx, cy = api.whereInGrid(x,y,mapgrid)
  66. if cx then
  67. api.TileMap:cell(cx,cy,sprsid)
  68. self:redrawMap() mapmflag = true
  69. end
  70. local cx, cy = api.whereInGrid(x,y,sprsgrid)
  71. if cx then
  72. sprsid = (cy-1)*24+cx+(sprsbank*24*3-24*3)
  73. local cx, cy = cx-1, cy-1
  74. sprssrect[1] = cx*8
  75. sprssrect[2] = 128-(8+24+1)+cy*8
  76. self:redrawSPRS() sprsmflag = true
  77. end
  78. end
  79. function t:_mmove(x,y,dx,dy,it,iw)
  80. local cx, cy = api.whereInGrid(x,y,mapgrid)
  81. if cx and mapmflag then
  82. api.TileMap:cell(cx,cy,sprsid)
  83. self:redrawMap()
  84. end
  85. if (not it and sprsmflag) or it then
  86. local cx, cy = api.whereInGrid(x,y,sprsgrid)
  87. if cx then
  88. sprsid = (cy-1)*24+cx+(sprsbank*24*3-24*3)
  89. local cx, cy = cx-1, cy-1
  90. sprssrect[1] = cx*8
  91. sprssrect[2] = 128-(8+24+1)+cy*8
  92. self:redrawSPRS()
  93. end
  94. end
  95. end
  96. function t:_mrelease(x,y,b,it)
  97. local cx, cy = api.whereInGrid(x,y,mapgrid)
  98. if cx and mapmflag then
  99. api.TileMap:cell(cx,cy,sprsid)
  100. self:redrawMap()
  101. end
  102. mapmflag = false
  103. if (not it and sprsmflag) or it then
  104. local cx, cy = api.whereInGrid(x,y,sprsgrid)
  105. if cx then
  106. sprsid = (cy-1)*24+cx+(sprsbank*24*3-24*3)
  107. local cx, cy = cx-1, cy-1
  108. sprssrect[1] = cx*8
  109. sprssrect[2] = 128-(8+24+1)+cy*8
  110. self:redrawSPRS()
  111. end
  112. end
  113. sprsmflag = false
  114. end
  115. return t