void uniFinalizar() { if (!uniEstaInicializada()) return; // finaliza gerenciador de tempo gTempo.finalizar(); // finaliza gerenciador de recursos gRecursos.descarregarTudo(); // finaliza audio gAudios.finalizar(); // finaliza painel de debug gDebug.finalizar(); // finaliza gerenciador de graficos gGraficos.finalizar(); // destroi janela principal gJanela.destruir(); // finaliza globais Global::getInstancia().finalizar(); // finaliza SDL_ttf (biblioteca de fontes) TTF_Quit(); // finaliza SDL SDL_Quit(); // seta uniInicializada para false uniInicializada = false; }
bool TileSet::carregar(const string& arquivo, int largura_tiles, int altura_tiles) { if(!uniEstaInicializada()) { gDebug.erro("Sem uniInicializar() antes de tentar carregar: '" + arquivo + "'."); return false; } if(estaCarregado()) { gDebug.erro("Arquivo '" + arquivo + "' nao pode ser carregado, pois TileSet '" + nome + "' ja carregou algum arquivo."); return false; } bool r = tex.criarDoArquivo(arquivo, QUALIDADE_ESCALA_BAIXA); if(!r) { gDebug.erro("Erro ao carregar arquivo: '" + arquivo + "'."); return false; } largura_tile = largura_tiles; altura_tile = altura_tiles; int largura_total; int altura_total; tex.obterTamanho(largura_total, altura_total); num_tiles_x = largura_total/largura_tiles; num_tiles_y = altura_total/altura_tiles; return true; }
bool Audio::carregar(string arquivo) { if(!uniEstaInicializada()) { gDebug.erro("Sem uniInicializar() antes de tentar carregar: '" + arquivo + "'."); return false; } if(estaCarregado()) { gDebug.erro("Arquivo '" + arquivo + "' nao pode ser carregado, pois Som ja carregou o arquivo " + caminho_arquivo + "."); return false; } mix_chunk = Mix_LoadWAV(arquivo.c_str()); if(!mix_chunk) { gDebug.erro("Erro ao carregar arquivo: '" + arquivo + "' - " + SDL_GetError() + "."); return false; } caminho_arquivo = arquivo; carregado = true; return carregado; }
bool Fonte::carregarTrueType(const string& arquivo, int tamanho, int estilo, Uint16 primeiro_glifo, Uint16 ultimo_glifo, EnumQualidadeEscala qualidade_escala) { if (!uniEstaInicializada()) { gDebug.erro("Sem uniInicializar() antes de tentar carregar: '" + arquivo + "'."); return false; } if (estaCarregada()) { gDebug.erro("Arquivo '" + arquivo + "' nao pode ser carregado, pois Fonte ja carregou o arquivo " + tex.getCaminhoDoArquivo() + "."); return false; } TTF_Font* ttf_font = TTF_OpenFont(arquivo.c_str(), tamanho); if (!ttf_font) { gDebug.erro("Erro ao carregar arquivo: '" + arquivo + "' - " + SDL_GetError() + "."); return false; } TTF_SetFontStyle(ttf_font, estilo); if (!criarTexturaTrueType(ttf_font, tamanho, primeiro_glifo, ultimo_glifo, qualidade_escala)) { glifos.clear(); gDebug.erro("Erro ao criar textura para fonte ttf, usando arquivo: '" + arquivo + "' - " + SDL_GetError() + "."); return false; } glifoNulo.quad.x = 0; glifoNulo.quad.y = 0; glifoNulo.quad.larg = 0; glifoNulo.quad.alt = 0; glifoNulo.alturaAcimaDaBase = 0; glifoNulo.avanco = tamanho; glifoNulo.caractere = 0; this->estilo = estilo; monoespacada = TTF_FontFaceIsFixedWidth(ttf_font) > 0; larguraGlifos = tamanho; alturaGlifos = TTF_FontHeight(ttf_font); ttf = true; return true; }
bool SpriteSheet::carregar(string arquivo, int num_animacoes, int num_max_frames, EnumQualidadeEscala qualidade_escala) { if(!uniEstaInicializada()) { gDebug.erro("Sem uniInicializar() antes de tentar carregar: '" + arquivo + "'."); return false; } if(estaCarregado()) { gDebug.erro("Arquivo '" + arquivo + "' nao pode ser carregado, pois SpriteSheet ja carregou o arquivo " + tex.getCaminhoDoArquivo() + "."); return false; } if(!tex.criarDoArquivo(arquivo, qualidade_escala)) { gDebug.erro("Erro ao carregar arquivo: '" + arquivo + "' - " + SDL_GetError() + "."); return false; } if(num_animacoes < 1) num_animacoes = 1; if(num_max_frames < 1) num_max_frames = 1; int largura_frame = tex.getLargura()/num_max_frames; int altura_frame = tex.getAltura()/num_animacoes; frames.resize(num_animacoes); for(int i = 0; i < frames.size(); ++i) { frames[i].resize(num_max_frames); for(int j = 0; j < num_max_frames; ++j) { frames[i][j] = Quad(j*largura_frame, i*altura_frame, largura_frame, altura_frame); } } return true; }
bool uniInicializar(int largura_janela, int altura_janela, bool tela_cheia, string titulo_janela, int flags_sdl_window) { if (uniEstaInicializada()) { gDebug.erro("uniInicializar() falhou. A biblioteja já foi inicializada anteriormente."); return false; } // inicializa SDL SDL_Init(SDL_INIT_EVERYTHING); if (!SDL_WasInit(0)) return false; // inicializa SDL_ttf (biblioteca de fontes) TTF_Init(); if (!TTF_WasInit()) { SDL_Quit(); return false; } // inicializa globais Global::getInstancia().inicializar(); // cria janela principal bool janela_ok = gJanela.criar(largura_janela, altura_janela, tela_cheia, titulo_janela, flags_sdl_window); if (!janela_ok) { Global::getInstancia().finalizar(); TTF_Quit(); SDL_Quit(); return false; } uniInicializada = true; // seta uniInicializada para true. Precisa ser feito aqui para poder carregar a fonte padrao gGraficos.inicializar(gJanela.getSDL_Renderer()); if (!gGraficos.getFontePadrao()) { // se a fonte padrao nao foi carregada, // limpa o painel de debug e desativa // para nao tentar desenhar sem ter uma fonte. gDebug.limpar(); gDebug.desativar(); } uniInicializada = false; // volta a ser false para continuar a inicializacao // inicializa painel de debug gDebug.inicializar(); // inicializa audio gAudios.inicializar(); if (!gAudios.estaInicializado()) { gDebug.finalizar(); gGraficos.finalizar(); gJanela.destruir(); Global::getInstancia().finalizar(); TTF_Quit(); SDL_Quit(); return false; } // inicializa handlers de eventos gEventos.janela = &gJanela; gEventos.mouse = &gMouse; gEventos.teclado = &gTeclado; gEventos.joysticks = &gJoysticks; gEventos.toques = &gToques; gEventos.atualizar(); // inicializa gerenciador de tempo gTempo.inicializar(); // seta uniInicializada para true uniInicializada = true; return true; }
bool Fonte::carregarBitmap(const string& arquivo, const wstring& caracteres, int num_glifos_x, int num_glifos_y, EnumQualidadeEscala qualidade_escala) { if (!uniEstaInicializada()) { gDebug.erro("Sem uniInicializar() antes de tentar carregar: '" + arquivo + "'."); return false; } if (estaCarregada()) { gDebug.erro("Arquivo '" + arquivo + "' nao pode ser carregado, pois Fonte ja carregou o arquivo " + tex.getCaminhoDoArquivo() + "."); return false; } if (caracteres.empty()) { gDebug.erro("Fonte bitmap '" + arquivo + "' não pode ser carregada sem informar os caracteres usados."); return false; } if (!criarTexturaBitmap(arquivo, qualidade_escala)) { glifos.clear(); gDebug.erro("Erro ao criar textura para fonte bitmap, usando arquivo: '" + arquivo + "' - " + SDL_GetError() + "."); return false; } int larg, alt; tex.obterTamanho(larg, alt); larg /= num_glifos_x; alt /= num_glifos_y; ascent = alt; unsigned int size = num_glifos_x*num_glifos_y; if (caracteres.size() < size) size = caracteres.size(); glifos.resize(size); for (unsigned int i = 0; i < size; ++i) { Glifo* g = &glifos[i]; g->caractere = (Uint16)caracteres[i]; g->quad.alt = alt; g->quad.larg = larg; g->avanco = larg; g->quad.x = (i % num_glifos_x)*larg; g->quad.y = (i / num_glifos_x)*alt; g->dx = 0; g->alturaAcimaDaBase = alt; } // ordena caracteres para poder acessa-los mais facilmente for (unsigned int i = 0; i < size; ++i) for (unsigned int j = i + 1; j < size; ++j) { if (glifos[j].caractere < glifos[i].caractere) { Glifo temp = glifos[i]; glifos[i] = glifos[j]; glifos[j] = temp; } } glifoNulo.quad.x = 0; glifoNulo.quad.y = 0; glifoNulo.quad.larg = 0; glifoNulo.quad.alt = 0; glifoNulo.dx = 0; glifoNulo.alturaAcimaDaBase = 0; glifoNulo.avanco = larg; glifoNulo.caractere = 0; estilo = FONTE_ESTILO_NORMAL; monoespacada = true; numGlifosX = num_glifos_x; numGlifosY = num_glifos_y; larguraGlifos = glifos[0].quad.larg; alturaGlifos = glifos[0].quad.alt; ttf = false; return true; }