Advertisement
egg651

Untitled

Apr 22nd, 2012
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.84 KB | None | 0 0
  1. function love.load()
  2.  
  3. ------------------------------
  4.     gravintensity = 4000
  5.     playerspeed = 8000
  6.     numberofballs = 4
  7.     planetrestitution = 0.75
  8.     lineardamping = 0.75
  9.     planetdensity = 0.75
  10. ------------------------------
  11.  
  12.     love.physics.setMeter(64)
  13.     world = love.physics.newWorld(0, 0, true)
  14.     world:setCallbacks(beginContact, endContact, preSolve, postSolve)
  15.  
  16.     love.graphics.setBackgroundColor(104, 136, 248)
  17.     love.graphics.setMode(650, 650, false, true, 0)
  18.  
  19.     dynamicobjects = {}
  20.     sceneobjects = {}  
  21.  
  22.     GenerateBalls(numberofballs)
  23.  
  24.     sceneobjects.block1 = {}
  25.     sceneobjects.block1.body = love.physics.newBody(world, 0, 650/2, "static")
  26.     sceneobjects.block1.shape = love.physics.newRectangleShape(10, 650)
  27.     sceneobjects.block1.fixture = love.physics.newFixture(sceneobjects.block1.body, sceneobjects.block1.shape, 0)
  28.  
  29.  
  30.     sceneobjects.block2 = {}
  31.     sceneobjects.block2.body = love.physics.newBody(world, 650, 650/2, "static")
  32.     sceneobjects.block2.shape = love.physics.newRectangleShape(10, 650)
  33.     sceneobjects.block2.fixture = love.physics.newFixture(sceneobjects.block2.body, sceneobjects.block2.shape, 0)
  34.  
  35.     sceneobjects.block3 = {}
  36.     sceneobjects.block3.body = love.physics.newBody(world, 650/2, 0, "static")
  37.     sceneobjects.block3.shape = love.physics.newRectangleShape(650, 10)
  38.     sceneobjects.block3.fixture = love.physics.newFixture(sceneobjects.block3.body, sceneobjects.block3.shape, 0)
  39.  
  40.     sceneobjects.block4 = {}
  41.     sceneobjects.block4.body = love.physics.newBody(world, 650/2, 650, "static")
  42.     sceneobjects.block4.shape = love.physics.newRectangleShape(650, 10)
  43.     sceneobjects.block4.fixture = love.physics.newFixture(sceneobjects.block4.body, sceneobjects.block4.shape, 0)
  44. end
  45.  
  46.  
  47. function love.update(dt)
  48.     world:update(dt)
  49.  
  50.     for i, ball in ipairs(dynamicobjects) do
  51.         for j, well in ipairs(dynamicobjects) do
  52.             if ball ~= well then
  53.                 dy = ball.body:getY() - well.body:getY()
  54.                 dx = ball.body:getX() - well.body:getX()
  55.  
  56.                 angle = math.atan2(dy, dx)
  57.                 dist = math.sqrt(dx * dx + dy * dy)
  58.        
  59.                 ball.body:applyForce(ball.body:getMass() * ((-gravintensity / math.pow(dist, 1.25)) * math.cos(angle)), well.body:getMass() * ((-gravintensity / math.pow(dist, 1.25)) * math.sin(angle)))
  60.             end
  61.         end
  62.     end
  63.  
  64.     if love.keyboard.isDown("r") then
  65.         for k, ball in ipairs(dynamicobjects) do
  66.             ball.body:destroy()
  67.         end
  68.         dynamicobjects = {}
  69.         GenerateBalls(numberofballs)
  70.     end
  71.  
  72.     if love.keyboard.isDown("right") then
  73.         dynamicobjects[1].body:applyForce(playerspeed, 0)
  74.     end
  75.     if love.keyboard.isDown("left") then
  76.         dynamicobjects[1].body:applyForce(-playerspeed, 0)
  77.     end
  78.     if love.keyboard.isDown("up") then
  79.         dynamicobjects[1].body:applyForce(0, -playerspeed)
  80.     end
  81.     if love.keyboard.isDown("down") then
  82.         dynamicobjects[1].body:applyForce(0, playerspeed)
  83.     end
  84. end
  85.  
  86. function love.draw()
  87.     for i, ball in ipairs(dynamicobjects) do
  88.         love.graphics.setColor(ball.r, ball.g, ball.b)
  89.         love.graphics.circle("fill", ball.body:getX(), ball.body:getY(), ball.shape:getRadius())
  90.     end
  91.  
  92.     love.graphics.setColor(50, 50, 50)
  93.     love.graphics.polygon("fill", sceneobjects.block1.body:getWorldPoints(sceneobjects.block1.shape:getPoints()))
  94.     love.graphics.polygon("fill", sceneobjects.block2.body:getWorldPoints(sceneobjects.block2.shape:getPoints()))
  95.     love.graphics.polygon("fill", sceneobjects.block3.body:getWorldPoints(sceneobjects.block3.shape:getPoints()))
  96.     love.graphics.polygon("fill", sceneobjects.block4.body:getWorldPoints(sceneobjects.block4.shape:getPoints()))
  97. end
  98.  
  99. function GenerateBalls(count)
  100.     for i=0,count - 1 do
  101.         ball = {}
  102.         ball.body = love.physics.newBody(world, math.random(650), math.random(650), "dynamic")
  103.         ball.shape = love.physics.newCircleShape(math.random(5, 60))
  104.         ball.fixture = love.physics.newFixture(ball.body, ball.shape, planetdensity)
  105.         ball.fixture:setRestitution(planetrestitution)
  106.         ball.r = math.random(255)
  107.         ball.g = math.random(255)
  108.         ball.b = math.random(255)
  109.         ball.body:setMass(ball.shape:getRadius() * ball.fixture:getDensity())
  110.         ball.body:setLinearDamping(0.75)
  111.         ball.fixture:setUserData("ball")
  112.         table.insert(dynamicobjects, ball)
  113.     end
  114. end
  115.  
  116. function JoinBalls(fixa, fixb)
  117.     if fixa:getShape():getRadius() > fixb:getShape():getRadius() then
  118.         largef = fixa
  119.         smallf = fixb
  120.     else
  121.         largef = fixb
  122.         smallf = fixa
  123.     end
  124.    
  125.     largef:getShape():setRadius(fixa:getShape():getRadius() + fixb:getShape():getRadius())
  126.    
  127.     smallf:getBody():destroy()
  128.    
  129.     for i, ball in ipairs(dynamicobjects) do
  130.         if ball.fixture == smallf then
  131.             table.remove(dynamicobjects, i)
  132.             return
  133.         end
  134.     end
  135.    
  136. end
  137.  
  138. function beginContact(a, b, coll)
  139.     if a:getUserData() == "ball" and b:getUserData() == "ball" then
  140.         JoinBalls(a, b)
  141.     end
  142. end
  143.  
  144. function endContact(a, b, coll)
  145.    
  146. end
  147.  
  148. function preSolve(a, b, coll)
  149.    
  150. end
  151.  
  152. function postSolve(a, b, coll)
  153.  
  154. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement