NEWS: Welcome to my new homepage! <3

util.c - freezo - A retro platform game

freezo

A retro platform game
git clone git://192.168.2.2/freezo
Log | Files | Refs | README

util.c (2627B)


      1 #include <stdlib.h>
      2 #include <string.h>
      3 
      4 #include "util.h"
      5 #include "const.h"
      6 
      7 timer_t *timer_create(int frames, int step) {
      8   timer_t *timer = malloc(sizeof(timer_t));
      9   timer->frames = step * frames;
     10   timer->count = 0;
     11   timer->step = step;
     12   return timer;
     13 }
     14 
     15 bool timer_check(timer_t *timer) {
     16   return timer->count == 0;
     17 }
     18 
     19 void timer_update(timer_t *timer) {
     20   if (timer->count >= timer->frames) {
     21     timer->count = 0;
     22   }
     23   else {
     24     timer->count++;
     25   }
     26 }
     27 
     28 void timer_reset(timer_t *timer) {
     29   timer->count = 0;
     30 }
     31 
     32 int timer_get(timer_t *timer) {
     33   return timer->count / timer->step;
     34 }
     35 
     36 void timer_free(timer_t *timer) {
     37   free(timer);
     38 }
     39 
     40 pos_t pos_snap(pos_t vec) {
     41   return (pos_t) { (int) vec.x, (int) vec.y };
     42 }
     43 
     44 rect_t rect_from_pos(pos_t pos, int width, int height) {
     45   return (rect_t) { pos.x, pos.y, width, height };
     46 }
     47 
     48 bool rect_collide(rect_t a, rect_t b) {
     49   return !(
     50     a.x > b.x + b.width ||
     51     a.x + a.width < b.x ||
     52     a.y + a.height < b.y ||
     53     a.y > b.y + b.height
     54   );
     55 }
     56 
     57 Texture2D texture_load(char *filename, int scale) {
     58   Image image = LoadImage(filename);
     59   ImageResizeNN(&image, scale * image.width, scale * image.height);
     60   Texture2D texture = LoadTextureFromImage(image);
     61   UnloadImage(image);
     62   return texture;
     63 }
     64 
     65 Rectangle texture_rect(int x, int y, int width, int height) {
     66   return (Rectangle) { x * width, y * height, width, height };
     67 }
     68 
     69 
     70 void text_draw(pos_t pos, char *text, text_alignment_e alignment, game_t *game) {
     71   pos_t text_pos = pos;
     72   int text_len = strlen(text);
     73   float text_width = text_len * (FONT_WIDTH + FONT_WIDTH / 3.0);
     74   switch (alignment) {
     75     case TEXT_ALIGNMENT_LEFT:
     76       break;
     77     case TEXT_ALIGNMENT_RIGHT:
     78       text_pos.x -= text_width;
     79       break;
     80     case TEXT_ALIGNMENT_CENTER: {
     81       text_pos.x -= text_width / 2.0;
     82       break;
     83     }
     84   }
     85   for (int i = 0; i < text_len; i++) {
     86     char c = text[i];
     87     int x = 0;
     88     int y = 0;
     89     if (c >= 48 && c <= 58) {
     90       x = text[i] - 48;
     91       y = 0;
     92     }
     93     else if (c >= 65 && c <= 90) {
     94       x = (text[i] - 65) % 10;
     95       y = (text[i] - 65) / 10 + 1;
     96     }
     97     else if (c >= 97 && c <= 122) {
     98       x = (text[i] - 97) % 10;
     99       y = (text[i] - 97) / 10 + 1;
    100     }
    101     else if (c == ' ') {
    102       x = 9;
    103       y = 3;
    104     }
    105     else if (c == '+') {
    106       x = 7;
    107       y = 3;
    108     }
    109     else if (c == '-') {
    110       x = 8;
    111       y = 3;
    112     }
    113     else {
    114       x = 6;
    115       y = 3;
    116     }
    117     DrawTextureRec(
    118       game->assets.font,
    119       texture_rect(x, y, FONT_WIDTH, FONT_HEIGHT),
    120       pos_snap((pos_t) { text_pos.x + i * (FONT_WIDTH + FONT_WIDTH / 3.0), text_pos.y }),
    121       WHITE
    122     );
    123   }
    124 }