#Credit to scriptedfun (http://www.scriptedfun.com) for the help with the typing portion
#Still a very VERY barebones typing script. Next I have to work on
#the basic shoot-em-up part and get the scoring in place

import pygame
from pygame.locals import *
import helpers

SCREENRECT = Rect(0, 0, 640, 480)


class Textsprite(pygame.sprite.Sprite):
    def __init__(self, text):
        pygame.sprite.Sprite.__init__(self)
        self.text = text
        self.pos = 0
        self.current_string = 0
        self.poscmb = 0
        self.stringcmb = 0
        self.update()
    def update(self):
        self.image = pygame.font.Font(None, 36).render(self.text[self.current_string], 1, (0, 0, 0))
        self.highlight = pygame.font.Font(None, 36).render(self.text[self.current_string][:self.pos], 1, (0, 0, 255))
        self.image.blit(self.highlight, (0, 0))
        self.rect = self.image.get_rect()
        self.rect.center = pygame.display.get_surface().get_rect().center
    def keyin(self, key):
        if key == self.text[self.current_string][self.pos]:
            self.pos = self.pos + 1
            self.poscmb = self.poscmb + 1
        else:
            self.poscmb = 0
        if len(self.text[self.current_string]) == self.pos:
            self.pos = 0
            if self.current_string +1 == len(self.text):
                self.current_string = 0
            else:
                self.current_string = self.current_string + 1
                self.stringcmb = self.stringcmb + 1

class Poscombosprite(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.update()
    def update(self):
        self.poscombo = pygame.font.Font(None, 18).render('Letters correctly typed in a row:' + str(Textsprite.poscmb), 1, (0, 255, 0))
        self.poscombo.blit((50, 150)) 
        self.poscmbrect = self.poscombo.get_rect()
        self.poscmbrect.center = pygame.display.get_surface().get_rect().center

class Stringcombosprite(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.update()
    def update(self):
        self.stringcombo = pygame.font.Font(None, 18).render('Words correctly typed in a row:' + str(Textsprite.stringcmb), 1, (255, 0, 0))
        self.stringcombo.blit((50,50))
        self.stringcmbrect = self.stringcombo.get_rect()
        self.stringcmbrect.center = pygame.display.get_surface().get_rect().center

def main():
    pygame.init()

    screen = pygame.display.set_mode(SCREENRECT.size)

    # make background
    background = pygame.Surface(SCREENRECT.size).convert()
    background.fill((255, 255, 255))
    screen.blit(background, (0, 0))
    pygame.display.update()

    # keep track of sprites
    all = pygame.sprite.RenderUpdates()

    # keep track of time
    clock = pygame.time.Clock()

    textsprite = Textsprite(["test string1", "another test!", "can you type this?", "Hey Mr Ottman!", "It works!"])
    all.add(textsprite)
    
    #Set moving to false
    moving = 0
    
    # game loop
    while 1:

        # get input
        for event in pygame.event.get():
            if event.type == QUIT:
                return
            elif event.type == KEYUP:
                if event.key == K_TAB:
                    moving = 0
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    return
                elif event.key == K_TAB:
                    moving = 1
                elif moving == 0:
                    textsprite.keyin(event.unicode)

        # clear sprites
        all.clear(screen, background)

        # update sprites
        all.update()

        # redraw sprites
        dirty = all.draw(screen)
        pygame.display.update(dirty)

        # maintain frame rate
        clock.tick(30)

if __name__ == '__main__': main()
