42 #ifndef __CU_POLYGON_NODE_H__
43 #define __CU_POLYGON_NODE_H__
46 #include <cugl/2d/CUTexturedNode.h>
47 #include <cugl/math/polygon/CUSimpleTriangulator.h>
87 #pragma mark Constructor
98 _name =
"PolygonNode";
111 #pragma mark Static Constructors
121 static std::shared_ptr<PolygonNode>
alloc() {
122 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
123 return (node->init() ? node :
nullptr);
141 static std::shared_ptr<PolygonNode>
alloc(
const std::vector<Vec2>& vertices) {
142 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
143 return (node->init(vertices) ? node :
nullptr);
157 static std::shared_ptr<PolygonNode>
alloc(
const Poly2& poly) {
158 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
159 return (node->init(poly) ? node :
nullptr);
176 static std::shared_ptr<PolygonNode>
alloc(
const Rect& rect) {
177 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
178 return (node->init(rect) ? node :
nullptr);
191 static std::shared_ptr<PolygonNode>
allocWithFile(
const std::string& filename) {
192 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
193 return (node->initWithFile(filename) ? node :
nullptr);
208 static std::shared_ptr<PolygonNode>
allocWithFile(
const std::string& filename,
209 const std::vector<Vec2>& vertices) {
210 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
211 return (node->initWithFile(filename,vertices) ? node :
nullptr);
223 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
224 return (node->initWithFile(filename,poly) ? node :
nullptr);
238 static std::shared_ptr<PolygonNode>
allocWithFile(
const std::string& filename,
const Rect& rect) {
239 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
240 return (node->initWithFile(filename,rect) ? node :
nullptr);
253 static std::shared_ptr<PolygonNode>
allocWithTexture(
const std::shared_ptr<Texture>& texture) {
254 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
255 return (node->initWithTexture(texture) ? node :
nullptr);
270 static std::shared_ptr<PolygonNode>
allocWithTexture(
const std::shared_ptr<Texture>& texture,
271 const std::vector<Vec2>& vertices) {
272 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
273 return (node->initWithTexture(texture,vertices) ? node :
nullptr);
283 static std::shared_ptr<PolygonNode>
allocWithTexture(
const std::shared_ptr<Texture>& texture,
285 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
286 return (node->initWithTexture(texture,poly) ? node :
nullptr);
300 static std::shared_ptr<PolygonNode>
allocWithTexture(
const std::shared_ptr<Texture>& texture,
302 std::shared_ptr<PolygonNode> node = std::make_shared<PolygonNode>();
303 return (node->initWithTexture(texture,rect) ? node :
nullptr);
328 const std::shared_ptr<JsonValue>& data) {
329 std::shared_ptr<PolygonNode> result = std::make_shared<PolygonNode>();
330 if (!result->initWithData(loader,data)) { result =
nullptr; }
331 return std::dynamic_pointer_cast<Node>(result);
335 #pragma mark Attributes
345 virtual void setPolygon(
const std::vector<Vec2>& vertices)
override;
369 #pragma mark Rendering
393 virtual void draw(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint)
override;
397 #pragma mark Internal Helpers