rag
graphic 2d engine
DisplayObject.h
1 #ifndef _RAG_DISPLAY_OBJECT_H_
2 #define _RAG_DISPLAY_OBJECT_H_
3 
4 #include <rag/Rectangle.h>
5 #include <rag/EventDispatcher.h>
6 #include <rag/TouchEvent.h>
7 #include "Color.h"
8 #include "Timer.h"
9 #include <string>
10 #include <vector>
11 #include <glm/glm.hpp>
12 #include "Material.h"
13 
14 namespace rag
15 {
17 
24  {
25  public:
26 
27  DisplayObject();
28  virtual ~DisplayObject();
29 
30  std::string name;
31  DisplayObject* parent;
32 
34  void addChild(DisplayObject* child);
35 
37  void addChildAt(DisplayObject* child, int index);
38 
40 
43  void removeChild(DisplayObject* child);
44 
46 
48  void deleteChild(DisplayObject* child);
49 
51  DisplayObject* getChildByName(const std::string& name);
52 
54  DisplayObject* getChildAt(int index);
55 
57  int getChildIndex(DisplayObject* child) const;
58 
60  bool contains(const DisplayObject* child) const;
61 
63  int getNumChilds();
64 
66  void swapChildren(DisplayObject* child1, DisplayObject* child2);
67 
69  virtual void logicUpdate(){};
70 
72 
73  virtual void logicTraversal();
74 
76  virtual void render();
77 
79  virtual void renderTraversal(const Color& color);
80 
82  virtual void prerender();
83 
85  void setX(float x);
86 
88  float getX();
89 
91  void setY(float y);
92 
94  float getY();
95 
97  void setPosition(float x, float y);
98 
100  void setPosition(glm::vec2 p);
101 
103  glm::vec2 getPosition() const;
104 
106  void setScale(float scale);
107 
109  void setScaleX(float scaleX);
110 
112  float getScaleX() const;
113 
115  void setScaleY(float scaleY);
116 
118  float getScaleY() const;
119 
121  void setAngle(float angle);
122 
124  float getAngle() const;
125 
127  void setSkewX(float skewX);
128 
130  float getSkewX() const;
131 
133  void setSkewY(float skewY);
134 
136  float getSkewY() const;
137 
139  void setWidth(float width);
140 
142  float getWidth();
143 
145  void setHeight(float height);
146 
148  float getHeight();
149 
151  virtual bool hitTestPoint(int x, int y);
152 
154  glm::vec2 localToGlobal(const glm::vec2& point);
155 
157  glm::vec2 globalToLocal(const glm::vec2& point);
158 
160  void setClipRectangle(const Rectangle &rect);
161 
163  Rectangle getBounds(DisplayObject* targetCoordinateSpace = NULL);
164 
166  void onNativeEvent(events::TouchEvent& event);
167 
169  void setText(rag::DisplayObject* displayObject, const std::string& text);
170 
172  void setText(rag::DisplayObject* displayObject, int value);
173 
175 
176  static void deletePendentObjects();
177 
179  static void showLivingObjects();
180 
182 
184  void destroy();
185 
188  void updateMatrix();
189 
190  std::vector<DisplayObject*> childs;
194  glm::mat4 matrix;
195  bool visible;
196 
200  std::string soundName;
201  std::string script;
202 
203  protected:
204 
206 
207  virtual void updateBounds(rag::DisplayObject* targetCoordinateSpace);
208 
209  float scaleX, scaleY;
210  float x, y, width, height;
211  float angle;
212  float skewX, skewY;
213  Rectangle bounds;
214  int numChilds;
215 
216  bool dirty;
217  Color colorTransform;
218 
219  Rectangle clipRect;
220 
221  private:
222 
223  void setDirty();
224  void deleteTraversal();
225 
226  bool mouseDown;
227  glm::vec2 mouseDownPoint;
228  Timer tapTimer;
229 
230  static std::vector<DisplayObject*> toDelete;
231  };
232 
233 } // rag
234 
235 #endif
236 
glm::mat4 matrix
The object matrix.
Definition: DisplayObject.h:194
Material * renderMaterial
The render material modified by the display list hierarchy.
Definition: DisplayObject.h:193
Provides time-related functionality.
Definition: Timer.h:10
virtual bool hitTestPoint(int x, int y)
Returns true if the point lies inside the object boundary box.
Definition: DisplayObject.cpp:493
void destroy()
self-destroy the object and all its childs.
Definition: DisplayObject.cpp:719
Material material
Material of the object.
Definition: DisplayObject.h:192
DisplayObject * getChildAt(int index)
Returns a child by index.
Definition: DisplayObject.cpp:148
static void deletePendentObjects()
Deletes from memory all the nodes currently on the toDelete list.
Definition: DisplayObject.cpp:705
DisplayObject * getChildByName(const std::string &name)
Returns a child by name.
Definition: DisplayObject.cpp:136
float getAngle() const
Returns object orientation angle.
Definition: DisplayObject.cpp:427
bool contains(const DisplayObject *child) const
Returns true if the child DisplayObject exists as a child.
Definition: DisplayObject.cpp:163
virtual void render()
Renders the DisplayObject in the screen.
Definition: DisplayObject.cpp:186
Base class used to dispatch events.
Definition: EventDispatcher.h:14
float getScaleX() const
Returns object x scale.
Definition: DisplayObject.cpp:401
void setScaleX(float scaleX)
Sets object x scale.
Definition: DisplayObject.cpp:393
float getSkewX() const
Returns object x skew.
Definition: DisplayObject.cpp:437
glm::vec2 globalToLocal(const glm::vec2 &point)
Convert global coordinates to local coordinates.
Definition: DisplayObject.cpp:513
void setX(float x)
Sets x position.
Definition: DisplayObject.cpp:341
bool checkHitPoint
When captureInput, checkHitPoint makes capture input only when hitTest is true. Defaults to false...
Definition: DisplayObject.h:199
int getChildIndex(DisplayObject *child) const
Returns a child's index.
Definition: DisplayObject.cpp:153
bool captureInput
When true, input events are captured and propagation stops.
Definition: DisplayObject.h:198
Definition: Bitmap.h:8
Rectangle getBounds(DisplayObject *targetCoordinateSpace=NULL)
Returns the boundary box of the object.
Definition: DisplayObject.cpp:530
void addChild(DisplayObject *child)
Adds a DisplayObject child.
Definition: DisplayObject.cpp:77
void onNativeEvent(events::TouchEvent &event)
Notifies the object about an input event.
Definition: DisplayObject.cpp:598
void swapChildren(DisplayObject *child1, DisplayObject *child2)
Swaps two childs indexes.
Definition: DisplayObject.cpp:177
static void showLivingObjects()
Logs information about the current number of living DisplayObject.
Definition: DisplayObject.cpp:65
void setY(float y)
Sets y position.
Definition: DisplayObject.cpp:354
void addChildAt(DisplayObject *child, int index)
Adds a DisplayObject child in a specific order.
Definition: DisplayObject.cpp:95
float getY()
Returns y position.
Definition: DisplayObject.cpp:362
virtual void logicTraversal()
Recursively calls logicUpdate in all child objects.
Definition: DisplayObject.cpp:330
float getHeight()
Returns object width.
Definition: DisplayObject.cpp:475
virtual void updateBounds(rag::DisplayObject *targetCoordinateSpace)
Updates the bounding box of the object according to childs bounds.
Definition: DisplayObject.cpp:536
void removeChild(DisplayObject *child)
Removes a child DisplayObject.
Definition: DisplayObject.cpp:113
void setClipRectangle(const Rectangle &rect)
This allow to render just a part of the bitmap.
Definition: DisplayObject.cpp:593
float getWidth()
Returns object width.
Definition: DisplayObject.cpp:462
bool autoScaleOnTouch
When true, the bounds scale when is touched.
Definition: DisplayObject.h:197
void setScaleY(float scaleY)
Sets object y scale.
Definition: DisplayObject.cpp:406
virtual void renderTraversal(const Color &color)
Recursively calls render in all childs objects.
Definition: DisplayObject.cpp:223
glm::vec2 getPosition() const
Returns object position.
Definition: DisplayObject.cpp:379
Core object used to display things in screen.
Definition: DisplayObject.h:23
float getScaleY() const
Returns object y scale.
Definition: DisplayObject.cpp:414
Represents a render material that would affect how objects will be rendered.
Definition: Material.h:39
Represents a Rectangle.
Definition: Rectangle.h:10
void setSkewX(float skewX)
Sets object x skew.
Definition: DisplayObject.cpp:432
float getSkewY() const
Returns object y skew.
Definition: DisplayObject.cpp:447
void setText(rag::DisplayObject *displayObject, const std::string &text)
Helper function to set a text.
Definition: DisplayObject.cpp:670
void deleteChild(DisplayObject *child)
Deletes a specific child from the DisplayList.
Definition: DisplayObject.cpp:124
glm::vec2 localToGlobal(const glm::vec2 &point)
Converts local coordinates to global coordinates.
Definition: DisplayObject.cpp:499
virtual void prerender()
Temporal transition to new automatic batch render.
Definition: DisplayObject.cpp:196
Color color
Color of the object.
Definition: DisplayObject.h:191
void setScale(float scale)
Sets object scale.
Definition: DisplayObject.cpp:385
Represents RGBA color.
Definition: Color.h:11
void setSkewY(float skewY)
Sets object y skew.
Definition: DisplayObject.cpp:442
void setWidth(float width)
Sets object width.
Definition: DisplayObject.cpp:454
Event for handle input from screen.
Definition: TouchEvent.h:20
void updateMatrix()
Definition: DisplayObject.cpp:201
void setHeight(float height)
Sets object width.
Definition: DisplayObject.cpp:467
std::string soundName
Definition: DisplayObject.h:200
void setAngle(float angle)
Sets object orientation angle.
Definition: DisplayObject.cpp:419
bool visible
Determines object visibility.
Definition: DisplayObject.h:195
std::vector< DisplayObject * > childs
List of childs.
Definition: DisplayObject.h:190
float getX()
Returns x position.
Definition: DisplayObject.cpp:349
virtual void logicUpdate()
This function is called every frame.
Definition: DisplayObject.h:69
void setPosition(float x, float y)
Sets x and y position.
Definition: DisplayObject.cpp:367
int getNumChilds()
Returns the number of childs.
Definition: DisplayObject.cpp:690