67 lines
1.2 KiB
C
67 lines
1.2 KiB
C
|
#ifndef PLAYER_H
|
||
|
#define PLAYER_H
|
||
|
|
||
|
|
||
|
#include "../game_api.h"
|
||
|
|
||
|
|
||
|
struct world;
|
||
|
|
||
|
|
||
|
enum player_action {
|
||
|
PLAYER_ACTION_GROUND,
|
||
|
PLAYER_ACTION_FALL,
|
||
|
PLAYER_ACTION_JUMP,
|
||
|
};
|
||
|
|
||
|
|
||
|
struct player {
|
||
|
struct world *world;
|
||
|
|
||
|
/* visual */
|
||
|
float sprite_w;
|
||
|
float sprite_h;
|
||
|
|
||
|
/* body */
|
||
|
t_frect rect;
|
||
|
|
||
|
/* state */
|
||
|
enum player_action action;
|
||
|
|
||
|
/* physics */
|
||
|
t_frect collider_x;
|
||
|
t_frect collider_y;
|
||
|
int collider_thickness;
|
||
|
float dx;
|
||
|
float dy;
|
||
|
float max_dx;
|
||
|
float run_horizontal_speed;
|
||
|
float horizontal_damping;
|
||
|
float current_gravity_multiplier;
|
||
|
float terminal_velocity;
|
||
|
|
||
|
/* jumping */
|
||
|
float jump_force_initial;
|
||
|
float jump_force_increase; /* aka "jump power", increment of dy per tick */
|
||
|
int jump_air_ticks;
|
||
|
int jump_air_timer;
|
||
|
int jump_coyote_ticks;
|
||
|
int jump_coyote_timer;
|
||
|
int jump_buffer_ticks;
|
||
|
int jump_buffer_timer;
|
||
|
|
||
|
/* gravity multipliers */
|
||
|
float jump_default_multiplier;
|
||
|
float jump_boosted_multiplier;
|
||
|
|
||
|
float jump_corner_correction_offset; /* from center */
|
||
|
};
|
||
|
|
||
|
|
||
|
struct player *player_create(struct world *world);
|
||
|
void player_destroy(struct player *player);
|
||
|
void player_calc(struct player *player);
|
||
|
|
||
|
|
||
|
#endif
|