Steering Wheel

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

@coder nice job. You are very productive! Impressive.

Thank I plan to use it in a very processor hungry driving game with physics and 3d