Advertisement
klindley

Builder

Jan 19th, 2017
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. local API = {}
  2. local world = require("component").debug.getWorld()
  3.  
  4. function swap(first, second)
  5. return second, first
  6. end
  7.  
  8. function setline(x0, y0, z0, x1, y1, z1, block_id, block_meta)
  9. world.setBlocks(x0, y0, z0, x1, y1, z1, block_id, block_meta)
  10. end
  11.  
  12. function API.line(x0, y, z0, x1, z1, height, block_id, block_meta)
  13.  
  14. local steep = (math.abs(z1 - z0) > math.abs(x1 - x0))
  15.  
  16. if (steep) then
  17. x0, z0 = swap(x0, z0)
  18. x1, z1 = swap(x1, z1)
  19. end
  20.  
  21. if (x0 > x1) then
  22. x0, x1 = swap(x0, x1)
  23. z0, z1 = swap(z0, z1)
  24. end
  25.  
  26. local dx = x1 - x0
  27. local dz = math.abs(z1 - z0)
  28.  
  29. local error = dx / 2.0
  30.  
  31. local zstep
  32. if (z0 < z1) then zstep = 1 else zstep = -1 end
  33.  
  34. local z = z0
  35. local maxx = x1
  36.  
  37. for x=x0, maxx do
  38. if (steep) then
  39. setline(z, y, x, z, y+height-1, x, block_id, block_meta)
  40. else
  41. setline(x, y, z, x, y+height-1, z, block_id, block_meta)
  42. end
  43.  
  44. error = error - dz
  45. if (error < 0) then
  46. z = z + zstep
  47. error = error + dx
  48. end
  49. end
  50.  
  51. return -1, "Operation completed"
  52. end
  53.  
  54. function API.patternreplace(x0, y0, z0, xbound, zbound, n, block_id, block_meta)
  55. for i=0, xbound-x0, n do
  56. for j=0, zbound-z0, n do
  57. setline(x0 + i, y0, z0 + j, x0 + i, y0, z0 + j, block_id, block_meta)
  58. setline(x0 + i, y0, z0 - j, x0 + i, y0, z0 - j, block_id, block_meta)
  59. setline(x0 - i, y0, z0 + j, x0 - i, y0, z0 + j, block_id, block_meta)
  60. setline(x0 - i, y0, z0 - j, x0 - i, y0, z0 - j, block_id, block_meta)
  61. end
  62. end
  63. print("Operation Complete.")
  64. return -1, "Operation Complete."
  65. end
  66.  
  67. function API.ellipse(orig_x, orig_y, orig_z, height, width, height2, block_id, block_meta, filled)
  68. a2 = width * width
  69. b2 = height * height
  70. fa2 = 4 * a2
  71. fb2 = 4 * b2
  72.  
  73.  
  74. z = height2 - 1
  75. x = 0
  76. y = height
  77. sigma = 2 * b2+a2*(1-2*height)
  78. print(z, height)
  79.  
  80.  
  81. -- first half
  82. while b2*x <= a2*y do
  83. -- setline(orig_x + x, orig_y, orig_z + y, orig_x - x, orig_y, orig_z - y)
  84. if (filled == 1) then
  85. setline(orig_x + x, orig_y+z, orig_z - y, orig_x + x, orig_y+z, orig_z + y, block_id, block_meta)
  86. setline(orig_x - x, orig_y+z, orig_z - y, orig_x - x, orig_y+z, orig_z + y, block_id, block_meta)
  87. else
  88. setline(orig_x + x, orig_y, orig_z + y, orig_x + x, orig_y+z, orig_z + y, block_id, block_meta)
  89. setline(orig_x + x, orig_y, orig_z - y, orig_x + x, orig_y+z, orig_z - y, block_id, block_meta)
  90. setline(orig_x - x, orig_y, orig_z + y, orig_x - x, orig_y+z, orig_z + y, block_id, block_meta)
  91. setline(orig_x - x, orig_y, orig_z - y, orig_x - x, orig_y+z, orig_z - y, block_id, block_meta)
  92. end
  93.  
  94. if (sigma >= 0) then
  95. sigma = sigma + (fa2 * (1-y))
  96. y = y-1
  97. end
  98. sigma = sigma + (b2 * ((4 * x) + 6))
  99. x = x + 1
  100. end
  101.  
  102. x = width
  103. y = 0
  104. sigma = 2*a2+b2*(1-2*width)
  105.  
  106. while (a2*y <= b2*x) do
  107. if (filled == 1) then
  108. setline(orig_x + x, orig_y+z, orig_z + y, orig_x - x, orig_y+z, orig_z + y, block_id, block_meta)
  109. setline(orig_x + x, orig_y+z, orig_z - y, orig_x - x, orig_y+z, orig_z - y, block_id, block_meta)
  110. else
  111. -- setline(orig_x + x, orig_y+z, orig_z + y, orig_x - x, orig_y+z, orig_z + y)
  112. setline (orig_x + x, orig_y+z, orig_z + y, orig_x + x, orig_y, orig_z + y, block_id, block_meta)
  113. setline (orig_x + x, orig_y+z, orig_z - y, orig_x + x, orig_y, orig_z - y, block_id, block_meta)
  114. -- setline(orig_x + x, orig_y, orig_z - y, orig_x - x, orig_y, orig_z - y)
  115. setline (orig_x - x, orig_y+z, orig_z + y, orig_x - x, orig_y, orig_z + y, block_id, block_meta)
  116. setline (orig_x - x, orig_y+z, orig_z - y, orig_x - x, orig_y, orig_z - y, block_id, block_meta)
  117. end
  118.  
  119. if (sigma >= 0) then
  120. sigma = sigma + (fb2 * (1 - x))
  121. x = x - 1
  122. end
  123.  
  124. sigma = sigma + (a2 * ((4 * y) + 6))
  125.  
  126. y = y + 1
  127. end
  128. end
  129.  
  130. function API.findMarkerInRange(x0, y, z0, x1, z1, marker_id, marker_meta)
  131. local output = {}
  132. for z=z0, z1 do
  133. for x=x0, x1 do
  134. if (world.getBlockId(x, y, z) == marker_id and world.getMetadata(x, y, z) == marker_meta) then
  135. output.insert({x=x, y=y, z=z})
  136. end
  137. print (x, y, z)
  138. --.yield()
  139. end
  140. end
  141.  
  142. return output
  143. end
  144.  
  145. function API.lineFromMarkers(self, x, y, z, x1, y1, marker_id, marker_meta, height, block_id, block_meta)
  146. local mycoords = findMarkerInRange(x, y, z, x1, y1, marker_id, marker_meta)
  147. if (mycoords.getn == 2) then
  148. line(mycoords[1].x, mycoords[1].y, mycoords[1].z, mycoords[2].x, mycoords[2].y, height, block_id, block_meta)
  149. end
  150. end
  151.  
  152. function API.ellipseFromMarkers(self, x, y, z, x1, y1, center_marker_id, center_marker_meta, length_marker_id, length_marker_meta, width_marker_id, width_marker_meta, height, block_id, block_meta, filled)
  153. local center = {}
  154. local length = {}
  155. local width = {}
  156.  
  157. center = findMarkerInRange(x, y, z, x1, y1, center_marker_id, center_marker_meta)
  158. length = findMarkerInRange(x, y, z, x1, y1, length_marker_id, length_marker_meta)
  159. width = findMarkerInRange(x, y, z, x1, y1, width_marker_id, width_marker_meta)
  160.  
  161. dumpvar(center)
  162. dumpvar(length)
  163. dumpvar(width)
  164.  
  165. --ellipse(center.x, center.y, center.x, actual_length.x+actual_length.y, actual_width.x+actual_width.y, height, block_id, block_meta, filled)
  166. end
  167.  
  168. return API
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement