Collidable.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * Triangles
  3. * Copyright (C) 2016 POSITIVE MENTAL ATTITUDE
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, version 3 of the License.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #pragma once
  18. #include <SFML/Graphics.hpp>
  19. #include "Foreground.hpp"
  20. /**
  21. * @class Collidable
  22. * @author POSITIVE MENTAL ATTITUDE
  23. * @date 06/09/16
  24. * @file Collidable.hpp
  25. * @brief In theory this enables pixel perfect collision with the Foreground.
  26. * @see Foreground
  27. */
  28. class Collidable
  29. {
  30. public:
  31. Collidable() = default;
  32. virtual ~Collidable();
  33. void updateTransform(sf::Transform transform);
  34. int pixelPerfect(Foreground& foreground);
  35. protected:
  36. void genCollisionBox(std::string file, sf::Vector2f size);
  37. void setPointCount(unsigned pointCount);
  38. std::vector<sf::Vector2f> _cmap; /// Current to-be-destroyed points on the edges
  39. std::vector<sf::Vector2f> _cbanned; /// Already destroyed points
  40. unsigned _pointCount; // Total number of non-transparent points
  41. float _durability; // Normalized value how many points the Collidable object can lose before dying
  42. private:
  43. sf::Transform _transform;
  44. };