Advertisement
PHOBOSS

Swarm7_backup2.lua

Apr 5th, 2022
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 modem = component.modem
  7. local Tn = component.navigation
  8. local Tr = component.radar
  9. local QueensChannel = 2412
  10. local SoldiersChannel = 2413
  11.  
  12. --custom libraries
  13. local s_utils = require("swarm_utilities")
  14. local q_firmware = require("queen_firmware")
  15.  
  16. modem.open(QueensChannel)
  17.  
  18. q_firmware.broadcastFirmWare(QueensChannel)
  19.  
  20. modem.open(SoldiersChannel)
  21. modem.broadcast(SoldiersChannel,"Sr= component.proxy(component.list('radar')())")
  22. modem.broadcast(SoldiersChannel,"Sn= component.proxy(component.list('navigation')())")
  23. modem.broadcast(SoldiersChannel,"Sd= component.proxy(component.list('drone')())")
  24. modem.broadcast(SoldiersChannel,"function sleep(timeout) checkArg(1, timeout, 'number', 'nil') local deadline = computer.uptime() + (timeout or 0) repeat computer.pullSignal(deadline - computer.uptime()) until computer.uptime() >= deadline end")
  25.  
  26.  
  27. local pool={}
  28.  
  29. flightformation={}
  30. ffbook={flightformation}
  31. ffbook[2]={}
  32. ffbook[3]={}
  33. form1 = {{3,2,-2},{-3,2,-2},{0,2,3}}
  34. form2 = {{-2,2,2},{2,2,2}}
  35. form3 = {{-2,2,-2},{2,2,-2}}
  36. fbook={form1,form2,form3}
  37. dynamic_fbook = fbook
  38.  
  39. function killEvent(e)
  40. if e then
  41. event.cancel(e)
  42. end
  43. end
  44.  
  45. msg_reaction = {
  46. ["pkme"] = function(l_add,r_add,port,dist,...) add2Pool(r_add) end,
  47. ["actv"] = function(l_add,r_add,port,dist,...) setAsActive(r_add) end
  48. }
  49.  
  50. function msg_handler(evt,l_add,r_add,port,dist,msg,...)
  51. if msg_reaction[msg] then
  52. msg_reaction[msg](l_add,r_add,port,dist,...)
  53. end
  54. end
  55.  
  56. local reaction
  57. function openFlighFormComms()
  58. killEvent(reaction)
  59. reaction = event.listen("modem_message",msg_handler)
  60. end
  61. function closeFlighFormComms() --**********************--
  62. killEvent(reaction)
  63. end
  64.  
  65. function populatePool() --**********************--
  66. --killEvent(reaction)
  67. --reaction = event.listen("modem_message",msg_handler)
  68. openFlighFormComms()
  69. for i = 0,3 do modem.broadcast(QueensChannel,"inv") end
  70. os.sleep(1)
  71. end
  72.  
  73. function refreshPool()
  74. --print("refreshing..")
  75. --killEvent(reaction)
  76. --reaction = event.listen("modem_message",msg_handler)
  77. openFlighFormComms()
  78. for addr,v in pairs(pool) do
  79. pool[addr][1] = false
  80. modem.send(addr,QueensChannel,"stop")
  81. os.sleep(0.5)
  82. modem.send(addr,QueensChannel,"uok")
  83. end
  84. end
  85.  
  86. function add2Pool(addr)
  87. if pool[addr] then return end
  88. pool[addr]={true,true}
  89. end
  90.  
  91. function setAsActive(addr)
  92. if pool[addr][1] then return end --if isActive or nil {return}
  93. pool[addr][1]=true
  94. end
  95.  
  96. function add2FF(ff,f,addr)
  97. if not next(f) then return end
  98. if ff[addr] then return end
  99. ff[addr] = table.remove(f)
  100. modem.send(addr,QueensChannel,"commit")
  101. pool[addr][2]=false
  102. end
  103.  
  104. function populateFF(ff,f)
  105. for addr,v in pairs(pool) do
  106. if v[1] and v[2] then add2FF(ff,f,addr) end
  107. if not next(f) then return end
  108. end
  109. end
  110.  
  111. function pruneFF(ff,f)
  112. for addr,v in pairs(ff) do
  113. if pool[addr] then
  114. if not pool[addr][1] then
  115. table.insert(f,1,ff[addr])
  116. ff[addr] = nil
  117. modem.send(addr,QueensChannel,"uncommit")
  118. pool[addr][2]=true
  119. end
  120. end
  121. end
  122. end
  123.  
  124. function refreshFF(ff,f) --**********************--
  125. print("refreshingFF..")
  126. refreshPool()
  127. os.sleep(1)
  128. pruneFF(ff,f)
  129. populateFF(ff,f)
  130. end
  131.  
  132. function formFF(ff,f) --**********************--
  133. populateFF(ff,f)
  134. refreshFF(ff,f)
  135. end
  136. function formUP(e_name,ff,f) --**********************--
  137. for addr,pos in pairs(ff) do
  138. modem.send(addr,QueensChannel,"formup",e_name,pos[1],pos[2],pos[3])
  139. end
  140. end
  141.  
  142. function breakFormation(ff,f) --**********************--
  143. for addr,pos in pairs(ff) do
  144. table.insert(f,1,ff[addr])
  145. ff[addr]=nil
  146. modem.send(addr,QueensChannel,"uncommit")
  147. pool[addr][2]=true
  148. end
  149. refreshPool()
  150. end
  151. print("Bingus28")
  152.  
  153.  
  154. local gpsChannel = 2
  155. local trgChannel = 2472
  156.  
  157.  
  158. function gpsBroadcast(gps_port)
  159. while true do
  160. modem.broadcast(gps_port,"gps",0,0,0)
  161. --print("broadcasting..")
  162. os.sleep()
  163. end
  164. end
  165.  
  166. local gpsThread
  167. local sat_mode = false
  168. function toggleGPSBroadCast(channel) --**********************--
  169. sat_mode = not sat_mode
  170. print("sat_mode: "..tostring(sat_mode))
  171. if sat_mode then
  172. print("creating GPS Thread..")
  173. gpsThread = thread.create(function(port) gpsBroadcast(port) end,channel)
  174. else
  175. gpsThread:kill()
  176. end
  177. end
  178.  
  179. function getPlayerCoord(e_name)
  180. checkArg(1,e_name,'string','nil')
  181. for k,v in ipairs(Tr.getPlayers()) do
  182. if v.name == e_name then
  183. return {v.x,v.y,v.z},v.distance
  184. end
  185. end
  186. return {0,0,0},0
  187. end
  188.  
  189. function trgBroadcast(e_name)
  190. while true do
  191. local player_co = getPlayerCoord(e_name)
  192. player_co = s_utils.vec_trunc(player_co)
  193. modem.broadcast(trgChannel,"trg",player_co[1],player_co[2],player_co[3])
  194. --print("broadcasting target..")
  195. os.sleep()
  196. end
  197. end
  198. local trgThread
  199. local send_trg = false
  200. function toggleTargetBroadCast(target) --**********************--
  201. send_trg = not send_trg
  202. print("send_trg: "..tostring(send_trg))
  203. if send_trg then
  204. print("creating GPS Thread..")
  205. trgThread = thread.create(function(t) trgBroadcast(t) end,target)
  206. else
  207. trgThread:kill()
  208. end
  209. end
  210.  
  211. while true do
  212. local cmd=io.read()
  213. if not cmd then return end
  214.  
  215. if(cmd == "G") then
  216. modem.broadcast(QueensChannel,"stop")
  217. modem.broadcast(QueensChannel,"go","ph0")
  218. os.sleep(0.5)
  219. elseif(cmd == "B") then
  220. modem.broadcast(QueensChannel,"stop")
  221. modem.broadcast(QueensChannel,"bzz","ph0")
  222. os.sleep(0.5)
  223. elseif(cmd == "M") then
  224. modem.broadcast(QueensChannel,"stop")
  225. modem.broadcast(QueensChannel,"move","",0,3,0)
  226. os.sleep(0.5)
  227. elseif(cmd == "P") then --refreshFormation
  228. populatePool()
  229. os.sleep(0.5)
  230. elseif(cmd == "T") then
  231. formFF(ffbook[1],dynamic_fbook[1])
  232. formUP("ph0",ffbook[1],dynamic_fbook[1])
  233. os.sleep(0.5)
  234. elseif(cmd == "Q") then
  235. formFF(ffbook[2],dynamic_fbook[2])
  236. formFF(ffbook[3],dynamic_fbook[3])
  237. formUP("ph0",ffbook[2],dynamic_fbook[2])
  238. formUP("ph0",ffbook[3],dynamic_fbook[3])
  239. os.sleep(0.5)
  240. elseif(cmd == "E") then
  241. for i = 1,#ffbook do
  242. breakFormation(ffbook[i],dynamic_fbook[i])
  243. end
  244. killEvent(reaction)
  245. os.sleep(0.5)
  246. elseif(cmd == "R") then --refreshFormation
  247. for i = 1,#ffbook do
  248. refreshFF(ffbook[i],dynamic_fbook[i])
  249. end
  250. os.sleep(0.5)
  251. elseif(cmd == "PRINT") then --printGroup
  252. for k,v in pairs(pool) do
  253. print(k.." :: "..tostring(v[1]).." "..tostring(v[2]))
  254. end
  255. print(tostring(groupSize))
  256. for i = 1,#ffbook do
  257. print("ffbook["..i.."]:")
  258. for k,v in pairs(ffbook[i]) do
  259. print(k.." :: "..tostring(v[1]).." "..tostring(v[2]).." "..tostring(v[3]))
  260. end
  261. end
  262. os.sleep(0.5)
  263. elseif(cmd == "GPS") then
  264. toggleGPSBroadCast(gpsChannel)
  265. os.sleep(0.5)
  266. elseif(cmd == "TRG") then
  267. toggleTargetBroadCast("ph0")
  268. os.sleep(0.5)
  269. elseif(cmd == "S") then
  270. modem.broadcast(QueensChannel,"stop")
  271. event.ignore("modem_message",msg_handler)
  272. os.sleep(0.5)
  273. elseif(cmd == "EXIT") then
  274. closeFlighFormComms()
  275. os.exit()
  276. else
  277. modem.broadcast(QueensChannel,cmd)
  278. end
  279. end
  280.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement