#ifndef PLAYER_HPP #define PLAYER_HPP #include #include #include #include "globals.hpp" enum class CollisionDir { None, Left, Right, Top, Bottom }; class Entity { public: Entity(sf::Vector2 size, sf::Vector2 pos, sf::Vector2f velocity, float border_thickness, sf::Color inside_color = sf::Color::Black, sf::Color border_color = sf::Color::White); CollisionDir find_intersection(Entity &entity); void set_velocity(sf::Vector2f velocity); void set_velocity_x(int velocity); void set_velocity_y(int velocity); sf::Vector2 get_velocity(); sf::RectangleShape rect; protected: sf::Vector2f _velocity; sf::Color _inside_color; sf::Color _border_color; float _border_thickness; }; struct Player_timers { float dash_cooldown { 0 }; float dash_cooldown_max { 5 }; }; class Player : public Entity { public: Player(sf::Vector2 size, sf::Vector2 pos, sf::Vector2f velocity, float border_thickness, float gravity, float max_acceleration, float dash_distance, sf::Color inside_color, sf::Color border_color); float m_acceleration; float m_jump_strength; float m_dash_distance; bool m_jumping; bool m_dash; Player_timers timers; void handle_movment(); void handle_gravity(); bool get_jumping(); void horizontal_no_out_of_bounds(Entity &base); void vertical_no_out_of_bounds(Entity &base); bool get_horizontal_collision(Entity *wall_list[MAX_ROWS][MAX_COLS]); bool get_vertical_top_collision(Entity *wall_list[MAX_ROWS][MAX_COLS]); bool get_vertical_bottom_collision(Entity *wall_list[MAX_ROWS][MAX_COLS]); private: sf::Vector2f _min_velocity; }; #endif