#ifndef PLAYER_HPP #define PLAYER_HPP #include #include #include #include #include #include #include #include "data.hpp" #include "globals.hpp" #include "scheduler.hpp" float total_distance(int k); float const distance_to_acceleration(int target); struct Object; class Entity; class Player; struct Object { Object(ObjectData data) { rect.setSize(data.size); rect.setPosition(data.pos); rect.setOutlineThickness(data.edge); rect.setFillColor(data.interior_color); rect.setOutlineColor(data.exterior_color); }; sf::RectangleShape rect; }; class Entity : public Object { public: Entity(EntityData data) : Object(data.object), _velocity(data.velocity) {}; void set_velocity(sf::Vector2f velocity); void set_velocity_x(int velocity); void set_velocity_y(int velocity); const sf::Vector2 get_velocity(); protected: sf::Vector2f _velocity; }; class Player : public Entity { public: Player(PlayerData data) : Entity(data.entity), max_dash_acceleration(data.max_dash_acceleration), max_vertical_acceleration(data.max_vertical_acceleration) { bounding_box.rect.setSize( { total_distance(max_dash_acceleration), data.entity.object.size.y }); }; Object bounding_box { object_data[1] }; float max_vertical_acceleration; float max_dash_acceleration; bool m_jumping { false }; void handle_bounding_box(std::array, MAX_COLS>, MAX_ROWS>& tilemap); void handle_movment(std::optional dash); void handle_gravity(); bool get_horizontal_collision( std::array, MAX_COLS>, MAX_ROWS>& tilemap); bool get_vertical_collision( std::array, MAX_COLS>, MAX_ROWS>& tilemap); private: std::string direction { "left" }; }; #endif