45 #include <cugl/math/cu_math.h>
46 #include <cugl/renderer/CUSpriteBatch.h>
47 #include <cugl/util/CUDebug.h>
48 #include <cugl/assets/CUJsonValue.h>
204 #pragma mark Constructors
380 #pragma mark Static Constructors
389 static std::shared_ptr<Node>
alloc() {
390 std::shared_ptr<Node> result = std::make_shared<Node>();
391 return (result->init() ? result :
nullptr);
405 std::shared_ptr<Node> result = std::make_shared<Node>();
406 return (result->initWithPosition(pos) ? result :
nullptr);
421 std::shared_ptr<Node> result = std::make_shared<Node>();
422 return (result->initWithPosition(x,y) ? result :
nullptr);
438 std::shared_ptr<Node> result = std::make_shared<Node>();
439 return (result->initWithBounds(size) ? result :
nullptr);
456 std::shared_ptr<Node> result = std::make_shared<Node>();
457 return (result->initWithBounds(width,height) ? result :
nullptr);
476 std::shared_ptr<Node> result = std::make_shared<Node>();
477 return (result->initWithBounds(rect) ? result :
nullptr);
498 static std::shared_ptr<Node>
allocWithBounds(
float x,
float y,
float width,
float height) {
499 std::shared_ptr<Node> result = std::make_shared<Node>();
500 return (result->initWithBounds(x,y,width,height) ? result :
nullptr);
526 const std::shared_ptr<JsonValue>& data) {
527 std::shared_ptr<Node> result = std::make_shared<Node>();
528 return (result->initWithData(loader,data) ? result :
nullptr);
532 #pragma mark Identifiers
553 void setTag(
unsigned int tag) { _tag = tag; }
577 _hashOfName = std::hash<std::string>()(_name);
590 virtual std::string
toString(
bool verbose =
false)
const;
593 operator std::string()
const {
return toString(); }
597 #pragma mark Position
924 #pragma mark Visibility
1008 #pragma mark Transforms
1056 _scale.
set(scale,scale);
1057 if (!_useTransform) updateTransform();
1072 if (!_useTransform) updateTransform();
1088 if (!_useTransform) updateTransform();
1113 if (!_useTransform) updateTransform();
1147 _transform = transform;
1182 _useTransform = active; updateTransform();
1332 #pragma mark Z-order
1411 #pragma mark Scene Graph
1430 std::shared_ptr<Node>
getChild(
unsigned int pos);
1443 const std::shared_ptr<Node>&
getChild(
unsigned int pos)
const;
1461 template <
typename T>
1462 inline std::shared_ptr<T>
getChild(
unsigned int pos)
const {
1463 return std::dynamic_pointer_cast<T>(
getChild(pos));
1479 std::shared_ptr<Node>
getChildByTag(
unsigned int tag)
const;
1499 template <
typename T>
1517 std::shared_ptr<Node>
getChildByName(
const std::string& name)
const;
1537 template <
typename T>
1581 virtual void addChild(
const std::shared_ptr<Node>& child,
int zval);
1628 child->setName(name);
1646 child->setName(name);
1662 void swapChild(
const std::shared_ptr<Node>& child1,
const std::shared_ptr<Node>& child2,
bool inherit=
false);
1731 void removeChild(
const std::shared_ptr<Node>& child);
1766 #pragma mark Rendering
1778 virtual void render(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint);
1789 virtual void render(
const std::shared_ptr<SpriteBatch>& batch) {
1816 virtual void draw(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint) {}
1820 #pragma mark Layout Automation
1848 void setLayout(
const std::shared_ptr<Layout>& layout) { _layout = layout; }
1861 #pragma mark Internal Helpers
1879 void setZDirty(
bool value);
1889 void setParent(
Node* parent) { _parent = parent; }
1899 void setScene(Scene* scene) { _graph = scene; }
1909 void pushScene(Scene* scene);
1921 static bool compareNodeSibs(
const std::shared_ptr<Node>& a,
const std::shared_ptr<Node>& b);
1929 virtual void updateTransform();
1932 CU_DISALLOW_COPY_AND_ASSIGN(
Node);
Vec2 _position
Definition: CUNode.h:101
bool initWithPosition(float x, float y)
Definition: CUNode.h:267
std::vector< std::shared_ptr< Node > > _children
Definition: CUNode.h:162
void setRelativeColor(bool flag)
Definition: CUNode.h:1004
Color4 _tintColor
Definition: CUNode.h:115
Vec2 nodeToScreenCoords(const Vec2 &nodePoint) const
unsigned int getTag() const
Definition: CUNode.h:542
const Mat4 & getNodeToParentTransform() const
Definition: CUNode.h:1194
float x
Definition: CUVec2.h:66
float getHeight() const
Definition: CUNode.h:825
Vec2 screenToNodeCoords(const Vec2 &screenPoint) const
static std::shared_ptr< Node > allocWithPosition(const Vec2 &pos)
Definition: CUNode.h:404
float y
Definition: CUVec2.h:68
static Vec2 * transform(const Mat4 &mat, const Vec2 &point, Vec2 *dst)
const Node * getParent() const
Definition: CUNode.h:1682
void addChildWithName(const std::shared_ptr< Node > &child, const std::string &name)
Definition: CUNode.h:1626
void setPosition(const Vec2 &position)
Definition: CUNode.h:620
static std::shared_ptr< Node > allocWithData(const SceneLoader *loader, const std::shared_ptr< JsonValue > &data)
Definition: CUNode.h:525
Vec2 nodeToParentCoords(const Vec2 &nodePoint) const
Definition: CUNode.h:1327
size_t getChildCount() const
Definition: CUNode.h:1417
float _angle
Definition: CUNode.h:137
float getAngle()
Definition: CUNode.h:1100
float getPositionY(void) const
Definition: CUNode.h:669
virtual bool initWithData(const SceneLoader *loader, const std::shared_ptr< JsonValue > &data)
bool _hasParentColor
Definition: CUNode.h:117
Node * _parent
Definition: CUNode.h:165
Vec2 _scale
Definition: CUNode.h:127
virtual bool initWithBounds(const Size &size)
virtual void render(const std::shared_ptr< SpriteBatch > &batch, const Mat4 &transform, Color4 tint)
std::shared_ptr< Node > getChildByTag(unsigned int tag) const
virtual void setContentSize(const Size &size)
virtual void draw(const std::shared_ptr< SpriteBatch > &batch, const Mat4 &transform, Color4 tint)
Definition: CUNode.h:1816
void removeChildByTag(unsigned int tag)
Mat4 getNodeToWorldTransform() const
static std::shared_ptr< Node > allocWithBounds(const Rect &rect)
Definition: CUNode.h:475
std::shared_ptr< Node > getChildByName(const std::string &name) const
void setPositionY(float y)
Definition: CUNode.h:681
int _zOrder
Definition: CUNode.h:199
Mat4 _combined
Definition: CUNode.h:159
virtual void removeChild(unsigned int pos)
Vec2 getWorldPosition() const
Definition: CUNode.h:691
bool hasRelativeColor()
Definition: CUNode.h:993
void setScale(const Vec2 &vec)
Definition: CUNode.h:1070
virtual std::string toString(bool verbose=false) const
void setPositionX(float x)
Definition: CUNode.h:657
void addChildWithTag(const std::shared_ptr< Node > &child, unsigned int tag, int zval)
Definition: CUNode.h:1611
float getScaleX() const
Definition: CUNode.h:1031
bool _zDirty
Definition: CUNode.h:201
Vec2 worldToNodeCoords(const Vec2 &worldPoint) const
Definition: CUNode.h:1263
bool initWithBounds(float x, float y, float width, float height)
Definition: CUNode.h:337
Vec2 getAnchorInPixels()
Definition: CUNode.h:920
virtual void setAnchor(const Vec2 &anchor)
bool isVisible() const
Definition: CUNode.h:971
static const Color4 WHITE
Definition: CUColor4.h:1106
unsigned int _tag
Definition: CUNode.h:181
const Vec2 & getPosition() const
Definition: CUNode.h:608
void setContentHeight(float height)
Definition: CUNode.h:789
void setAnchor(float x, float y)
Definition: CUNode.h:883
void setContentWidth(float width)
Definition: CUNode.h:764
float width
Definition: CUSize.h:61
bool isZDirty() const
Definition: CUNode.h:1388
Vec2 nodeToWorldCoords(const Vec2 &nodePoint) const
Definition: CUNode.h:1297
void setTag(unsigned int tag)
Definition: CUNode.h:553
~Node()
Definition: CUNode.h:219
static std::shared_ptr< Node > allocWithBounds(float x, float y, float width, float height)
Definition: CUNode.h:498
const Size & getContentSize() const
Definition: CUNode.h:706
Mat4 getInverse() const
Definition: CUMat4.h:1047
void addChild(std::shared_ptr< Node > child)
Definition: CUNode.h:1565
void setLayout(const std::shared_ptr< Layout > &layout)
Definition: CUNode.h:1848
Mat4 getWorldToNodeTransform() const
Definition: CUNode.h:1228
Scene * _graph
Definition: CUNode.h:167
void setAngle(float angle)
Definition: CUNode.h:1111
float getWidth() const
Definition: CUNode.h:813
const std::string & getName() const
Definition: CUNode.h:564
Color4 getAbsoluteColor()
void setAlternateTransform(const Mat4 &transform)
Definition: CUNode.h:1146
void addChildWithName(const std::shared_ptr< Node > &child, const std::string &name, int zval)
Definition: CUNode.h:1644
float height
Definition: CUSize.h:63
const std::shared_ptr< Layout > & getLayout() const
Definition: CUNode.h:1832
Vec2 _anchor
Definition: CUNode.h:109
void chooseAlternateTransform(bool active)
Definition: CUNode.h:1181
static std::shared_ptr< Node > allocWithPosition(float x, float y)
Definition: CUNode.h:420
void addChildWithTag(const std::shared_ptr< Node > &child, unsigned int tag)
Definition: CUNode.h:1593
std::vector< std::shared_ptr< Node > > getChildren()
Definition: CUNode.h:1547
const Vec2 & getAnchor() const
Definition: CUNode.h:904
int _childOffset
Definition: CUNode.h:172
virtual void setColor(Color4 color)
Definition: CUNode.h:949
float getScaleY() const
Definition: CUNode.h:1043
std::shared_ptr< Node > getChild(unsigned int pos)
void setName(const std::string &name)
Definition: CUNode.h:575
Mat4 _transform
Definition: CUNode.h:147
static const Mat4 IDENTITY
Definition: CUMat4.h:105
Vec2 parentToNodeCoords(const Vec2 &parentPoint) const
Definition: CUNode.h:1312
static std::shared_ptr< Node > alloc()
Definition: CUNode.h:389
void removeFromParent()
Definition: CUNode.h:1709
const Vec2 & getScale() const
Definition: CUNode.h:1019
Definition: CUSceneLoader.h:77
Mat4 getParentToNodeTransform() const
Definition: CUNode.h:1205
const Mat4 & getAlternateTransform()
Definition: CUNode.h:1130
float getContentHeight() const
Definition: CUNode.h:774
void setScale(float scale)
Definition: CUNode.h:1055
void removeChildByName(const std::string &name)
static std::shared_ptr< Node > allocWithBounds(const Size &size)
Definition: CUNode.h:437
Scene * getScene()
Definition: CUNode.h:1692
virtual Node * copy(Node *dst)
void swapChild(const std::shared_ptr< Node > &child1, const std::shared_ptr< Node > &child2, bool inherit=false)
std::shared_ptr< T > getChildByName(const std::string &name) const
Definition: CUNode.h:1538
float getContentWidth() const
Definition: CUNode.h:749
std::string _name
Definition: CUNode.h:189
float getPositionX(void) const
Definition: CUNode.h:645
virtual void removeAllChildren()
Node * getParent()
Definition: CUNode.h:1672
const Scene * getScene() const
Definition: CUNode.h:1702
bool _useTransform
Definition: CUNode.h:150
virtual void setContentSize(float width, float height)
Definition: CUNode.h:737
Definition: CUColor4.h:1084
Size _contentSize
Definition: CUNode.h:112
Rect getBoundingBox() const
Definition: CUNode.h:836
static std::shared_ptr< Node > allocWithBounds(float width, float height)
Definition: CUNode.h:455
Color4 getColor() const
Definition: CUNode.h:936
std::shared_ptr< T > getChild(unsigned int pos) const
Definition: CUNode.h:1462
bool initWithBounds(float width, float height)
Definition: CUNode.h:298
Vec2 & set(float x, float y)
Definition: CUVec2.h:153
Definition: CUAction.h:51
bool withAlternateTransform()
Definition: CUNode.h:1165
virtual bool initWithPosition(const Vec2 &pos)
virtual void render(const std::shared_ptr< SpriteBatch > &batch)
Definition: CUNode.h:1789
static const Vec2 ZERO
Definition: CUVec2.h:71
void setScale(float sx, float sy)
Definition: CUNode.h:1086
virtual bool init()
Definition: CUNode.h:239
void setVisible(bool visible)
Definition: CUNode.h:982
const std::vector< std::shared_ptr< Node > > & getChildren() const
Definition: CUNode.h:1554
std::shared_ptr< T > getChildByTag(unsigned int tag) const
Definition: CUNode.h:1500
int getZOrder() const
Definition: CUNode.h:1369
bool _isVisible
Definition: CUNode.h:119
size_t _hashOfName
Definition: CUNode.h:196
std::shared_ptr< Layout > _layout
Definition: CUNode.h:169