Advertisement
Guest User

2dapi

a guest
Mar 19th, 2023
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.07 KB | None | 0 0
  1. -- api used for 2d pathfinding
  2.  
  3.  
  4. -- defining variables of coordinates and direction
  5. -- Initialize parameters for the location and direction
  6. x_live_coord = 1
  7. y_live_coord = 1
  8. live_facing_direction = 0
  9.  
  10.  
  11. -- Basic moveset functions turning and forward
  12.  
  13. function rec_turn_right()
  14.     -- action
  15.     turtle.turnRight()
  16.  
  17.     -- recording
  18.     live_facing_direction = live_facing_direction + 1
  19.     if (live_facing_direction == 4) then
  20.         live_facing_direction = 0
  21.     end
  22. end
  23.  
  24. function rec_turn_left()
  25.     -- action
  26.     turtle.turnLeft()
  27.  
  28.     -- recording
  29.     live_facing_direction = live_facing_direction - 1
  30.     if (live_facing_direction == -1) then
  31.         live_facing_direction = 3
  32.     end
  33.  
  34. end
  35.  
  36. function rec_forward_firm()
  37.     -- action
  38.     repeat
  39.         turtle.dig()
  40.     until turtle.forward()
  41.  
  42.     --recording
  43.     if (live_facing_direction == 0) then
  44.         y_live_coord = y_live_coord + 1
  45.     elseif (live_facing_direction == 1) then
  46.         x_live_coord = x_live_coord + 1
  47.     elseif (live_facing_direction == 2) then
  48.         y_live_coord = y_live_coord - 1
  49.     elseif (live_facing_direction == 3) then
  50.         x_live_coord = x_live_coord - 1
  51.     end
  52.     print(x_live_coord, y_live_coord)
  53.     refuel_with("minecraft:coal")
  54.  
  55. end
  56.  
  57.  
  58. function up_firm()
  59.     repeat
  60.         turtle.digUp()
  61.     until turtle.up()
  62. end
  63.  
  64. function down_firm()
  65.     repeat
  66.         turtle.digDown()
  67.     until turtle.down()
  68. end
  69.  
  70. function turtle_face_turn(face)
  71.     if (face - live_facing_direction == 1 or face - live_facing_direction == -3) then
  72.         rec_turn_right()
  73.     elseif(face - live_facing_direction == -1 or face - live_facing_direction == 3) then
  74.         rec_turn_left()
  75.     else
  76.         rec_turn_left()
  77.         rec_turn_left()
  78.     end
  79. end
  80.  
  81.  
  82. -- the GOTO function, give one coordinate and move to the function
  83. -- first align the facing direction to 0
  84. -- get to the coordinate and return facing direction to 0
  85. function turtle_goto(a,b)
  86.     -- calculation
  87.     delta_x = a - x_live_coord
  88.     delta_y = b - y_live_coord
  89.  
  90.     -- action section below
  91.     -- facing the correct direction for x movement
  92.     if (delta_x > 0) then
  93.         turtle_face_turn(1)
  94.     elseif (delta_x < 0) then
  95.         turtle_face_turn(3)
  96.         delta_x = - delta_x
  97.     end
  98.  
  99.  
  100.     -- x movement
  101.     for x_movement = 0,delta_x - 1,1
  102.     do
  103.         rec_forward_firm()
  104.     end
  105.  
  106.  
  107.     -- facing the correct direction for y movement
  108.     if (delta_y > 0) then
  109.         turtle_face_turn(0)
  110.     elseif (delta_y < 0) then
  111.         turtle_face_turn(2)
  112.         delta_y = - delta_y
  113.     end
  114.     -- y movement
  115.     for y_movement = 0,delta_y - 1,1
  116.     do
  117.         rec_forward_firm()
  118.     end
  119.  
  120.  
  121.     -- returning to the 0 facing direction
  122.  
  123. end
  124.  
  125. -- the pathfinding function, will try to visit all points in an array
  126.  
  127. -- some utilities
  128.  
  129. function pathfind_and_action()
  130.     for loop_num=1, array_length, 1
  131.     do
  132.         print("NEXT!!")
  133.         near_init_term_num = 1
  134.         while visited[near_init_term_num] == 1 do
  135.             near_init_term_num = near_init_term_num + 1
  136.         end
  137.        
  138.         nearest_x = x_destinations[near_init_term_num]
  139.         nearest_y = y_destinations[near_init_term_num]
  140.         min_distance = math.abs(nearest_x - x_live_coord) +  math.abs(nearest_y - y_live_coord)
  141.        
  142.         last_item_num = near_init_term_num
  143.         for item_num = 1, array_length, 1
  144.         do
  145.             if visited[item_num] == 0 then
  146.                 if (math.abs(x_destinations[item_num] - x_live_coord) +  math.abs(y_destinations[item_num] - y_live_coord)) < min_distance then
  147.                     nearest_x = x_destinations[item_num]
  148.                     nearest_y = y_destinations[item_num]
  149.                     min_distance = math.abs(nearest_x - x_live_coord) +  math.abs(nearest_y - y_live_coord)
  150.                     last_item_num = item_num
  151.                 end            
  152.             end
  153.         end
  154.         visited[last_item_num] = 1
  155.         print("going to ", nearest_x, nearest_y)
  156.         turtle_goto(nearest_x,nearest_y)
  157.  
  158.         turtle_action()
  159.     end
  160.  
  161. end
  162.  
  163.  
  164.  
  165. -- action loop section
  166.  
  167. function place_item(item_name)
  168.     item_tot = 0
  169.     for cell_num = 1,16 do
  170.         turtle.select(cell_num)
  171.         if turtle.getItemDetail() then
  172.             item_detail = turtle.getItemDetail()
  173.             if (item_detail.name == item_name) then
  174.                 turtle.placeDown()
  175.                 item_tot = item_tot + item_detail.count
  176.             end
  177.         end
  178.     end
  179.     print("item_left: %d", item_tot)
  180. end
  181.  
  182. function refuel_with(item_name)
  183.     for cell_num = 1,16 do
  184.         turtle.select(cell_num)
  185.         if turtle.getItemDetail() then
  186.             item_detail = turtle.getItemDetail()
  187.             if (item_detail.name == item_name) then
  188.                 turtle.refuel(1)
  189.             end
  190.         end
  191.     end
  192. end
  193.  
  194.  
  195.  
  196. -- example code of coordinates given
  197.  
  198.  
  199. x_destinations = {}
  200. y_destinations = {}
  201. visited = {}
  202. array_length = 0
  203.  
  204. function turtle_action()
  205.     print('nothing')
  206.     success, data = turtle.inspectDown()
  207.     if success then
  208.         if (data.state.age == 7) then
  209.             turtle.digDown()
  210.             place_item("minecraft:potato")
  211.         end
  212.     end
  213. end
  214.  
  215.  
  216. function plane_execution(x_destinations_input, y_destinations_input, turtle_action_input)
  217.     x_destinations = x_destinations_input
  218.     y_destinations = y_destinations_input
  219.     turtle_action = turtle_action_input
  220.     for x_i in x_destinations_input do
  221.         visited[#visited + 1] = 0
  222.     end
  223.     array_length = #visited
  224.     turtle_action = turtle_action_input
  225.     pathfind_and_action()
  226. end
  227.  
  228. function squarefill(a,b,s)
  229.     array_length = a*b
  230.     current_length=1
  231.     for xfill=1,a,s
  232.     do
  233.         for yfill=1,b,s
  234.         do
  235.             x_destinations[current_length]=xfill
  236.             y_destinations[current_length]=yfill
  237.             visited[current_length]=0
  238.             current_length=current_length + 1
  239.         end
  240.     end
  241. end
  242.  
  243.  
  244. --squarefill(3,5,1)
  245. --pathfind_and_action()
  246. turtle_goto(1,6)
  247. turtle_face_turn(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement