79 lines
2.2 KiB
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);
|
|
}
|