45 #include "../math/CUColor4.h"
46 #include "../math/CUVec2.h"
47 #include "../math/CUSize.h"
48 #include "../math/CUMat4.h"
49 #include "../renderer/CUSpriteBatch.h"
50 #include "../util/CUDebug.h"
202 #pragma mark Constructors
354 #pragma mark Static Constructors
363 static std::shared_ptr<Node>
alloc() {
364 std::shared_ptr<Node> result = std::make_shared<Node>();
365 return (result->init() ? result :
nullptr);
379 std::shared_ptr<Node> result = std::make_shared<Node>();
380 return (result->initWithPosition(pos) ? result :
nullptr);
395 std::shared_ptr<Node> result = std::make_shared<Node>();
396 return (result->initWithPosition(x,y) ? result :
nullptr);
412 std::shared_ptr<Node> result = std::make_shared<Node>();
413 return (result->initWithBounds(size) ? result :
nullptr);
430 std::shared_ptr<Node> result = std::make_shared<Node>();
431 return (result->initWithBounds(width,height) ? result :
nullptr);
450 std::shared_ptr<Node> result = std::make_shared<Node>();
451 return (result->initWithBounds(rect) ? result :
nullptr);
472 static std::shared_ptr<Node>
allocWithBounds(
float x,
float y,
float width,
float height) {
473 std::shared_ptr<Node> result = std::make_shared<Node>();
474 return (result->initWithBounds(x,y,width,height) ? result :
nullptr);
478 #pragma mark Identifiers
499 void setTag(
unsigned int tag) { _tag = tag; }
523 _hashOfName = std::hash<std::string>()(_name);
536 virtual std::string
toString(
bool verbose =
false)
const;
539 operator std::string()
const {
return toString(); }
543 #pragma mark Position
873 #pragma mark Visibility
957 #pragma mark Transforms
1005 _scale.
set(scale,scale);
1006 if (!_useTransform) updateTransform();
1021 if (!_useTransform) updateTransform();
1037 if (!_useTransform) updateTransform();
1062 if (!_useTransform) updateTransform();
1096 _transform = transform;
1131 _useTransform = active; updateTransform();
1281 #pragma mark Z-order
1360 #pragma mark Scene Graph
1379 std::shared_ptr<Node>
getChild(
unsigned int pos);
1392 const std::shared_ptr<Node>&
getChild(
unsigned int pos)
const;
1410 template <
typename T>
1411 inline std::shared_ptr<T>
getChild(
unsigned int pos)
const {
1412 return std::dynamic_pointer_cast<
T>(
getChild(pos));
1428 std::shared_ptr<Node>
getChildByTag(
unsigned int tag)
const;
1448 template <
typename T>
1466 std::shared_ptr<Node>
getChildByName(
const std::string& name)
const;
1486 template <
typename T>
1530 virtual void addChild(
const std::shared_ptr<Node>& child,
int zval);
1577 child->setName(name);
1595 child->setName(name);
1611 void swapChild(
const std::shared_ptr<Node>& child1,
const std::shared_ptr<Node>& child2,
bool inherit=
false);
1680 void removeChild(
const std::shared_ptr<Node>& child);
1715 #pragma mark Rendering
1727 void render(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint);
1738 void render(
const std::shared_ptr<SpriteBatch>& batch) {
1765 virtual void draw(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint) {}
1769 #pragma mark Internal Helpers
1787 void setZDirty(
bool value);
1797 void setParent(
Node* parent) { _parent = parent; }
1807 void setScene(Scene* scene) { _graph = scene; }
1817 void pushScene(Scene* scene);
1829 static bool compareNodeSibs(
const std::shared_ptr<Node>& a,
const std::shared_ptr<Node>& b);
1837 virtual void updateTransform();
1840 CU_DISALLOW_COPY_AND_ASSIGN(
Node);
Vec2 _position
Definition: CUNode.h:101
bool initWithPosition(float x, float y)
Definition: CUNode.h:265
std::vector< std::shared_ptr< Node > > _children
Definition: CUNode.h:162
void setRelativeColor(bool flag)
Definition: CUNode.h:953
Color4 _tintColor
Definition: CUNode.h:115
Vec2 nodeToScreenCoords(const Vec2 &nodePoint) const
unsigned int getTag() const
Definition: CUNode.h:488
const Mat4 & getNodeToParentTransform() const
Definition: CUNode.h:1143
float x
Definition: CUVec2.h:66
float getHeight() const
Definition: CUNode.h:773
Vec2 screenToNodeCoords(const Vec2 &screenPoint) const
static std::shared_ptr< Node > allocWithPosition(const Vec2 &pos)
Definition: CUNode.h:378
float y
Definition: CUVec2.h:68
static Vec2 * transform(const Mat4 &mat, const Vec2 &point, Vec2 *dst)
void render(const std::shared_ptr< SpriteBatch > &batch)
Definition: CUNode.h:1738
const Node * getParent() const
Definition: CUNode.h:1631
void addChildWithName(const std::shared_ptr< Node > &child, const std::string &name)
Definition: CUNode.h:1575
void setPosition(const Vec2 &position)
Definition: CUNode.h:566
Vec2 nodeToParentCoords(const Vec2 &nodePoint) const
Definition: CUNode.h:1276
size_t getChildCount() const
Definition: CUNode.h:1366
float _angle
Definition: CUNode.h:137
float getAngle()
Definition: CUNode.h:1049
float getPositionY(void) const
Definition: CUNode.h:615
bool _hasParentColor
Definition: CUNode.h:117
Node * _parent
Definition: CUNode.h:165
Vec2 _scale
Definition: CUNode.h:127
virtual bool initWithBounds(const Size &size)
std::shared_ptr< Node > getChildByTag(unsigned int tag) const
virtual void setContentSize(const Size &size)
Size getSize() const
Definition: CUNode.h:747
virtual void draw(const std::shared_ptr< SpriteBatch > &batch, const Mat4 &transform, Color4 tint)
Definition: CUNode.h:1765
void removeChildByTag(unsigned int tag)
Mat4 getNodeToWorldTransform() const
static std::shared_ptr< Node > allocWithBounds(const Rect &rect)
Definition: CUNode.h:449
std::shared_ptr< Node > getChildByName(const std::string &name) const
void setPositionY(float y)
Definition: CUNode.h:627
int _zOrder
Definition: CUNode.h:197
Mat4 _combined
Definition: CUNode.h:159
void setColor(Color4 color)
Definition: CUNode.h:898
virtual void removeChild(unsigned int pos)
Vec2 getWorldPosition() const
Definition: CUNode.h:637
bool hasRelativeColor()
Definition: CUNode.h:942
void setScale(const Vec2 &vec)
Definition: CUNode.h:1019
virtual std::string toString(bool verbose=false) const
void setPositionX(float x)
Definition: CUNode.h:603
void addChildWithTag(const std::shared_ptr< Node > &child, unsigned int tag, int zval)
Definition: CUNode.h:1560
float getScaleX() const
Definition: CUNode.h:980
bool _zDirty
Definition: CUNode.h:199
Vec2 worldToNodeCoords(const Vec2 &worldPoint) const
Definition: CUNode.h:1212
bool initWithBounds(float x, float y, float width, float height)
Definition: CUNode.h:335
Vec2 getAnchorInPixels()
Definition: CUNode.h:869
virtual void setAnchor(const Vec2 &anchor)
bool isVisible() const
Definition: CUNode.h:920
static const Color4 WHITE
Definition: CUColor4.h:1126
unsigned int _tag
Definition: CUNode.h:179
const Vec2 & getPosition() const
Definition: CUNode.h:554
void setContentHeight(float height)
Definition: CUNode.h:735
void setAnchor(float x, float y)
Definition: CUNode.h:832
void setContentWidth(float width)
Definition: CUNode.h:710
float width
Definition: CUSize.h:61
bool isZDirty() const
Definition: CUNode.h:1337
Vec2 nodeToWorldCoords(const Vec2 &nodePoint) const
Definition: CUNode.h:1246
void setTag(unsigned int tag)
Definition: CUNode.h:499
static std::shared_ptr< Node > allocWithBounds(float x, float y, float width, float height)
Definition: CUNode.h:472
const Size & getContentSize() const
Definition: CUNode.h:652
Mat4 getInverse() const
Definition: CUMat4.h:1037
void addChild(std::shared_ptr< Node > child)
Definition: CUNode.h:1514
Mat4 getWorldToNodeTransform() const
Definition: CUNode.h:1177
Scene * _graph
Definition: CUNode.h:167
void setAngle(float angle)
Definition: CUNode.h:1060
float getWidth() const
Definition: CUNode.h:761
const std::string & getName() const
Definition: CUNode.h:510
Color4 getAbsoluteColor()
void setAlternateTransform(const Mat4 &transform)
Definition: CUNode.h:1095
void addChildWithName(const std::shared_ptr< Node > &child, const std::string &name, int zval)
Definition: CUNode.h:1593
void render(const std::shared_ptr< SpriteBatch > &batch, const Mat4 &transform, Color4 tint)
float height
Definition: CUSize.h:63
Vec2 _anchor
Definition: CUNode.h:109
void chooseAlternateTransform(bool active)
Definition: CUNode.h:1130
static std::shared_ptr< Node > allocWithPosition(float x, float y)
Definition: CUNode.h:394
void addChildWithTag(const std::shared_ptr< Node > &child, unsigned int tag)
Definition: CUNode.h:1542
std::vector< std::shared_ptr< Node > > getChildren()
Definition: CUNode.h:1496
const Vec2 & getAnchor() const
Definition: CUNode.h:853
int _childOffset
Definition: CUNode.h:170
float getScaleY() const
Definition: CUNode.h:992
std::shared_ptr< Node > getChild(unsigned int pos)
void setName(const std::string &name)
Definition: CUNode.h:521
Mat4 _transform
Definition: CUNode.h:147
static const Mat4 IDENTITY
Definition: CUMat4.h:114
Vec2 parentToNodeCoords(const Vec2 &parentPoint) const
Definition: CUNode.h:1261
static std::shared_ptr< Node > alloc()
Definition: CUNode.h:363
void removeFromParent()
Definition: CUNode.h:1658
const Vec2 & getScale() const
Definition: CUNode.h:968
Mat4 getParentToNodeTransform() const
Definition: CUNode.h:1154
const Mat4 & getAlternateTransform()
Definition: CUNode.h:1079
float getContentHeight() const
Definition: CUNode.h:720
void setScale(float scale)
Definition: CUNode.h:1004
void removeChildByName(const std::string &name)
static std::shared_ptr< Node > allocWithBounds(const Size &size)
Definition: CUNode.h:411
Scene * getScene()
Definition: CUNode.h:1641
virtual Node * copy(Node *dst)
void swapChild(const std::shared_ptr< Node > &child1, const std::shared_ptr< Node > &child2, bool inherit=false)
Size size
Definition: CURect.h:51
std::shared_ptr< T > getChildByName(const std::string &name) const
Definition: CUNode.h:1487
float getContentWidth() const
Definition: CUNode.h:695
std::string _name
Definition: CUNode.h:187
float getPositionX(void) const
Definition: CUNode.h:591
virtual void removeAllChildren()
Node * getParent()
Definition: CUNode.h:1621
const Scene * getScene() const
Definition: CUNode.h:1651
bool _useTransform
Definition: CUNode.h:150
virtual void setContentSize(float width, float height)
Definition: CUNode.h:683
Definition: CUColor4.h:1104
Size _contentSize
Definition: CUNode.h:112
Rect getBoundingBox() const
Definition: CUNode.h:784
static std::shared_ptr< Node > allocWithBounds(float width, float height)
Definition: CUNode.h:429
Color4 getColor() const
Definition: CUNode.h:885
std::shared_ptr< T > getChild(unsigned int pos) const
Definition: CUNode.h:1411
bool initWithBounds(float width, float height)
Definition: CUNode.h:296
Vec2 & set(float x, float y)
Definition: CUVec2.h:176
Definition: CUAnimationNode.h:52
bool withAlternateTransform()
Definition: CUNode.h:1114
virtual ~Node()
Definition: CUNode.h:217
virtual bool initWithPosition(const Vec2 &pos)
static const Vec2 ZERO
Definition: CUVec2.h:71
void setScale(float sx, float sy)
Definition: CUNode.h:1035
virtual bool init()
Definition: CUNode.h:237
void setVisible(bool visible)
Definition: CUNode.h:931
const std::vector< std::shared_ptr< Node > > & getChildren() const
Definition: CUNode.h:1503
std::shared_ptr< T > getChildByTag(unsigned int tag) const
Definition: CUNode.h:1449
int getZOrder() const
Definition: CUNode.h:1318
bool _isVisible
Definition: CUNode.h:119
size_t _hashOfName
Definition: CUNode.h:194