109 lines
3.6 KiB
C
109 lines
3.6 KiB
C
/*
|
|
** EPITECH PROJECT, 2018
|
|
** task01
|
|
** File description:
|
|
** I do task
|
|
*/
|
|
#include "lib/my_graphics.h"
|
|
#include "game/draw.h"
|
|
#include "game/core.h"
|
|
|
|
static const uint8_t wall_pik[] = {128, 192, 128, 0, 128, 192, 128, 0};
|
|
static const uint8_t player_run_a_r[] = {0, 126, 66, 86, 66, 66, 126, 40};
|
|
static const uint8_t player_run_b_r[] = {0, 126, 66, 86, 66, 66, 126, 34};
|
|
static const uint8_t player_run_c_r[] = {126, 66, 86, 66, 66, 127, 128, 0};
|
|
static const uint8_t player_run_d_r[] = {126, 66, 86, 66, 66, 254, 1, 0};
|
|
static const uint8_t player_idle_r[] = {0, 126, 66, 86, 66, 66, 126, 66};
|
|
static const uint8_t player_jump_r[] = {126, 66, 86, 66, 66, 255, 0, 0};
|
|
static const uint8_t player_run_a_l[] = {0, 126, 66, 106, 66, 66, 126, 20};
|
|
static const uint8_t player_run_b_l[] = {0, 126, 66, 106, 66, 66, 126, 68};
|
|
static const uint8_t player_run_c_l[] = {126, 66, 106, 66, 66, 254, 1, 0};
|
|
static const uint8_t player_run_d_l[] = {126, 66, 106, 66, 66, 127, 128, 0};
|
|
static const uint8_t player_idle_l[] = {0, 126, 66, 106, 66, 66, 126, 66};
|
|
static const uint8_t player_jump_l[] = {126, 66, 106, 66, 66, 255, 0, 0};
|
|
static const uint8_t explosion_a[] = {0, 44, 82, 74, 129, 110, 48, 0};
|
|
static const uint8_t explosion_b[] = {6, 105, 66, 136, 2, 33, 132, 99};
|
|
static const uint8_t explosion_c[] = {8, 65, 16, 132, 0, 0, 17, 130};
|
|
static const uint8_t* player[]={
|
|
player_run_a_l, player_run_b_l, player_run_c_l, player_run_d_l,
|
|
player_run_a_r, player_run_b_r, player_run_c_r, player_run_d_r,
|
|
player_jump_l, player_jump_r,
|
|
player_idle_l, player_idle_r,
|
|
explosion_a, explosion_b, explosion_c
|
|
};
|
|
|
|
static void draw_line(sfml_t *sfml, const uint8_t *bmp, int draw[4], int y)
|
|
{
|
|
int end;
|
|
int x;
|
|
|
|
x = (draw[0] < 0) ? -draw[0] - 1 : -1;
|
|
end = (x + (8 << draw[2]) > sfml->width) ?
|
|
sfml->width - x : (8 << draw[2]);
|
|
while (++x < end){
|
|
if (bmp[y >> draw[2]] & 0x80 >> (x >> draw[2]))
|
|
my_pixel(sfml, draw[0] + x, draw[1] + y, draw[3]);
|
|
}
|
|
}
|
|
|
|
void draw_monochrome(sfml_t *sfml, const uint8_t *bmp, int draw[4])
|
|
{
|
|
int end;
|
|
int y;
|
|
|
|
y = (draw[1] < 0) ? -draw[1] - 1 : -1;
|
|
end = (y + (8 << draw[2]) > sfml->height) ?
|
|
sfml->height - y : (8 << draw[2]);
|
|
while (++y < end)
|
|
if (bmp[y >> draw[2]])
|
|
draw_line(sfml, bmp, draw, y);
|
|
}
|
|
|
|
void player_rendering(sfml_t *sfml)
|
|
{
|
|
int draw[4];
|
|
int locate;
|
|
|
|
locate = 0;
|
|
if (sfml->scene->player->action & PLAYER_RUN)
|
|
locate = sfml->scene->player->frame_counter / 5
|
|
+ ((sfml->scene->player->action & PLAYER_LEFT) ? 4 : 0);
|
|
if (sfml->scene->player->action & PLAYER_JUMP)
|
|
locate = (sfml->scene->player->action & PLAYER_LEFT) ? 9 : 8;
|
|
if (sfml->scene->player->action & PLAYER_IDLE)
|
|
locate = (sfml->scene->player->action & PLAYER_LEFT) ? 11 : 10;
|
|
if (sfml->scene->player->action & PLAYER_DEAD)
|
|
locate = sfml->scene->player->dead_counter /
|
|
PLAYER_DEAD_TIME + 12;
|
|
draw[0] = sfml->scene->player->x - sfml->scene->camera->x;
|
|
draw[1] = sfml->scene->player->y - sfml->scene->camera->y;
|
|
draw[2] = 3;
|
|
draw[3] = 0x000000ff;
|
|
draw_monochrome(sfml, player[locate], draw);
|
|
}
|
|
|
|
void wall_rendering(sfml_t *sfml)
|
|
{
|
|
int offset_y = sfml->scene->camera->y & 0x1f;
|
|
int sprite_load_y;
|
|
int rectangle[4];
|
|
int draw[4];
|
|
int i = -1;
|
|
|
|
rectangle[0] = sfml->scene->wall->x - sfml->scene->camera->x;
|
|
rectangle[1] = 0;
|
|
rectangle[2] = sfml->scene->wall->x + WALL_SIZE -
|
|
sfml->scene->camera->x;
|
|
rectangle[3] = sfml->height;
|
|
my_filled_rectangle(sfml, rectangle, 0x000000ff);
|
|
sprite_load_y = (offset_y) ? BLOCK_LOAD_Y : BLOCK_LOAD_Y + 1;
|
|
while (++i < sprite_load_y){
|
|
draw[0] = sfml->scene->wall->x + WALL_SIZE -
|
|
sfml->scene->camera->x;
|
|
draw[1] = (i << 6) - offset_y;
|
|
draw[2] = 3;
|
|
draw[3] = 0x000000ff;
|
|
draw_monochrome(sfml, wall_pik, draw);
|
|
}
|
|
}
|