orton_runner/src/game/camera.c

60 lines
1.7 KiB
C

/*
** EPITECH PROJECT, 2018
** task01
** File description:
** I do task
*/
#include <stdlib.h>
#include "lib/my_stdlib.h"
#include "game/game.h"
#include "game/core.h"
static void update_camera_dead(scene_t *scene)
{
scene->camera->x += rand() % CAMERA_SHAKY;
scene->camera->y += rand() % CAMERA_SHAKY;
scene->player->dead_counter++;
if (scene->player->dead_counter >= PLAYER_DEAD_TIME * 3){
scene->player->x = scene->player->start_x;
scene->player->y = scene->player->start_y;
if (scene->wall != NULL)
scene->wall->x = scene->player->x - (WALL_SIZE << 2);
scene->player->action = PLAYER_IDLE | PLAYER_LEFT;
scene->player->dead_counter = 0;
scene->player->frame_counter = 0;
scene->player->dx = 0;
scene->player->dy = 0;
scene->player->nb_dead++;
}
}
static void fix_camera(scene_t *scene, int width, int height)
{
if (scene->camera->x < 0)
scene->camera->x = 0;
if (scene->camera->y < 0)
scene->camera->y = 0;
if (scene->camera->x + width > scene->level->width << 6)
scene->camera->x = (scene->level->width << 6) - width;
if (scene->camera->y + height > scene->level->height << 6)
scene->camera->y = (scene->level->height << 6) - height;
}
void game_camera_update(scene_t *scene, int width, int height)
{
int dx;
int dy;
dx = scene->player->x - (width >> 1) - scene->camera->x;
dy = scene->player->y - (height >> 1) - scene->camera->y;
scene->camera->x = (my_abs(dx) > CAMERA_SPEED)
? scene->camera->x + CAMERA_SPEED * ((dx < 0) ? -1 : 1)
: scene->player->x - (width >> 1);
scene->camera->y = (my_abs(dy) > CAMERA_SPEED)
? scene->camera->y + CAMERA_SPEED * ((dy < 0) ? -1 : 1)
: scene->player->y - (height >> 1);
fix_camera(scene, width, height);
if (scene->player->action & PLAYER_DEAD)
update_camera_dead(scene);
}