A steering wheel class with a demonstration of two ways to use it
--# Main
-- Steering Wheel
function setup()
s=SteeringWheel(WIDTH-100,100,100)
angle=0
end
function draw()
background(0)
s:draw()
pushMatrix()
translate(WIDTH/2,HEIGHT/2+200)
angle = angle + s.value
rotate(angle)
sprite("Space Art:Red Ship",0,0,300)
popMatrix()
pushMatrix()
translate(WIDTH/2,HEIGHT/2-200)
rotate(s.angle)
sprite("Space Art:Green Ship",0,0,300)
popMatrix()
end
function touched(t)
s:touched(t)
end
--# SteeringWheel
SteeringWheel = class()
function SteeringWheel:init(x,y,r)
self.x = x
self.y=y
self.angle=0
self.anglediff=0
self.radius=r
self.t=false
self.scale=45
end
function SteeringWheel:draw()
--self.angle=math.fmod(self.angle,360)
if self.angle>180 then self.angle = self.angle - 360 end
if self.angle<-180 then self.angle = self.angle + 360 end
pushMatrix()
self.value=self.angle/self.scale
pushStyle()
translate(self.x,self.y)
rotate(self.angle)
--[[
ellipseMode(RADIUS)
fill(0)
stroke(160)
strokeWidth(10)
ellipse(0,0,self.radius)
line(0,0,0,self.radius-strokeWidth())
--]]
spriteMode(RADIUS)
sprite("Space Art:UFO",0,0,self.radius)
popStyle()
popMatrix()
end
function SteeringWheel:touched(touch)
local tpos=vec2(touch.x,touch.y)
if touch.state==BEGAN then
self.t=(tpos:dist(vec2(self.x,self.y))<self.radius)
if self.t then
self.anglediff=self.angle-self:pointTowards(tpos)
end
end
if self.t==true then
self.angle=self:pointTowards(tpos)+self.anglediff
end
end
function SteeringWheel:pointTowards(p)
local angle=math.deg(math.atan2(self.y-p.y,self.x-p.x))
angle = angle + 90
return angle
end