
import os
import random
import sys

from pyglet.gl import *
import pyglet
from pyglet.window import key

tile_image = pyglet.resource.image('tile.png')
tile_size = tile_image.width
board_size = 64
buttons = {
    'left':0,
    'right':0,
    'up':0,
    'down':0
    }
bindings = {
    key.LEFT: 'left',
    key.RIGHT: 'right',
    key.UP: 'up',
    key.DOWN: 'down'
    }
_ox, _oy = 0.0, 0.0
ox, oy = int(_ox), int(_oy)
mov_fastness = 50.0
bIntify = False

class Tile(pyglet.sprite.Sprite):
    colors = [ (230, 182, 34), (96, 202, 2) ]

    def __init__(self, i, j): # board coords
        x = j*tile_size
        y = i*tile_size
        super(Tile, self).__init__(tile_image, x, y,
                                   batch=tiles_batch)#, subpixel=True)
        self.color = Tile.colors[(j+i)%2]

window = pyglet.window.Window(640, 480)

@window.event
def on_key_press(symbol, modifiers):
    if symbol in bindings:
        buttons[bindings[symbol]] = 1
    elif symbol == key.ESCAPE:
        window.has_exit = True

@window.event
def on_key_release(symbol, modifiers):
    if symbol in bindings:
        buttons[bindings[symbol]] = 0

@window.event
def on_draw():
    window.clear()
    glPushMatrix()
    glTranslatef(-ox, -oy, 0.0)
    tiles_batch.draw()
    glPopMatrix()
    label.draw()

def update(dt):
    global _ox, _oy, ox, oy
    _ox += mov_fastness*dt*(buttons['right']-buttons['left'])
    _oy += mov_fastness*dt*(buttons['up']-buttons['down'])
    if bIntify:
        ox, oy = int(_ox), int(_oy)
    else:
        ox, oy = _ox, _oy
        
    
pyglet.clock.schedule_interval(update, 1/30.)

tiles_batch = pyglet.graphics.Batch()
board = {}
for i in xrange(board_size):
    for j in xrange(board_size):
        board[i,j] = Tile(i,j)
        
label = pyglet.text.Label('use arrows keys to scroll',
                          font_size=14,
                          x=window.width // 2, y=10, 
                          anchor_x='center')

if __name__ == '__main__':
    pyglet.app.run()

# allowing float offsets the image scroll is ugly

