CollisionPolygon2D.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "../Physics2D/CollisionShape2D.h"
  5. namespace Urho3D
  6. {
  7. /// 2D polygon collision component.
  8. class URHO3D_API CollisionPolygon2D : public CollisionShape2D
  9. {
  10. URHO3D_OBJECT(CollisionPolygon2D, CollisionShape2D);
  11. public:
  12. /// Construct.
  13. explicit CollisionPolygon2D(Context* context);
  14. /// Destruct.
  15. ~CollisionPolygon2D() override;
  16. /// Register object factory.
  17. /// @nobind
  18. static void RegisterObject(Context* context);
  19. /// Set vertex count.
  20. /// @property
  21. void SetVertexCount(i32 count);
  22. /// Set vertex.
  23. void SetVertex(i32 index, const Vector2& vertex);
  24. /// Set vertices.
  25. void SetVertices(const Vector<Vector2>& vertices);
  26. /// Return vertex count.
  27. /// @property
  28. i32 GetVertexCount() const { return vertices_.Size(); }
  29. /// Return vertex.
  30. const Vector2& GetVertex(i32 index) const
  31. {
  32. assert(index >= 0);
  33. return (index < vertices_.Size()) ? vertices_[index] : Vector2::ZERO;
  34. }
  35. /// Return vertices.
  36. const Vector<Vector2>& GetVertices() const { return vertices_; }
  37. /// Set vertices attribute.
  38. void SetVerticesAttr(const Vector<byte>& value);
  39. /// Return vertices attribute.
  40. Vector<byte> GetVerticesAttr() const;
  41. private:
  42. /// Apply node world scale.
  43. void ApplyNodeWorldScale() override;
  44. /// Recreate fixture.
  45. void RecreateFixture();
  46. /// Polygon shape.
  47. b2PolygonShape polygonShape_;
  48. /// Vertices.
  49. Vector<Vector2> vertices_;
  50. };
  51. }