• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Apr 23rd, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. local points = {}
2. local trails = {}
3.
4. local N = 100
5. local w,h = love.graphics.getDimensions()
6. print(w,h)
7.
8. local function color(x,y)
9.     local th = (x+y)/20
10.     return {(math.cos(th)+1)/2, (math.sin(th)+1)/2, (math.cos(th+math.pi/2+1))/2}
11. end
12.
13. local point_mt
14.
15. local function newpoint(x,y)
16.     local t = {x=x,y=y}
17.     setmetatable(t, point_mt)
18.     return t
19. end
20. point_mt = {
22.         return newpoint(a.x+b.x, a.y+b.y)
23.     end,
24.
25.     __sub = function(a,b)
26.         return newpoint(a.x-b[1], a.y-b.y)
27.     end,
28.
29.     __mul = function(p,k)
30.         return newpoint(p.x*k, p.y*k)
31.     end,
32.
33.     dist2 = function(a,b)
34.         return (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y)
35.     end,
36.
37.     dist = function(a,b)
38.         return math.sqrt(a:dist2(b))
39.     end,
40.
41.     abs = function(a)
42.         return math.sqrt(a.x*a.x+a.y*a.y)
43.     end
44. }; point_mt.__index = point_mt
45.
47.     for i=1,N do
48.         points[i] = {
49.             pos = newpoint(love.math.random(w), love.math.random(h)),
50.             vel = newpoint(0,0)
51.         }
52.     end
53. end
54.
55. local mindist = 10
56.
57. time = 0
58. maxtime = 0.5
59.
60. function love.update(dt)
61.     time = time + dt
62.
63.     local mx, my = love.mouse.getPosition()
64.     for _,p in ipairs(points) do
65.         if p.pos:dist(newpoint(mx,my)) < mindist then
66.             p.vel = newpoint(p.pos.x-mx, p.pos.y-my)
67.         else
68.             p.vel = p.vel*0.99
69.         end
70.         for _,p2 in ipairs(points) do
71.             if p2 ~= p then
72.                 if p.pos:dist(newpoint(p2.pos.x,p2.pos.y)) < 5 then
73.                     p.vel = newpoint(p.pos.x-p2.pos.x, p.pos.y-p2.pos.y)
74.                     p2.vel = p.vel*-1
75.                 end
76.             end
77.         end
78.
79.         table.insert(trails, {birth = time, x = p.pos.x, y = p.pos.y})
80.
81.         p.pos = p.pos+p.vel+newpoint(math.sin(p.vel.x)*p.vel:abs(), math.sin(p.vel.y)*p.vel:abs())
82.         p.pos.x = p.pos.x%w
83.         p.pos.y = p.pos.y%h
84.     end
85.
86.     local remove = {}
87.     for i,t in ipairs(trails) do
88.         if time - t.birth >= maxtime then
89.             table.insert(remove, i)
90.         end
91.     end
92.     for k,v in ipairs(remove) do table.remove(trails, v) end
93. end
94.
95. function love.draw()
96.     for i,t in ipairs(trails) do
97.         local c = color(t.x, t.y)
98.         c[4] = 1-(time-t.birth)/maxtime
99.         love.graphics.setColor(c)
100.         love.graphics.circle("fill", t.x, t.y, 2)
101.     end
102.
103.     for _,p in ipairs(points) do
104.         love.graphics.setColor(color(p.pos.x, p.pos.y))
105.         love.graphics.circle("fill", p.pos.x, p.pos.y, 3)
106.     end
107.
108.     love.graphics.circle("line", love.mouse.getX(), love.mouse.getY(), mindist)
109. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top