#Trisha Ruiz
#6/18/2023
#scoring system | rythym game

#init
import pygame, sys, random
from pygame.locals import *
pygame.init()
import player, map


def play():
    #constants
    MAP_WIDTH = 1000
    MAP_HEIGHT = 1000

    # variables    x, y
    main_player = [480,300]
    camera = [0, 0]

    loop = 0

    left_e = []
    right_e = []
    up_e = []
    down_e = []

    x = 0
    y = 0
    collided = False

    #to create camera illusion we must off set everything drawn on screen

    #music
    pygame.mixer.music.load("pokemon.wav") #loads the music
    music_started = False
        
    
    #window settings
    GAMEMAP = pygame.display.set_mode((MAP_WIDTH, MAP_HEIGHT))
    DISPLAYSURF = pygame.Surface((500, 500))

    clock = pygame.time.Clock()

    #text settings
    font = pygame.font.SysFont("comic sans", 30)

    score = 0
    scoreL = font.render("Score: "+ str(score), 1, "pink")

    time = 0
    startT = 0
    endT = 0

    lose = False
    
    #lives = 7
    
    running = True
    while running:
        clock.tick(60)
        loop += 1

        DISPLAYSURF.fill(0)

        #MAP
        map.load_map(DISPLAYSURF, main_player)

        #offset creates illusion of camera (need to offset ALL items on display)
        camera[0] = main_player[0] - 500 //2 
        camera[1] = main_player[1] - 500 // 2

        #blitting score
        DISPLAYSURF.blit(scoreL, (400, 350))

        #make sure to update label
        scoreL = font.render("Score: "+ str(score), 1, "cyan")

        for event in pygame.event.get():
            if event.type == pygame.QUIT:

                running = False
                pygame.mixer.music.stop()
                
                return #you can also return values
            if event.type == pygame.KEYDOWN:
                if event.key == K_SPACE:
                    
                    #check collision
                    for enemy in right_e:

                        #get rectangle of object 1 and object 2
                        e = pygame.Rect(enemy[0], enemy[1], 50, 50)
                        p = pygame.Rect(main_player[0], main_player[1], 30, 30)

                        #check collision of two objects: object1.colliderect(object2)
                        if e.colliderect(p):
                            enemy[2] = True
                            right_e.remove(enemy)
                            score += 1
                    for enemy in left_e:
                        e = pygame.Rect(enemy[0], enemy[1], 50, 50)
                        p = pygame.Rect(main_player[0], main_player[1], 30, 30)

                        if e.colliderect(p):
                            enemy[2] = True
                            left_e.remove(enemy)
                            score += 1
                    for enemy in up_e:
                        e = pygame.Rect(enemy[0], enemy[1], 50, 50)
                        p = pygame.Rect(main_player[0], main_player[1], 30, 30)

                        if e.colliderect(p):
                            enemy[2] = True
                            up_e.remove(enemy)
                            score += 1
                    
                    for enemy in down_e:
                        e = pygame.Rect(enemy[0], enemy[1], 50, 50)
                        p = pygame.Rect(main_player[0], main_player[1], 30, 30)

                        if e.colliderect(p):
                            enemy[2] = True
                            down_e.remove(enemy)
                            score += 1
                    
                
        
        keys = pygame.key.get_pressed() #return state of all our keys
        #START TRIGGER
        pygame.draw.rect(DISPLAYSURF, "gray", (400-camera[0], 400-camera[1], 200, 200))
        
        start_rect = pygame.Rect(400, 400, 200, 200)
        p_rect = pygame.Rect(main_player[0], main_player[1], 30, 30)

        if start_rect.colliderect(p_rect) and startT == 0:
            startT = pygame.time.get_ticks()
            
        #ENEMY | SPAWN FROM FOUR DIFF DIRECTIONS
        # [x, y, collided] | attributes
        if loop % 30 == 0 and start_rect.colliderect(p_rect):

            direction = random.randint(1, 4)

            if direction == 1: #right to left

                #init attributes
                x = 1000
                y = random.randint(450, 550)

                collided = False

                #append enemy
                right_e.append([x, y, collided])
            if direction == 2: #left to right
                x = 0
                y = random.randint(450, 550)

                collided = False

                left_e.append([x, y, collided])
            if direction == 3: #top to bottom
                y = 0
                x = random.randint(450, 550)

                collided = False

                up_e.append([x, y, collided])
            if direction == 4: #bottom to top
                y = 1000
                x = random.randint(450, 550)

                collided = False

                down_e.append([x, y, collided])

        #DRAW | MOVE
        for enemy in right_e:

            collided = enemy[2] #take the collission flag of each enemy
            if not collided:
                pygame.draw.rect(DISPLAYSURF, "#F81894", (enemy[0]-camera[0], enemy[1]-camera[1], 50, 50))
                enemy[0] -= 4 #move right to left

        for enemy in left_e:

            collided = enemy[2]
            if not collided:
                pygame.draw.rect(DISPLAYSURF, "#DE3163", (enemy[0]-camera[0], enemy[1]-camera[1], 50, 50))
                enemy[0] += 4 #move left to right
        for enemy in up_e:

            collided = enemy[2]
            if not collided:
                pygame.draw.rect(DISPLAYSURF, "#FC0FC0", (enemy[0]-camera[0], enemy[1]-camera[1], 50, 50))
                enemy[1] += 4 #move top to bottom

        for enemy in down_e:

            collided = enemy[2]
            if not collided:
                pygame.draw.rect(DISPLAYSURF, "#FF69B4", (enemy[0]-camera[0], enemy[1]-camera[1], 50, 50))
                enemy[1] -= 4 #move bottom to top
                
        #remove useless tiles
        for enemy in right_e:
            if (enemy[0] < 0): #if enemy leaves their bound based on direction remove it
                right_e.remove(enemy)
                score-=5
        for enemy in left_e:
            if (enemy[0] > 1000):
                left_e.remove(enemy)
                score-=5

        for enemy in up_e:
            if (enemy[1] > 1000):
                up_e.remove(enemy)
                score-=5

        for enemy in down_e:
            if (enemy[1] < 0):
                down_e.remove(enemy)
                score-=5
                
        #MUSIC START | music will only start if it hasn't started already, and if we're on play area
        if not music_started and start_rect.colliderect(p_rect):
            pygame.mixer.music.play(-1)
            music_started = True
            
        elif music_started and not start_rect.colliderect(p_rect):
            pygame.mixer.music.stop()
            music_started = False

        #losing condition
        if score <= -10:
            music_started = False
            pygame.mixer.music.stop()
            endT = pygame.time.get_ticks()

            if not lose:
                time = endT - startT

            timeL = font.render("YOU TOOK "+str(time/1000)+" seconds to die", 1, "white")
            DISPLAYSURF.fill("red")
            DISPLAYSURF.blit(timeL, (100, 200))
                
            lose = True

            


        #PLAYER
        player.move(keys, main_player)
        player.animate(main_player, keys, DISPLAYSURF)


        #CHANGE WINDOW
        surf = pygame.transform.scale(DISPLAYSURF, (MAP_WIDTH, MAP_HEIGHT))
        GAMEMAP.blit(surf, (0,0))
        
        pygame.display.update()



