from render import *

def cubeIn(cube,cubes):
    for pos,color in cubes:
        if pos==cube:
            return True
    return False

def sandFall(cubes):
    for (pos,color) in cubes:
        cubes.remove((pos,color))
        x,y,z = pos
        if (y>-10):
            if not cubeIn((x,y-1,z),cubes):
                cubes.append(((x,y-1,z),color))
            elif not cubeIn((x-1,y-1,z),cubes):
                cubes.append(((x-1,y-1,z),color))
            elif not cubeIn((x+1,y-1,z),cubes):
                cubes.append(((x+1,y-1,z),color))
            elif not cubeIn((x,y-1,z-1),cubes):
                cubes.append(((x,y-1,z-1),color))
            elif not cubeIn((x,y-1,z+1),cubes):
                cubes.append(((x,y-1,z+1),color))
            else:
                cubes.append(((x,y,z),color))
        else:
            cubes.append(((x,y,z),color))
    return cubes

if __name__ == '__main__':
    filename = "model.json"
    if len(sys.argv)>1:
        filename = sys.argv[1]

    width,height = (800, 600)
    SCALE = 0.05
    tspeed = 0.03
    mspeed = 0.003
    dist = 20.0

    renderInit(width,height)
    clock = pygame.time.Clock()
    
    #cubes = loadModel(filename)
    cubes = []
    for i in range(500):
        cubes.append(((0,i,0),(0.5,0.5,0.5,0.5)))
    renderCubeLst(1,cubes)
   
    px,py,pz,angle = 0.0,0.0,-1.0,0.0

    cont=True
    while cont:
        clock.tick(30)
        for event in pygame.event.get():
            if event.type == QUIT:
                cont=False
            if event.type == KEYUP and event.key == K_ESCAPE:
                cont  =False
        pressed = pygame.key.get_pressed()
        if pressed[K_SPACE]:
            renderCubeLst(1,loadModel('model.json'))
        elif pressed[K_a]:
            dist -= 0.1
        elif pressed[K_z]:
            dist += 0.1

        angle += 0.1
        px = sin(angle)*dist
        pz = cos(angle)*dist

        cubes = sandFall(cubes)

        renderCubeLst(1,cubes)
        render([(1,0,0,0)],(px,py,pz,angle-pi),1)

