diff options
author | P. J. McDermott <pj@pehjota.net> | 2021-08-02 20:50:54 (EDT) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2021-08-02 21:11:39 (EDT) |
commit | 6f4631c8f82a2a631730767cad70c0b6ae02e0ad (patch) | |
tree | 7e1935f684c6dc84e8e626797e2f7fd4c9b3564f /src/splash.c | |
parent | 947c9712a31c8031d1045e34b222384613cfa9b4 (diff) | |
download | mazefight-6f4631c8f82a2a631730767cad70c0b6ae02e0ad.zip mazefight-6f4631c8f82a2a631730767cad70c0b6ae02e0ad.tar.gz mazefight-6f4631c8f82a2a631730767cad70c0b6ae02e0ad.tar.bz2 |
splash: New (WIP) screen
Diffstat (limited to 'src/splash.c')
-rw-r--r-- | src/splash.c | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/splash.c b/src/splash.c new file mode 100644 index 0000000..f662a0d --- /dev/null +++ b/src/splash.c @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Maze Fight + * + * Maze Fight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Maze Fight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Maze Fight. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <SDL.h> +#include <SDL_ttf.h> +#include <stdlib.h> +#include <time.h> +#include "defs.h" +#include "dirs.h" +#include "maze.h" +#include "splash.h" +#include "util.h" + +static SDL_Texture * +_mf_splash_text(TTF_Font *font, const char *text, SDL_Color *color, + SDL_Renderer *renderer, SDL_Rect *rect) +{ + SDL_Surface *surface; + SDL_Texture *texture; + + surface = TTF_RenderUTF8_Blended(font, text, *color); + if (surface == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't create surface: %s", + TTF_GetError()); + return NULL; + } + + texture = SDL_CreateTextureFromSurface(renderer, surface); + if (texture == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't create texture: %s", + SDL_GetError()); + return NULL; + } + + rect->w = surface->w; + rect->h = surface->h; + + SDL_FreeSurface(surface); + + return texture; +} + +int +mf_splash(SDL_Renderer *renderer) +{ + char *font_path; + SDL_Color text_color; + TTF_Font *font; + SDL_Rect title_rect; + SDL_Texture *title_texture; + SDL_Rect form_rect; + struct mf_maze *maze; + SDL_Color maze_color; + SDL_Event event; + + font_path = mf_strcat(mf_get_fonts_dir(), "/FifteenTwenty-Regular.ttf"); + + text_color.r = MF_COLOR_FORE_R; + text_color.g = MF_COLOR_FORE_G; + text_color.b = MF_COLOR_FORE_B; + text_color.a = MF_COLOR_FORE_A; + + /* Render title text */ + font = TTF_OpenFont(font_path, MF_SPLASH_TITLE_FONT_S); + if (font == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't open font: %s", + TTF_GetError()); + free(font_path); + return -1; + } + title_texture = _mf_splash_text(font, "Maze Fight", &text_color, + renderer, &title_rect); + if (title_texture == NULL) { + goto err; + } + TTF_CloseFont(font); + font = NULL; + title_rect.x = (MF_WINDOW_W - title_rect.w) / 2; + title_rect.y = MF_SPLASH_WINDOW_P + MF_SPLASH_FORM_P; + + /* TODO: Widgets */ + + /* TODO: Size to widgets and center in window */ + form_rect.x = MF_SPLASH_WINDOW_P; + form_rect.y = MF_SPLASH_WINDOW_P; + form_rect.w = MF_WINDOW_W - MF_SPLASH_WINDOW_P*2; + form_rect.h = MF_WINDOW_H - MF_SPLASH_WINDOW_P*2; + + free(font_path); + font_path = NULL; + + /* Create maze */ + maze = mf_maze_new(time(NULL), + MF_WINDOW_W / MF_SPLASH_MAZE_CELL_W, + MF_WINDOW_H / MF_SPLASH_MAZE_CELL_W); + if (maze == NULL) { + goto err; + } + maze_color.r = MF_COLOR_MAZE_R; + maze_color.g = MF_COLOR_MAZE_G; + maze_color.b = MF_COLOR_MAZE_B; + maze_color.a = MF_COLOR_MAZE_A; + + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); + + while (SDL_WaitEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + goto quit; + default: + break; + } + SDL_SetRenderDrawColor(renderer, + MF_COLOR_BACK_R, MF_COLOR_BACK_G, + MF_COLOR_BACK_B, MF_COLOR_BACK_A); + SDL_RenderClear(renderer); + mf_maze_render(maze, renderer, &maze_color, + MF_SPLASH_MAZE_CELL_W); + SDL_SetRenderDrawColor(renderer, + MF_COLOR_FORM_R, MF_COLOR_FORM_G, + MF_COLOR_FORM_B, MF_COLOR_FORM_A); + SDL_RenderFillRect(renderer, &form_rect); + SDL_RenderCopy(renderer, title_texture, NULL, &title_rect); + SDL_RenderPresent(renderer); + } + + quit: + SDL_DestroyTexture(title_texture); + title_texture = NULL; + + mf_maze_destroy(&maze); + + return 0; + + err: + if (font_path != NULL) { + free(font_path); + } + if (font != NULL) { + TTF_CloseFont(font); + } + if (title_texture != NULL) { + SDL_DestroyTexture(title_texture); + } + return -1; +} |