mobile2d.hh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef MOBILE2D_HH
  2. #define MOBILE2D_HH
  3. #include "map.hh"
  4. #include "controle.hh"
  5. #include "parameters.hh"
  6. #include "still2d.hh"
  7. #include "prologparse.hpp"
  8. //#include "Rectangle.hh"
  9. // template <class T1, class T2>
  10. // bool isIntersecting(T1& mA, T2& mB) noexcept
  11. // {
  12. // return mA.limRight() >= mB.limLeft() && mA.limLeft() <= mB.limRight() &&
  13. // mA.limDown() >= mB.limUp() && mA.limUp() <= mB.limDown();
  14. // }
  15. template <class T1, class T2>
  16. bool isIntersectLeft(prologparse plparse,
  17. T1& mA,
  18. T2& mB) noexcept{
  19. return plparse.rule("intersectLeft",
  20. mA.limLeft(),
  21. mA.limDown(),
  22. mA.limUp(),
  23. mB.limLeft(),
  24. mB.limRight(),
  25. mB.limDown(),
  26. mB.limUp());
  27. // return mA.limLeft() >= mB.limLeft()
  28. // && mA.limLeft() <= mB.limRight()
  29. // && mA.limDown() > mB.limUp()
  30. // && mA.limUp() < mB.limDown();
  31. }
  32. template <class T1, class T2>
  33. bool isIntersectRight(prologparse plparse, T1& mA, T2& mB) noexcept{
  34. return plparse.rule("intersectRight",
  35. mA.limRight(),
  36. mA.limDown(),
  37. mA.limUp(),
  38. mB.limLeft(),
  39. mB.limRight(),
  40. mB.limDown(),
  41. mB.limUp());
  42. // return mA.limRight() >= mB.limLeft()
  43. // && mA.limRight() <= mB.limRight()
  44. // && mA.limDown() > mB.limUp()
  45. // && mA.limUp() < mB.limDown();
  46. }
  47. template <class T1, class T2>
  48. bool isIntersectUp(prologparse plparse, T1& mA, T2& mB) noexcept{
  49. return plparse.rule("intersectUp",
  50. mA.limLeft(),
  51. mA.limRight(),
  52. mA.limUp(),
  53. mB.limLeft(),
  54. mB.limRight(),
  55. mB.limDown(),
  56. mB.limUp());
  57. // return mA.limRight() > mB.limLeft()
  58. // && mA.limLeft() < mB.limRight()
  59. // && mA.limUp() >= mB.limUp()
  60. // && mA.limUp() <= mB.limDown();
  61. }
  62. template <class T1, class T2>
  63. bool isIntersectDown(prologparse plparse, T1& mA, T2& mB) noexcept{
  64. return plparse.rule("intersectDown",
  65. mA.limLeft(),
  66. mA.limRight(),
  67. mA.limDown(),
  68. mB.limLeft(),
  69. mB.limRight(),
  70. mB.limDown(),
  71. mB.limUp());
  72. // return mA.limRight() > mB.limLeft()
  73. // && mA.limLeft() < mB.limRight()
  74. // && mA.limDown() >= mB.limUp()
  75. // && mA.limDown() <= mB.limDown();
  76. }
  77. class mobile2d{
  78. protected:
  79. std::vector<std::shared_ptr<still2d>> environment;
  80. std::shared_ptr<sf::Shape> shape;
  81. prologparse * plparse;
  82. //prologparse plparse2;
  83. public:
  84. mobile2d();
  85. mobile2d(prologparse* plparse_);
  86. virtual ~mobile2d();
  87. virtual double x()=0;
  88. virtual double y()=0;
  89. virtual double limLeft()=0;
  90. virtual double limRight()=0;
  91. virtual double limUp()=0;
  92. virtual double limDown()=0;
  93. virtual void moveLeft()=0;
  94. virtual void moveRight()=0;
  95. virtual void moveUp()=0;
  96. virtual void moveDown()=0;
  97. void setEnvironment(std::vector<std::shared_ptr<still2d>>& blks) ;
  98. void motion();
  99. void update();
  100. std::shared_ptr<sf::Shape> getMobile();
  101. };
  102. #endif // MOBILE2D_HH