Cornell Cocos
Cornell Extensions to Cocos2d
CUTexturedNode.h
1 //
2 // CUTexturedNode.h
3 // Cornell Extensions to Cocos2D
4 //
5 // This module provides an abstract class for textured scene graph nodes. Currently,
6 // the only textured nodes are Sprite and its variations. These are very limited, as
7 // they only texture quads. Sometimes we want a textured polygon. Sometimes we want
8 // a textured line. Currently, the only way to do this (particularly the latter)
9 // is to define custom drawing commands, like DrawNode does. This is incredibly
10 // inefficient, and will drop framerate from all the GPU stalls. This class provides
11 // native support for Cocos2d's specialized rendering pipeline.
12 //
13 // You should never instantiate an object of this class. Instead, you should use
14 // one of the concrete subclasses: WireNode, PolygonNode, or PathNode.
15 //
16 // Author: Walker White
17 // Version: 11/15/15
18 //
19 // TODO: Note difference in Sprite Coordinates
20 #ifndef __CU_TEXTURED_NODE_H__
21 #define __CU_TEXTURED_NODE_H__
22 
23 #include <string>
24 #include "CUPoly2.h"
25 #include <2d/CCNode.h>
26 #include <base/CCProtocols.h>
27 #include <renderer/CCTrianglesCommand.h>
28 
29 NS_CC_BEGIN
30 
31 #pragma mark -
32 #pragma mark TexturedNode
33 
71 class CC_DLL TexturedNode : public Node, public TextureProtocol {
72 
73 #pragma mark Internal Helpers
74 private:
76  CC_DISALLOW_COPY_AND_ASSIGN(TexturedNode);
77 
78 protected:
80  Texture2D* _texture;
84  BlendFunc _blendFunc;
89 
91  TrianglesCommand _command;
93  TrianglesCommand::Triangles _triangles;
94 
99 
111  TrianglesCommand::Triangles& allocTriangles(const Poly2& poly);
112 
116  void clearRenderData();
117 
121  void updateColor() override;
122 
126  void updateBlendFunc();
127 
135  void updateTextureCoords();
136 
137 
138 #pragma mark Abstract Methods
139 
146  virtual void generateRenderData() { }
147 
148 
149 public:
150 #pragma mark Attribute Accessors
151 
163  virtual void setTexture(const std::string &filename);
164 
178  virtual void setTexture(Texture2D *texture) override;
179 
185  virtual Texture2D* getTexture() const override { return _texture; }
186 
196  virtual void setPolygon(float* vertices, int size, int offset=0);
197 
203  virtual void setPolygon(const Poly2& poly);
204 
215  virtual void setPolygon(const Rect& rect);
216 
222  const Poly2& getPolygon() const { return _polygon; }
223 
239  virtual void shiftPolygon(float dx, float dy);
240 
251  const Rect& getBoundingRect() const { return _polygon.getBounds(); }
252 
261  void setBlendFunc(const BlendFunc &blendFunc) override { _blendFunc = blendFunc; }
262 
271  const BlendFunc& getBlendFunc() const override { return _blendFunc; }
272 
280  virtual void setOpacityModifyRGB(bool modify) override;
281 
289  virtual bool isOpacityModifyRGB(void) const override;
290 
300  void flipHorizontal(bool flag) { _flipHorizontal = flag; updateTextureCoords(); }
301 
307  bool isFlipHorizontal() const { return _flipHorizontal; }
308 
318  void flipVertical(bool flag) { _flipVertical = flag; updateTextureCoords(); }
319 
325  bool isFlipVertical() const { return _flipVertical; }
326 
327 
328 CC_CONSTRUCTOR_ACCESS:
329 #pragma mark Initializers
330 
339  TexturedNode(void);
340 
348  virtual ~TexturedNode(void);
349 
358  virtual bool init() override;
359 
374  virtual bool init(float* vertices, int size, int offset=0);
375 
386  virtual bool init(const Poly2& poly);
387 
399  virtual bool init(const Rect& rect);
400 
412  virtual bool initWithFile(const std::string& filename);
413 
427  virtual bool initWithFile(const std::string& filename, float* vertices, int size, int offset=0);
428 
438  virtual bool initWithFile(const std::string& filename, const Poly2& poly);
439 
453  virtual bool initWithFile(const std::string& filename, const Rect& rect);
454 
466  virtual bool initWithTexture(Texture2D *texture);
467 
482  virtual bool initWithTexture(Texture2D *texture, float* vertices, int size, int offset=0);
483 
494  virtual bool initWithTexture(Texture2D *texture, const Poly2& poly);
495 
510  virtual bool initWithTexture(Texture2D *texture, const Rect& rect);
511 
512 };
513 
514 NS_CC_END
515 
516 #endif /* defined(__CU_TEXTURED_NODE_H__) */
bool _flipVertical
Definition: CUTexturedNode.h:98
Definition: CUTexturedNode.h:71
const Rect & getBounds() const
Definition: CUPoly2.h:574
virtual void generateRenderData()
Definition: CUTexturedNode.h:146
bool _insideBounds
Definition: CUTexturedNode.h:86
virtual Texture2D * getTexture() const override
Definition: CUTexturedNode.h:185
BlendFunc _blendFunc
Definition: CUTexturedNode.h:84
Poly2 _polygon
Definition: CUTexturedNode.h:82
bool isFlipHorizontal() const
Definition: CUTexturedNode.h:307
bool isFlipVertical() const
Definition: CUTexturedNode.h:325
void setBlendFunc(const BlendFunc &blendFunc) override
Definition: CUTexturedNode.h:261
TrianglesCommand::Triangles _triangles
Definition: CUTexturedNode.h:93
Texture2D * _texture
Definition: CUTexturedNode.h:80
const Poly2 & getPolygon() const
Definition: CUTexturedNode.h:222
Definition: CUPoly2.h:53
const Rect & getBoundingRect() const
Definition: CUTexturedNode.h:251
bool _opacityModifyRGB
Definition: CUTexturedNode.h:88
void flipHorizontal(bool flag)
Definition: CUTexturedNode.h:300
TrianglesCommand _command
Definition: CUTexturedNode.h:91
bool _flipHorizontal
Definition: CUTexturedNode.h:96
void flipVertical(bool flag)
Definition: CUTexturedNode.h:318
const BlendFunc & getBlendFunc() const override
Definition: CUTexturedNode.h:271