simple gravity game whit shader

Pelota = class()

function Pelota:init()

self.posicion = vec2( WIDTH /2 , HEIGHT / 2)
self.radio = 18
self.velocidad = vec2(Gravity.x*30 , Gravity.y*30)

end

function Pelota:draw()

self.velocidad = vec2(Gravity.x*30 , Gravity.y*30)
ellipse (self.posicion.x , self.posicion.y , 2* self.radio)

end

function Pelota:paredes()

self.posicion = self.posicion + self.velocidad


if (self.posicion.x + self.radio) >= WIDTH then
    self.posicion.x = WIDTH - self.radio

    self.velocidad.x =  -self.velocidad.x

elseif (self.posicion.x - self.radio) <= 0 then
    self.posicion.x = self.radio

    self.velocidad.x = -self.velocidad.x
    

elseif (self.posicion.y + self.radio) >= HEIGHT then

    self.posicion.y = HEIGHT - self.radio
    self.velocidad.y = -self.velocidad.y

elseif (self.posicion.y - self.radio) <= 0 then
    self.posicion.y = self.radio
    self.velocidad.y = -self.velocidad.y
   
    return false

end

return true  

end

 function Pelota:derecha()

     return self.posicion.x + self.radio

end

   function Pelota:izquierda()

       return self.posicion.x - self.radio

    end

      function Pelota:arriba()

          return self.posicion.y + self.radio

      end  

          function Pelota:abajo()

              return self.posicion.y - self.radio 

              end

Bloques = class()

function Bloques:init(x, y , tonos)
parameter.integer(“Texture”,1,2)

allTextures = { 
                "Cargo Bot:Codea Icon",
              }



m = mesh()
m.texture = allTextures[Texture]

self.posicion = vec2(x , y)

self.tamano = vec2(70 , 35)

self.mesh = mesh()

self.color1 = tonos

self.mesh:addRect (self.posicion.x , self.posicion.y , self.tamano.x , self.tamano.y)


local oscuro = self.color1:mix( color(400,400,400), 0.4 )

self.mesh:color(1 , self.color1)
self.mesh:color(2 , oscuro)
self.mesh:color(3 , self.color1)
self.mesh:color(4 , oscuro)
self.mesh:color(5 , self.color1)
self.mesh:color(6 , oscuro)

self.mesh.shader = shader("Effects:Ripple")

end

function Bloques:draw()

fill(42, 82, 201, 153)


self.mesh.shader.time = ElapsedTime

self.mesh.shader.freq =1.5
noStroke()
self.mesh:draw()
rectMode(CENTER)

end

function Bloques:rebote(ball)

 if ball:derecha() >= self:izquierda() and ball:izquierda() <= self:derecha() and
 ball:arriba() >= self:abajo() and ball:abajo() <= self:arriba() then
     
sound(DATA, "ZgBAZAA+Qi0IQ0IWAAAAAAubAz5sIgq/VgBKU0BKQUBfIWcQ")
     
     if ball.posicion.y <= self:arriba() and ball.posicion.y >= self:abajo() then
         
         ball.velocidad.x = -ball.velocidad.x
     else
         ball.velocidad.y = -ball.velocidad.y
         
     end

     return true
     
 end

 return false

end

function Bloques:derecha()

  return self.posicion.x + self.tamano.x / 2

end

function Bloques:izquierda()

  return self.posicion.x - self.tamano.x /2

end

function Bloques:arriba()

  return self.posicion.y + self.tamano.y /2

end

function Bloques:abajo()

  return self.posicion.y - self.tamano.y /2

  end

niveles = {

{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},

{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},

{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},

{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},

{{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1}},

}

displayMode(FULLSCREEN)

ball = nil
lastDelta = 0
Bola_movimiento = false
bloques = {}
nivel=1
vidas =3
gravedad= vec2(0,0)
lluvia = nil
sonidos = nil
velocidad = 0
explotar = nil
juego_finito = false
ganar = false
puntos = 0
maximo_nivel = table.maxn(niveles)

function setup()

ball = Pelota()

ball.velocidad.x = math.random(-3,3)

      Poner_bloques()

end

function Poner_bloques()

for i = 1,8 do
    c = obtenerColorPorNivel(i)
    for x = 1,10 do
        if niveles[nivel][i][x] > 0 then
            table.insert(bloques, Bloques(35 + (x * 62), HEIGHT - (i * 35 + 35) , c))
            
            end
end
end

end

function obtenerColorPorNivel(fila)

cambiarTono = fila * 35
if nivel % 4 == 1 then
    c = color(cambiarTono,255,255)
elseif nivel % 4 == 2 then
    c = color(255,cambiarTono,255)
elseif nivel % 4 == 3 then
    c = color(255,255,cambiarTono,255)
else
    c = color(0,255,cambiarTono,255)
end
return c

end

function draw()

background(0, 25, 25, 5)

noSmooth()

    if ball:paredes()  == false then
         end
   
              for i = 1, table.maxn(bloques) do
                  if bloques[i]:rebote(ball) then
                     
                     table.remove(bloques, i)
                                  break
                                 end

end

            --
            if table.maxn(bloques) == 0 then

                nuevo_nivel()
                
                end





strokeWidth(2)

ball:draw()
 

for i = 1, table.maxn(bloques)do
    bloques[i]:draw()
end

function touched(touch)

 if CurrentTouch.state == BEGAN or

 CurrentTouch.state == MOVING then
       
    lastDelta = CurrentTouch.deltaX
    
    if Bola_movimiento == false then
            if CurrentTouch.x < bat:derecha() + 100 and 
                CurrentTouch.x > bat:izquierda() - 100 and 
                CurrentTouch.y < bat:arriba() + 200 and 
                CurrentTouch.y > bat:abajo() then
               
                if Bola_movimiento == false then
                    Bola_movimiento = true
                end
            end
    else
       
    end

elseif juego_finito == true or ganar == true then
if CurrentTouch.tapCount == 1 then
resetearJuego()
end

    end

end
lastDelta = 0

end

function nuevo_nivel()

if nivel <= maximo_nivel then

    nivel = nivel + 1
   
    Poner_bloques()
    vidas = vidas + 1

else
ganar = true
end

end