# boom

Jan 21st, 2015
302
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. trm=peripheral.wrap("monitor_14")
2. trm.setTextScale(0.5)
3. trm1=peripheral.wrap("monitor_15")
4. trm1.setTextScale(2)
5. cb=peripheral.wrap("command_1")
6. fire="top"
7. pay="right"
8. start="68 73 207"
9.
10. --// The elements of Basic graphical utility API (Written by: Bobby Lucero) were used
11. --// http://www.computercraft.info/forums2/index.php?/topic/20827-computercraft-graphics-library/
12.
13. function pixel(x,y)
14.     trm.setCursorPos(x,y)
15.     trm.write(" ")
16. end
17.
18. function line( startX, startY, endX, endY ) --Shamelessly borrowed from cc internal source
19.     startX = math.floor(startX+0.5)
20.     startY = math.floor(startY+0.5)
21.     endX = math.floor(endX+0.5)
22.     endY = math.floor(endY+0.5)
23.
24.     if startX == endX and startY == endY then
25.         pixel( startX, startY )
26.         return
27.     end
28.
29.     local minX = math.min( startX, endX )
30.     if minX == startX then
31.         minY = startY
32.         maxX = endX
33.         maxY = endY
34.     else
35.         minY = endY
36.         maxX = startX
37.         maxY = startY
38.     end
39.
40.     local xDiff = maxX - minX
41.     local yDiff = maxY - minY
42.
43.     if xDiff > math.abs(yDiff) then
44.         local y = minY
45.         local dy = yDiff / xDiff
46.         for x=minX,maxX do
47.             pixel( x, math.floor( y + 0.5 ) )
48.             y = y + dy
49.         end
50.     else
51.         local x = minX
52.         local dx = xDiff / yDiff
53.         if maxY >= minY then
54.             for y=minY,maxY do
55.                 pixel( math.floor( x + 0.5 ), y )
56.                 x = x + dx
57.             end
58.         else
59.             for y=minY,maxY,-1 do
60.                 pixel( math.floor( x + 0.5 ), y )
61.                 x = x - dx
62.             end
63.         end
64.     end
65. end
66.
67. function fillRect(x,y,w,h)
68.   for i = y, y+h-1 do
69.     trm.setCursorPos(x,i)
70.     trm.write(string.rep(" ",w))
71.   end
72. end
73.
74. stretch=1.4
75. function drawArc(x, y, radius, angle1, angle2)
76.     if angle1 == angle2 then return end
77.     if angle1 > angle2 then angle1,angle2=angle2,angle1 end
78.     local phi = angle1
79.     local k=1.5
80.     local x1,y1,x2,y2
83.     phi=phi+2
84.     while phi<angle2 do
87.       line(x1,y1,x2,y2)
88.       x1,y1=x2,y2
89.       phi=phi+2
90.     end
93.     line(x1,y1,x2,y2)
94. end
95.
96. function makeArea(x,y,w,h)
97.   local area={X=x,Y=y,W=w,H=h}
98.   area.onMouse=function(clx,cly)
99.     return clx>=area.X and clx<area.X+area.W and cly>=area.Y and cly<area.Y+area.H
100.   end
101.   area.show=function(level,col1,col2)
102.     trm.setBackgroundColor(col1)
103.     fillRect(area.X,area.Y,area.W,area.H)
104.     trm.setBackgroundColor(col2)
105.     local hy=math.floor(level*(area.H)+0.5)
106.     fillRect(area.X,area.Y+area.H-hy,area.W,hy)
107.   end
108.   return area
109. end
110.
111. function tostr(v)
112.   local s=tostring(v)
113.   if not s:find("%.") then s=s..".0" end
114.   return s
115. end
116.
117. function boom(ax,ay,e)
120.   local v=math.sqrt(2*e)
121.   local vy=tostr(v*math.sin(ay))
122.   local vx=tostr(-v*math.cos(ay)*math.sin(ax))
123.   local vz=tostr(v*math.cos(ay)*math.cos(ax))
124.   cb.setCommand("playsound random.explode @a ~ ~ ~")
125.   cb.runCommand()
126. --  print("vx=",vx," vy=",vy," vz=",vz)
127.   cb.setCommand("summon PrimedTnt "..start.." {Motion:["..vx..","..vy..","..vz.."], Fuse:127}")
128.   cb.runCommand()
129.   bang=bang-1
130.   trm1.setCursorPos(1,1)
131.   trm1.write(' '..bang..'  ')
132. end
133.
134. w,h=trm.getSize()
135. cx=math.floor(w/2+0.5)
136. cy=h
137. r=h-2.2
138. amax=45
139. aymax=45
140. pwmax=5
141. ax=0
142. ay=0
143. pw=2
144. bang=0
145. trm1.setCursorPos(1,1)
146. trm1.write(' '..bang..'  ')
147.
148. function arrow()
150. end
151.
152. trm.setBackgroundColor(colors.black)
153. trm.clear()
155.
156. horizont=makeArea(7,1,45,cy,colors.black)
157. trm.setBackgroundColor(colors.white)
158. drawArc(cx,cy,cy-1,-90-amax,-90+amax)
159. trm.setBackgroundColor(colors.red)
160. arrow()
161.
162. power=makeArea(1,1,6,cy,colors.yellow)
163. power.show((pw-1)/(pwmax-1),colors.yellow,colors.orange)
164.
165. vertikal=makeArea(w-5,1,6,h,colors.green)
166. vertikal.show(ay/aymax,colors.green,colors.lime)
167.
168. while true do
169.   event,but,mx,my=os.pullEvent()
170. --  print(event,' ',but,' ',mx,' ',my)
171.   if event=="mouse_click" and but==1 then
172.     clickx=mx
173.     clicky=my
174.   elseif event=="mouse_drag" and but==1 then
175.     dragx=mx-clickx
176.     dragy=my-clicky
177.     clickx=mx
178.     clicky=my
179.     if power.onMouse(mx,my) then
180.     end
181.     if horizont.onMouse(mx,my) then
182.       trm.setBackgroundColor(colors.black)
183.       arrow()
184.       ax=ax+dragx
185.       if ax>amax then ax=amax end
186.       if ax<-amax then ax=-amax end
187.       trm.setBackgroundColor(colors.red)
188.       arrow()
189.     end
190.     if vertikal.onMouse(mx,my) then
191.       ay=ay-dragy
192.       if ay>aymax then ay=aymax end
193.       if ay<0 then ay=0 end
194.       vertikal.show(ay/aymax,colors.green,colors.lime)
195.     end
196.     if power.onMouse(mx,my) then
197.       pw=pw-dragy/10
198.       if pw>pwmax then pw=pwmax end
199.       if pw<1 then pw=1 end
200.       power.show((pw-1)/(pwmax-1),colors.yellow,colors.orange)
201.     end
202.   elseif event=="monitor_touch" then
203.     if onDrag then
204.       os.queueEvent("mouse_drag",1,mx,my)
205.     else
206.       os.queueEvent("mouse_click",1,mx,my)
207.     end
208.     onDrag=true
209.     clicktimer=os.startTimer(0.5)
210.   elseif event=="timer" then
211.     if but==clicktimer then
212.       onDrag=false
213.     elseif but==boomtimer then
214.     end
215.   elseif event=="redstone" then
216.     if redstone.getInput(fire) then
217.       boom(ax,ay,pw)
218.     end
219.     if redstone.getInput(pay) then
220.       bang=bang+10
221.       trm1.setCursorPos(1,1)
222.       trm1.write(' '..bang..'  ')
223.     end
224.   end
225. end
RAW Paste Data