Difference between revisions of "Balls Example"

From Inspired-Lua Wiki
Jump to navigation Jump to search
Line 6: Line 6:
 
<syntaxhighlight>Ball = class()
 
<syntaxhighlight>Ball = class()
  
function Ball:init(x,y,r,color)<br> self.x = x<br> self.y = y<br> self.r = r<br> self.color = color<br> self.isActive = false<br> self.id = #ballsTable+1<br>end
+
function Ball:init(x,y,r,color)
 +
self.x = x  
 +
self.y = y  
 +
self.r = r  
 +
self.color = color  
 +
self.isActive = false  
 +
self.id = #ballsTable+1
 +
end
  
function Ball:paint(gc)<br> gc:setColorRGB(unpack(self.color))<br> gc:fillArc(self.x,self.y,self.r,self.r,0,360)<br> if self.isActive then<br> gc:setColorRGB(0)<br> gc:drawArc(self.x,self.y,self.r,self.r,0,360)<br> end<br>end
+
function Ball:paint(gc)  
 +
gc:setColorRGB(unpack(self.color))  
 +
gc:fillArc(self.x,self.y,self.r,self.r,0,360)
 +
if self.isActive then
 +
    gc:setColorRGB(0)  
 +
    gc:drawArc(self.x,self.y,self.r,self.r,0,360)
 +
end
 +
end
  
function Ball:move(x,y)<br> self.x = x<br> self.y = y<br> platform.window:invalidate()<br>end
+
function Ball:move(x,y)
 +
self.x = x  
 +
self.y = y  
 +
platform.window:invalidate()
 +
end
  
<br>function on.grabDown(x,y)<br> isGrabbing = not isGrabbing<br> platform.window:invalidate()<br>end
+
function on.grabDown(x,y)  
 +
isGrabbing = not isGrabbing
 +
platform.window:invalidate()
 +
end
  
function on.mouseUp(x,y)<br> isGrabbing = false<br> platform.window:invalidate()<br>end
+
function on.mouseUp(x,y)
 +
isGrabbing = false  
 +
platform.window:invalidate()
 +
end
  
function on.mouseDown(x,y)<br> isGrabbing = true<br> platform.window:invalidate()<br>end
+
function on.mouseDown(x,y)  
 +
isGrabbing = true  
 +
platform.window:invalidate()
 +
end
  
function on.mouseMove(x,y)<br> if isGrabbing and (trackedBall and trackedBall.isActive) then<br> txt2 = "moving ball #"..trackedBall.id<br> trackedBall:move(x-trackedBall.r/2,y-trackedBall.r/2)<br> else<br> txt2 = "not moving anything"<br> for i,ball in ipairs(ballsTable) do<br> if math.abs(ball.x+ball.r/2-x) &lt;= ball.r/1.8 and math.abs(ball.y+ball.r/2-y) &lt;= ball.r/1.8 then<br> ball.isActive = true<br> trackedBall = ball<br> else<br> ball.isActive = false<br> end<br> end<br> end<br>end
+
function on.mouseMove(x,y)
 +
if isGrabbing and (trackedBall and trackedBall.isActive) then
 +
txt2 = "moving ball #"..trackedBall.id
 +
trackedBall:move(x-trackedBall.r/2,y-trackedBall.r/2)
 +
else
 +
txt2 = "not moving anything"
 +
for i,ball in ipairs(ballsTable) do
 +
if math.abs(ball.x+ball.r/2-x) <= ball.r/1.8 and math.abs(ball.y+ball.r/2-y) <= ball.r/1.8 then
 +
ball.isActive = true
 +
trackedBall = ball
 +
else
 +
ball.isActive = false
 +
end
 +
end  
 +
end
 +
end
  
function on.paint(gc)<br> for _,ball in ipairs(ballsTable) do<br> ball:paint(gc)<br> end<br> gc:setColorRGB(0)<br> gc:drawString("grabbing : " .. tostring(isGrabbing),2,0,"top")<br> gc:drawString(tostring(txt2),2,20,"top")<br> gc:drawString("Press Enter to create a Ball object", 2, 190, "top")<br>end
+
function on.paint(gc)
 +
for _,ball in ipairs(ballsTable) do
 +
    ball:paint(gc)
 +
end
 +
gc:setColorRGB(0,0,0)
 +
gc:drawString("grabbing : " .. tostring(isGrabbing),2,0,"top")
 +
gc:drawString(tostring(txt2),2,20,"top")
 +
gc:drawString("Press Enter to create a Ball object", 2, 190, "top")
 +
end
  
ballsTable = {}<br>grabFlag = false<br>isGrabbing = false<br>txt2 = "not moving anything"<br> <br>function on.enterKey()<br> ballsTable[#ballsTable+1] = Ball(math.random(10,250), math.random(10,180), 15, {math.random(0,255),math.random(0,255),math.random(0,255)})<br>end<br></syntaxhighlight>
+
ballsTable = {}
 +
grabFlag = false
 +
isGrabbing = false
 +
txt2 = "not moving anything"
 +
 
 +
function on.enterKey()
 +
ballsTable[#ballsTable+1] = Ball(math.random(10,250), math.random(10,180), 15, {math.random(0,255),math.random(0,255),math.random(0,255)})
 +
end</syntaxhighlight>

Revision as of 12:23, 17 June 2012

Simple lua code showing event handling, class creation, grabbing objects across the screen, cursor setting...

(Code by Adrien "Adriweb" Bertrand)


Ball = class()

function Ball:init(x,y,r,color)
 self.x = x 
 self.y = y 
 self.r = r 
 self.color = color 
 self.isActive = false 
 self.id = #ballsTable+1
end

function Ball:paint(gc) 
 gc:setColorRGB(unpack(self.color)) 
 gc:fillArc(self.x,self.y,self.r,self.r,0,360)
 if self.isActive then
    gc:setColorRGB(0) 
    gc:drawArc(self.x,self.y,self.r,self.r,0,360)
 end
end

function Ball:move(x,y)
 self.x = x 
 self.y = y 
 platform.window:invalidate()
end

function on.grabDown(x,y) 
 isGrabbing = not isGrabbing
 platform.window:invalidate()
end

function on.mouseUp(x,y)
 isGrabbing = false 
 platform.window:invalidate()
end

function on.mouseDown(x,y) 
 isGrabbing = true 
 platform.window:invalidate()
end

function on.mouseMove(x,y)
 if isGrabbing and (trackedBall and trackedBall.isActive) then
 txt2 = "moving ball #"..trackedBall.id
 trackedBall:move(x-trackedBall.r/2,y-trackedBall.r/2)
 else
 txt2 = "not moving anything"
 for i,ball in ipairs(ballsTable) do
 if math.abs(ball.x+ball.r/2-x) <= ball.r/1.8 and math.abs(ball.y+ball.r/2-y) <= ball.r/1.8 then
 ball.isActive = true
 trackedBall = ball
 else
 ball.isActive = false
 end
 end 
end
end

function on.paint(gc)
 for _,ball in ipairs(ballsTable) do
    ball:paint(gc)
 end
 gc:setColorRGB(0,0,0)
 gc:drawString("grabbing : " .. tostring(isGrabbing),2,0,"top")
 gc:drawString(tostring(txt2),2,20,"top")
 gc:drawString("Press Enter to create a Ball object", 2, 190, "top")
end

ballsTable = {}
grabFlag = false
isGrabbing = false
txt2 = "not moving anything"

function on.enterKey()
 ballsTable[#ballsTable+1] = Ball(math.random(10,250), math.random(10,180), 15, {math.random(0,255),math.random(0,255),math.random(0,255)})
end