PHOBOSS

Swarm7.lua

Apr 4th, 2022 (edited)
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.24 KB | None | 0 0
  1. local component = require("component")
  2. local event = require("event")
  3. local serialization= require("serialization")
  4. local computer= require("computer")
  5. local thread= require("thread")
  6. local term= require("term")
  7. local modem = component.modem
  8. --local Tn = component.navigation
  9. --local Tr = component.radar
  10. local QueensChannel = 2412
  11. local QueensResponseChannel = 2402
  12. local PawnsChannel = 2413
  13. local PawnsResponseChannel = 2403
  14.  
  15. local drone_is_queen = true
  16.  
  17. --custom libraries
  18. local s_utils = require("swarm_utilities")
  19. local q_firmware = require("queen_firmware")
  20. local flightform = require("flight_formation")
  21. local radar_targeting = require("radar_targeting")
  22. local GPS = require("GPS")
  23. local GPS_TRG = require("GPS_TRG")
  24. local p_firmware = require("pawn_firmware")
  25. local formation_generator = require("formation_generator")
  26.  
  27. modem.open(QueensResponseChannel)
  28. modem.open(PawnsResponseChannel)
  29.  
  30. flightformation={}
  31. ffbook={flightformation}
  32. ffbook[2]={}
  33. ffbook[3]={}
  34. --form1 = {{13,2,-2},{-13,2,-2},{0,2,13}} --bad y gps value
  35. --form1 = {{3,8,-2},{-3,14,-2},{0,20,3}} -- bad xz gps values
  36. --form1 = {{10,8,-10},{-10,14,0},{5,20,10}}
  37. --form1 = {{0,0,0},{5,5,0},{0,10,10},{-15,15,0},{0,20,-20}}
  38. --form1 = {{0,0,0},{2,2,0},{0,4,4},{-8,8,0},{0,10,-10},{12,12,0},{0,14,14},{-16,16,0}}--golden ratio Spiral
  39. actualSatForm = {{0,25,-3},{0,25,3},{3,22,0},{-3,22,0}}-- ComputerCraft Heresy --(Tetrahedron) -- it's actually good for xz coordinates
  40. --satff={}
  41. --compensatedSatForm = {{0,25,-2},{0,25,3},{2,22,0},{-3,22,0}}
  42. --form1 = {{0,35,-3},{0,30,3},{3,20,0},{-3,25,0}}
  43. --form1 = {{0,35,-5},{0,30,2},{5,20,0},{-2,25,0}}
  44. --form2 = {{-2,10,2},{2,15,2},{0,2,0}}
  45. --form3 = {{-2,20,-2},{2,25,-2}}
  46. --form2 = {{-10,10,10},{10,12,10},{0,5,0}}
  47. --form3 = {{-10,14,-10},{10,16,-10}}
  48. form2 = {{3,0,0},{0,3,0},{0,0,3},{3,0,3},{-3,0,-3}}
  49. form3 = {{-3,0,0},{0,-3,0},{0,0,-3},{3,3,3},{-3,-3,-3}}
  50.  
  51. --*************--
  52. --[[
  53. The radar has an inaccuracy where it recognises two blocks as zeroes in each axis.
  54. Drones positioned in coordinates with positive axis components around a target player are actually a block extra away from the origin
  55. the given formation array is thus compensated in the formUP function from the flight_formation library
  56. ]]
  57. --*************--
  58.  
  59. fbook={actualSatForm,form2,form3}
  60. dynamic_fbook = fbook
  61.  
  62.  
  63. print("Bingus30")
  64. function printSwarmStats()
  65. term.clear()
  66. print("QUEENS:")
  67. flightform.printDronePool(drone_is_queen)
  68. flightform.printFFAssignment(ffbook)
  69. end
  70.  
  71.  
  72. local gpsChannel = 2
  73. --local trgChannel = 3
  74.  
  75.  
  76. --trgPortBook = {}--{[trgport]="target"} multiple to fixed single relationship
  77. trgPortBook = {[3]="Bingus",[4]="Floppa",[5]="FloppaMi",[7]="FloppaNi"}
  78.  
  79. Pawnffbook = {}
  80. Pawnffbook[1] = {}
  81. Pawnffbook[2] = {}
  82. Pawnffbook[3] = {}
  83. Pawnffbook[4] = {}
  84. Pawnffbook[5] = {}
  85. Pawnffbook[6] = {}
  86. dynamicTriangle = {{3,2,-2},{-3,2,-2},{0,2,3}}
  87. --staticTriangle = {{3,2,-2},{-3,2,-2},{0,2,3}}
  88. --staticTriangle = formation_generator.TriangleFormation("Y:spanX",4,8,2,{x=0,y=2,z=0})
  89. staticTriangle = formation_generator.TriangleFormation("Y:spanX",8,10,2,{x=0,y=2,z=0})
  90. staticTriangle = formation_generator.rotateFormation("X",math.pi/4,staticTriangle)
  91. --staticOrbitTriangle = {{3,2,-2},{-3,2,-2},{0,2,3}}
  92. --staticOrbitSquare = {{1,1,0},{-1,1,0},{0,1,1},{0,1,-1}}
  93. staticOrbitSquare = formation_generator.hollowSquareFormation("Z",5,5,7,{x=-2,y=0,z=0})
  94. dynamicOrbitSquareMe = {{1,3,0},{-1,3,0},{0,3,1},{0,3,-1}}
  95. dynamicTriangleMe = {{3,4,-2},{-3,4,-2},{0,4,3}}
  96. --Pawnform1 = {{0,2,0}}
  97. Pawnfbook = {dynamicTriangle,staticTriangle,staticOrbitSquare,dynamicOrbitSquareMe,dynamicTriangleMe}
  98. Pawndynamic_fbook = Pawnfbook
  99.  
  100. ring = formation_generator.circleFormation("Y",10,{x=0,y=0,z=7})
  101. ring2 = formation_generator.circleFormation("Y",10,{x=0,y=0,z=7})
  102. hollow_square = formation_generator.hollowSquareFormation("Y",3,3,7,{x=-1,y=0,z=-1})
  103. triangle = formation_generator.TriangleFormation("Y:spanX",2,4,2,{x=0,y=2,z=0})
  104. rotated_hsqr = formation_generator.rotateFormation("Z",math.pi/4,hollow_square)
  105.  
  106. dynamicTriangle = formation_generator.TriangleFormation("X:spanZ",1,2,3,{x=-1,y=1,z=0})
  107. dynamicTriangle2 = formation_generator.TriangleFormation("X:spanZ",1,2,3,{x=-1,y=-1,z=0})
  108. for k,v in ipairs(dynamicTriangle2) do
  109. table.insert(dynamicTriangle,v)
  110. end
  111.  
  112. --numbering must be the same with ffbook, can't regen otherwise:
  113. PawnGeneratedFormBook = {{},{},{},ring,ring2,dynamicTriangle,hollow_square,triangle,rotated_hsqr}
  114. dynamicPawnPyramidBook = PawnGeneratedFormBook
  115.  
  116. --[[
  117. For Floppa:
  118. Pawnffbook[1] = Pawndynamic_fbook[1] = dynamicTriangle
  119. Static:
  120. Pawnffbook[2] = Pawndynamic_fbook[2] = staticTriangle
  121. Pawnffbook[3] = Pawndynamic_fbook[3] = staticOrbitSquare
  122. Follow Me:
  123. Pawnffbook[4] = PawnGeneratedFormBook[4] = ring
  124. Pawnffbook[5] = PawnGeneratedFormBook[5] = ring2
  125. Pawnffbook[6] = PawnGeneratedFormBook[6] = dynamicTriangle
  126. ]]
  127. trgPortBookME = {[11]="ph0",[12]="ph0",[13]="ph0"}
  128. StaticFormationtrgPortBook = {[8]="team1",[10]="team2"}
  129.  
  130. function printSwarmStatsPawn()
  131. term.clear()
  132. print("PAWNS:")
  133. flightform.printDronePool(false)
  134. flightform.printFFAssignment(Pawnffbook)
  135. end
  136.  
  137. while true do
  138. local cmd=io.read()
  139. if not cmd then return end
  140.  
  141. -- QUEEN Commands
  142. if(cmd == "F") then
  143. q_firmware.broadcastFirmWare(QueensChannel)
  144. os.sleep(0.5)
  145. elseif(cmd == "G") then
  146. modem.broadcast(QueensChannel,"stop")
  147. modem.broadcast(QueensChannel,"go","ph0")
  148. os.sleep(0.5)
  149. elseif(cmd == "B") then
  150. modem.broadcast(QueensChannel,"stop")
  151. modem.broadcast(QueensChannel,"bzz","ph0")
  152. os.sleep(0.5)
  153. elseif(cmd == "M") then
  154. modem.broadcast(QueensChannel,"stop")
  155. modem.broadcast(QueensChannel,"move","",0,3,0)
  156. os.sleep(0.5)
  157.  
  158.  
  159. elseif(cmd == "P") then --refreshFormation
  160. flightform.populatePool(QueensChannel,drone_is_queen)
  161. os.sleep(0.5)
  162. printSwarmStats()
  163. os.sleep(0.5)
  164.  
  165. elseif(cmd == "T") then
  166. flightform.refreshFFT(ffbook,dynamic_fbook,QueensChannel,drone_is_queen)
  167. flightform.formFF(ffbook[1],dynamic_fbook[1],QueensChannel,drone_is_queen)
  168. flightform.QformUP("ph0",ffbook[1],QueensChannel)
  169. printSwarmStats()
  170. os.sleep(0.5)
  171. elseif(cmd == "Q") then
  172. flightform.refreshFFT(ffbook,dynamic_fbook,QueensChannel,drone_is_queen)
  173. flightform.formFF(ffbook[2],dynamic_fbook[2],QueensChannel,drone_is_queen)
  174. flightform.formFF(ffbook[3],dynamic_fbook[3],QueensChannel,drone_is_queen)
  175. flightform.QformUP("ph0",ffbook[2],QueensChannel)
  176. flightform.QformUP("ph0",ffbook[3],QueensChannel)
  177. printSwarmStats()
  178. os.sleep(0.5)
  179. elseif(cmd == "E") then
  180. for i = 1,#ffbook do
  181. flightform.breakFormation(ffbook[i],dynamic_fbook[i],QueensChannel,drone_is_queen)
  182. end
  183. printSwarmStats()
  184. os.sleep(0.5)
  185. elseif(cmd == "R") then --refreshFormation
  186. flightform.refreshFFT(ffbook,dynamic_fbook,QueensChannel,drone_is_queen)
  187. printSwarmStats()
  188. os.sleep(0.5)
  189. elseif(cmd == "PRINTQ") then --printGroup
  190. printSwarmStats()
  191. os.sleep(0.5)
  192. elseif(cmd == "S") then
  193. modem.broadcast(QueensChannel,"stop")
  194. event.ignore("modem_message",msg_handler)
  195. os.sleep(0.5)
  196. elseif(cmd == "HUSH") then
  197. modem.broadcast(QueensChannel,"HUSH")
  198. os.sleep(0.5)
  199.  
  200. elseif(cmd == "GPS") then -- activate QUEEN satellite GPS broadcasting
  201. for addr,c in pairs(ffbook[1]) do
  202. print(addr,c)
  203. modem.send(addr,QueensChannel,"setgpspos",_,c[1],c[2],c[3])
  204. end
  205. modem.broadcast(QueensChannel,"startgps")
  206. os.sleep(0.5)
  207.  
  208.  
  209. --PAWN Commands
  210.  
  211.  
  212. elseif(cmd == "K") then -- terminate GPS targeting thread
  213. GPS_TRG.killGPSTRGThread(gpsChannel)
  214. os.sleep(0.5)
  215.  
  216. elseif(cmd == "A") then -- form triangle on Floppa with PAWNS
  217. local targetingChannel = 4
  218. --flightform.refreshFFT(Pawnffbook,Pawndynamic_fbook,PawnsChannel,false)-- use RPE
  219. flightform.formFF(Pawnffbook[1],Pawndynamic_fbook[1],PawnsChannel,false)
  220. flightform.PformUP(targetingChannel,Pawnffbook[1],PawnsChannel)
  221. printSwarmStatsPawn()
  222. os.sleep(0.5)
  223.  
  224. elseif(cmd == "TRG") then -- start entity (Floppa) targeting broadcast
  225. local targetingChannel = 4
  226. GPS_TRG.updateGPSTRGsPRINT(trgPortBook,gpsChannel,{[targetingChannel]=0},{[targetingChannel]="Y"},{[targetingChannel]=0})
  227. os.sleep(0.5)
  228.  
  229. elseif(cmd == "SFP") then -- Static Formation PAWNS
  230. local targetingChannel = 8
  231. --modem.broadcast(targetingChannel,"stop")
  232. --flightform.refreshFFT(Pawnffbook,Pawndynamic_fbook,PawnsChannel,false)-- use RPE
  233. flightform.formFF(Pawnffbook[2],Pawndynamic_fbook[2],PawnsChannel,false)
  234. flightform.PformUP(targetingChannel,Pawnffbook[2],PawnsChannel)
  235. --flightform.POrbit(targetingChannel,Pawnffbook[2],PawnsChannel)
  236. os.sleep(0.5)
  237.  
  238. elseif(cmd == "USFP") then -- Update Static Formation PAWNS
  239. local targetingChannel = 8
  240. modem.broadcast(targetingChannel,"color",0xBC18FB)
  241. GPS_TRG.updateStaticGPS(targetingChannel,gpsChannel,{[targetingChannel]=0},{[targetingChannel]="Y"},{[targetingChannel]=0})
  242. os.sleep(0.5)
  243.  
  244. elseif(cmd == "SRFP") then -- Static Rotating Formation PAWNS
  245. local targetingChannel = 10
  246. --modem.broadcast(targetingChannel,"stop")
  247. --flightform.refreshFFT(Pawnffbook,Pawndynamic_fbook,PawnsChannel,false)-- use RPE
  248. flightform.formFF(Pawnffbook[3],Pawndynamic_fbook[3],PawnsChannel,false)
  249. flightform.POrbit(targetingChannel,Pawnffbook[3],PawnsChannel)
  250. os.sleep(0.5)
  251.  
  252. elseif(cmd == "USRFP") then -- Update Static Rotating Formation PAWNS
  253. local targetingChannel = 10
  254. local rotationAngleInterval = math.pi/8
  255. local tiltAngle = math.pi/4
  256. modem.broadcast(targetingChannel,"color",0xF78E1E)
  257. GPS_TRG.updateStaticGPS(targetingChannel,gpsChannel,{[targetingChannel]=rotationAngleInterval},{[targetingChannel]="X"},{[targetingChannel]=tiltAngle})
  258. os.sleep(0.5)
  259.  
  260. elseif(cmd == "RM") then -- Rotating on Me
  261. local targetingChannel1 = 11
  262. local targetingChannel2 = 12
  263. local targetingChannel3 = 13
  264. --modem.broadcast(targetingChannel1,"stop")
  265. --modem.broadcast(targetingChannel2,"stop")
  266. --modem.broadcast(targetingChannel3,"stop")
  267.  
  268. --flightform.refreshFFT(Pawnffbook,dynamicPawnPyramidBook,PawnsChannel,false) -- use RPM
  269.  
  270. --[[
  271. flightform.formFF(Pawnffbook[4],Pawndynamic_fbook[4],PawnsChannel,false)
  272. flightform.POrbit(targetingChannel,Pawnffbook[4],PawnsChannel)
  273.  
  274. flightform.formFF(Pawnffbook[5],Pawndynamic_fbook[5],PawnsChannel,false)
  275. flightform.PformUP(targetingChannel,Pawnffbook[5],PawnsChannel)
  276. ]]
  277. ----flightform.formFF(Pawnffbook[4],dynamicPawnPyramidBook[2],PawnsChannel,false)
  278. flightform.formFF(Pawnffbook[4],dynamicPawnPyramidBook[4],PawnsChannel,false)
  279. flightform.formFF(Pawnffbook[5],dynamicPawnPyramidBook[5],PawnsChannel,false)
  280. flightform.formFF(Pawnffbook[6],dynamicPawnPyramidBook[6],PawnsChannel,false)
  281. --flightform.formFF(Pawnffbook[5],dynamicPawnPyramidBook[2],PawnsChannel,false)
  282. --flightform.formFF(Pawnffbook[5],dynamicPawnPyramidBook[3],PawnsChannel,false)
  283. --flightform.formFF(Pawnffbook[5],dynamicPawnPyramidBook[4],PawnsChannel,false)
  284. --flightform.PformUP(targetingChannel2,Pawnffbook[4],PawnsChannel)
  285. flightform.POrbit(targetingChannel1,Pawnffbook[4],PawnsChannel)
  286. flightform.POrbit(targetingChannel2,Pawnffbook[5],PawnsChannel)
  287. flightform.POrbit(targetingChannel3,Pawnffbook[6],PawnsChannel)
  288.  
  289.  
  290. os.sleep(0.5)
  291. elseif(cmd == "URM") then -- Update Static Formation PAWNS
  292. local targetingChannel1 = 11
  293. local targetingChannel2 = 12
  294. local targetingChannel3 = 13
  295. --modem.broadcast(targetingChannel,"color",tonumber(0xFF8800))
  296. --for addr,c in pairs(Pawnffbook[5]) do modem.send(addr,targetingChannel1,"color",0x8800FF) end
  297. --for addr,c in pairs(Pawnffbook[4]) do modem.send(addr,targetingChannel2,"color",0xFF8800) end
  298. --local rotationAngleInterval = math.pi/8 -- for squares
  299. --modem.broadcast(targetingChannel1,"color",0x8800FF)
  300. --modem.broadcast(targetingChannel2,"color",0xFF8800)
  301. modem.broadcast(targetingChannel1,"color",0xBC18FB)
  302. modem.broadcast(targetingChannel2,"color",0x28DDEF)
  303. modem.broadcast(targetingChannel3,"color",0x00FF00)
  304. local rotationAngleInterval1 = math.pi/4
  305. local tiltAngle1 = math.pi/4
  306. local rotationAngleInterval2 = -math.pi/4
  307. local tiltAngle2 = -math.pi/4
  308. --local axisTable = {[targetingChannel1] = "Z",[targetingChannel2] = "Z"}
  309. local axisTable = {[targetingChannel1] = "X",[targetingChannel2] = "X",[targetingChannel3]="Y"}
  310. local tiltAngleTable = {[targetingChannel1] = tiltAngle1,[targetingChannel2] = tiltAngle2,[targetingChannel3]=0}
  311. local rotAngIntTable = {[targetingChannel1] = rotationAngleInterval1,[targetingChannel2] = rotationAngleInterval2,[targetingChannel3]=0}
  312. GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotAngIntTable,axisTable,tiltAngleTable)
  313. --GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotationAngleInterval,"Z")
  314. --GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotationAngleInterval,"X")
  315. os.sleep(0.5)
  316. elseif(cmd == "URMREV") then -- Update Static Formation PAWNS Reverse
  317. --[[local targetingChannel = 11
  318. --modem.broadcast(targetingChannel,"color",tonumber(0x8800FF))
  319. for addr,c in pairs(Pawnffbook[5]) do modem.send(addr,targetingChannel,"color",0xFF8800) end
  320. --for addr,c in pairs(Pawnffbook[4]) do modem.send(addr,targetingChannel,"color",0x8800FF) end
  321. --local rotationAngleInterval = -math.pi/8
  322. local rotationAngleInterval = -math.pi/4 -- for circles
  323. local tiltAngle = -math.pi/4 -- for circles
  324. GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotationAngleInterval,"Z",tiltAngle)
  325. --GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotationAngleInterval,"X",tiltAngle)
  326. --GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotationAngleInterval,"Z")
  327. --GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotationAngleInterval,"X")]]
  328. local targetingChannel1 = 11
  329. local targetingChannel2 = 12
  330. local targetingChannel3 = 13
  331. modem.broadcast(targetingChannel1,"color",0xFF9945)
  332. modem.broadcast(targetingChannel2,"color",0x1CF6C5)
  333. modem.broadcast(targetingChannel3,"color",0xFFD700)
  334. local rotationAngleInterval1 = -math.pi/4
  335. local tiltAngle1 = -math.pi/4
  336. local rotationAngleInterval2 = math.pi/4
  337. local tiltAngle2 = math.pi/4
  338. --local axisTable = {[targetingChannel1] = "X",[targetingChannel2] = "X"}
  339. --local tiltAngleTable = {[targetingChannel1] = tiltAngle1,[targetingChannel2] = tiltAngle2}
  340. --local rotAngIntTable = {[targetingChannel1] = rotationAngleInterval1,[targetingChannel2] = rotationAngleInterval2}
  341. local axisTable = {[targetingChannel1] = "X",[targetingChannel2] = "X",[targetingChannel3]="X"}
  342. local tiltAngleTable = {[targetingChannel1] = tiltAngle1,[targetingChannel2] = tiltAngle2,[targetingChannel3]= math.pi/2}
  343. local rotAngIntTable = {[targetingChannel1] = rotationAngleInterval1,[targetingChannel2] = rotationAngleInterval2,[targetingChannel3]=0}
  344. GPS_TRG.updateGPSTRGsPRINT(trgPortBookME,gpsChannel,rotAngIntTable,axisTable,tiltAngleTable)
  345. os.sleep(0.5)
  346.  
  347. elseif(cmd == "GP") then -- recall PAWNS
  348. modem.broadcast(PawnsChannel,"stop")
  349. GPS_TRG.GPSRecall(trgPortBook,gpsChannel,PawnsChannel)
  350. os.sleep(0.5)
  351.  
  352. elseif(cmd == "FP") then
  353. p_firmware.broadcastFirmWare(PawnsChannel)
  354. os.sleep(0.5)
  355. elseif(cmd == "EP") then
  356. for i = 1,#Pawnffbook do
  357. flightform.breakFormation(Pawnffbook[i],Pawndynamic_fbook[i],PawnsChannel,false)
  358. end
  359. printSwarmStatsPawn()
  360. os.sleep(0.5)
  361. elseif(cmd == "RPE") then --refresh PAWN Entity Formation
  362. flightform.refreshFFT(Pawnffbook,Pawndynamic_fbook,PawnsChannel,false)
  363. printSwarmStatsPawn()
  364. os.sleep(0.5)
  365. elseif(cmd == "RPM") then --refresh PAWN ME Formation
  366. flightform.refreshFFT(Pawnffbook,dynamicPawnPyramidBook,PawnsChannel,false)
  367. printSwarmStatsPawn()
  368. os.sleep(0.5)
  369. elseif(cmd == "PRINTP") then
  370. printSwarmStatsPawn()
  371. os.sleep(0.5)
  372. elseif(cmd == "SP") then
  373. modem.broadcast(PawnsChannel,"stop")
  374. os.sleep(0.5)
  375. elseif(cmd == "HUSHP") then
  376. modem.broadcast(PawnsChannel,"HUSH")
  377. os.sleep(0.5)
  378.  
  379. elseif(cmd == "WRU") then
  380. modem.broadcast(PawnsChannel,"wru")
  381. modem.close(gpsChannel)
  382. local _,_,r_addr,_,_,msg,x,y,z = event.pull("modem_message")
  383. if msg == "here" then
  384. print("r_addr: ",r_addr,"c: ",x,y,z)
  385. end
  386. os.sleep(0.5)
  387.  
  388.  
  389. elseif(cmd == "EXIT") then
  390. flightform.closeFlighFormComms()
  391. GPS_TRG.killGPSTRGThread(gpsChannel)
  392. os.exit()
  393. else
  394. modem.broadcast(QueensChannel,cmd)
  395. end
  396. end
  397.  
Add Comment
Please, Sign In to add comment