import sys
import os
import cocos
from cocos.actions import *
from pyglet.window import key

class CarScene(cocos.layer.ColorLayer):
    is_event_handler = True

    def __init__(self):
        # background color
        super( CarScene, self ).__init__(64,64,224,255)

        # show car
        self.sprite = cocos.sprite.Sprite('car.png')
        self.sprite.position = 320, 240
        self.add( self.sprite )

        self.bindings = { #key constant : button name
            key.LEFT:'left',
            key.RIGHT:'right',
            key.UP:'up',
            key.DOWN:'down',
            key.RCTRL:'fire',
            }
        self.buttons = { #button name : current value, 0 not pressed, 1 pressed
            'left':0,
            'right':0,
            'up':0,
            'down':0,
            'fire':0,
            }
        self.schedule(self.update) # so that self.update be called at each frame

    # tracking of keys : keys updates self.buttons, later in update we use the
    # buttons to control the sprite
    # This indirection to separate the binging code from the update code; also
    # accounts for pyglet not doing key repeat
    def on_key_press(self, k, m ):
        binds = self.bindings
        if k in binds:
            self.buttons[binds[k]] = 1
            return True
        return False

    def on_key_release(self, k, m ):
        binds = self.bindings
        if k in binds:
            self.buttons[binds[k]] = 0
            return True
        return False

    def update(self,dt): #scheduled functions are called with dt
        btns = self.buttons
        x,y = self.sprite.position
        vel_x = 100.0 #units per second
        vel_y = 100.0 #units per second
        x = x + ( btns['right']-btns['left'] )*vel_x*dt
        y = y + ( btns['up']-btns['down'] )*vel_y*dt
        self.sprite.position = x,y

if __name__ == "__main__":
    cocos.director.director.init()
    cocos.director.director.run( cocos.scene.Scene( CarScene() ) )
