townengine/apps/platformer/player.h

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