#ifndef MARIO_H #define MARIO_H #include "../sdlpp/sdlpp_rectrenderer.hpp" #include "mario_visitor.hpp" #include "sprites.hpp" #include "blocks.hpp" // TODO change to MarioBlock instead of RectangleRender class Mario : public MarioBlock { public: Mario(int x, int y, const std::shared_ptr< SDLPP::Renderer > &renderer); Mario(const std::shared_ptr< SDLPP::Renderer > &renderer); void walkLeft(); void walkRight(); void setStanding(); void handleVisitor(MarioVisitor &visitor); void jump(); void stopJump(); virtual void custom_move( int ticks ) override; void visit(SDLPP::Visitor &visitor) override; private: bool faces_right = true; double side_movement = 0.39; double jump_movement = 1.0; bool jumping = false; bool stop_jump = false; double max_jump = 0; double min_jump = 0; double slow_jump = 0; bool on_ground = true; int ticks_till_gravity = 0; // gravity should be added every frame in 60fps game const int base_gravity_ticks = 1000/60; const double gravity_add_jumping = jump_movement/32.0; const double gravity_add_falling = jump_movement/(64.0/7.0); std::shared_ptr top_collision = nullptr; virtual void setWorldTypeSrc(LandType::Value world) override; }; #endif