src/draw.c
author Tampax86
Thu, 17 Jul 2025 22:03:19 -0400
changeset 0 b2e3aa63e96c
permissions -rw-r--r--
First commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     1
/*
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     2
Copyright (c) 2023 MCL Software
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     3
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     4
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     5
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     6
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     7
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     8
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
     9
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    10
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    11
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    12
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    13
*/
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    14
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    15
#include "draw.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    16
#include "common.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    17
#include "missions.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    18
#include "localztn.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    19
#include "SDL2/SDL_ttf.h"
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    20
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    21
SDL_Rect clip;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    22
SDL_Rect destRect;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    23
SDL_Renderer* renderer = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    24
SDL_Texture* tilemap = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    25
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    26
FC_Font* font = 0;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    27
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    28
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    29
void initGraphics()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    30
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    31
    IMG_Init(IMG_INIT_PNG);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    32
    SDL_Surface* tilemapSurface = IMG_Load("./img/tilemap.png");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    33
    SDL_Surface* logoSurface = IMG_Load("./img/logo.png");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    34
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    35
    tilemap = SDL_CreateTextureFromSurface(renderer, tilemapSurface);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    36
    logo = SDL_CreateTextureFromSurface(renderer, logoSurface);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    37
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    38
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    39
    SDL_FreeSurface(tilemapSurface);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    40
    SDL_FreeSurface(logoSurface);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    41
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    42
    initTitleScreenGraphics();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    43
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    44
    // Create font cache
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    45
    font = FC_CreateFont();
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    46
    FC_LoadFont(font, renderer, "./Montserrat-ExtraBold.ttf", 24, FC_MakeColor(255, 255, 255, 255), TTF_STYLE_NORMAL);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    47
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    48
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    49
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    50
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    51
void freeGraphics()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    52
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    53
    SDL_DestroyTexture(tilemap);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    54
    SDL_DestroyTexture(logo);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    55
    FC_FreeFont(font);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    56
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    57
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    58
void drawLeaveSchool()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    59
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    60
    SDL_SetRenderDrawColor(renderer, 10, 69, 127, 199);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    61
    SDL_RenderFillRect(renderer, &(SDL_Rect){SCREEN_WIDTH / 3, SCREEN_HEIGHT / 3, SCREEN_WIDTH / 3, SCREEN_HEIGHT / 3});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    62
    FC_DrawAlign(font, renderer, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, FC_ALIGN_CENTER, checkForMissionComplete(currentMission) ? "Do you want to leave \nthe campus? (Y/N)" : "You can't leave right now.");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    63
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    64
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    65
void drawHUD()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    66
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    67
    SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    68
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    69
    // Progress bar background
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    70
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 127);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    71
    SDL_RenderFillRect(renderer, &(SDL_Rect){50, 50, 128 * 1.5, 40});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    72
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    73
    FC_SetDefaultColor(font, (SDL_Color){255, 255, 255, 255});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    74
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    75
    // Selected object indicator
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    76
    SDL_RenderFillRect(renderer, &(SDL_Rect){250, 50, FC_GetBounds(font, 250, 50, FC_ALIGN_LEFT, (FC_Scale){1, 1}, "Selected object: %s", getTranslationForObject(levelTiles[player.x * LEVEL_WIDTH + player.y])).w, 40});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    77
    FC_Draw(font, renderer, 250, 55, "Selected object: %s", getTranslationForObject(levelTiles[player.x * LEVEL_WIDTH + player.y]));
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    78
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    79
    // Camera offset
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    80
    SDL_Rect bounds = FC_GetBounds(font, 50, 200, FC_ALIGN_LEFT, (FC_Scale){1, 1}, "Cam offset: %i, %i", offset.x, offset.y);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    81
    bounds.h += 5;
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    82
    SDL_RenderFillRect(renderer, &bounds);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    83
    FC_Draw(font, renderer, 50, 205, "Cam offset: %i, %i", offset.x, offset.y);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    84
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    85
    // Player pos
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    86
    SDL_RenderFillRect(renderer, &(SDL_Rect){50, 100, FC_GetBounds(font, 50, 50, FC_ALIGN_LEFT, (FC_Scale){1, 1}, "Player pos: %i, %i\nObjects stolen: %s", player.x, player.y, player.objectsStolen).w, 75});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    87
    FC_Draw(font, renderer, 50, 105, "Player pos: %i, %i\nObjects stolen: %s", player.x, player.y, player.objectsStolen);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    88
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    89
    // Fill progress bar
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    90
    SDL_SetRenderDrawColor(renderer, 200, 0, 0, 200);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    91
    SDL_RenderFillRect(renderer, &(SDL_Rect){50, 50, stealProgress * 1.5, 40});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    92
    FC_DrawAlign(font, renderer, 50 + 64 * 1.5, 55, FC_ALIGN_CENTER, "Stealing (%i)", stealProgress);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    93
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    94
    if(fireAlarmSystemActivated)
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    95
    {
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    96
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 220);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    97
        SDL_RenderFillRect(renderer, &(SDL_Rect){0, 0, SCREEN_WIDTH, SCREEN_HEIGHT});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    98
    }
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
    99
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   100
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   101
void drawGoToExit()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   102
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   103
    SDL_SetRenderDrawColor(renderer, 0, 0, 255, 200);
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   104
    SDL_RenderFillRect(renderer, &(SDL_Rect){300, 400, 128, 40});
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   105
    FC_Draw(font, renderer, 300, 400, "Go to exit");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   106
}
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   107
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   108
void drawTitleMenuText()
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   109
{
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   110
    FC_DrawAlign(font, renderer, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 1.1, FC_ALIGN_CENTER, "Version 0.9 (2025-01-28)\nDevious Licks is currently in beta. Bugs may occur.");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   111
    FC_Draw(font, renderer, 0, SCREEN_HEIGHT - 30, "Copyright (c) 2023 - 2025 MCL Software");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   112
    FC_DrawAlign(font, renderer, SCREEN_WIDTH, SCREEN_HEIGHT - 30, FC_ALIGN_RIGHT, "Free-as-in-freedom, please copy and share!");
b2e3aa63e96c First commit
Tampax86
parents:
diff changeset
   113
}