Little example - following eyes

Inspired by the *nix xeyes widget (http://en.wikipedia.org/wiki/Xeyes) and to bring back a bit of vector math, I wrote this little example. It might be useful as a beginners example.
“Look into my eyes, look into my eyes, the eyes, the eyes, not around the eyes, don’t look around the eyes, look into my eyes (snaps fingers) you’re under.” :wink:

displayMode(FULLSCREEN)

-- Use this function to perform your initial setup
function setup()
    center = vec2(WIDTH/2, HEIGHT/2)
    leftEyeCenter = vec2(center.x - 70, center.y)
    rightEyeCenter = vec2(center.x + 70, center.y)    
    leftEye = leftEyeCenter
    rightEye = rightEyeCenter
end

-- This function gets called once every frame
function draw()
    background(3, 95, 253, 255)
    ellipseMode(CENTER)
    
    -- draw the white part of the eyes
    strokeWidth(2)
    stroke(0, 0, 0, 255)
    fill(255, 255, 255, 255)
    ellipse(leftEyeCenter.x, leftEyeCenter.y, 130, 300)
    ellipse(rightEyeCenter.x, rightEyeCenter.y, 130, 300)
    
    -- draw the 'irisses'
    fill(0, 0, 0, 255)
    ellipse(leftEye.x, leftEye.y, 50)
    ellipse(rightEye.x, rightEye.y, 50)
end

function touched(touch) 
    -- calculate direction from the left and right eye to the new position
    local newpos = vec2(touch.x, touch.y)
    local direction = (newpos-leftEyeCenter):normalize()
    
    -- determine whether the touch is on the eyes by 
    -- measuring the distance for x and y values of each eye.
    -- if so, take the smallest value
    local delta = vec2(math.min(40, math.abs(leftEyeCenter.x - newpos.x)),
    math.min(120, math.abs(leftEyeCenter.y - newpos.y)))
    leftEye = leftEyeCenter + vec2(direction.x * delta.x, direction.y * delta.y)
    
    -- do the same for the right eye  
    direction = (newpos-rightEyeCenter):normalize()
    delta = vec2(math.min(40, math.abs(rightEyeCenter.x - newpos.x)),
    math.min(120, math.abs(rightEyeCenter.y - newpos.y)))
    rightEye = rightEyeCenter + vec2(direction.x * delta.x, direction.y * delta.y)
end


Anyone any thoughts or any feedback? :slight_smile:

Nice One. Good documentation and good readable code…

@Inviso Thanks

Love the demo :slight_smile:
Keeps the kids occupied for ages :slight_smile:

My three year old son was quite intrigued too :wink: thanks btw