Skip to content

Instantly share code, notes, and snippets.

@2bt
Last active February 1, 2016 14:57
Show Gist options
  • Select an option

  • Save 2bt/6645475350f680f7c876 to your computer and use it in GitHub Desktop.

Select an option

Save 2bt/6645475350f680f7c876 to your computer and use it in GitHub Desktop.

Revisions

  1. 2bt revised this gist Jan 28, 2016. 1 changed file with 9 additions and 6 deletions.
    15 changes: 9 additions & 6 deletions main.lua
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,7 @@
    local G = love.graphics

    math.randomseed(os.time())

    parts = {}

    function find_partner(p)
    @@ -12,10 +14,11 @@ function find_partner(p)
    end


    for i = 1, 10000 do
    for i = 1, 5000 do
    local p = {
    x = math.random(-100, 100),
    y = math.random(-100, 100),
    c = 0
    }
    p.ox = p.x
    p.oy = p.y
    @@ -33,7 +36,7 @@ function love.update()
    p.ox = p.x
    p.oy = p.y

    if not p.c or p.c == 0 then
    if p.c == 0 then
    p.friend = find_partner(p)
    p.enemy = find_partner(p)
    p.c = math.random(5000)
    @@ -61,12 +64,13 @@ function love.update()
    p.x = p.x + vx * 0.5
    p.y = p.y + vy * 0.5
    end
    end

    for _ = 1, 300 do love.update() end

    end
    function love.draw()
    G.translate(400, 300)
    G.setColor(255, 255, 255, 5)
    G.setColor(255, 255, 255, 15)

    -- love.graphics.setBlendMode("add")

    @@ -77,11 +81,10 @@ function love.draw()
    G.translate(p.x, p.y)
    G.rotate(rot)
    G.scale(l, 1)
    G.circle("fill", 0, 0, 2, 6)
    G.circle("fill", 0, 0, 3, 4)
    G.pop()

    -- G.circle("fill", p.x, p.y, 3, 3)
    -- G.line(p.x, p.y, p.friend.x, p.friend.y)
    end

    end
  2. 2bt created this gist Jan 28, 2016.
    87 changes: 87 additions & 0 deletions main.lua
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,87 @@
    local G = love.graphics

    parts = {}

    function find_partner(p)
    while true do
    local q = parts[math.random(#parts)]
    if q ~= p and q ~= p.friend and q ~= p.enemy then
    return q
    end
    end
    end


    for i = 1, 10000 do
    local p = {
    x = math.random(-100, 100),
    y = math.random(-100, 100),
    }
    p.ox = p.x
    p.oy = p.y
    parts[i] = p
    end

    function love.update()

    for _, p in ipairs(parts) do


    local vx = p.x - p.ox
    local vy = p.y - p.oy

    p.ox = p.x
    p.oy = p.y

    if not p.c or p.c == 0 then
    p.friend = find_partner(p)
    p.enemy = find_partner(p)
    p.c = math.random(5000)
    end
    p.c = p.c - 1

    local l = ((p.x^2+p.y^2) * 0.0001) ^ 0.5
    p.x = p.x * (1 - l * 0.001)
    p.y = p.y * (1 - l * 0.001)


    local dx = p.friend.x - p.x
    local dy = p.friend.y - p.y
    local l = 4.3 / (10 + (dx*dx + dy*dy) ^ 0.5)
    p.x = p.x + dx * l
    p.y = p.y + dy * l

    local dx = p.enemy.x - p.x
    local dy = p.enemy.y - p.y
    local l = -0.8 / (10 + (dx*dx + dy*dy) ^ 0.5)
    p.x = p.x + dx * l
    p.y = p.y + dy * l


    p.x = p.x + vx * 0.5
    p.y = p.y + vy * 0.5
    end


    end
    function love.draw()
    G.translate(400, 300)
    G.setColor(255, 255, 255, 5)

    -- love.graphics.setBlendMode("add")

    for _, p in ipairs(parts) do
    local rot = math.atan2(p.y - p.oy, p.x - p.ox)
    local l = math.max(1, ((p.x - p.ox) ^ 2 + (p.y - p.oy) ^ 2) ^ 0.4)
    G.push()
    G.translate(p.x, p.y)
    G.rotate(rot)
    G.scale(l, 1)
    G.circle("fill", 0, 0, 2, 6)
    G.pop()

    -- G.circle("fill", p.x, p.y, 3, 3)
    -- G.line(p.x, p.y, p.friend.x, p.friend.y)
    end

    end