50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
/* 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
|
|
#include <stdbool.h>
|
|
#include "lazyint.h"
|
|
#include "vec2.h"
|
|
#include "level.h"
|
|
#include "input.h"
|
|
|
|
#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
|
|
#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 (0 - JUMP_SPD + 2.0)
|
|
#define KNOCKBACK_X MAX_HORIZONTAL_SPEED
|
|
|
|
typedef struct Player{
|
|
Vec2 pos;
|
|
f32 spd_x;
|
|
f32 spd_y;
|
|
i8 facing;
|
|
bool stun;
|
|
bool knocked;
|
|
u8 keys_left;
|
|
u8 jump_buffer;
|
|
u8 coyot;
|
|
} Player;
|
|
|
|
Player player_init();
|
|
void player_update(Player *player, Level *level, Input input, u8 *level_id);
|
|
void player_draw(Player player);
|
|
/* Helper functions. */
|
|
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);
|
|
i8 sign(i8 value);
|
|
i8 round(f32 value);
|