#ifndef PLAYER_HPP #define PLAYER_HPP #include #include #include #include #include #include #include #include "data.hpp" #include "globals.hpp" #include "scheduler.hpp" class Entity; class Object; class Player; class Object { public: Object(ObjectData data); sf::RectangleShape rect; }; class Entity : public Object { public: Entity(EntityData data) : Object(data), _velocity(data.velocity) {}; void set_velocity(sf::Vector2f velocity); void set_velocity_x(int velocity); void set_velocity_y(int velocity); sf::Vector2 get_velocity(); protected: sf::Vector2f _velocity; }; class Player : public Entity { public: Player(PlayerData data, float gravity) : Entity(data), max_dash_acceleration(data.max_vertical_acceleration), max_vertical_acceleration(data.max_vertical_acceleration), gravity(gravity) {}; float max_vertical_acceleration; float max_dash_acceleration; float gravity; bool m_jumping { false }; void handle_movment(Timer& dash, std::array, 19>, 13>& tilemap); void handle_gravity(); bool get_jumping(); void horizontal_no_out_of_bounds(); void vertical_no_out_of_bounds(); bool get_horizontal_collision( std::array, MAX_COLS>, MAX_ROWS>& tilemap); bool get_vertical_collision( std::array, MAX_COLS>, MAX_ROWS>& tilemap); // bool get_vertical_bottom_collision( // std::array, MAX_COLS>, MAX_ROWS>& tilemap); private: std::string direction; }; float total_distance(int k); float distance_to_acceleration(int target); #endif