/* 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 "input.h" #include "lazyint.h" #include "vec2.h" #include #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 (-(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; #include "level.h" void player_init(Player *player); void player_update(Player *player, Level *level, Input input, u8 *level_id); void player_draw(Player player, i16 y_offset); /* 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); u8 player_collide_key(Level *level, vec2_int_t x, vec2_int_t y); void player_collide_keys(Player *player, Level *level); i8 sign(i8 value); f32 signf(f32 value); i8 round(f32 value);