66 lines
1.2 KiB
C
66 lines
1.2 KiB
C
#ifndef PLAYER_H
|
|
#define PLAYER_H
|
|
|
|
#include "twn_game_api.h"
|
|
|
|
|
|
typedef struct World World;
|
|
|
|
|
|
typedef enum PlayerAction {
|
|
PLAYER_ACTION_GROUND,
|
|
PLAYER_ACTION_FALL,
|
|
PLAYER_ACTION_JUMP,
|
|
} PlayerAction;
|
|
|
|
|
|
typedef struct Player {
|
|
World *world;
|
|
|
|
/* visual */
|
|
float sprite_w;
|
|
float sprite_h;
|
|
|
|
/* body */
|
|
Rect rect;
|
|
|
|
/* state */
|
|
PlayerAction action;
|
|
|
|
/* physics */
|
|
Rect collider_x;
|
|
Rect 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 */
|
|
} Player;
|
|
|
|
|
|
Player *player_create(World *world);
|
|
void player_destroy(Player *player);
|
|
void player_calc(Player *player);
|
|
|
|
|
|
#endif
|