# -*- coding: utf-8 -*-
__author__ = 'Carlos'

from PPlay.window import *
from PPlay.sprite import *

# Cria a janela do programa.
janela = Window(600, 600)
janela.set_title("Protótipo - Movimento de Personagem")


# Temos 8 sprites. 4 do personagem andando e 4 parados. No game loop vamos desenhar apenas um deles,
# mas os sprites serão pré-carregados apenas uma vez, antes do game loop.
lista_sprites_heroi = []
#Sprites de 0 a 3: personagem parado.
for contador in range(4):
    sprite = Sprite("hero" + str(contador) + "_1.png", 1)
    sprite.set_total_duration(500)
    lista_sprites_heroi.append(sprite)
# Sprites de 4 a 7: personagem andando.
for contador in range(4):
    sprite = Sprite("hero" + str(contador) + ".png", 4)
    sprite.set_total_duration(500)
    lista_sprites_heroi.append(sprite)

# Propriedades iniciais do personagem.
heroi_posicao_x = 0
heroi_posicao_y = 0
heroi_velocidade_x = 100
heroi_velocidade_y = 100
heroi_direcao = 0
heroi_movimento = 0
# variuável utilizada para otimizar a instância do sprite atual em lista_sprites_heroi.
sprite_atual = 0

# Associar uma variável à instância de teclado contida em Window
teclado = Window.get_keyboard()  # Função da CLASSE e não da instância! W maiúsculo!

# GameLoop
while(True):
    # Inicialização de variáveis para o frame atual
    sprite_atual = heroi_direcao + heroi_movimento

    # FÍSICA

    # Move o sprite atual do personagem para a posição do personagem.
    lista_sprites_heroi[sprite_atual].set_position(heroi_posicao_x, heroi_posicao_y)

    # move o sprite atual de acordo com o input do teclado
    lista_sprites_heroi[sprite_atual].move_key_x(heroi_velocidade_x * janela.delta_time())
    lista_sprites_heroi[sprite_atual].move_key_y(heroi_velocidade_y * janela.delta_time())

    # atualiza a posição do personagem para a posição do sprite atual.
    heroi_posicao_x = lista_sprites_heroi[sprite_atual].x
    heroi_posicao_y = lista_sprites_heroi[sprite_atual].y


    # RENDERIZAÇÃO

    # Desenha o fundo. É fundamental para apagar o que estava na tela anterior.
    janela.set_background_color((255,255,255))

    # Desenha apenas o sprite do movimento que está sendo feito (direção + andando/parado)
    lista_sprites_heroi[heroi_direcao + heroi_movimento].draw()

    # Muda o frame da animação
    lista_sprites_heroi[heroi_direcao + heroi_movimento].update()

    # Consideramos por padrão que o personagem está parado
    heroi_movimento = 0
    # Tratamento de eventos de teclado relacionados ao movimento do personagem.
    if(teclado.key_pressed("UP")):
        heroi_direcao = 0
        heroi_movimento = 4
    if(teclado.key_pressed("RIGHT")):
        heroi_direcao = 1
        heroi_movimento = 4
    if(teclado.key_pressed("DOWN")):
        heroi_direcao = 2
        heroi_movimento = 4
    if(teclado.key_pressed("LEFT")):
        heroi_direcao = 3
        heroi_movimento = 4
    # Verifica se "Esc" foi pressionado para fechar o jogo
    if(teclado.key_pressed("esc")):
        janela.close()

    # atualiza janela.
    janela.update()
