# Path: core/config.py
# def get_sprite(frame):
# def load_image(name):
# def load_sound(name):
# def load_text(name, lang):
# def loop_sound(sound):
# def on_off(condition):
# def percent_str(var):
# def play_music(name):
# def set_volume():
# def init_music_volume():
# def show_fps():
# def take_screenshot():
# def toggle_frame_limit():
# def toggle_fullscreen():
# def toggle_pause():
#     def __init__(self, *keys):
# APP_DATA_WIN = 'APPDATA'
# APP_DATA_LIN = 'HOME'
# BLIT_FLAGS    = HWSURFACE | HWACCEL | ASYNCBLIT | RLEACCEL
# CURSOR_BEEP   = load_sound('cursor.wav')
# CURSOR_SELECT = load_sound('select.wav')
# DATA_STORE    = join(environ[APP_DATA_WIN if 'win' in sys.platform else APP_DATA_LIN], 'Invasodado')
# DEBUG         =  __debug__ and not hasattr(sys, 'frozen') #cx_freeze adds 'frozen' to the sys module
# DEPTH         = 8
# EARTH         = load_image('earth.png')
# ENCODING      = 'utf-8'
# EVENTS_OK     = (KEYDOWN, MOUSEBUTTONDOWN, QUIT)
# FONT          = pygame.font.Font(join('gfx', 'font.ttf'), 18)
# FULL_FLAGS    = FULLSCREEN | HWSURFACE | DOUBLEBUF
# GRID_BG       = load_image('bg.png')
# ON_OFF        = {
#                  'en' : ("Off", "On"),
#                  'es' : ("No" , "Sí"),
#                 }
# PAUSE         = load_sound('pause.wav')
# SCREEN_DIMS   = tuple(pygame.display.list_modes())
# SCREEN_HEIGHT = screen.get_height()
# SCREEN_RECT   = Rect((0, 0), screen.get_size())
# SCREEN_WIDTH  = screen.get_width()
# SPRITES       = load_image('sprites.png')
# EARTH = EARTH.subsurface(Rect(0, 0, EARTH.get_width(), EARTH.get_height() / 2))
# class Enum:
# 
# Path: core/color.py
# RED    = Color('#FF3333')
# GREEN  = Color('#4FFF55')
# BLUE   = Color('#585EFF')
# YELLOW = Color('#EBFF55')
# PURPLE = Color('#FF55D5')
# WHITE  = Color('#FFFFFF')
# BLACK  = Color('#000000')
# COLOR_BLIND_FRAMES  = tuple(Rect(32 * i, 32, 32, 32) for i in range(4, 10))
# COLOR_BLIND_SYMBOLS = {
#                         id(RED)    : config.get_sprite(COLOR_BLIND_FRAMES[0]),
#                         id(BLUE)   : config.get_sprite(COLOR_BLIND_FRAMES[1]),
#                         id(GREEN)  : config.get_sprite(COLOR_BLIND_FRAMES[2]),
#                         id(YELLOW) : config.get_sprite(COLOR_BLIND_FRAMES[3]),
#                         id(PURPLE) : config.get_sprite(COLOR_BLIND_FRAMES[4]),
#                         id(WHITE)  : None                                    ,
#                        }
# COLOR_KEY           = config.SPRITES.get_at((0, config.SPRITES.get_height() - 1))
# LIST                = (RED, BLUE, GREEN, YELLOW, PURPLE)
# def blend_color(surface, color):
# def get_colored_objects(frames, has_alpha=True, color_blind=False, pause_frame=True):
# def _rand_color_appear(self):
# 
# Path: game/gamedata.py
# DEFAULT_LIVES = 3
# MAX_COMBO_TIME = 60  #In frames
# def clean_up():


from pygame.display import get_surface
from pygame         import Rect
from pygame         import Surface
from pygame.sprite  import GroupSingle, Sprite
from core import config
from core import color
from game import gamedata
BLOCK_TYPE = None
CELL_SIZE  = (32, 32)
COMBOS     = tuple(config.load_sound('combo%d.wav' % i) for i in range(1, 6))
SIZE       = (20, 12) #(width, height)
RECT       = Rect(0, 0, get_surface().get_width(), SIZE[1] * CELL_SIZE[1])
################################################################################

### Globals ####################################################################
blocks           = None
block_buffer     = GroupSingle(Sprite())
_blocks_to_check = set()
_blocks_to_clear = set()
_block_clear     = config.load_sound('clear.wav')


block_buffer.sprite.rect = Rect(0, 0, 0, 0)
################################################################################

def any_active():
    s = BLOCK_TYPE.STATES
    
    for i in BLOCK_TYPE.GROUP:
        if i.state not in {s.IDLE, s.ACTIVE}:
        #If this block is moving...
            return True
    return False

def cache_block_image():
    global block_buffer
    block_buffer.sprite.image = Surface((640, 384), config.BLIT_FLAGS, config.DEPTH)

# Path: core/config.py
# def get_sprite(frame):
# def load_image(name):
# def load_sound(name):
# def load_text(name, lang):
# def loop_sound(sound):
# def on_off(condition):
# def percent_str(var):
# def play_music(name):
# def set_volume():
# def init_music_volume():
# def show_fps():
# def take_screenshot():
# def toggle_frame_limit():
# def toggle_fullscreen():
# def toggle_pause():
#     def __init__(self, *keys):
# APP_DATA_WIN = 'APPDATA'
# APP_DATA_LIN = 'HOME'
# BLIT_FLAGS    = HWSURFACE | HWACCEL | ASYNCBLIT | RLEACCEL
# CURSOR_BEEP   = load_sound('cursor.wav')
# CURSOR_SELECT = load_sound('select.wav')
# DATA_STORE    = join(environ[APP_DATA_WIN if 'win' in sys.platform else APP_DATA_LIN], 'Invasodado')
# DEBUG         =  __debug__ and not hasattr(sys, 'frozen') #cx_freeze adds 'frozen' to the sys module
# DEPTH         = 8
# EARTH         = load_image('earth.png')
# ENCODING      = 'utf-8'
# EVENTS_OK     = (KEYDOWN, MOUSEBUTTONDOWN, QUIT)
# FONT          = pygame.font.Font(join('gfx', 'font.ttf'), 18)
# FULL_FLAGS    = FULLSCREEN | HWSURFACE | DOUBLEBUF
# GRID_BG       = load_image('bg.png')
# ON_OFF        = {
#                  'en' : ("Off", "On"),
#                  'es' : ("No" , "Sí"),
#                 }
# PAUSE         = load_sound('pause.wav')
# SCREEN_DIMS   = tuple(pygame.display.list_modes())
# SCREEN_HEIGHT = screen.get_height()
# SCREEN_RECT   = Rect((0, 0), screen.get_size())
# SCREEN_WIDTH  = screen.get_width()
# SPRITES       = load_image('sprites.png')
# EARTH = EARTH.subsurface(Rect(0, 0, EARTH.get_width(), EARTH.get_height() / 2))
# class Enum:
# 
# Path: core/color.py
# RED    = Color('#FF3333')
# GREEN  = Color('#4FFF55')
# BLUE   = Color('#585EFF')
# YELLOW = Color('#EBFF55')
# PURPLE = Color('#FF55D5')
# WHITE  = Color('#FFFFFF')
# BLACK  = Color('#000000')
# COLOR_BLIND_FRAMES  = tuple(Rect(32 * i, 32, 32, 32) for i in range(4, 10))
# COLOR_BLIND_SYMBOLS = {
#                         id(RED)    : config.get_sprite(COLOR_BLIND_FRAMES[0]),
#                         id(BLUE)   : config.get_sprite(COLOR_BLIND_FRAMES[1]),
#                         id(GREEN)  : config.get_sprite(COLOR_BLIND_FRAMES[2]),
#                         id(YELLOW) : config.get_sprite(COLOR_BLIND_FRAMES[3]),
#                         id(PURPLE) : config.get_sprite(COLOR_BLIND_FRAMES[4]),
#                         id(WHITE)  : None                                    ,
#                        }
# COLOR_KEY           = config.SPRITES.get_at((0, config.SPRITES.get_height() - 1))
# LIST                = (RED, BLUE, GREEN, YELLOW, PURPLE)
# def blend_color(surface, color):
# def get_colored_objects(frames, has_alpha=True, color_blind=False, pause_frame=True):
# def _rand_color_appear(self):
# 
# Path: game/gamedata.py
# DEFAULT_LIVES = 3
# MAX_COMBO_TIME = 60  #In frames
# def clean_up():


# Path: game/blockgrid.py
from pygame.display import get_surface
from pygame         import Rect
from pygame         import Surface
from pygame.sprite  import GroupSingle, Sprite
from core import config
from core import color
from game import gamedata

BLOCK_TYPE = None
CELL_SIZE  = (32, 32)
COMBOS     = tuple(config.load_sound('combo%d.wav' % i) for i in range(1, 6))
SIZE       = (20, 12) #(width, height)
RECT       = Rect(0, 0, get_surface().get_width(), SIZE[1] * CELL_SIZE[1])
################################################################################

### Globals ####################################################################
blocks           = None
block_buffer     = GroupSingle(Sprite())
_blocks_to_check = set()
_blocks_to_clear = set()
_block_clear     = config.load_sound('clear.wav')


block_buffer.sprite.rect = Rect(0, 0, 0, 0)
################################################################################

def any_active():
    s = BLOCK_TYPE.STATES
    
    for i in BLOCK_TYPE.GROUP:
        if i.state not in {s.IDLE, s.ACTIVE}:
        #If this block is moving...
            return True
    return False

def cache_block_image():
    global block_buffer
    block_buffer.sprite.image = Surface((640, 384), config.BLIT_FLAGS, config.DEPTH)

    block_buffer.sprite.image.set_colorkey(color.BLACK, config.BLIT_FLAGS)