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
385 #pragma mark Static Constructors
394 static std::shared_ptr<Node>
alloc() {
395 std::shared_ptr<Node> result = std::make_shared<Node>();
396 return (result->init() ? result :
nullptr);
410 std::shared_ptr<Node> result = std::make_shared<Node>();
411 return (result->initWithPosition(pos) ? result :
nullptr);
426 std::shared_ptr<Node> result = std::make_shared<Node>();
427 return (result->initWithPosition(x,y) ? result :
nullptr);
443 std::shared_ptr<Node> result = std::make_shared<Node>();
444 return (result->initWithBounds(size) ? result :
nullptr);
461 std::shared_ptr<Node> result = std::make_shared<Node>();
462 return (result->initWithBounds(width,height) ? result :
nullptr);
481 std::shared_ptr<Node> result = std::make_shared<Node>();
482 return (result->initWithBounds(rect) ? result :
nullptr);
503 static std::shared_ptr<Node>
allocWithBounds(
float x,
float y,
float width,
float height) {
504 std::shared_ptr<Node> result = std::make_shared<Node>();
505 return (result->initWithBounds(x,y,width,height) ? result :
nullptr);
536 const std::shared_ptr<JsonValue> data) {
537 std::shared_ptr<Node> result = std::make_shared<Node>();
538 return (result->initWithData(loader,data) ? result :
nullptr);
542 #pragma mark Identifiers
563 void setTag(
unsigned int tag) { _tag = tag; }
587 _hashOfName = std::hash<std::string>()(_name);
600 virtual std::string
toString(
bool verbose =
false)
const;
603 operator std::string()
const {
return toString(); }
607 #pragma mark Position
934 #pragma mark Visibility
1018 #pragma mark Transforms
1066 _scale.
set(scale,scale);
1067 if (!_useTransform) updateTransform();
1082 if (!_useTransform) updateTransform();
1098 if (!_useTransform) updateTransform();
1123 if (!_useTransform) updateTransform();
1157 _transform = transform;
1192 _useTransform = active; updateTransform();
1342 #pragma mark Z-order
1421 #pragma mark Scene Graph
1440 std::shared_ptr<Node>
getChild(
unsigned int pos);
1453 const std::shared_ptr<Node>&
getChild(
unsigned int pos)
const;
1471 template <
typename T>
1472 inline std::shared_ptr<T>
getChild(
unsigned int pos)
const {
1473 return std::dynamic_pointer_cast<
T>(
getChild(pos));
1489 std::shared_ptr<Node>
getChildByTag(
unsigned int tag)
const;
1509 template <
typename T>
1527 std::shared_ptr<Node>
getChildByName(
const std::string& name)
const;
1547 template <
typename T>
1591 virtual void addChild(
const std::shared_ptr<Node>& child,
int zval);
1638 child->setName(name);
1656 child->setName(name);
1672 void swapChild(
const std::shared_ptr<Node>& child1,
const std::shared_ptr<Node>& child2,
bool inherit=
false);
1741 void removeChild(
const std::shared_ptr<Node>& child);
1776 #pragma mark Rendering
1788 virtual void render(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint);
1799 virtual void render(
const std::shared_ptr<SpriteBatch>& batch) {
1826 virtual void draw(
const std::shared_ptr<SpriteBatch>& batch,
const Mat4& transform,
Color4 tint) {}
1830 #pragma mark Layout Automation
1858 void setLayout(
const std::shared_ptr<Layout>& layout) { _layout = layout; }
1871 #pragma mark Internal Helpers
1889 void setZDirty(
bool value);
1899 void setParent(
Node* parent) { _parent = parent; }
1909 void setScene(Scene* scene) { _graph = scene; }
1919 void pushScene(Scene* scene);
1931 static bool compareNodeSibs(
const std::shared_ptr<Node>& a,
const std::shared_ptr<Node>& b);
1939 virtual void updateTransform();
1942 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:1014
Color4 _tintColor
Definition: CUNode.h:115
Vec2 nodeToScreenCoords(const Vec2 &nodePoint) const
unsigned int getTag() const
Definition: CUNode.h:552
const Mat4 & getNodeToParentTransform() const
Definition: CUNode.h:1204
float x
Definition: CUVec2.h:66
float getHeight() const
Definition: CUNode.h:835
Vec2 screenToNodeCoords(const Vec2 &screenPoint) const
static std::shared_ptr< Node > allocWithPosition(const Vec2 &pos)
Definition: CUNode.h:409
float y
Definition: CUVec2.h:68
static Vec2 * transform(const Mat4 &mat, const Vec2 &point, Vec2 *dst)
const Node * getParent() const
Definition: CUNode.h:1692
void addChildWithName(const std::shared_ptr< Node > &child, const std::string &name)
Definition: CUNode.h:1636
void setPosition(const Vec2 &position)
Definition: CUNode.h:630
Vec2 nodeToParentCoords(const Vec2 &nodePoint) const
Definition: CUNode.h:1337
size_t getChildCount() const
Definition: CUNode.h:1427
float _angle
Definition: CUNode.h:137
float getAngle()
Definition: CUNode.h:1110
float getPositionY(void) const
Definition: CUNode.h:679
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:1826
void removeChildByTag(unsigned int tag)
Mat4 getNodeToWorldTransform() const
static std::shared_ptr< Node > allocWithBounds(const Rect &rect)
Definition: CUNode.h:480
std::shared_ptr< Node > getChildByName(const std::string &name) const
void setPositionY(float y)
Definition: CUNode.h:691
int _zOrder
Definition: CUNode.h:199
virtual bool initWithData(const SceneLoader *loader, const std::shared_ptr< JsonValue > data)
Mat4 _combined
Definition: CUNode.h:159
virtual void removeChild(unsigned int pos)
Vec2 getWorldPosition() const
Definition: CUNode.h:701
bool hasRelativeColor()
Definition: CUNode.h:1003
void setScale(const Vec2 &vec)
Definition: CUNode.h:1080
virtual std::string toString(bool verbose=false) const
void setPositionX(float x)
Definition: CUNode.h:667
void addChildWithTag(const std::shared_ptr< Node > &child, unsigned int tag, int zval)
Definition: CUNode.h:1621
float getScaleX() const
Definition: CUNode.h:1041
bool _zDirty
Definition: CUNode.h:201
Vec2 worldToNodeCoords(const Vec2 &worldPoint) const
Definition: CUNode.h:1273
bool initWithBounds(float x, float y, float width, float height)
Definition: CUNode.h:337
Vec2 getAnchorInPixels()
Definition: CUNode.h:930
virtual void setAnchor(const Vec2 &anchor)
bool isVisible() const
Definition: CUNode.h:981
static const Color4 WHITE
Definition: CUColor4.h:1106
unsigned int _tag
Definition: CUNode.h:181
const Vec2 & getPosition() const
Definition: CUNode.h:618
void setContentHeight(float height)
Definition: CUNode.h:799
void setAnchor(float x, float y)
Definition: CUNode.h:893
void setContentWidth(float width)
Definition: CUNode.h:774
float width
Definition: CUSize.h:61
bool isZDirty() const
Definition: CUNode.h:1398
Vec2 nodeToWorldCoords(const Vec2 &nodePoint) const
Definition: CUNode.h:1307
void setTag(unsigned int tag)
Definition: CUNode.h:563
~Node()
Definition: CUNode.h:219
static std::shared_ptr< Node > allocWithBounds(float x, float y, float width, float height)
Definition: CUNode.h:503
const Size & getContentSize() const
Definition: CUNode.h:716
Mat4 getInverse() const
Definition: CUMat4.h:1056
void addChild(std::shared_ptr< Node > child)
Definition: CUNode.h:1575
void setLayout(const std::shared_ptr< Layout > &layout)
Definition: CUNode.h:1858
Mat4 getWorldToNodeTransform() const
Definition: CUNode.h:1238
Scene * _graph
Definition: CUNode.h:167
void setAngle(float angle)
Definition: CUNode.h:1121
float getWidth() const
Definition: CUNode.h:823
const std::string & getName() const
Definition: CUNode.h:574
Color4 getAbsoluteColor()
void setAlternateTransform(const Mat4 &transform)
Definition: CUNode.h:1156
void addChildWithName(const std::shared_ptr< Node > &child, const std::string &name, int zval)
Definition: CUNode.h:1654
float height
Definition: CUSize.h:63
const std::shared_ptr< Layout > & getLayout() const
Definition: CUNode.h:1842
Vec2 _anchor
Definition: CUNode.h:109
void chooseAlternateTransform(bool active)
Definition: CUNode.h:1191
static std::shared_ptr< Node > allocWithPosition(float x, float y)
Definition: CUNode.h:425
void addChildWithTag(const std::shared_ptr< Node > &child, unsigned int tag)
Definition: CUNode.h:1603
std::vector< std::shared_ptr< Node > > getChildren()
Definition: CUNode.h:1557
const Vec2 & getAnchor() const
Definition: CUNode.h:914
int _childOffset
Definition: CUNode.h:172
virtual void setColor(Color4 color)
Definition: CUNode.h:959
float getScaleY() const
Definition: CUNode.h:1053
std::shared_ptr< Node > getChild(unsigned int pos)
void setName(const std::string &name)
Definition: CUNode.h:585
Mat4 _transform
Definition: CUNode.h:147
static const Mat4 IDENTITY
Definition: CUMat4.h:114
Vec2 parentToNodeCoords(const Vec2 &parentPoint) const
Definition: CUNode.h:1322
static std::shared_ptr< Node > alloc()
Definition: CUNode.h:394
void removeFromParent()
Definition: CUNode.h:1719
const Vec2 & getScale() const
Definition: CUNode.h:1029
Definition: CUSceneLoader.h:77
Mat4 getParentToNodeTransform() const
Definition: CUNode.h:1215
const Mat4 & getAlternateTransform()
Definition: CUNode.h:1140
float getContentHeight() const
Definition: CUNode.h:784
void setScale(float scale)
Definition: CUNode.h:1065
void removeChildByName(const std::string &name)
static std::shared_ptr< Node > allocWithBounds(const Size &size)
Definition: CUNode.h:442
Scene * getScene()
Definition: CUNode.h:1702
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:1548
static std::shared_ptr< Node > allocWithData(const SceneLoader *loader, const std::shared_ptr< JsonValue > data)
Definition: CUNode.h:535
float getContentWidth() const
Definition: CUNode.h:759
std::string _name
Definition: CUNode.h:189
float getPositionX(void) const
Definition: CUNode.h:655
virtual void removeAllChildren()
Node * getParent()
Definition: CUNode.h:1682
const Scene * getScene() const
Definition: CUNode.h:1712
bool _useTransform
Definition: CUNode.h:150
virtual void setContentSize(float width, float height)
Definition: CUNode.h:747
Definition: CUColor4.h:1084
Size _contentSize
Definition: CUNode.h:112
Rect getBoundingBox() const
Definition: CUNode.h:846
static std::shared_ptr< Node > allocWithBounds(float width, float height)
Definition: CUNode.h:460
Color4 getColor() const
Definition: CUNode.h:946
std::shared_ptr< T > getChild(unsigned int pos) const
Definition: CUNode.h:1472
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:1175
virtual bool initWithPosition(const Vec2 &pos)
virtual void render(const std::shared_ptr< SpriteBatch > &batch)
Definition: CUNode.h:1799
static const Vec2 ZERO
Definition: CUVec2.h:71
void setScale(float sx, float sy)
Definition: CUNode.h:1096
virtual bool init()
Definition: CUNode.h:239
void setVisible(bool visible)
Definition: CUNode.h:992
const std::vector< std::shared_ptr< Node > > & getChildren() const
Definition: CUNode.h:1564
std::shared_ptr< T > getChildByTag(unsigned int tag) const
Definition: CUNode.h:1510
int getZOrder() const
Definition: CUNode.h:1379
bool _isVisible
Definition: CUNode.h:119
size_t _hashOfName
Definition: CUNode.h:196
std::shared_ptr< Layout > _layout
Definition: CUNode.h:169