orton_runner/src/text/print_message.c

62 lines
1.7 KiB
C

/*
** EPITECH PROJECT, 2018
** task01
** File description:
** I do task
*/
#include <stdlib.h>
#include "game/message.h"
#include "game/ascii.h"
#include "game/core.h"
static void print_message(sfml_t *sfml, message_t *message)
{
uint32_t *option;
int pos[2];
option = my_print_set_option(3, 0x000000ff,
0xffffffff, ASCII_CENTER_X | ASCII_REVERSE);
pos[0] = message->x;
pos[1] = message->y + 16;
my_print(sfml, pos, message->message, option);
message->timer_message--;
free(option);
}
static void update_active(sfml_t *sfml)
{
uint8_t *map = sfml->scene->level->map;
intmax_t width = sfml->scene->level->width;
intmax_t x = sfml->scene->player->x;
intmax_t y = sfml->scene->player->y;
if (map[(x + 9 >> 6) + (y >> 6) * width] == ID_FAKE_GROUND
|| map[(x + 53 >> 6) + (y >> 6) * width] == ID_FAKE_GROUND
|| map[(x + 53 >> 6) + (y + 64 >> 6) * width] == ID_FAKE_GROUND
|| map[(x + 9 >> 6) + (y + 64 >> 6) * width] == ID_FAKE_GROUND)
sfml->scene->message_active |= MESSAGE_FAKE_GROUND;
}
void check_message(sfml_t *sfml, message_t **message)
{
int counter = 0;
int exit = 1;
int i = -1;
update_active(sfml);
while (++i < sfml->scene->nb_message)
if (message[i]->timer_message > 0
&& (message[i]->timer_message != MESSAGE_DEFAULT_TIME
|| (message[i]->action == MESSAGE_DEAD
&& message[i]->trigger_data ==
sfml->scene->player->nb_dead)
|| (message[i]->action == MESSAGE_X_TRIGGER
&& sfml->scene->player->x >= message[i]->trigger_data)
|| (message[i]->action == MESSAGE_FAKE_GROUND
&& sfml->scene->message_active & MESSAGE_FAKE_GROUND)
|| (message[i]->action == MESSAGE_FAKE_PRINCESS
&& sfml->scene->message_active
& MESSAGE_FAKE_PRINCESS)))
print_message(sfml, message[i]);
}