orton_runner/src/game/update_obj.c

79 lines
2.2 KiB
C

/*
** EPITECH PROJECT, 2018
** task01
** File description:
** I do task
*/
#include "game/game.h"
#include "game/core.h"
static void player_jump(sfml_t *sfml)
{
if (sfml->key & (PRES_SPACE | PRES_UP)
&& (sfml->scene->player->dy <= 0
|| !(sfml->scene->player->action & PLAYER_CANT_JUMP))
&& sfml->scene->player->counter_jump < PLAYER_MAX_JUMP){
if (!(sfml->scene->player->action & PLAYER_CANT_JUMP)){
sfml->scene->player->action |= PLAYER_CANT_JUMP;
sfml->scene->player->dy = -8;
}
else
sfml->scene->player->dy -= 2;
sfml->scene->player->counter_jump++;
}
if (sfml->scene->player->dy < PLAYER_FALL_MAX)
sfml->scene->player->dy++;
sfml->scene->player->y += sfml->scene->player->dy;
collision_player_jump(sfml->scene);
if (sfml->scene->player->action & PLAYER_CANT_JUMP){
sfml->scene->player->action &= ~(PLAYER_IDLE | PLAYER_RUN);
sfml->scene->player->action |= PLAYER_JUMP;
}
}
static void move_player(sfml_t *sfml)
{
if (sfml->key & PRES_LEFT){
if (sfml->scene->player->dx < PLAYER_SPEED)
sfml->scene->player->dx++;
sfml->scene->player->action &= ~(PLAYER_JUMP | PLAYER_IDLE);
sfml->scene->player->action |= PLAYER_LEFT | PLAYER_RUN;
}
if (sfml->key & PRES_RIGHT){
if (sfml->scene->player->dx > -PLAYER_SPEED)
sfml->scene->player->dx--;
sfml->scene->player->action &=
~(PLAYER_LEFT | PLAYER_JUMP | PLAYER_IDLE);
sfml->scene->player->action |= PLAYER_RUN;
}
if (!(sfml->key & PRES_LEFT) && !(sfml->key & PRES_RIGHT)){
sfml->scene->player->action &= ~(PLAYER_RUN | PLAYER_RUN);
sfml->scene->player->action |= PLAYER_IDLE;
sfml->scene->player->frame_counter = 0;
sfml->scene->player->dx /= 2;
}
}
void update_player(sfml_t *sfml)
{
sfml->scene->player->frame_counter =
(sfml->scene->player->frame_counter + 1) % 20;
move_player(sfml);
sfml->scene->player->x += sfml->scene->player->dx;
collision_player_run(sfml->scene);
collision_pik(sfml);
collision_princess(sfml);
collision_stone(sfml);
player_jump(sfml);
}
void update_wall(sfml_t *sfml)
{
if (sfml->scene->player->x == sfml->scene->wall->start_x
&& sfml->scene->player->y == sfml->scene->wall->start_y)
return;
sfml->scene->wall->x += WALL_SPEED;
if (!(sfml->scene->player->action & PLAYER_DEAD))
collision_wall(sfml);
}