# sw unmin

May 11th, 2021
576
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. lim =3
2.  M = math
3. si = M.sin
4. co = M.cos
5. pi = M.pi
6.
7. S = screen
8. C = S.setColor
9. dL = S.drawLine
10. dC = S.drawCircle
11. dRF = S.drawRectF
12. dTF = S.drawTriangleF
13. dTx = S.drawText
14. dTxB = S.drawTextBox
15.
16. MS = map.mapToScreen
17. SM = map.screenToMap
18. I = input
19. O = output
20.
21. tU = table.unpack
22. F = string.format
23.
24. zoom = 1
25. tz = 5 * 32 * 0.11
26. zooms = {0.3, 2, 5, 10, 30, 50}
27. grids = {10, 100, 500, 1000, 2500, 5000}
28. grid = 100
29. sis = {5, 4, 3, 2, 1, 1}
30. SZ = 4
31. wp = {}
32. sel = 0
33.
34. function dPoi(xx, yy, s, r, ...)
35.     local a, x, y = ..., 0, 0
36.     a = (a or 30) * pi / 360
37.     x = xx + s / 2 * si(r)
38.     y = yy - s / 2 * co(r)
39.     xx = xx - s / 4 * si(r)
40.     yy = yy + s / 4 * co(r)
41.     dTF(xx, yy, x, y, x - s * si(r + a), y + s * co(r + a))
42.     dTF(xx, yy, x, y, x - s * si(r - a), y + s * co(r - a))
43. end
44. function clamp(a, b, c)
45.     return M.min(M.max(a, b), c)
46. end
47. function getN(...)
48.     local a = {}
49.     for b, c in ipairs({...}) do
50.         a[b] = I.getNumber(c)
51.     end
52.     return tU(a)
53. end
54. function outN(o, ...)
55.     for i, v in ipairs({...}) do
56.         O.setNumber(o + i - 1, v)
57.     end
58. end
59.
60. function onTick()
61.     touch = I.getBool(1)
62.     W, H, tx, ty, gx, gy, gz, dir, swp = getN(1, 2, 3, 4, 11, 12, 13, 14, 15)
63.     if gx == nil then
64.         return true
65.     end
66.     if wx == nil then
67.         if gx == 0 then
68.             return true
69.         end
70.         wx, wy, Fx, Fy, Fz = gx, gy, gx, gy, zoom
71.     end
72.     if swp > 0 and swp <= #wp then
73.         sel = swp
74.     end
75.
76.     if touch and not t then
77.         if tx < 10 then
78.             tz = ty
79.             Fz = M.sin((tz / H) ^ 2 * pi / 2) * 50
80.             i = 1
81.             while Fz > zooms[i] do
82.                 i = i + 1
83.             end
84.             grid = grids[i]
85.             SZ = sis[i]
86.         elseif ty < 13 then
87.             ttx = M.ceil((tx - 11) / 13)
88.             if ttx > 0 and ttx <= #wp then
89.                 if sel == ttx then
90.                     table.remove(wp, sel)
91.                     sel = 0
92.                     ttx = 0
93.                 else
94.                     sel = ttx
95.                     Fx, Fy = wp[sel].x, wp[sel].y
96.                 end
97.             end
98.             if ttx == #wp + 1 then
99.                 if #wp+1<=lim then
100.                     sel = #wp + 1
101.                     wp[sel] = {x = wx, y = wy}
102.                 end
103.             end
104.         else
105.             Fx, Fy = SM(wx, wy, zoom, W, H, tx, ty)
106.         end
107.     end
108.     wx = wx + (Fx - wx) * 0.1
109.     wy = wy + (Fy - wy) * 0.1
110.     zoom = zoom + (Fz - zoom) * 0.1
111.     t = touch
112.
113.     outN(1, gx, gy, wx, wy, gx, gy, gz, sel, #wp)
114.     if sel > 0 then
115.         outN(1, wp[sel].x, wp[sel].y)
116.     end
117. end
118.
119. function onDraw()
120.     if wx == nil then
121.         return true
122.     end
123.     w = S.getWidth()
124.     h = S.getHeight()
125.     cx = w / 2
126.     cy = h / 2
127.     sz = SZ / H * h
128.     if w == W then
129.         mx, my, zo = wx, wy, zoom
130.     else
131.         mx, my, zo = gx, gy, 1
132.     end
133.
134.     S.setMapColorOcean(10, 10, 15)
135.     S.setMapColorShallows(15, 15, 20)
136.     S.setMapColorLand(60, 60, 60)
137.     S.setMapColorGrass(40, 60, 40)
138.     S.setMapColorSand(55, 55, 50)
139.     S.setMapColorSnow(80, 80, 80)
140.     S.drawMap(mx, my, zo)
141.     x1, y1 = SM(mx, my, zo, w, h, 0, h)
142.     x2, y2 = SM(mx, my, zo, w, h, w, 0)
143.     x1 = M.floor(x1 / grid) * grid
144.     y1 = M.floor(y1 / grid) * grid
145.
146.     C(0, 0, 0, 20)
147.     for xx = x1, x2, grid do
148.         x, y = MS(mx, my, zo, w, h, xx, y1)
149.         dL(x, 0, x, h)
150.     end
151.     for yy = y1, y2, grid do
152.         x, y = MS(mx, my, zo, w, h, x1, yy)
153.         dL(0, y, w, y)
154.     end
155.
156.     if w == W then
157.         dRF(8, 0, 2, h)
158.         C(0, 0, 0, 200)
159.         dRF(0, 0, 8, h)
160.         dRF(58, h - 19, 45, 16)
161.         dRF(11, h - 19, 45, 16)
162.         dTxB(105, h - 19, w - 110, 15, F("grid:%.0f  scale:%.1f", grid, zo), -1, 1)
163.
164.         C(255, 150, 0)
165.         dL(1, tz, 7, tz)
166.         dTxB(105, h - 20, w - 110, 15, F("grid:%.0f  scale:%.1f", grid, zo), -1, 1)
167.         dTxB(60, h - 20, 45, 15, F("x:%.0f\ny:%.0f", mx, my), -1, 1)
168.     end
169.
170.     vx, vy = MS(mx, my, zo, w, h, gx, gy)
171.     r = dir * pi * -2
172.
173.     if vx < 10 or vx > w or vy < 0 or vy > h then
174.         C(200, 0, 0)
175.         vx = clamp(vx, 12, w - 3)
176.         vy = clamp(vy, 5, h - 3)
177.         r = M.atan(gx - mx, gy - my)
178.         dPoi(vx, vy, 10, r, 40)
179.     else
180.         vy1 = vy - (gz / 10) / (zo + 1)
181.         if gz < 0 then
182.             C(0, 50, 200)
183.             dPoi(vx, vy1, 10, r, 50)
184.             C(0, 50, 100, 100)
185.             dL(vx, vy + 5, vx, vy1)
186.             C(0, 0, 0, 100)
187.             dPoi(vx, vy, 10, r, 50)
188.         else
189.             C(0, 0, 0, 100)
190.             dPoi(vx, vy, 10, r, 50)
191.             C(100, 0, 0, 100)
192.             dL(vx, vy - 4, vx, vy1)
193.             C(200, 0, 0)
194.             dPoi(vx, vy1, 10, r, 50)
195.         end
196.     end
197.
198.     if w == W then
199.         C(0, 0, 0, 50)
200.         dL(10, cy + 1, cx - 5, cy + 1)
201.         dL(cx + 1, 0, cx + 1, cy - 5)
202.         dL(cx + 6, cy + 1, w, cy + 1)
203.         dL(cx + 1, cy + 6, cx + 1, h)
204.         C(255, 255, 255, 50)
205.         dL(10, cy, cx - 5, cy)
206.         dL(cx, 0, cx, cy - 5)
207.         dL(cx + 6, cy, w, cy)
208.         dL(cx, cy + 6, cx, h)
209.         C(200, 0, 0)
210.         dTxB(13, h - 20, 45, 15, F("x:%.0f\ny:%.0f", gx, gy), -1, 1)
211.     end
212.     i = 1
213.     while i <= #wp do
214.         lx, ly = ox, oy
215.         ox, oy = MS(mx, my, zo, w, h, wp[i].x, wp[i].y)
216.         C(0, 100, 0, 220)
217.         if i == sel then
218.             dL(ox, oy, vx, vy)
219.         end
220.         C(0, 0, 0, 150)
221.         if i <= sel then
222.             C(0, 0, 0, 20)
223.         end
224.         dC(ox, oy + 1, sz)
225.         if i > 1 then
226.             dL(ox, oy, lx, ly)
227.         end
228.         C(0, i == sel and 150 or 0, 0, 220)
229.         dC(ox, oy, sz)
230.         if w == W then
231.             dRF(-2 + i * 13, 2, 10, 10)
232.             C(255, 255, 255)
233.             dTx((i > 9 and -2 or 1) + i * 13, 4, i)
234.         end
235.         i = i + 1
236.     end
237.     if w == W then
238.         C(0, 0, 0, 200)
239.         dRF(-2 + i * 13, 2, 10, 10)
240.         C(255, 255, 255)
241.         dL(i * 13 - 1, 6, 6 + i * 13, 6)
242.         dL(2 + i * 13, 3, 2 + i * 13, 10)
243.     end
244. end
245.
RAW Paste Data