painfull-success-cg/include/player.h

55 lines
1.6 KiB
C
Raw Normal View History

2021-03-02 11:17:40 +01:00
/* SPDX-License-Identifier: MIT
* Copyright (c) 2021 KikooDX
* This file is part of
* [Painfull Success CG](https://git.sr.ht/~kikoodx/painfull-success-cg),
* which is MIT licensed. The MIT license requires this copyright notice to be
* included in all copies and substantial portions of the software. */
#pragma once
2021-05-01 02:23:11 +02:00
#include "input.h"
2021-03-04 10:38:50 +01:00
#include "lazyint.h"
#include "vec2.h"
2021-05-01 02:23:11 +02:00
#include <stdbool.h>
2021-05-01 02:23:11 +02:00
#define PLAYER_WIDTH 12
#define PLAYER_HEIGHT 12
#define GRAVITY 0.2
#define JUMP_SPD -5.8
#define JUMP_BUFFER 6
#define COYOT 6
#define FALL_RESISTANCE 0.04
#define FASTFALL_RESISTANCE 0.01
#define MAX_HORIZONTAL_SPEED 2.0
2021-05-01 02:23:11 +02:00
#define GROUND_ACCELERATION 0.4
#define AIR_ACCELERATION 1.0
#define GROUND_FRICTION (GROUND_ACCELERATION / MAX_HORIZONTAL_SPEED)
#define AIR_FRICTION (AIR_ACCELERATION / MAX_HORIZONTAL_SPEED)
#define KNOCKBACK_Y (-(JUMP_SPD) + 2.0)
#define KNOCKBACK_X MAX_HORIZONTAL_SPEED
2021-05-01 02:23:11 +02:00
typedef struct Player {
Vec2 pos;
2021-03-04 10:38:50 +01:00
f32 spd_x;
f32 spd_y;
i8 facing;
bool stun;
bool knocked;
2021-03-04 10:38:50 +01:00
u8 keys_left;
u8 jump_buffer;
u8 coyot;
} Player;
#include "level.h"
void player_init(Player *player);
2021-03-04 10:38:50 +01:00
void player_update(Player *player, Level *level, Input input, u8 *level_id);
void player_draw(Player player, i16 y_offset);
/* Helper functions. */
2021-03-04 10:38:50 +01:00
bool player_collide(Level level, Vec2 pos, tile_t tile, u8 margin);
bool player_move(Player *player, Level level, i8 spd_x, i8 spd_y);
2021-03-04 18:21:03 +01:00
u8 player_collide_key(Level *level, vec2_int_t x, vec2_int_t y);
void player_collide_keys(Player *player, Level *level);
2021-03-04 10:38:50 +01:00
i8 sign(i8 value);
2021-03-04 11:19:28 +01:00
f32 signf(f32 value);
2021-03-04 10:38:50 +01:00
i8 round(f32 value);