Browse Source

- cleanup code
- removed "using namespace std"
- Tweener.h is deprecated, use Tween.h
- refactored events header
- GetSet -> Property
- improved emscripten
- refactored oxyresbuild tool and scale factor
- fixed warnings
- improved TweenQueue

dmuratshin 11 years ago
parent
commit
54f0f254d6
100 changed files with 987 additions and 661 deletions
  1. 2 2
      .hg_archival.txt
  2. 1 0
      .hgignore
  3. BIN
      3rdPartyTools/BMFont/bmfont.exe
  4. 2 2
      3rdPartyTools/BMFont/doc/file_format.html
  5. BIN
      3rdPartyTools/BMFont/doc/measures.png
  6. 61 0
      3rdPartyTools/BMFont/doc/render_text.html
  7. 1 0
      3rdPartyTools/BMFont/documentation.html
  8. 5 3
      3rdPartyTools/BMFont/readme.txt
  9. BIN
      3rdPartyTools/BMFont/uninstall.exe
  10. 2 0
      CMakeLists.txt
  11. 2 0
      doc/Home.md
  12. 32 16
      doc/actors.md
  13. 107 0
      doc/atlasses.md
  14. 2 1
      doc/debug.md
  15. 6 5
      doc/filesystem.md
  16. BIN
      doc/img/box9sprite.jpg
  17. BIN
      doc/img/colorrect.png
  18. BIN
      doc/img/oxyresbuild.png
  19. 17 0
      doc/ru/Home.md
  20. 57 0
      doc/ru/start.md
  21. 1 0
      doc/start.md
  22. 1 1
      examples/Demo/data/ext/fonts.xml.ox/meta.xml
  23. 3 1
      examples/Demo/proj.win32/Demo_vs2010.vcxproj
  24. 5 23
      examples/Demo/proj.win32/Demo_vs2013.vcxproj
  25. 0 70
      examples/Demo/proj.win32/Demo_vs2013.vcxproj.filters
  26. 1 1
      examples/Demo/src/TestPerf.h
  27. 1 1
      examples/Demo/src/TestText.h
  28. 1 1
      examples/Demo/src/TestUserShader.h
  29. 3 0
      examples/Demo/src/entry_point.cpp
  30. 7 0
      examples/Demo/src/example.cpp
  31. 6 6
      examples/Demo/src/test.cpp
  32. 2 2
      examples/Demo/src/test.h
  33. 3 0
      examples/DemoBox2D/src/entry_point.cpp
  34. 2 0
      examples/Game/part1/proj.win32/GamePart1_vs2010.vcxproj
  35. 2 0
      examples/Game/part1/proj.win32/GamePart1_vs2013.vcxproj
  36. 3 0
      examples/Game/part1/src/entry_point.cpp
  37. 2 0
      examples/Game/part2/proj.win32/GamePart2_vs2010.vcxproj
  38. 2 0
      examples/Game/part2/proj.win32/GamePart2_vs2013.vcxproj
  39. 3 0
      examples/Game/part2/src/entry_point.cpp
  40. 2 0
      examples/Game/part3/proj.win32/GamePart3_vs2010.vcxproj
  41. 2 0
      examples/Game/part3/proj.win32/GamePart3_vs2013.vcxproj
  42. 2 0
      examples/Game/part3/src/MainMenuScene.cpp
  43. 3 0
      examples/Game/part3/src/entry_point.cpp
  44. 2 0
      examples/Game/part4/proj.win32/GamePart4_vs2010.vcxproj
  45. 2 0
      examples/Game/part4/proj.win32/GamePart4_vs2013.vcxproj
  46. 0 13
      examples/Game/part4/proj.win32/GamePart5_vs2010.vcxproj.user
  47. 0 13
      examples/Game/part4/proj.win32/GamePart5_vs2013.vcxproj.user
  48. 1 0
      examples/Game/part4/src/MyButton.h
  49. 1 0
      examples/Game/part4/src/Scene.h
  50. 3 0
      examples/Game/part4/src/entry_point.cpp
  51. BIN
      examples/Game/part5/data/ui.xml.ox/atlas/1_0.png
  52. 1 1
      examples/Game/part5/data/ui.xml.ox/meta.xml
  53. 2 0
      examples/Game/part5/proj.win32/GamePart5_vs2010.vcxproj
  54. 2 0
      examples/Game/part5/proj.win32/GamePart5_vs2013.vcxproj
  55. 1 0
      examples/Game/part5/src/MyButton.h
  56. 1 0
      examples/Game/part5/src/Scene.h
  57. 227 102
      examples/HelloWorld/data/fonts/main.fnt
  58. BIN
      examples/HelloWorld/data/fonts/main_0.png
  59. 0 0
      examples/HelloWorld/data/images/anim.png
  60. BIN
      examples/HelloWorld/data/images/button.png
  61. 2 2
      examples/HelloWorld/data/res.xml
  62. 2 0
      examples/HelloWorld/proj.win32/HelloWorld_vs2010.vcxproj
  63. 2 0
      examples/HelloWorld/proj.win32/HelloWorld_vs2013.vcxproj
  64. 3 0
      examples/HelloWorld/src/entry_point.cpp
  65. 46 31
      examples/HelloWorld/src/example.cpp
  66. 2 0
      examples/Match3/proj.win32/Match3_vs2010.vcxproj
  67. 2 0
      examples/Match3/proj.win32/Match3_vs2013.vcxproj
  68. 3 0
      examples/Match3/src/entry_point.cpp
  69. 5 1
      examples/Match3/src/jewels.h
  70. 2 0
      examples/TutorialResources/proj.win32/TutorialResources_vs2010.vcxproj
  71. 2 0
      examples/TutorialResources/proj.win32/TutorialResources_vs2013.vcxproj
  72. 3 0
      examples/TutorialResources/src/entry_point.cpp
  73. 32 14
      oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj/project.pbxproj
  74. 28 14
      oxygine/SDL/macosx/oxygine_macosx/oxygine_macosx.xcodeproj/project.pbxproj
  75. 9 3
      oxygine/SDL/win32/oxygine_vs2013.vcxproj
  76. 33 11
      oxygine/SDL/win32/oxygine_vs2013.vcxproj.filters
  77. 26 26
      oxygine/src/Actor.cpp
  78. 72 113
      oxygine/src/Actor.h
  79. 2 2
      oxygine/src/Box9Sprite.cpp
  80. 1 1
      oxygine/src/Button.cpp
  81. 0 5
      oxygine/src/Button.h
  82. 2 2
      oxygine/src/ClipRectActor.cpp
  83. 0 1
      oxygine/src/ClipRectActor.h
  84. 2 2
      oxygine/src/Clock.cpp
  85. 2 2
      oxygine/src/Clock.h
  86. 18 10
      oxygine/src/DebugActor.cpp
  87. 2 4
      oxygine/src/DebugActor.h
  88. 4 4
      oxygine/src/Draggable.cpp
  89. 4 4
      oxygine/src/Draggable.h
  90. 22 79
      oxygine/src/Event.h
  91. 1 0
      oxygine/src/EventDispatcher.cpp
  92. 7 37
      oxygine/src/EventDispatcher.h
  93. 10 5
      oxygine/src/Font.cpp
  94. 7 6
      oxygine/src/Font.h
  95. 1 1
      oxygine/src/Input.cpp
  96. 2 2
      oxygine/src/Input.h
  97. 4 4
      oxygine/src/InputText.cpp
  98. 7 9
      oxygine/src/InputText.h
  99. 18 0
      oxygine/src/KeyEvent.h
  100. 0 2
      oxygine/src/MemoryTexture.h

+ 2 - 2
.hg_archival.txt

@@ -1,5 +1,5 @@
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
-node: 75aff0614d1b9381798892e301c4900ccbf626ea
+node: 9374dae23a95744caffa43e26ab5a4c22831b1e0
 branch: default
 branch: default
 latesttag: oldrender
 latesttag: oldrender
-latesttagdistance: 493
+latesttagdistance: 542

+ 1 - 0
.hgignore

@@ -137,5 +137,6 @@ oxygine/SDL/win32/Debug_vs2015
 oxygine-framework-with-sdl.zip
 oxygine-framework-with-sdl.zip
 examples/Game/part2/proj.win32/Debug
 examples/Game/part2/proj.win32/Debug
 */proj.win32/Debug/
 */proj.win32/Debug/
+.idea
 syntax: regexp
 syntax: regexp
 ^build/
 ^build/

BIN
3rdPartyTools/BMFont/bmfont.exe


+ 2 - 2
3rdPartyTools/BMFont/doc/file_format.html

@@ -13,7 +13,7 @@
 <li><a href="#tags">File tags</a>
 <li><a href="#tags">File tags</a>
 <li><a href="#bin">Binary file layout</a>
 <li><a href="#bin">Binary file layout</a>
 
 
-<a name="#tags"></a>
+<a name="tags"></a>
 <h2>File tags</h2>
 <h2>File tags</h2>
 
 
 <h3>info</h3>
 <h3>info</h3>
@@ -94,7 +94,7 @@ following the first.</td></tr>
 </table>
 </table>
 
 
 
 
-<a name="#bin"></A>
+<a name="bin"></A>
 <h2>Binary file layout</h2>
 <h2>Binary file layout</h2>
 
 
 <p>This section describes the layout of the tags in the binary file format. To understand what each tag means refer 
 <p>This section describes the layout of the tags in the binary file format. To understand what each tag means refer 

BIN
3rdPartyTools/BMFont/doc/measures.png


+ 61 - 0
3rdPartyTools/BMFont/doc/render_text.html

@@ -0,0 +1,61 @@
+<html>
+<head>
+<title>Bitmap Font Generator - Documentation</title>
+</head>
+<body>
+
+<h1>Bitmap Font Generator - Documentation</h1>
+
+<p><a href="../documentation.html">Back to main page</a></p>
+
+<p><img src="measures.png" align="right"></p>
+
+<h2>How to interpret the values in the font descriptor file</h2>
+
+<p>The image to the right illustrates some of the values found in the 
+<A href="file_format.html">font descriptor file</a>. The two dotted lines 
+shows the <tt>lineHeight</tt>, i.e. how far the cursor should be moved 
+vertically when moving to the next line.</p>
+
+<p>The <tt>base</tt> value is how far from the top of the cell height the
+base of the characters in the font should be placed. Characters can of course
+extend above or below this base line, which is entirely up to the font design.</p>
+
+<p>The filled red dot marks the current cursor position, and the hollow red dot
+marks the position of the cursor after drawing the character. You get to this 
+position by moving the cursor horizontally with the <tt>xadvance</tt> value. If 
+kerning pairs are used the cursor should also be moved accordingly.</p>
+
+<p>The <tt>yoffset</tt> gives the distance from the top of the cell height to
+the top of the character. A negative value here would mean that the character
+extends above the cell height. The <tt>xoffset</tt> gives the horizontal offset
+that should be added to the cursor position to find the left position where the 
+character should be drawn. A negative value here would mean that the character
+slightly overlaps the previous character. Observe that these values shouldn't 
+be used to move the cursor position.</p>
+
+<p>The green rectangle illustrates the quad that should be copied from the texture
+to the screen when rendering the character. The <tt>width</tt> and <tt>height</tt> 
+gives the size of this rectangle, and <tt>x</tt> and <tt>y</tt> gives the position 
+of the rectangle in the texture.</p>
+
+<h2>Rendering colored text with outline</h2>
+
+<p>When the bitmap font has been generated with a baked outline, i.e. the outline is 
+pre-generated in the font texture, the text is best rendered in two passes to avoid 
+the outline for a character to overlap the previous character.</p>
+
+<p>In the first pass the application should use only the alpha channel of the font 
+texture as the transparency value when rendering the border.</p>
+
+<p>In the second pass the application should use only the color channels of the font 
+texture as the transparency value to render the characters over the border.</p>
+
+<p>With a two-pass rendering like this it is also very easy to apply different colors
+to the border and the internal characters dynamically without the need to pre-color
+the font in the texture. The application simply needs to multiply the transparency value
+the desired color before blending it to the screen.</p>
+
+
+</body>
+</html>

+ 1 - 0
3rdPartyTools/BMFont/documentation.html

@@ -16,6 +16,7 @@ descriptor file to determine how to draw each character.</p>
 <li><a href="doc/export_options.html">Export options</a>
 <li><a href="doc/export_options.html">Export options</a>
 <li><a href="doc/command_line.html">Command line parameters</a>
 <li><a href="doc/command_line.html">Command line parameters</a>
 <li><a href="doc/file_format.html">File format</a>
 <li><a href="doc/file_format.html">File format</a>
+<li><a href="doc/render_text.html">How to render text</a>
 <li><a href="doc/pixel_shader.html">Pixel shader sample</a>
 <li><a href="doc/pixel_shader.html">Pixel shader sample</a>
 <li><a href="doc/known_issues.html">Known issues</a>
 <li><a href="doc/known_issues.html">Known issues</a>
 </ul>
 </ul>

+ 5 - 3
3rdPartyTools/BMFont/readme.txt

@@ -20,16 +20,18 @@ The program and any possible upgrades can be found at www.AngelCode.com. The aut
 
 
 Changes
 Changes
 -------------------------------
 -------------------------------
-1.14 beta - 2013/10/08
+1.14 beta - 2014/06/17
 - Fixed crash with large fonts when Windows API incorrectly reported negative width for glyphs.
 - Fixed crash with large fonts when Windows API incorrectly reported negative width for glyphs.
 - Improved handling of out-of-memory conditions.
 - Improved handling of out-of-memory conditions.
-- Fixed crash that could occur when exporting unicode characters above 0x10000 with kerning pairs.
+- Fixed crash that could occur when exporting Unicode characters above 0x10000 with kerning pairs.
 - Fixed crash when command line argument -c was a relative path and the configuration included font file or image files.
 - Fixed crash when command line argument -c was a relative path and the configuration included font file or image files.
 - Fixed crash when saving configuration file with added font file from the same directory.
 - Fixed crash when saving configuration file with added font file from the same directory.
-- Corrected the cell height when using fixed height and supersampling.
+- Corrected the cell height when using fixed height and super-sampling.
 - Added support for Unicode 6.2.
 - Added support for Unicode 6.2.
 - Fixed compatibility with Windows XP.
 - Fixed compatibility with Windows XP.
 - Fixed scaling issues and cropping when using height scale with render from outline.
 - Fixed scaling issues and cropping when using height scale with render from outline.
+- Fixed application freeze when generating very large fonts.
+- Converted application to compile for Windows with Unicode to better support file and font names with international characters.
 
 
 1.13 - 2012/08/12
 1.13 - 2012/08/12
 - Added option to export fonts using fixed cell heights for easier post processing.
 - Added option to export fonts using fixed cell heights for easier post processing.

BIN
3rdPartyTools/BMFont/uninstall.exe


+ 2 - 0
CMakeLists.txt

@@ -7,6 +7,7 @@ if (WIN32)
 		-D_CRT_SECURE_NO_WARNINGS)
 		-D_CRT_SECURE_NO_WARNINGS)
 	set(SDL2_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../SDL/include)
 	set(SDL2_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../SDL/include)
 else(WIN32)
 else(WIN32)
+
 	find_path(SDL2_INCLUDE_DIRS NAMES SDL2/SDL.h)
 	find_path(SDL2_INCLUDE_DIRS NAMES SDL2/SDL.h)
 	message(STATUS ${SDL2_INCLUDE_DIRS_FOUND})
 	message(STATUS ${SDL2_INCLUDE_DIRS_FOUND})
 
 
@@ -30,6 +31,7 @@ if (EMSCRIPTEN)
 	set(OX_HAVE_LIBJPEG 0)
 	set(OX_HAVE_LIBJPEG 0)
 	set(OX_HAVE_LIBPNG 1)
 	set(OX_HAVE_LIBPNG 1)
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/emscripten)
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/emscripten)
+	set(SDL2_INCLUDE_DIRS "")
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/linux)
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/linux)
 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

+ 2 - 0
doc/Home.md

@@ -12,6 +12,8 @@ Work in progress...
 7. [Resources](resources)
 7. [Resources](resources)
 8. [Colors Table](colors)
 8. [Colors Table](colors)
 
 
+9. [Atlasses and HD Assets](atlasses) (not translated yet)
+
 
 
 ##Extensions:
 ##Extensions:
 1. [oxygine-sound library](sounds)
 1. [oxygine-sound library](sounds)

+ 32 - 16
doc/actors.md

@@ -24,47 +24,63 @@ You could create second *"child"* sprite attached to already created and they wo
 ![Actor inheritance](img/actor.png)
 ![Actor inheritance](img/actor.png)
  
  
  
  
-#Actors
-Actor is base class in scene graph. 
+
+#Actor
+[Actor](http://oxygine.org/doc/api/classoxygine_1_1_actor.html) is base class in scene graph. 
+It can be moved, rotated, scaled, animated. Actors can have other actors as children. When a parent is transformed, all its children are transformed as well.
+
 Actor has properties:
 Actor has properties:
 
 
 - transformation (position, scale, rotation)
 - transformation (position, scale, rotation)
+- anchor point
 - size
 - size
 - name
 - name
+- transparency
 - list of children
 - list of children
 - list of added tweens 
 - list of added tweens 
-- etc.
+- etc. 
 
 
 
 
-You would widely use Sprites in your app.
 
 
 ##Sprite
 ##Sprite
-Sprite is main Actor for displaying images and animations. Sprite = Actor + Image
 
 
-![Actor inheritance](img/sprite.png)
+You would widely use [Sprites](http://oxygine.org/doc/api/classoxygine_1_1_sprite.html) in your app.
+Sprite is subclass of Actor. It is using for displaying images and animations.
+
+
+![](img/sprite.png)
 
 
 ##Polygon
 ##Polygon
-Sprite for rendering custom vertices array. Polygon = Sprite + Vertices 
+[Polygon](http://oxygine.org/doc/api/classoxygine_1_1_polygon.html) is subclass of Sprite. It is used for rendering custom vertices array.  
 
 
-![Actor inheritance](img/polygon.png)
+![](img/polygon.png)
 
 
 ##TextField
 ##TextField
-TextField is used for displaying text.
+[TextField](http://oxygine.org/doc/api/classoxygine_1_1_text_field.html) is subclass of Actor. It is used for displaying text.
 
 
-![Actor inheritance](img/text.png)
+![](img/text.png)
 
 
 ##Progress Bar
 ##Progress Bar
-Progress Bar is used for displaying progress.
+[ProgressBar](http://oxygine.org/doc/api/classoxygine_1_1_progress_bar.html) is subclass of Sprite. It is used for displaying progress.
 
 
-![Actor inheritance](img/progressbar.png)
+![](img/progressbar.png)
 
 
 ##ColorRectSprite
 ##ColorRectSprite
-It is rectangle filled with one color.
+[ColorRectSprite](http://oxygine.org/doc/api/classoxygine_1_1_color_rect_sprite.html) is subclass of Sprite. It is rectangle filled with one color.
+
+![](img/colorrect.png)
 
 
 ##ClipRectActor
 ##ClipRectActor
-ClipRectActor is clipping outside children.
+[ClipRectActor](http://oxygine.org/doc/api/classoxygine_1_1_clip_rect_actor.html) is sublcass of Actor. It is used to clip area with children outside of actor's bound.
+
+##Box9Sprite
+
+[Box9Sprite](http://oxygine.org/doc/api/classoxygine_1_1_box9_sprite.html) is sublcass of Sprite. It is used to scale the image in such a way that the 4 corners remain unscaled, but the four edges are scaled(or tiled) in one axis and the middle is scaled(or tiled) in both axis. So the graphical representation of this scenario will be something like this:
+
+![](img/box9sprite.jpg)
+
 
 
 ##MaskedSprite
 ##MaskedSprite
-Sprite which is using other sprite for masking own children.
+[MaskedSprite](http://oxygine.org/doc/api/classoxygine_1_1_masked_sprite.html) is subclass of Sprite. It is using other sprite for masking own children.
 
 
-![Actor inheritance](img/mask.png)
+![](img/mask.png)

+ 107 - 0
doc/atlasses.md

@@ -0,0 +1,107 @@
+#Building Atlasses
+Все изображения, объявленные в xml файле ресурсов в группе <atlas> автоматически собираются в атласы при загрузке xml. 
+	
+	<atlas>
+	    <image file="close.png" />
+	    <image file="button.png" />     
+	    <image file="anim/run.png" />
+	</atlas>
+
+Можно существенно повысить скорость загрузки приложения и снизить использование памяти, если собрать атласы заранее, еще на этапе сборки игры.
+
+Для этого в oxygine есть специальная командная утилита **"oxyresbuild"**, расположенная в папке tools:
+
+	oxygine-framework/tools/oxyresbuild.py
+
+![](img/oxyresbuild.png)
+
+Чтобы ее использовать потребуется дополнительно установить Python, читайте подробности:
+		
+[oxygine-framework/tools/readme.txt](https://bitbucket.org/oxygine/oxygine-framework/src/tip/tools/readme.txt?at=tip)
+
+В examples/Game/Part5 есть примеры ее использования, смотрите shell скрипты. Например, 
+examples/Game/part5/gen-atlasses.bat:
+
+	python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data
+
+результат его работы появится в папке:
+
+	oxygine-framework/examples/Game/part5/data/ui.xml.ox/
+
+Также, в Game/Part5 папка с исходными изображениями вынесена наружу из data, т.к они не нужны в финальной сборке приложения.
+
+
+##HD Assets
+
+Исходный арт обычно принято хранить в высоком разрешении, с запасом для HD экранов.
+ 
+Допустим, художник взял за основу разрешение 2048х1536, а игра пока готовится для дисплеев размерностью 1024x768.
+Художник прислал задний фон, который нужно вставить в игре, мы добавили его в наш resources.xml файл:
+
+	<atlas>
+	    <image file="background.png" />
+	</atlas> 
+
+Теперь создадим его:
+
+	spSprite sprite = new Sprite;
+	sprite->setResAnim(res.getResAnim("background"));
+	sprite->attachTo(getStage());
+
+Спрайт вылезет за границы экрана, потому необходимо уменьшить его:
+
+	float scaleFactor = 1024.0f / 2048.0f; // =0.5f
+	/* or
+	float scaleFactor = getStage()->getWidth() / (float)sprite->getWidth()	
+	*/
+	sprite->setScale(scaleFactor);
+
+Аналогичные вызовы *setScale* придется делать для каждого созданного спрайта, который хранится в высоком разрешении. Но можно поступить проще и указать в xml заранее необходимый scale_factor
+
+	<set scale_factor = "0.5f" />
+
+ 	<atlas>
+	    <image file="background.png" />
+	</atlas>
+
+И таким образом код упростится до изначального: 
+	
+	spSprite sprite = new Sprite;
+	sprite->setResAnim(res.getResAnim("background"));
+	sprite->attachTo(getStage());
+
+а sprite будет иметь требуемую "виртуальную" размерность, равную 1024x768 и полностью поместится на экране:
+
+	sprite->getWidth () == 1024
+	sprite->getHeight() == 768 
+
+Но в оперативной памяти картинка до сих пор будет иметь размеры 2048х1536 и занимать лишнюю память, потому сгенерируем атлас для xml с помощью *oxyresbuild* с аргументом **-r**:
+
+	python path/to/oxyresbuild/oxyresbuild.py -x resources.xml --src_data data --dest_data data -r
+
+**-r** - это сокращение от **--resize**, обозначающее что перед сборкой атласа изображения нужно отмасштабировать в соответствии с установленным scale_factor. Таким образом в атлас попадет изображение уменьшенное в 2 раза.
+
+Можно еще снизить размер изображение в атласе, добавив аргумент **-s**:
+
+	python path/to/oxyresbuild/oxyresbuild.py -x resources.xml --src_data data --dest_data data -r -s 0.625
+
+**-s** - сокращение от **--scale**, равное 0.625 говорит, что изображения перед упаковкой в атласы нужно дополнительно отмасштабировать на 0.625. Таким образом, в атлас попадет картинка размерами
+
+	w = 2048 * 0.5 * 0.625 = 640
+	h = 1536 * 0.5 * 0.625 = 480
+
+Но, "виртуальные" ее размеры от этого не изменяться и будут равны, как и раньше:
+
+	sprite->getWidth () == 1024
+	sprite->getHeight() == 768 
+
+Можно, наоборот, повысить размер в атласе, выставив **-s** > 1:
+	
+	python path/to/oxyresbuild/oxyresbuild.py -x resources.xml --src_data data --dest_data data -r -s 1.25 
+
+Таким образом, в атлас попадет картинка размерами
+
+	w = 2048 * 0.5 * 1.25 = 1280
+	h = 1536 * 0.5 * 1.25 = 960
+
+

+ 2 - 1
doc/debug.md

@@ -26,7 +26,8 @@ To display custom text on DebugActor (image above) call it each frame:
 4. **Tree Inspector** show graph tree of actors with detailed info.
 4. **Tree Inspector** show graph tree of actors with detailed info.
 
 
 #Logging
 #Logging
-**namespace log** has functions to print text to output. Include **log.h** 
+**namespace log** has functions to print text to output. Include **log.h**  by entering #include "core/log.h". 
+> If using Visual Studio 2013, make sure to open the Output window (View > Output) and set it to show output from Debug after compilation to view the messages.
 
 
 
 
     log::messageln("it is message");
     log::messageln("it is message");

+ 6 - 5
doc/filesystem.md

@@ -7,7 +7,7 @@ Read file, modify it and save back:
 
 
 	void test()
 	void test()
 	{
 	{
-		oxygine::file data;
+		oxygine::file::buffer data;
 	
 	
 		//read entire file into buffer with stdio flags "rb"
 		//read entire file into buffer with stdio flags "rb"
 		oxygine::file::read("user", data);
 		oxygine::file::read("user", data);
@@ -29,10 +29,11 @@ Read file, modify it and save back:
 Namespace **oxygine::file** has also low level functions to working with files.
 Namespace **oxygine::file** has also low level functions to working with files.
 	
 	
 
 
-	oxygine::file::handle h = oxygine::file::open("user", "w");
-	oxygine::file::save(h, "Hello World", strlen("Hello World"));	
+	oxygine::file::handle h = oxygine::file::open("user", "wb");
+	oxygine::file::write(h, "Hello World", strlen("Hello World"));	
 	oxygine::file::close(h);
 	oxygine::file::close(h);
 
 
+> **Oxygine supports only binary file operations, you allways should use 'b' flag when opening file**
 
 
 ##Working with missing files
 ##Working with missing files
 
 
@@ -82,13 +83,13 @@ Or you could check it with **oxygine::file::exists** function. It is slower than
 
 
 
 
 
 
-##Mounting and zipped archieves to filesytem
+##Mounting zip archieves to filesytem
 
 
 First step is mount ZipFileSystem. More than one archive could be mounted at once:
 First step is mount ZipFileSystem. More than one archive could be mounted at once:
 
 
 	#include "core/ZipFileSystem.h"
 	#include "core/ZipFileSystem.h"
 
 
-	oxygine::ZipFileSystem zp;
+	oxygine::file::ZipFileSystem zp;
 
 
 	void mount()
 	void mount()
 	{		
 	{		

BIN
doc/img/box9sprite.jpg


BIN
doc/img/colorrect.png


BIN
doc/img/oxyresbuild.png


+ 17 - 0
doc/ru/Home.md

@@ -0,0 +1,17 @@
+#Oxygine Wiki
+Находится в разработке...
+
+##Документация
+1. [Начало работы](start)
+1. [Actor'ы и SceneGraph](actors)
+2. [События](events)
+3. [Работа с файлами](filesystem)
+4. [Отладка, профайлинг и логгирование](ru/debug) 
+5. [Шрифты](fonts)
+6. [Шейдеры](shaders)
+7. [Ресурсы](resources)
+8. [Таблица цветов](colors)
+
+
+##Дополнения:
+1. [Библиотека oxygine-sound](ru/sounds)

+ 57 - 0
doc/ru/start.md

@@ -0,0 +1,57 @@
+#Начало работы
+
+###Для пользователей Windows и MacOSX
+[Скачайте](http://oxygine.org/download.php) Oxygine. Рекомендуется скачать версию **All-In-One** (всё в одном) с SDL. Она включает в себя всё для быстрого и легкого старта и имеет предкомпилированные файлы библиотеки SDL.
+
+Перейдите в папку **oxygine-framework/examples** и откройте любой пример.
+
+Примеры:
+
+* **HelloWorld** - отправная точка.
+* **Game** обучающий пример. Он состоит из 4 частей от начинающего до продвинутого пользователя.
+* **Demo** включает тесты и демонстрирует функционал Oxygine.
+* **DemoBox2D** это пример встроенного физического движка Box2D.
+* **Match3** пример игры на Oxygine, где требуется собрать три одинаковых элемента вместе.
+ 
+Каждый пример имеет конфигурационные директории для различных плафторм/ОС
+
+* **proj.win32** - решение для VisualStudio
+* **proj.ios** - проект для iOS xcode
+* **proj.macosx** - проект для MacOSX xcode
+* **proj.marmalade** - проект Marmalade
+* *proj.android* - для сборки под Android SDK/NDK
+* *proj.cmake* - конфигурационная директория CMake
+* *proj.emscripten* - конфигурационная директория Emscripten
+
+> Если у вас возникли какие-либо трудности со сборкой под Android, CMake или Emscripten, посмотрите директорию **oxygine-framework/readme**
+
+###Продвинутым пользователям
+
+Если вы хотите установить и собрать всё вручную, тогда [скачайте](http://oxygine.org/download.php) только oxygine framework.
+   
+Перейдите в директорию **oxygine-framework/readme** и следуйте инструкциям в файле **readme.txt**
+
+###Marmalade SDK
+Если вы планируете разрабатывать с помощью *MarmaladeSDK*, следуйте инструкциям из *Продвинутым пользователям*.
+
+##Следующие шаги
+Oxygine включает в себя некоторые инструменты, которые написаны на Python и вы должны установить его, чтобы использовать дополнительные возможности при работе с Oxygine.
+
+* [Скачайте](https://www.python.org/downloads/) и установите Python версии 2.7.*
+* [Скачайте](http://www.pythonware.com/products/pil/) и установите PIL для Python
+
+
+##Создание своего проекта
+Вы можете сгенерировать свой проект вне  директории oxygine-framework с помощью скрипта **gen_template.py**. Он расположен здесь:
+  
+	oxygine-framework/tools/
+
+Запустите скрипт **gen_template.py** с помощью Python, например:
+
+	python gen_template.py MyProjectName -t win32 -d path/to/MyProject/
+
+После выполнения данной команды, будет создано пустое решение *MyProject* для Visual Studio в папке *path/to/MyProject*
+
+для более подробной информации, прочитайте справку: 
+	
+	python gen_template.py --help

+ 1 - 0
doc/start.md

@@ -40,6 +40,7 @@ Oxygine has some tools written in Python and you need to install them for advanc
 * [Download](https://www.python.org/downloads/) and install Python version 2.7.*
 * [Download](https://www.python.org/downloads/) and install Python version 2.7.*
 * [Download](http://www.pythonware.com/products/pil/) and install PIL for Python
 * [Download](http://www.pythonware.com/products/pil/) and install PIL for Python
 
 
+[see details](https://bitbucket.org/oxygine/oxygine-framework/src/tip/tools/readme.txt?at=tip)
 
 
 ##Generate own project 
 ##Generate own project 
 You could generate own project outside of oxygine-framework folder by **gen_template.py** tool. It is located in
 You could generate own project outside of oxygine-framework folder by **gen_template.py** tool. It is located in

+ 1 - 1
examples/Demo/data/ext/fonts.xml.ox/meta.xml

@@ -1 +1 @@
-<resources><set/><bmfc_font sf="1.0" size="16"/><bmfc_font sf="1.0" size="26"/></resources>
+<resources version="1"><set/><bmfc_font sf="1.0" size="16"/><bmfc_font sf="1.0" size="26"/></resources>

+ 3 - 1
examples/Demo/proj.win32/Demo_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    
@@ -89,7 +91,7 @@
     <ClCompile Include="../src/entry_point.cpp" /><ClCompile Include="../src/example.cpp" /><ClCompile Include="../src/test.cpp" />
     <ClCompile Include="../src/entry_point.cpp" /><ClCompile Include="../src/example.cpp" /><ClCompile Include="../src/test.cpp" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
-    <ClInclude Include="../src/TestBox9Sprite.h" /><ClInclude Include="../src/TestClipRect.h" /><ClInclude Include="../src/TestDrag.h" /><ClInclude Include="../src/TestInputText.h" /><ClInclude Include="../src/TestManageRes.h" /><ClInclude Include="../src/TestMask.h" /><ClInclude Include="../src/TestPerf.h" /><ClInclude Include="../src/TestProgressBar.h" /><ClInclude Include="../src/TestRender2Texture.h" /><ClInclude Include="../src/TestSliding.h" /><ClInclude Include="../src/TestTexel2Pixel.h" /><ClInclude Include="../src/TestText.h" /><ClInclude Include="../src/TestTextureFormat.h" /><ClInclude Include="../src/TestTweens.h" /><ClInclude Include="../src/TestUserShader.h" /><ClInclude Include="../src/example.h" /><ClInclude Include="../src/test.h" />
+    <ClInclude Include="../src/TestBox9Sprite.h" /><ClInclude Include="../src/TestClipRect.h" /><ClInclude Include="../src/TestDrag.h" /><ClInclude Include="../src/TestInputText.h" /><ClInclude Include="../src/TestManageRes.h" /><ClInclude Include="../src/TestMask.h" /><ClInclude Include="../src/TestPerf.h" /><ClInclude Include="../src/TestPolygon.h" /><ClInclude Include="../src/TestProgressBar.h" /><ClInclude Include="../src/TestRender2Texture.h" /><ClInclude Include="../src/TestSliding.h" /><ClInclude Include="../src/TestTexel2Pixel.h" /><ClInclude Include="../src/TestText.h" /><ClInclude Include="../src/TestTextureFormat.h" /><ClInclude Include="../src/TestTweens.h" /><ClInclude Include="../src/TestUserShader.h" /><ClInclude Include="../src/TestUserShader2.h" /><ClInclude Include="../src/example.h" /><ClInclude Include="../src/test.h" />
   </ItemGroup>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   <ImportGroup Label="ExtensionTargets">

+ 5 - 23
examples/Demo/proj.win32/Demo_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,38 +81,19 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
-  <ItemGroup>
+  <ItemGroup>    
     <ProjectReference Include="../../../\oxygine\SDL\win32\oxygine_vs2013.vcxproj">
     <ProjectReference Include="../../../\oxygine\SDL\win32\oxygine_vs2013.vcxproj">
       <Project>{52411305-cfe1-4fa8-9885-5729bfc816cf}</Project>
       <Project>{52411305-cfe1-4fa8-9885-5729bfc816cf}</Project>
     </ProjectReference>
     </ProjectReference>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
-    <ClCompile Include="../src/entry_point.cpp" />
-    <ClCompile Include="../src/example.cpp" />
-    <ClCompile Include="../src/test.cpp" />
+    <ClCompile Include="../src/entry_point.cpp" /><ClCompile Include="../src/example.cpp" /><ClCompile Include="../src/test.cpp" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
-    <ClInclude Include="../src/TestBox9Sprite.h" />
-    <ClInclude Include="../src/TestClipRect.h" />
-    <ClInclude Include="../src/TestDrag.h" />
-    <ClInclude Include="../src/TestInputText.h" />
-    <ClInclude Include="../src/TestManageRes.h" />
-    <ClInclude Include="../src/TestMask.h" />
-    <ClInclude Include="../src/TestPerf.h" />
-    <ClInclude Include="../src/TestProgressBar.h" />
-    <ClInclude Include="../src/TestRender2Texture.h" />
-    <ClInclude Include="../src/TestSliding.h" />
-    <ClInclude Include="../src/TestTexel2Pixel.h" />
-    <ClInclude Include="../src/TestText.h" />
-    <ClInclude Include="../src/TestTextureFormat.h" />
-    <ClInclude Include="../src/TestTweens.h" />
-    <ClInclude Include="../src/TestUserShader.h" />
-    <ClInclude Include="../src/example.h" />
-    <ClInclude Include="../src/test.h" />
-    <ClInclude Include="..\src\TestPolygon.h" />
-    <ClInclude Include="..\src\TestUserShader2.h" />
+    <ClInclude Include="../src/TestBox9Sprite.h" /><ClInclude Include="../src/TestClipRect.h" /><ClInclude Include="../src/TestDrag.h" /><ClInclude Include="../src/TestInputText.h" /><ClInclude Include="../src/TestManageRes.h" /><ClInclude Include="../src/TestMask.h" /><ClInclude Include="../src/TestPerf.h" /><ClInclude Include="../src/TestPolygon.h" /><ClInclude Include="../src/TestProgressBar.h" /><ClInclude Include="../src/TestRender2Texture.h" /><ClInclude Include="../src/TestSliding.h" /><ClInclude Include="../src/TestTexel2Pixel.h" /><ClInclude Include="../src/TestText.h" /><ClInclude Include="../src/TestTextureFormat.h" /><ClInclude Include="../src/TestTweens.h" /><ClInclude Include="../src/TestUserShader.h" /><ClInclude Include="../src/TestUserShader2.h" /><ClInclude Include="../src/example.h" /><ClInclude Include="../src/test.h" />
   </ItemGroup>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   <ImportGroup Label="ExtensionTargets">

+ 0 - 70
examples/Demo/proj.win32/Demo_vs2013.vcxproj.filters

@@ -14,74 +14,4 @@
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
     </Filter>
     </Filter>
   </ItemGroup>
   </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="../src/entry_point.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="../src/example.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="../src/test.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="../src/TestBox9Sprite.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestClipRect.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestDrag.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestInputText.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestManageRes.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestMask.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestPerf.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestProgressBar.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestRender2Texture.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestSliding.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestTexel2Pixel.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestText.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestTextureFormat.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestTweens.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/TestUserShader.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/example.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="../src/test.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\TestPolygon.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\TestUserShader2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
 </Project>
 </Project>

+ 1 - 1
examples/Demo/src/TestPerf.h

@@ -52,7 +52,7 @@ public:
 			}
 			}
 
 
 			char str[255];
 			char str[255];
-			sprintf(str, "add 500 (%d)", count);			
+			safe_sprintf(str, "add 500 (%d)", count);			
 			updateText(id, str);
 			updateText(id, str);
 		}
 		}
 		if (id == "scale0.01")
 		if (id == "scale0.01")

+ 1 - 1
examples/Demo/src/TestText.h

@@ -74,7 +74,7 @@ public:
 		Vector2 size(420, 300);
 		Vector2 size(420, 300);
 
 
 
 
-		tests.push_back(text_test( "It is html style tagged text. <div c='ffff00'>It could be colored.  It <div c='0000ff'>supports</div> <div c='00ff00AA'>nested tags</div> and  <br/> broken lines.</div><br/>It supports CDATA and xml escape sequences:\n<![CDATA[<div c='00ffff'>it is CDATA</div>]]>", 
+		tests.push_back(text_test( "It is html style tagged text. <div c='ffff00'>It could be colored.  It <div c='0000ff'>supports</div> <div c='00ff00AA'> nested tags</div> and  <br/> broken lines.</div><br/>It supports CDATA and xml escape sequences:\n<![CDATA[<div c='00ffff'>it is CDATA</div>]]>", 
 			TextStyle::HALIGN_CENTER, TextStyle::VALIGN_MIDDLE, size, true));
 			TextStyle::HALIGN_CENTER, TextStyle::VALIGN_MIDDLE, size, true));
 
 
 		for (int h = TextStyle::HALIGN_LEFT; h <= TextStyle::HALIGN_RIGHT; ++h)
 		for (int h = TextStyle::HALIGN_LEFT; h <= TextStyle::HALIGN_RIGHT; ++h)

+ 1 - 1
examples/Demo/src/TestUserShader.h

@@ -29,7 +29,7 @@ public:
 		_val = v;
 		_val = v;
 	}
 	}
 
 
-	typedef GetSet<Vector4, const Vector4&, ShaderSprite, &ShaderSprite::getVal, &ShaderSprite::setVal>	TweenVal;
+	typedef Property<Vector4, const Vector4&, ShaderSprite, &ShaderSprite::getVal, &ShaderSprite::setVal>	TweenVal;
 
 
 private:
 private:
 	Vector4 _val;
 	Vector4 _val;

+ 3 - 0
examples/Demo/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 7 - 0
examples/Demo/src/example.cpp

@@ -62,6 +62,7 @@ public:
 		addButton("mask", "Mask");		
 		addButton("mask", "Mask");		
 		addButton("polygon", "Polygon");
 		addButton("polygon", "Polygon");
 		addButton("inputtext", "Input Text");		
 		addButton("inputtext", "Input Text");		
+		addButton("openbrowser", "Open Browser");
 		
 		
 	}
 	}
 
 
@@ -152,6 +153,12 @@ public:
 		{
 		{
 			getStage()->addChild(new TestInputText);
 			getStage()->addChild(new TestInputText);
 		}
 		}
+
+		if (id == "openbrowser")
+		{
+			core::execute("http://oxygine.org/");
+			setVisible(true);
+		}
 	}
 	}
 };
 };
 
 

+ 6 - 6
examples/Demo/src/test.cpp

@@ -11,10 +11,10 @@ public:
 
 
 	int _current;
 	int _current;
 
 
-	vector<Test::toggle> _items;
+	std::vector<Test::toggle> _items;
 };
 };
 
 
-spTextField createText(string txt)
+spTextField createText(std::string txt)
 {
 {
 	spTextField text = new TextField();
 	spTextField text = new TextField();
 
 
@@ -77,7 +77,7 @@ Test::~Test()
 }
 }
 
 
 
 
-spButton Test::addButton(string id, string txt)
+spButton Test::addButton(std::string id, std::string txt)
 {
 {
 	spButton button = createButtonHelper(new Button, txt, CLOSURE(this, &Test::_clicked));
 	spButton button = createButtonHelper(new Button, txt, CLOSURE(this, &Test::_clicked));
 	initActor(button.get(), 
 	initActor(button.get(), 
@@ -97,7 +97,7 @@ spButton Test::addButton(string id, string txt)
 	return button;
 	return button;
 }
 }
 
 
-void Test::addToggle(string id, const toggle *t, int num)
+void Test::addToggle(std::string id, const toggle *t, int num)
 {
 {
 	spButton button = createButtonHelper(new Toggle(t, num), t[0].text, CLOSURE(this, &Test::_toggleClicked));
 	spButton button = createButtonHelper(new Toggle(t, num), t[0].text, CLOSURE(this, &Test::_toggleClicked));
 	initActor(button.get(), 
 	initActor(button.get(), 
@@ -115,7 +115,7 @@ void Test::addToggle(string id, const toggle *t, int num)
 	}
 	}
 }
 }
 
 
-void Test::updateText(string id, string txt)
+void Test::updateText(std::string id, std::string txt)
 {
 {
 	spActor child = ui->getChild(id);
 	spActor child = ui->getChild(id);
 	if (!child)
 	if (!child)
@@ -153,7 +153,7 @@ void Test::back(Event *event)
 }
 }
 
 
 
 
-void Test::notify(string txt, int time)
+void Test::notify(std::string txt, int time)
 {
 {
 	size_t N = 0;
 	size_t N = 0;
 	for (size_t i = 0; i < MAX_NOTIFIES; ++i)
 	for (size_t i = 0; i < MAX_NOTIFIES; ++i)

+ 2 - 2
examples/Demo/src/test.h

@@ -4,10 +4,10 @@
 #include "RenderState.h"
 #include "RenderState.h"
 #include "STDRenderer.h"
 #include "STDRenderer.h"
 using namespace oxygine;
 using namespace oxygine;
+using namespace std;
 
 
 
 
-
-spButton createButtonHelper(spButton, string txt, EventCallback cb);
+spButton createButtonHelper(spButton, std::string txt, EventCallback cb);
 
 
 class Content: public Actor
 class Content: public Actor
 {
 {

+ 3 - 0
examples/DemoBox2D/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 2 - 0
examples/Game/part1/proj.win32/GamePart1_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Game/part1/proj.win32/GamePart1_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 3 - 0
examples/Game/part1/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 2 - 0
examples/Game/part2/proj.win32/GamePart2_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Game/part2/proj.win32/GamePart2_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 3 - 0
examples/Game/part2/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 2 - 0
examples/Game/part3/proj.win32/GamePart3_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Game/part3/proj.win32/GamePart3_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Game/part3/src/MainMenuScene.cpp

@@ -5,6 +5,8 @@
 #include "MyButton.h"
 #include "MyButton.h"
 #include "GameScene.h"
 #include "GameScene.h"
 
 
+using namespace std;
+
 spMainMenuScene MainMenuScene::instance;
 spMainMenuScene MainMenuScene::instance;
 
 
 MainMenuScene::MainMenuScene()
 MainMenuScene::MainMenuScene()

+ 3 - 0
examples/Game/part3/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 2 - 0
examples/Game/part4/proj.win32/GamePart4_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Game/part4/proj.win32/GamePart4_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 0 - 13
examples/Game/part4/proj.win32/GamePart5_vs2010.vcxproj.user

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LocalDebuggerWorkingDirectory>../data</LocalDebuggerWorkingDirectory>
-    <LocalDebuggerEnvironment>PATH=../data;%PATH%;</LocalDebuggerEnvironment>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LocalDebuggerWorkingDirectory>../data</LocalDebuggerWorkingDirectory>
-    <LocalDebuggerEnvironment>PATH=../data;%PATH%;</LocalDebuggerEnvironment>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-   </PropertyGroup>
-</Project>

+ 0 - 13
examples/Game/part4/proj.win32/GamePart5_vs2013.vcxproj.user

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LocalDebuggerWorkingDirectory>../data</LocalDebuggerWorkingDirectory>
-    <LocalDebuggerEnvironment>PATH=../data;%PATH%;</LocalDebuggerEnvironment>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LocalDebuggerWorkingDirectory>../data</LocalDebuggerWorkingDirectory>
-    <LocalDebuggerEnvironment>PATH=../data;%PATH%;</LocalDebuggerEnvironment>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-   </PropertyGroup>
-</Project>

+ 1 - 0
examples/Game/part4/src/MyButton.h

@@ -1,6 +1,7 @@
 #pragma once
 #pragma once
 #include "oxygine-framework.h"
 #include "oxygine-framework.h"
 using namespace oxygine;
 using namespace oxygine;
+using namespace std;
 
 
 DECLARE_SMART(MyButton, spMyButton);
 DECLARE_SMART(MyButton, spMyButton);
 class MyButton: public Sprite
 class MyButton: public Sprite

+ 1 - 0
examples/Game/part4/src/Scene.h

@@ -2,6 +2,7 @@
 #include "oxygine-framework.h"
 #include "oxygine-framework.h"
 #include <vector>
 #include <vector>
 using namespace oxygine;
 using namespace oxygine;
+using namespace std;
 
 
 DECLARE_SMART(Scene, spScene);
 DECLARE_SMART(Scene, spScene);
 class Scene: public EventDispatcher
 class Scene: public EventDispatcher

+ 3 - 0
examples/Game/part4/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

BIN
examples/Game/part5/data/ui.xml.ox/atlas/1_0.png


+ 1 - 1
examples/Game/part5/data/ui.xml.ox/meta.xml

@@ -1 +1 @@
-<resources><set/><atlas><atlas file="1_0.png" format="r8g8b8a8" h="512" w="1024"/><image fs="1,1,128,128,0.500000">0,1,402,20,21,85,85;</image><image fs="1,1,32,32,0.500000">0,861,34,2,2,28,28;</image><image fs="1,1,150,150,0.500000">0,643,1,0,0,150,150;</image><image fs="1,1,123,38,0.500000">0,1,363,1,1,121,37;</image><image fs="1,1,32,32,0.500000">0,961,1,0,0,32,32;</image><image fs="1,1,64,64,0.500000">0,795,34,0,0,64,64;</image><image fs="1,1,640,360,0.500000">0,1,1,0,0,640,360;</image><image fs="2,5,86,31,0.500000">0,795,1,3,0,81,31;0,878,1,2,0,81,31;0,88,402,3,0,81,31;0,88,435,2,0,81,31;0,88,468,3,0,81,31;0,124,363,2,0,81,31;0,171,396,3,0,81,31;0,171,429,2,0,81,31;0,171,462,3,0,81,31;0,207,363,2,0,81,31;</image></atlas><set/><font sf="0.5" size="32"/><font sf="0.5" size="48"/><set/><atlas><atlas file="2_0.png" format="r8g8b8a8" h="512" w="1024"/><image fs="1,1,576,360,0.500000">0,1,1,0,0,576,360;</image><image fs="1,1,64,50,0.500000">0,1,363,3,0,61,50;</image><image fs="1,1,64,50,0.500000">0,27,483,0,14,11,22;</image><image fs="1,1,24,24,0.500000">0,1,483,0,6,24,12;</image><image fs="12,1,32,32,0.500000">0,1,415,0,0,32,32;0,1,449,0,0,32,32;0,579,1,0,0,32,32;0,613,1,0,0,32,32;0,647,1,0,0,32,32;0,681,1,0,0,32,32;0,35,415,0,0,32,32;0,715,1,0,0,32,32;0,35,449,0,0,32,32;0,749,1,0,0,32,32;0,783,1,0,0,32,32;0,817,1,0,0,32,32;</image><image fs="1,1,32,32,0.500000">0,851,1,1,0,30,32;</image></atlas></resources>
+<resources version="1"><set/><atlas><atlas file="1_0.png" format="r8g8b8a8" h="512" w="1024"/><image fs="1,1,256,256,2.000000">0,1,402,20,21,85,85;</image><image fs="1,1,64,64,2.000000">0,88,468,2,2,28,28;</image><image fs="1,1,300,300,2.000000">0,643,1,0,0,150,150;</image><image fs="1,1,246,75,2.000000">0,1,363,1,1,121,37;</image><image fs="1,1,64,63,2.000000">0,961,1,0,0,32,32;</image><image fs="1,1,127,127,2.000000">0,88,402,0,0,64,64;</image><image fs="1,1,1280,720,2.000000">0,1,1,0,0,640,360;</image><image fs="2,5,172,61,2.000000">0,795,1,3,0,81,31;0,878,1,2,0,81,31;</image></atlas><set/><font sf="1" size="32"/><font sf="1" size="48"/><set/><atlas><atlas file="2_0.png" format="r8g8b8a8" h="512" w="1024"/><image fs="1,1,1152,720,2.000000">0,1,1,0,0,576,360;</image><image fs="1,1,128,100,2.000000">0,1,363,3,0,61,50;</image><image fs="1,1,128,100,2.000000">0,27,483,0,14,11,22;</image><image fs="1,1,48,48,2.000000">0,1,483,0,6,24,12;</image><image fs="12,1,64,64,2.000000">0,1,415,0,0,32,32;0,1,449,0,0,32,32;0,579,1,0,0,32,32;0,613,1,0,0,32,32;0,647,1,0,0,32,32;0,681,1,0,0,32,32;0,35,415,0,0,32,32;0,715,1,0,0,32,32;0,35,449,0,0,32,32;0,749,1,0,0,32,32;0,783,1,0,0,32,32;0,817,1,0,0,32,32;</image><image fs="1,1,64,64,2.000000">0,851,1,1,0,30,32;</image></atlas></resources>

+ 2 - 0
examples/Game/part5/proj.win32/GamePart5_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Game/part5/proj.win32/GamePart5_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../../..//oxygine/third_party/win32/libraries;../../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 1 - 0
examples/Game/part5/src/MyButton.h

@@ -1,6 +1,7 @@
 #pragma once
 #pragma once
 #include "oxygine-framework.h"
 #include "oxygine-framework.h"
 using namespace oxygine;
 using namespace oxygine;
+using namespace std;
 
 
 DECLARE_SMART(MyButton, spMyButton);
 DECLARE_SMART(MyButton, spMyButton);
 class MyButton: public Sprite
 class MyButton: public Sprite

+ 1 - 0
examples/Game/part5/src/Scene.h

@@ -2,6 +2,7 @@
 #include "oxygine-framework.h"
 #include "oxygine-framework.h"
 #include <vector>
 #include <vector>
 using namespace oxygine;
 using namespace oxygine;
+using namespace std;
 
 
 DECLARE_SMART(Scene, spScene);
 DECLARE_SMART(Scene, spScene);
 class Scene: public EventDispatcher
 class Scene: public EventDispatcher

+ 227 - 102
examples/HelloWorld/data/fonts/main.fnt

@@ -1,105 +1,230 @@
-<?xml version="1.0"?>
-<font>
-  <info face="Century Gothic" size="-24" bold="1" italic="0" charset="" unicode="1" stretchH="100" smooth="1" aa="1" padding="0,0,0,0" spacing="1,1" outline="0"/>
-  <common lineHeight="28" base="23" scaleW="256" scaleH="128" pages="1" packed="0" alphaChnl="1" redChnl="0" greenChnl="0" blueChnl="0"/>
+<?xml version="1.0" ?><font>
+  <info aa="1" bold="0" charset="" face="Paneuropa Freeway" italic="0" outline="1" padding="0,0,0,0" size="-22" smooth="1" spacing="1,1" stretchH="100" unicode="1"/>
+  <common alphaChnl="1" base="20" blueChnl="0" greenChnl="0" lineHeight="26" packed="0" pages="1" redChnl="0" scaleH="128" scaleW="512"/>
   <pages>
   <pages>
-    <page id="0" file="main_0.png" />
+    <page file="main_0.png" id="0"/>
   </pages>
   </pages>
-  <chars count="95">
-    <char id="32" x="91" y="19" width="1" height="1" xoffset="0" yoffset="23" xadvance="7" page="0" chnl="15" />
-    <char id="33" x="43" y="59" width="4" height="17" xoffset="1" yoffset="6" xadvance="7" page="0" chnl="15" />
-    <char id="34" x="47" y="77" width="8" height="6" xoffset="0" yoffset="6" xadvance="9" page="0" chnl="15" />
-    <char id="35" x="186" y="19" width="13" height="17" xoffset="0" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="36" x="56" y="0" width="11" height="21" xoffset="0" yoffset="5" xadvance="13" page="0" chnl="15" />
-    <char id="37" x="91" y="0" width="20" height="18" xoffset="1" yoffset="6" xadvance="21" page="0" chnl="15" />
-    <char id="38" x="127" y="19" width="14" height="17" xoffset="1" yoffset="6" xadvance="16" page="0" chnl="15" />
-    <char id="39" x="56" y="76" width="3" height="6" xoffset="1" yoffset="6" xadvance="5" page="0" chnl="15" />
-    <char id="40" x="0" y="0" width="7" height="23" xoffset="1" yoffset="5" xadvance="9" page="0" chnl="15" />
-    <char id="41" x="8" y="0" width="7" height="23" xoffset="1" yoffset="5" xadvance="9" page="0" chnl="15" />
-    <char id="42" x="17" y="78" width="10" height="9" xoffset="0" yoffset="6" xadvance="11" page="0" chnl="15" />
-    <char id="43" x="5" y="78" width="11" height="11" xoffset="1" yoffset="9" xadvance="14" page="0" chnl="15" />
-    <char id="44" x="40" y="78" width="6" height="7" xoffset="0" yoffset="19" xadvance="7" page="0" chnl="15" />
-    <char id="45" x="86" y="72" width="6" height="3" xoffset="2" yoffset="15" xadvance="10" page="0" chnl="15" />
-    <char id="46" x="81" y="73" width="4" height="4" xoffset="1" yoffset="19" xadvance="7" page="0" chnl="15" />
-    <char id="47" x="80" y="0" width="10" height="21" xoffset="0" yoffset="6" xadvance="11" page="0" chnl="15" />
-    <char id="48" x="242" y="18" width="12" height="17" xoffset="0" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="49" x="29" y="60" width="6" height="17" xoffset="2" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="50" x="77" y="40" width="11" height="17" xoffset="1" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="51" x="0" y="42" width="12" height="17" xoffset="0" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="52" x="39" y="41" width="12" height="17" xoffset="0" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="53" x="65" y="40" width="11" height="17" xoffset="1" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="54" x="184" y="37" width="10" height="17" xoffset="1" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="55" x="137" y="37" width="11" height="17" xoffset="1" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="56" x="26" y="42" width="12" height="17" xoffset="0" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="57" x="173" y="37" width="10" height="17" xoffset="1" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="58" x="0" y="78" width="4" height="13" xoffset="1" yoffset="10" xadvance="7" page="0" chnl="15" />
-    <char id="59" x="56" y="59" width="6" height="16" xoffset="0" yoffset="10" xadvance="7" page="0" chnl="15" />
-    <char id="60" x="125" y="37" width="11" height="17" xoffset="1" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="61" x="28" y="78" width="11" height="8" xoffset="1" yoffset="10" xadvance="14" page="0" chnl="15" />
-    <char id="62" x="113" y="37" width="11" height="17" xoffset="1" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="63" x="101" y="37" width="11" height="17" xoffset="1" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="64" x="38" y="23" width="18" height="17" xoffset="0" yoffset="6" xadvance="18" page="0" chnl="15" />
-    <char id="65" x="93" y="19" width="17" height="17" xoffset="0" yoffset="6" xadvance="18" page="0" chnl="15" />
-    <char id="66" x="89" y="40" width="11" height="17" xoffset="2" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="67" x="75" y="22" width="17" height="17" xoffset="1" yoffset="6" xadvance="19" page="0" chnl="15" />
-    <char id="68" x="142" y="19" width="14" height="17" xoffset="2" yoffset="6" xadvance="17" page="0" chnl="15" />
-    <char id="69" x="0" y="60" width="9" height="17" xoffset="2" yoffset="6" xadvance="12" page="0" chnl="15" />
-    <char id="70" x="228" y="36" width="9" height="17" xoffset="2" yoffset="6" xadvance="12" page="0" chnl="15" />
-    <char id="71" x="19" y="24" width="18" height="17" xoffset="1" yoffset="6" xadvance="20" page="0" chnl="15" />
-    <char id="72" x="52" y="41" width="12" height="17" xoffset="2" yoffset="6" xadvance="16" page="0" chnl="15" />
-    <char id="73" x="52" y="59" width="3" height="17" xoffset="2" yoffset="6" xadvance="7" page="0" chnl="15" />
-    <char id="74" x="10" y="60" width="9" height="17" xoffset="1" yoffset="6" xadvance="12" page="0" chnl="15" />
-    <char id="75" x="200" y="18" width="13" height="17" xoffset="2" yoffset="6" xadvance="15" page="0" chnl="15" />
-    <char id="76" x="20" y="60" width="8" height="17" xoffset="2" yoffset="6" xadvance="11" page="0" chnl="15" />
-    <char id="77" x="217" y="0" width="21" height="17" xoffset="0" yoffset="6" xadvance="22" page="0" chnl="15" />
-    <char id="78" x="157" y="19" width="14" height="17" xoffset="2" yoffset="6" xadvance="18" page="0" chnl="15" />
-    <char id="79" x="0" y="24" width="18" height="17" xoffset="1" yoffset="6" xadvance="20" page="0" chnl="15" />
-    <char id="80" x="206" y="36" width="10" height="17" xoffset="2" yoffset="6" xadvance="13" page="0" chnl="15" />
-    <char id="81" x="112" y="0" width="19" height="18" xoffset="1" yoffset="6" xadvance="20" page="0" chnl="15" />
-    <char id="82" x="13" y="42" width="12" height="17" xoffset="2" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="83" x="217" y="36" width="10" height="17" xoffset="1" yoffset="6" xadvance="12" page="0" chnl="15" />
-    <char id="84" x="238" y="36" width="9" height="17" xoffset="0" yoffset="6" xadvance="10" page="0" chnl="15" />
-    <char id="85" x="161" y="37" width="11" height="17" xoffset="2" yoffset="6" xadvance="15" page="0" chnl="15" />
-    <char id="86" x="57" y="22" width="17" height="17" xoffset="0" yoffset="6" xadvance="17" page="0" chnl="15" />
-    <char id="87" x="193" y="0" width="23" height="17" xoffset="-1" yoffset="6" xadvance="22" page="0" chnl="15" />
-    <char id="88" x="239" y="0" width="16" height="17" xoffset="0" yoffset="6" xadvance="16" page="0" chnl="15" />
-    <char id="89" x="111" y="19" width="15" height="17" xoffset="0" yoffset="6" xadvance="15" page="0" chnl="15" />
-    <char id="90" x="195" y="37" width="10" height="17" xoffset="1" yoffset="6" xadvance="12" page="0" chnl="15" />
-    <char id="91" x="29" y="0" width="5" height="23" xoffset="2" yoffset="5" xadvance="8" page="0" chnl="15" />
-    <char id="92" x="68" y="0" width="11" height="21" xoffset="2" yoffset="6" xadvance="15" page="0" chnl="15" />
-    <char id="93" x="23" y="0" width="5" height="23" xoffset="0" yoffset="5" xadvance="8" page="0" chnl="15" />
-    <char id="94" x="105" y="55" width="13" height="13" xoffset="1" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="95" x="93" y="72" width="12" height="1" xoffset="0" yoffset="25" xadvance="12" page="0" chnl="15" />
-    <char id="96" x="73" y="73" width="7" height="5" xoffset="1" yoffset="3" xadvance="10" page="0" chnl="15" />
-    <char id="97" x="119" y="55" width="13" height="13" xoffset="1" yoffset="10" xadvance="16" page="0" chnl="15" />
-    <char id="98" x="172" y="19" width="13" height="17" xoffset="2" yoffset="6" xadvance="16" page="0" chnl="15" />
-    <char id="99" x="189" y="55" width="12" height="13" xoffset="2" yoffset="10" xadvance="15" page="0" chnl="15" />
-    <char id="100" x="214" y="18" width="13" height="17" xoffset="1" yoffset="6" xadvance="16" page="0" chnl="15" />
-    <char id="101" x="133" y="55" width="13" height="13" xoffset="1" yoffset="10" xadvance="15" page="0" chnl="15" />
-    <char id="102" x="36" y="60" width="6" height="17" xoffset="1" yoffset="6" xadvance="7" page="0" chnl="15" />
-    <char id="103" x="175" y="0" width="13" height="18" xoffset="1" yoffset="10" xadvance="16" page="0" chnl="15" />
-    <char id="104" x="149" y="37" width="11" height="17" xoffset="2" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="105" x="189" y="0" width="3" height="18" xoffset="1" yoffset="5" xadvance="6" page="0" chnl="15" />
-    <char id="106" x="16" y="0" width="6" height="23" xoffset="-1" yoffset="5" xadvance="6" page="0" chnl="15" />
-    <char id="107" x="228" y="18" width="13" height="17" xoffset="2" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="108" x="48" y="59" width="3" height="17" xoffset="1" yoffset="6" xadvance="6" page="0" chnl="15" />
-    <char id="109" x="85" y="58" width="19" height="13" xoffset="2" yoffset="10" xadvance="23" page="0" chnl="15" />
-    <char id="110" x="202" y="55" width="11" height="13" xoffset="2" yoffset="10" xadvance="14" page="0" chnl="15" />
-    <char id="111" x="147" y="55" width="13" height="13" xoffset="1" yoffset="10" xadvance="15" page="0" chnl="15" />
-    <char id="112" x="147" y="0" width="13" height="18" xoffset="2" yoffset="10" xadvance="16" page="0" chnl="15" />
-    <char id="113" x="161" y="0" width="13" height="18" xoffset="1" yoffset="10" xadvance="16" page="0" chnl="15" />
-    <char id="114" x="247" y="54" width="7" height="13" xoffset="1" yoffset="10" xadvance="8" page="0" chnl="15" />
-    <char id="115" x="237" y="54" width="9" height="13" xoffset="1" yoffset="10" xadvance="11" page="0" chnl="15" />
-    <char id="116" x="248" y="36" width="7" height="17" xoffset="0" yoffset="6" xadvance="7" page="0" chnl="15" />
-    <char id="117" x="226" y="54" width="10" height="13" xoffset="2" yoffset="10" xadvance="14" page="0" chnl="15" />
-    <char id="118" x="161" y="55" width="13" height="13" xoffset="0" yoffset="10" xadvance="13" page="0" chnl="15" />
-    <char id="119" x="63" y="59" width="21" height="13" xoffset="-1" yoffset="10" xadvance="19" page="0" chnl="15" />
-    <char id="120" x="175" y="55" width="13" height="13" xoffset="0" yoffset="10" xadvance="13" page="0" chnl="15" />
-    <char id="121" x="132" y="0" width="14" height="18" xoffset="0" yoffset="10" xadvance="14" page="0" chnl="15" />
-    <char id="122" x="214" y="54" width="11" height="13" xoffset="0" yoffset="10" xadvance="11" page="0" chnl="15" />
-    <char id="123" x="44" y="0" width="8" height="22" xoffset="0" yoffset="6" xadvance="8" page="0" chnl="15" />
-    <char id="124" x="53" y="0" width="2" height="22" xoffset="6" yoffset="6" xadvance="14" page="0" chnl="15" />
-    <char id="125" x="35" y="0" width="8" height="22" xoffset="0" yoffset="6" xadvance="8" page="0" chnl="15" />
-    <char id="126" x="60" y="76" width="12" height="5" xoffset="1" yoffset="12" xadvance="14" page="0" chnl="15" />
+  <chars count="220">
+    <char chnl="15" height="3" id="32" page="0" width="5" x="399" xadvance="8" xoffset="-2" y="98" yoffset="24"/>
+    <char chnl="15" height="15" id="33" page="0" width="8" x="503" xadvance="6" xoffset="-1" y="33" yoffset="6"/>
+    <char chnl="15" height="6" id="34" page="0" width="11" x="249" xadvance="9" xoffset="-1" y="98" yoffset="5"/>
+    <char chnl="15" height="15" id="35" page="0" width="16" x="452" xadvance="14" xoffset="-1" y="36" yoffset="6"/>
+    <char chnl="15" height="21" id="36" page="0" width="15" x="0" xadvance="13" xoffset="-1" y="0" yoffset="3"/>
+    <char chnl="15" height="15" id="37" page="0" width="21" x="127" xadvance="19" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="38" page="0" width="21" x="149" xadvance="18" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="6" id="39" page="0" width="7" x="261" xadvance="5" xoffset="-1" y="98" yoffset="5"/>
+    <char chnl="15" height="21" id="40" page="0" width="10" x="28" xadvance="8" xoffset="-1" y="0" yoffset="3"/>
+    <char chnl="15" height="21" id="41" page="0" width="11" x="16" xadvance="9" xoffset="-1" y="0" yoffset="3"/>
+    <char chnl="15" height="9" id="42" page="0" width="13" x="185" xadvance="10" xoffset="-1" y="98" yoffset="5"/>
+    <char chnl="15" height="10" id="43" page="0" width="13" x="171" xadvance="11" xoffset="-1" y="98" yoffset="9"/>
+    <char chnl="15" height="7" id="44" page="0" width="8" x="231" xadvance="6" xoffset="-1" y="98" yoffset="16"/>
+    <char chnl="15" height="4" id="45" page="0" width="14" x="378" xadvance="12" xoffset="-1" y="98" yoffset="12"/>
+    <char chnl="15" height="5" id="46" page="0" width="8" x="315" xadvance="6" xoffset="-1" y="98" yoffset="16"/>
+    <char chnl="15" height="19" id="47" page="0" width="13" x="305" xadvance="9" xoffset="-2" y="0" yoffset="4"/>
+    <char chnl="15" height="15" id="48" page="0" width="14" x="463" xadvance="13" xoffset="-1" y="52" yoffset="6"/>
+    <char chnl="15" height="15" id="49" page="0" width="12" x="357" xadvance="9" xoffset="-2" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="50" page="0" width="14" x="478" xadvance="13" xoffset="-1" y="51" yoffset="6"/>
+    <char chnl="15" height="15" id="51" page="0" width="14" x="195" xadvance="13" xoffset="0" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="52" page="0" width="15" x="303" xadvance="12" xoffset="-2" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="53" page="0" width="14" x="180" xadvance="13" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="54" page="0" width="14" x="0" xadvance="12" xoffset="-1" y="73" yoffset="6"/>
+    <char chnl="15" height="15" id="55" page="0" width="14" x="60" xadvance="11" xoffset="-1" y="71" yoffset="6"/>
+    <char chnl="15" height="15" id="56" page="0" width="16" x="119" xadvance="14" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="57" page="0" width="15" x="255" xadvance="12" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="11" id="58" page="0" width="8" x="128" xadvance="6" xoffset="-1" y="99" yoffset="10"/>
+    <char chnl="15" height="13" id="59" page="0" width="8" x="481" xadvance="6" xoffset="-1" y="67" yoffset="10"/>
+    <char chnl="15" height="11" id="60" page="0" width="14" x="113" xadvance="11" xoffset="-2" y="99" yoffset="8"/>
+    <char chnl="15" height="8" id="61" page="0" width="14" x="216" xadvance="12" xoffset="-1" y="98" yoffset="10"/>
+    <char chnl="15" height="11" id="62" page="0" width="14" x="98" xadvance="11" xoffset="-1" y="99" yoffset="8"/>
+    <char chnl="15" height="15" id="63" page="0" width="13" x="329" xadvance="11" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="18" id="64" page="0" width="25" x="384" xadvance="23" xoffset="-1" y="0" yoffset="6"/>
+    <char chnl="15" height="15" id="65" page="0" width="17" x="400" xadvance="15" xoffset="-1" y="36" yoffset="6"/>
+    <char chnl="15" height="15" id="66" page="0" width="15" x="351" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="67" page="0" width="14" x="285" xadvance="12" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="68" page="0" width="16" x="153" xadvance="14" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="69" page="0" width="14" x="493" xadvance="12" xoffset="-1" y="51" yoffset="6"/>
+    <char chnl="15" height="15" id="70" page="0" width="14" x="300" xadvance="11" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="71" page="0" width="16" x="170" xadvance="14" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="72" page="0" width="16" x="187" xadvance="15" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="73" page="0" width="11" x="370" xadvance="9" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="74" page="0" width="14" x="255" xadvance="12" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="75" page="0" width="16" x="204" xadvance="14" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="76" page="0" width="14" x="225" xadvance="11" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="77" page="0" width="18" x="273" xadvance="16" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="78" page="0" width="16" x="221" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="79" page="0" width="16" x="238" xadvance="15" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="80" page="0" width="15" x="415" xadvance="13" xoffset="-1" y="52" yoffset="6"/>
+    <char chnl="15" height="17" id="81" page="0" width="16" x="57" xadvance="14" xoffset="-1" y="20" yoffset="6"/>
+    <char chnl="15" height="15" id="82" page="0" width="16" x="418" xadvance="14" xoffset="-1" y="36" yoffset="6"/>
+    <char chnl="15" height="16" id="83" page="0" width="15" x="154" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="15" id="84" page="0" width="15" x="399" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="85" page="0" width="16" x="435" xadvance="14" xoffset="-1" y="36" yoffset="6"/>
+    <char chnl="15" height="15" id="86" page="0" width="17" x="292" xadvance="14" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="87" page="0" width="21" x="171" xadvance="19" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="88" page="0" width="17" x="382" xadvance="15" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="89" page="0" width="17" x="328" xadvance="15" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="90" page="0" width="15" x="287" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="19" id="91" page="0" width="10" x="354" xadvance="8" xoffset="-1" y="0" yoffset="4"/>
+    <char chnl="15" height="19" id="92" page="0" width="13" x="291" xadvance="9" xoffset="-2" y="0" yoffset="4"/>
+    <char chnl="15" height="19" id="93" page="0" width="10" x="343" xadvance="8" xoffset="-1" y="0" yoffset="4"/>
+    <char chnl="15" height="8" id="94" page="0" width="16" x="199" xadvance="14" xoffset="-1" y="98" yoffset="3"/>
+    <char chnl="15" height="4" id="95" page="0" width="16" x="344" xadvance="14" xoffset="-1" y="98" yoffset="19"/>
+    <char chnl="15" height="5" id="96" page="0" width="12" x="290" xadvance="8" xoffset="-2" y="98" yoffset="5"/>
+    <char chnl="15" height="12" id="97" page="0" width="14" x="327" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="15" id="98" page="0" width="14" x="15" xadvance="13" xoffset="-1" y="73" yoffset="6"/>
+    <char chnl="15" height="12" id="99" page="0" width="13" x="0" xadvance="11" xoffset="-1" y="102" yoffset="9"/>
+    <char chnl="15" height="15" id="100" page="0" width="14" x="90" xadvance="12" xoffset="-1" y="70" yoffset="6"/>
+    <char chnl="15" height="12" id="101" page="0" width="14" x="432" xadvance="12" xoffset="-1" y="83" yoffset="9"/>
+    <char chnl="15" height="15" id="102" page="0" width="13" x="315" xadvance="10" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="103" page="0" width="14" x="120" xadvance="12" xoffset="-1" y="69" yoffset="9"/>
+    <char chnl="15" height="15" id="104" page="0" width="14" x="105" xadvance="12" xoffset="-1" y="70" yoffset="6"/>
+    <char chnl="15" height="16" id="105" page="0" width="10" x="68" xadvance="6" xoffset="-2" y="38" yoffset="5"/>
+    <char chnl="15" height="19" id="106" page="0" width="10" x="365" xadvance="8" xoffset="-1" y="0" yoffset="5"/>
+    <char chnl="15" height="15" id="107" page="0" width="15" x="319" xadvance="12" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="108" page="0" width="9" x="502" xadvance="7" xoffset="-1" y="17" yoffset="6"/>
+    <char chnl="15" height="12" id="109" page="0" width="21" x="490" xadvance="19" xoffset="-1" y="67" yoffset="9"/>
+    <char chnl="15" height="12" id="110" page="0" width="14" x="447" xadvance="12" xoffset="-1" y="83" yoffset="9"/>
+    <char chnl="15" height="12" id="111" page="0" width="15" x="247" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="15" id="112" page="0" width="14" x="45" xadvance="13" xoffset="-1" y="73" yoffset="9"/>
+    <char chnl="15" height="15" id="113" page="0" width="14" x="30" xadvance="13" xoffset="-1" y="73" yoffset="9"/>
+    <char chnl="15" height="12" id="114" page="0" width="13" x="14" xadvance="11" xoffset="-1" y="102" yoffset="9"/>
+    <char chnl="15" height="12" id="115" page="0" width="13" x="28" xadvance="12" xoffset="-1" y="102" yoffset="9"/>
+    <char chnl="15" height="14" id="116" page="0" width="12" x="454" xadvance="10" xoffset="-1" y="68" yoffset="7"/>
+    <char chnl="15" height="12" id="117" page="0" width="14" x="417" xadvance="12" xoffset="-1" y="84" yoffset="9"/>
+    <char chnl="15" height="12" id="118" page="0" width="16" x="164" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="119" page="0" width="21" x="68" xadvance="19" xoffset="-1" y="87" yoffset="9"/>
+    <char chnl="15" height="12" id="120" page="0" width="16" x="130" xadvance="14" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="15" id="121" page="0" width="16" x="469" xadvance="13" xoffset="-1" y="35" yoffset="9"/>
+    <char chnl="15" height="12" id="122" page="0" width="13" x="56" xadvance="11" xoffset="-1" y="102" yoffset="9"/>
+    <char chnl="15" height="19" id="123" page="0" width="11" x="319" xadvance="9" xoffset="-1" y="0" yoffset="4"/>
+    <char chnl="15" height="19" id="124" page="0" width="7" x="376" xadvance="5" xoffset="-1" y="0" yoffset="4"/>
+    <char chnl="15" height="19" id="125" page="0" width="11" x="331" xadvance="9" xoffset="-1" y="0" yoffset="4"/>
+    <char chnl="15" height="3" id="160" page="0" width="5" x="393" xadvance="11" xoffset="-2" y="98" yoffset="24"/>
+    <char chnl="15" height="15" id="161" page="0" width="7" x="393" xadvance="5" xoffset="-1" y="69" yoffset="9"/>
+    <char chnl="15" height="10" id="171" page="0" width="16" x="154" xadvance="14" xoffset="-1" y="98" yoffset="10"/>
+    <char chnl="15" height="5" id="180" page="0" width="11" x="303" xadvance="8" xoffset="-1" y="98" yoffset="5"/>
+    <char chnl="15" height="13" id="186" page="0" width="13" x="467" xadvance="11" xoffset="-1" y="68" yoffset="4"/>
+    <char chnl="15" height="10" id="187" page="0" width="16" x="137" xadvance="14" xoffset="-1" y="98" yoffset="10"/>
+    <char chnl="15" height="15" id="191" page="0" width="13" x="343" xadvance="11" xoffset="-1" y="69" yoffset="9"/>
+    <char chnl="15" height="19" id="192" page="0" width="17" x="93" xadvance="15" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="193" page="0" width="17" x="111" xadvance="15" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="194" page="0" width="17" x="129" xadvance="15" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="195" page="0" width="17" x="75" xadvance="15" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="196" page="0" width="17" x="147" xadvance="15" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="200" page="0" width="14" x="276" xadvance="11" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="201" page="0" width="14" x="261" xadvance="12" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="209" page="0" width="16" x="182" xadvance="13" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="19" id="220" page="0" width="17" x="57" xadvance="15" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="15" id="223" page="0" width="16" x="136" xadvance="14" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="16" id="224" page="0" width="14" x="442" xadvance="13" xoffset="-1" y="19" yoffset="5"/>
+    <char chnl="15" height="16" id="225" page="0" width="14" x="382" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="226" page="0" width="14" x="337" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="227" page="0" width="14" x="322" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="228" page="0" width="14" x="307" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="231" page="0" width="13" x="0" xadvance="10" xoffset="-1" y="40" yoffset="9"/>
+    <char chnl="15" height="16" id="232" page="0" width="14" x="277" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="233" page="0" width="14" x="262" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="234" page="0" width="14" x="217" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="235" page="0" width="14" x="202" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="236" page="0" width="12" x="55" xadvance="8" xoffset="-2" y="38" yoffset="5"/>
+    <char chnl="15" height="16" id="237" page="0" width="12" x="42" xadvance="9" xoffset="-1" y="38" yoffset="5"/>
+    <char chnl="15" height="16" id="238" page="0" width="14" x="367" xadvance="11" xoffset="-2" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="239" page="0" width="11" x="500" xadvance="9" xoffset="-1" y="0" yoffset="5"/>
+    <char chnl="15" height="16" id="241" page="0" width="14" x="292" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="242" page="0" width="15" x="106" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="243" page="0" width="14" x="412" xadvance="13" xoffset="-1" y="19" yoffset="5"/>
+    <char chnl="15" height="16" id="244" page="0" width="15" x="122" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="245" page="0" width="15" x="138" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="246" page="0" width="16" x="89" xadvance="14" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="249" page="0" width="14" x="232" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="250" page="0" width="14" x="487" xadvance="12" xoffset="-1" y="18" yoffset="5"/>
+    <char chnl="15" height="16" id="251" page="0" width="14" x="472" xadvance="12" xoffset="-1" y="18" yoffset="5"/>
+    <char chnl="15" height="16" id="252" page="0" width="14" x="457" xadvance="12" xoffset="-1" y="18" yoffset="5"/>
+    <char chnl="15" height="19" id="255" page="0" width="16" x="199" xadvance="13" xoffset="-1" y="0" yoffset="5"/>
+    <char chnl="15" height="19" id="260" page="0" width="17" x="39" xadvance="15" xoffset="-1" y="0" yoffset="6"/>
+    <char chnl="15" height="17" id="261" page="0" width="14" x="74" xadvance="12" xoffset="-1" y="20" yoffset="9"/>
+    <char chnl="15" height="19" id="262" page="0" width="14" x="216" xadvance="12" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="16" id="263" page="0" width="14" x="247" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="16" id="281" page="0" width="14" x="427" xadvance="12" xoffset="-1" y="19" yoffset="9"/>
+    <char chnl="15" height="15" id="322" page="0" width="10" x="382" xadvance="8" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="16" id="324" page="0" width="14" x="397" xadvance="12" xoffset="-1" y="19" yoffset="5"/>
+    <char chnl="15" height="12" id="339" page="0" width="22" x="0" xadvance="20" xoffset="-1" y="89" yoffset="9"/>
+    <char chnl="15" height="19" id="346" page="0" width="16" x="165" xadvance="13" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="15" id="347" page="0" width="14" x="150" xadvance="13" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="16" id="378" page="0" width="13" x="28" xadvance="11" xoffset="-1" y="40" yoffset="5"/>
+    <char chnl="15" height="19" id="379" page="0" width="14" x="231" xadvance="12" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="16" id="380" page="0" width="13" x="14" xadvance="11" xoffset="-1" y="40" yoffset="5"/>
+    <char chnl="15" height="19" id="1025" page="0" width="14" x="246" xadvance="12" xoffset="-1" y="0" yoffset="2"/>
+    <char chnl="15" height="15" id="1040" page="0" width="17" x="346" xadvance="15" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="1041" page="0" width="15" x="431" xadvance="13" xoffset="-1" y="52" yoffset="6"/>
+    <char chnl="15" height="15" id="1042" page="0" width="15" x="447" xadvance="13" xoffset="-1" y="52" yoffset="6"/>
+    <char chnl="15" height="15" id="1043" page="0" width="14" x="210" xadvance="11" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="17" id="1044" page="0" width="16" x="40" xadvance="15" xoffset="-1" y="20" yoffset="6"/>
+    <char chnl="15" height="15" id="1045" page="0" width="14" x="240" xadvance="12" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="1046" page="0" width="24" x="79" xadvance="22" xoffset="-1" y="38" yoffset="6"/>
+    <char chnl="15" height="15" id="1047" page="0" width="14" x="270" xadvance="13" xoffset="0" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="1048" page="0" width="16" x="0" xadvance="13" xoffset="-1" y="57" yoffset="6"/>
+    <char chnl="15" height="18" id="1049" page="0" width="16" x="433" xadvance="14" xoffset="-1" y="0" yoffset="3"/>
+    <char chnl="15" height="15" id="1050" page="0" width="16" x="17" xadvance="14" xoffset="-1" y="57" yoffset="6"/>
+    <char chnl="15" height="15" id="1051" page="0" width="17" x="364" xadvance="16" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="1052" page="0" width="18" x="235" xadvance="16" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="1053" page="0" width="16" x="34" xadvance="15" xoffset="-1" y="57" yoffset="6"/>
+    <char chnl="15" height="15" id="1054" page="0" width="16" x="51" xadvance="15" xoffset="-1" y="55" yoffset="6"/>
+    <char chnl="15" height="15" id="1055" page="0" width="16" x="486" xadvance="15" xoffset="-1" y="35" yoffset="6"/>
+    <char chnl="15" height="15" id="1056" page="0" width="15" x="383" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="1057" page="0" width="14" x="135" xadvance="12" xoffset="-1" y="69" yoffset="6"/>
+    <char chnl="15" height="15" id="1058" page="0" width="15" x="335" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="1059" page="0" width="16" x="68" xadvance="14" xoffset="-1" y="55" yoffset="6"/>
+    <char chnl="15" height="17" id="1060" page="0" width="21" x="0" xadvance="19" xoffset="-1" y="22" yoffset="5"/>
+    <char chnl="15" height="15" id="1061" page="0" width="17" x="310" xadvance="15" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="17" id="1062" page="0" width="17" x="22" xadvance="16" xoffset="-1" y="22" yoffset="6"/>
+    <char chnl="15" height="15" id="1063" page="0" width="15" x="367" xadvance="14" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="1064" page="0" width="21" x="193" xadvance="19" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="17" id="1065" page="0" width="22" x="477" xadvance="20" xoffset="-1" y="0" yoffset="6"/>
+    <char chnl="15" height="15" id="1066" page="0" width="18" x="254" xadvance="16" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="1067" page="0" width="19" x="215" xadvance="17" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="1068" page="0" width="15" x="271" xadvance="13" xoffset="-1" y="53" yoffset="6"/>
+    <char chnl="15" height="15" id="1069" page="0" width="14" x="75" xadvance="13" xoffset="0" y="71" yoffset="6"/>
+    <char chnl="15" height="15" id="1070" page="0" width="22" x="104" xadvance="20" xoffset="-1" y="37" yoffset="6"/>
+    <char chnl="15" height="15" id="1071" page="0" width="16" x="85" xadvance="14" xoffset="-1" y="54" yoffset="6"/>
+    <char chnl="15" height="12" id="1072" page="0" width="14" x="477" xadvance="13" xoffset="-1" y="82" yoffset="9"/>
+    <char chnl="15" height="16" id="1073" page="0" width="15" x="186" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="12" id="1074" page="0" width="14" x="342" xadvance="12" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1075" page="0" width="13" x="42" xadvance="11" xoffset="-1" y="102" yoffset="9"/>
+    <char chnl="15" height="14" id="1076" page="0" width="15" x="422" xadvance="13" xoffset="-1" y="68" yoffset="9"/>
+    <char chnl="15" height="12" id="1077" page="0" width="14" x="387" xadvance="12" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1078" page="0" width="22" x="23" xadvance="20" xoffset="-1" y="89" yoffset="9"/>
+    <char chnl="15" height="12" id="1079" page="0" width="14" x="462" xadvance="12" xoffset="-1" y="83" yoffset="9"/>
+    <char chnl="15" height="12" id="1080" page="0" width="15" x="311" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="16" id="1081" page="0" width="15" x="170" xadvance="13" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="12" id="1082" page="0" width="15" x="215" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1083" page="0" width="15" x="263" xadvance="14" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1084" page="0" width="16" x="181" xadvance="14" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1085" page="0" width="15" x="295" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1086" page="0" width="15" x="279" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1087" page="0" width="15" x="231" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="15" id="1088" page="0" width="14" x="165" xadvance="13" xoffset="-1" y="69" yoffset="9"/>
+    <char chnl="15" height="12" id="1089" page="0" width="13" x="84" xadvance="11" xoffset="-1" y="100" yoffset="9"/>
+    <char chnl="15" height="12" id="1090" page="0" width="14" x="492" xadvance="12" xoffset="-1" y="80" yoffset="9"/>
+    <char chnl="15" height="15" id="1091" page="0" width="16" x="102" xadvance="13" xoffset="-1" y="54" yoffset="9"/>
+    <char chnl="15" height="18" id="1092" page="0" width="22" x="410" xadvance="20" xoffset="-1" y="0" yoffset="6"/>
+    <char chnl="15" height="12" id="1093" page="0" width="16" x="198" xadvance="14" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="14" id="1094" page="0" width="15" x="438" xadvance="14" xoffset="-1" y="68" yoffset="9"/>
+    <char chnl="15" height="12" id="1095" page="0" width="14" x="402" xadvance="12" xoffset="-1" y="84" yoffset="9"/>
+    <char chnl="15" height="12" id="1096" page="0" width="20" x="90" xadvance="18" xoffset="-1" y="86" yoffset="9"/>
+    <char chnl="15" height="14" id="1097" page="0" width="20" x="401" xadvance="18" xoffset="-1" y="69" yoffset="9"/>
+    <char chnl="15" height="12" id="1098" page="0" width="16" x="147" xadvance="15" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1099" page="0" width="18" x="111" xadvance="16" xoffset="-1" y="86" yoffset="9"/>
+    <char chnl="15" height="12" id="1100" page="0" width="14" x="372" xadvance="13" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="12" id="1101" page="0" width="13" x="70" xadvance="11" xoffset="-1" y="100" yoffset="9"/>
+    <char chnl="15" height="12" id="1102" page="0" width="21" x="46" xadvance="19" xoffset="-1" y="89" yoffset="9"/>
+    <char chnl="15" height="12" id="1103" page="0" width="14" x="357" xadvance="12" xoffset="-1" y="85" yoffset="9"/>
+    <char chnl="15" height="16" id="1105" page="0" width="14" x="352" xadvance="12" xoffset="-1" y="20" yoffset="5"/>
+    <char chnl="15" height="4" id="8211" page="0" width="16" x="361" xadvance="14" xoffset="-1" y="98" yoffset="12"/>
+    <char chnl="15" height="4" id="8212" page="0" width="19" x="324" xadvance="17" xoffset="-1" y="98" yoffset="12"/>
+    <char chnl="15" height="7" id="8217" page="0" width="8" x="240" xadvance="6" xoffset="-1" y="98" yoffset="5"/>
+    <char chnl="15" height="5" id="8230" page="0" width="20" x="269" xadvance="18" xoffset="-1" y="98" yoffset="16"/>
+    <char chnl="15" height="17" id="8470" page="0" width="26" x="450" xadvance="23" xoffset="-1" y="0" yoffset="4"/>
   </chars>
   </chars>
-</font>
+  
+</font>

BIN
examples/HelloWorld/data/fonts/main_0.png


+ 0 - 0
examples/HelloWorld/data/images/anim1.png → examples/HelloWorld/data/images/anim.png


BIN
examples/HelloWorld/data/images/button.png


+ 2 - 2
examples/HelloWorld/data/res.xml

@@ -2,8 +2,8 @@
 <resources>
 <resources>
 	<set path = "images" />
 	<set path = "images" />
 	<atlas>
 	<atlas>
-		<image id="anim" file="anim1.png" cols = "7" /> <!-- 'id' is optional -->
-		<image file="button.png" cols = "3" />		
+		<image file="anim.png" cols = "7" />
+		<image file="button.png"/>		
 	</atlas>
 	</atlas>
 	
 	
 	<set path = "fonts" />
 	<set path = "fonts" />

+ 2 - 0
examples/HelloWorld/proj.win32/HelloWorld_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/HelloWorld/proj.win32/HelloWorld_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 3 - 0
examples/HelloWorld/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 46 - 31
examples/HelloWorld/src/example.cpp

@@ -6,62 +6,73 @@ using namespace oxygine;
 //It is important on mobile devices with limited memory and you would load/unload them
 //It is important on mobile devices with limited memory and you would load/unload them
 Resources gameResources;
 Resources gameResources;
 
 
-//DECLARE_SMART is helper, it does forward declaration and declares intrusive_ptr typedef for your class
-DECLARE_SMART(MainActor, spMainActor);
-
 class MainActor: public Actor
 class MainActor: public Actor
 {
 {
 public:
 public:
 	spTextField _text;
 	spTextField _text;
+	spSprite	_button;
 
 
 	MainActor()
 	MainActor()
 	{	
 	{	
-		//create Button actor
-		spButton button = new Button();
-		//add it as child to current actor
-		addChild(button);
+		//create simple Sprite
+		spSprite button = new Sprite();
 
 
-		//you will find 'button' resource definition in res.xml
-		//button has 3 columns for each state: Normal, Pressed, Overed
+		//setup it:
+		//set button.png image. Resource 'button' defined in 'res.xml'
 		button->setResAnim(gameResources.getResAnim("button"));
 		button->setResAnim(gameResources.getResAnim("button"));
+
 		//centered button at screen	
 		//centered button at screen	
 		Vector2 pos = getStage()->getSize()/2 - button->getSize()/2;
 		Vector2 pos = getStage()->getSize()/2 - button->getSize()/2;
 		button->setPosition(pos);
 		button->setPosition(pos);
-		button->setTouchChildrenEnabled(false);
 
 
 		//handle click to button
 		//handle click to button
-		EventCallback cb = CLOSURE(this, &MainActor::displayClicked);
+		EventCallback cb = CLOSURE(this, &MainActor::buttonClicked);
 		button->addEventListener(TouchEvent::CLICK, cb);
 		button->addEventListener(TouchEvent::CLICK, cb);
 
 
+		//attach button as child to current actor
+		addChild(button);
+
+		_button = button;
+
+
 		//second part
 		//second part
 
 
-		//create Actor with Text and it to button as child
+		//create TextField Actor
 		spTextField text = new TextField();
 		spTextField text = new TextField();
+		//attach it as child to button
 		text->attachTo(button);
 		text->attachTo(button);
 		//centered in button
 		//centered in button
 		text->setPosition(button->getSize()/2);
 		text->setPosition(button->getSize()/2);
 
 
 		//initialize text style
 		//initialize text style
-		//it would be centered and colored
 		TextStyle style;
 		TextStyle style;
 		style.font = gameResources.getResFont("main")->getFont();
 		style.font = gameResources.getResFont("main")->getFont();
-		style.color = Color(72, 61, 139, 255);
+		style.color = Color::White;
 		style.vAlign = TextStyle::VALIGN_MIDDLE;
 		style.vAlign = TextStyle::VALIGN_MIDDLE;
 		style.hAlign = TextStyle::HALIGN_CENTER;
 		style.hAlign = TextStyle::HALIGN_CENTER;
 
 
 		text->setStyle(style);
 		text->setStyle(style);
-		text->setText("click\nme!");
+		text->setText("Click\nMe!");
 
 
-		//we will change text later
 		_text = text; 
 		_text = text; 
 	}
 	}
 
 
-	void displayClicked(Event *event)
+	void buttonClicked(Event *event)
 	{
 	{
-		//user clicked to button
-		_text->setText("clicked!");
+		//user clicked to button		
+		
+		//animate button by chaning color
+		_button->setColor(Color::White);
+		_button->addTween(Sprite::TweenColor(Color::Green), 500, 1, true);
+
+		//animate text by scaling
+		_text->setScale(1.0f);
+		_text->addTween(Actor::TweenScale(1.1f), 500, 1, true);
 
 
-		//lets create and run sprite with animation
+		//and change text
+		_text->setText("Clicked!");
+
+		//lets create and run sprite with simple animation
 		runSprite();
 		runSprite();
 	}
 	}
 
 
@@ -73,7 +84,7 @@ public:
 		int duration = 500;//500 ms 
 		int duration = 500;//500 ms 
 		int loops = -1;//infinity loops
 		int loops = -1;//infinity loops
 
 
-		//animation has 7 columns, check res.xml
+		//animation has 7 columns, check 'res.xml'
 		ResAnim *animation = gameResources.getResAnim("anim");
 		ResAnim *animation = gameResources.getResAnim("anim");
 
 
 		//add animation tween to sprite
 		//add animation tween to sprite
@@ -92,7 +103,7 @@ public:
 		//first, move sprite to dest position
 		//first, move sprite to dest position
 		tweenQueue->add(Sprite::TweenPosition(destPos), 1500, 1);
 		tweenQueue->add(Sprite::TweenPosition(destPos), 1500, 1);
 		//then fade it out smoothly
 		//then fade it out smoothly
-		tweenQueue->add(Sprite::TweenAlpha(0), 1000, 1);
+		tweenQueue->add(Sprite::TweenAlpha(0), 500, 1);
 		
 		
 		sprite->addTween(tweenQueue);
 		sprite->addTween(tweenQueue);
 
 
@@ -101,31 +112,35 @@ public:
 		tweenQueue->setDetachActor(true);		
 		tweenQueue->setDetachActor(true);		
 	}
 	}
 };
 };
+//declare spMainActor as intrusive_ptr holder of MainActor
+typedef oxygine::intrusive_ptr<MainActor> spMainActor;
 
 
-void example_preinit()
-{
-}
+void example_preinit(){}
 
 
+//called from entry_point.cpp
 void example_init()
 void example_init()
 {
 {
 	//load xml file with resources definition
 	//load xml file with resources definition
 	gameResources.loadXML("res.xml");
 	gameResources.loadXML("res.xml");
-
+		
 
 
 	//lets create our client code simple actor
 	//lets create our client code simple actor
-	//prefix 'sp' here means it is intrusive Smart Pointer
-	//it would be deleted automatically when you lost ref to it	
+	//spMainActor was defined above as smart intrusive pointer (read more: http://www.boost.org/doc/libs/1_57_0/libs/smart_ptr/intrusive_ptr.html)
 	spMainActor actor = new MainActor;
 	spMainActor actor = new MainActor;
+
 	//and add it to Stage as child
 	//and add it to Stage as child
 	getStage()->addChild(actor);
 	getStage()->addChild(actor);
 }
 }
 
 
+
+//called each frame from entry_point.cpp	
 void example_update()
 void example_update()
-{
-	
+{	
 }
 }
 
 
+//called each frame from entry_point.cpp	
 void example_destroy()
 void example_destroy()
 {
 {
+	//free previously loaded resources
 	gameResources.free();
 	gameResources.free();
-}
+}

+ 2 - 0
examples/Match3/proj.win32/Match3_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/Match3/proj.win32/Match3_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 3 - 0
examples/Match3/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 5 - 1
examples/Match3/src/jewels.h

@@ -2,9 +2,13 @@
 
 
 #include "oxygine-framework.h"
 #include "oxygine-framework.h"
 
 
+using namespace std;
+using namespace oxygine;
+
+
 #define JEWEL_SIZE 50
 #define JEWEL_SIZE 50
 
 
-using namespace oxygine;
+
 
 
 DECLARE_SMART(Jewel, spJewel);
 DECLARE_SMART(Jewel, spJewel);
 
 

+ 2 - 0
examples/TutorialResources/proj.win32/TutorialResources_vs2010.vcxproj

@@ -58,6 +58,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -78,6 +79,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 2 - 0
examples/TutorialResources/proj.win32/TutorialResources_vs2013.vcxproj

@@ -60,6 +60,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -80,6 +81,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>../../..//oxygine/third_party/win32/libraries;../../..//libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalDependencies>libjpeg.lib;libpng.lib;libzlib.lib;opengl32.lib;pthreadVCE2.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/ignore:4217 /ignore:4049 %(AdditionalOptions)</AdditionalOptions>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>    
   <ItemGroup>    

+ 3 - 0
examples/TutorialResources/src/entry_point.cpp

@@ -4,10 +4,13 @@ This file has Oxygine initialization stuff.
 If you just started you don't need to understand it exactly you could check it later.
 If you just started you don't need to understand it exactly you could check it later.
 You could start from example.cpp and example.h it has main functions being called from there
 You could start from example.cpp and example.h it has main functions being called from there
 */
 */
+#include "core/oxygine.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
+
 #include "example.h"
 #include "example.h"
 
 
+
 using namespace oxygine;
 using namespace oxygine;
 
 
 
 

+ 32 - 14
oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj/project.pbxproj

@@ -51,6 +51,14 @@
 		04D6FB4D1851914000A5403A /* ThreadMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 04D6FB4B1851914000A5403A /* ThreadMessages.h */; };
 		04D6FB4D1851914000A5403A /* ThreadMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 04D6FB4B1851914000A5403A /* ThreadMessages.h */; };
 		92214D6419F14A2F00A4459A /* Polygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92214D6219F14A2F00A4459A /* Polygon.cpp */; };
 		92214D6419F14A2F00A4459A /* Polygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92214D6219F14A2F00A4459A /* Polygon.cpp */; };
 		92214D6519F14A2F00A4459A /* Polygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 92214D6319F14A2F00A4459A /* Polygon.h */; };
 		92214D6519F14A2F00A4459A /* Polygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 92214D6319F14A2F00A4459A /* Polygon.h */; };
+		923663691A4756C500EB65B3 /* KeyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663611A4756C500EB65B3 /* KeyEvent.h */; };
+		9236636A1A4756C500EB65B3 /* Serializable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923663621A4756C500EB65B3 /* Serializable.cpp */; };
+		9236636B1A4756C500EB65B3 /* Serializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663631A4756C500EB65B3 /* Serializable.h */; };
+		9236636C1A4756C500EB65B3 /* TouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663641A4756C500EB65B3 /* TouchEvent.h */; };
+		9236636D1A4756C500EB65B3 /* Tween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923663651A4756C500EB65B3 /* Tween.cpp */; };
+		9236636E1A4756C500EB65B3 /* Tween.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663661A4756C500EB65B3 /* Tween.h */; };
+		9236636F1A4756C500EB65B3 /* TweenQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923663671A4756C500EB65B3 /* TweenQueue.cpp */; };
+		923663701A4756C500EB65B3 /* TweenQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663681A4756C500EB65B3 /* TweenQueue.h */; };
 		923A9E971A1FCBB700A6F08E /* MaskedRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */; };
 		923A9E971A1FCBB700A6F08E /* MaskedRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */; };
 		923A9E981A1FCBB700A6F08E /* MaskedRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */; };
 		923A9E981A1FCBB700A6F08E /* MaskedRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */; };
 		923A9E991A1FCBB700A6F08E /* STDRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E951A1FCBB700A6F08E /* STDRenderer.cpp */; };
 		923A9E991A1FCBB700A6F08E /* STDRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E951A1FCBB700A6F08E /* STDRenderer.cpp */; };
@@ -101,8 +109,6 @@
 		C3E8701A16EBC8EB00052915 /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7416EBC8EB00052915 /* logging.h */; };
 		C3E8701A16EBC8EB00052915 /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7416EBC8EB00052915 /* logging.h */; };
 		C3E8701B16EBC8EB00052915 /* Mem2Native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7516EBC8EB00052915 /* Mem2Native.cpp */; };
 		C3E8701B16EBC8EB00052915 /* Mem2Native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7516EBC8EB00052915 /* Mem2Native.cpp */; };
 		C3E8701C16EBC8EB00052915 /* Mem2Native.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7616EBC8EB00052915 /* Mem2Native.h */; };
 		C3E8701C16EBC8EB00052915 /* Mem2Native.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7616EBC8EB00052915 /* Mem2Native.h */; };
-		C3E8701D16EBC8EB00052915 /* memory_pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7716EBC8EB00052915 /* memory_pool.cpp */; };
-		C3E8701E16EBC8EB00052915 /* memory_pool.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7816EBC8EB00052915 /* memory_pool.h */; };
 		C3E8701F16EBC8EB00052915 /* Mutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7916EBC8EB00052915 /* Mutex.cpp */; };
 		C3E8701F16EBC8EB00052915 /* Mutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7916EBC8EB00052915 /* Mutex.cpp */; };
 		C3E8702016EBC8EB00052915 /* Mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7A16EBC8EB00052915 /* Mutex.h */; };
 		C3E8702016EBC8EB00052915 /* Mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86F7A16EBC8EB00052915 /* Mutex.h */; };
 		C3E8702116EBC8EB00052915 /* NativeTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7B16EBC8EB00052915 /* NativeTexture.cpp */; };
 		C3E8702116EBC8EB00052915 /* NativeTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86F7B16EBC8EB00052915 /* NativeTexture.cpp */; };
@@ -183,7 +189,6 @@
 		C3E8707716EBC8EB00052915 /* TextBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FDA16EBC8EB00052915 /* TextBuilder.h */; };
 		C3E8707716EBC8EB00052915 /* TextBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FDA16EBC8EB00052915 /* TextBuilder.h */; };
 		C3E8707916EBC8EB00052915 /* TextActor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FDC16EBC8EB00052915 /* TextActor.h */; };
 		C3E8707916EBC8EB00052915 /* TextActor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FDC16EBC8EB00052915 /* TextActor.h */; };
 		C3E8707A16EBC8EB00052915 /* TextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FDD16EBC8EB00052915 /* TextStyle.h */; };
 		C3E8707A16EBC8EB00052915 /* TextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FDD16EBC8EB00052915 /* TextStyle.h */; };
-		C3E8708316EBC8EB00052915 /* Tweener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FE916EBC8EB00052915 /* Tweener.cpp */; };
 		C3E8708416EBC8EB00052915 /* Tweener.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FEA16EBC8EB00052915 /* Tweener.h */; };
 		C3E8708416EBC8EB00052915 /* Tweener.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FEA16EBC8EB00052915 /* Tweener.h */; };
 		C3E8708516EBC8EB00052915 /* UpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FEB16EBC8EB00052915 /* UpdateState.h */; };
 		C3E8708516EBC8EB00052915 /* UpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E86FEB16EBC8EB00052915 /* UpdateState.h */; };
 		C3E8708616EBC8EB00052915 /* AtlasTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FEE16EBC8EB00052915 /* AtlasTool.cpp */; };
 		C3E8708616EBC8EB00052915 /* AtlasTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E86FEE16EBC8EB00052915 /* AtlasTool.cpp */; };
@@ -256,6 +261,14 @@
 		04D6FB4B1851914000A5403A /* ThreadMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadMessages.h; sourceTree = "<group>"; };
 		04D6FB4B1851914000A5403A /* ThreadMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadMessages.h; sourceTree = "<group>"; };
 		92214D6219F14A2F00A4459A /* Polygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Polygon.cpp; path = ../../../src/Polygon.cpp; sourceTree = "<group>"; };
 		92214D6219F14A2F00A4459A /* Polygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Polygon.cpp; path = ../../../src/Polygon.cpp; sourceTree = "<group>"; };
 		92214D6319F14A2F00A4459A /* Polygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Polygon.h; path = ../../../src/Polygon.h; sourceTree = "<group>"; };
 		92214D6319F14A2F00A4459A /* Polygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Polygon.h; path = ../../../src/Polygon.h; sourceTree = "<group>"; };
+		923663611A4756C500EB65B3 /* KeyEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeyEvent.h; path = ../../../src/KeyEvent.h; sourceTree = "<group>"; };
+		923663621A4756C500EB65B3 /* Serializable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Serializable.cpp; path = ../../../src/Serializable.cpp; sourceTree = "<group>"; };
+		923663631A4756C500EB65B3 /* Serializable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Serializable.h; path = ../../../src/Serializable.h; sourceTree = "<group>"; };
+		923663641A4756C500EB65B3 /* TouchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchEvent.h; path = ../../../src/TouchEvent.h; sourceTree = "<group>"; };
+		923663651A4756C500EB65B3 /* Tween.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tween.cpp; path = ../../../src/Tween.cpp; sourceTree = "<group>"; };
+		923663661A4756C500EB65B3 /* Tween.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tween.h; path = ../../../src/Tween.h; sourceTree = "<group>"; };
+		923663671A4756C500EB65B3 /* TweenQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TweenQueue.cpp; path = ../../../src/TweenQueue.cpp; sourceTree = "<group>"; };
+		923663681A4756C500EB65B3 /* TweenQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TweenQueue.h; path = ../../../src/TweenQueue.h; sourceTree = "<group>"; };
 		923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaskedRenderer.cpp; path = ../../../src/MaskedRenderer.cpp; sourceTree = "<group>"; };
 		923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaskedRenderer.cpp; path = ../../../src/MaskedRenderer.cpp; sourceTree = "<group>"; };
 		923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MaskedRenderer.h; path = ../../../src/MaskedRenderer.h; sourceTree = "<group>"; };
 		923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MaskedRenderer.h; path = ../../../src/MaskedRenderer.h; sourceTree = "<group>"; };
 		923A9E951A1FCBB700A6F08E /* STDRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STDRenderer.cpp; path = ../../../src/STDRenderer.cpp; sourceTree = "<group>"; };
 		923A9E951A1FCBB700A6F08E /* STDRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STDRenderer.cpp; path = ../../../src/STDRenderer.cpp; sourceTree = "<group>"; };
@@ -297,7 +310,6 @@
 		C3E86F6516EBC8EB00052915 /* closure_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = closure_impl.h; sourceTree = "<group>"; };
 		C3E86F6516EBC8EB00052915 /* closure_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = closure_impl.h; sourceTree = "<group>"; };
 		C3E86F6616EBC8EB00052915 /* ColorRectSprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColorRectSprite.cpp; path = ../../../src/ColorRectSprite.cpp; sourceTree = "<group>"; };
 		C3E86F6616EBC8EB00052915 /* ColorRectSprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColorRectSprite.cpp; path = ../../../src/ColorRectSprite.cpp; sourceTree = "<group>"; };
 		C3E86F6716EBC8EB00052915 /* ColorRectSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorRectSprite.h; path = ../../../src/ColorRectSprite.h; sourceTree = "<group>"; };
 		C3E86F6716EBC8EB00052915 /* ColorRectSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorRectSprite.h; path = ../../../src/ColorRectSprite.h; sourceTree = "<group>"; };
-		C3E86F6916EBC8EB00052915 /* .oxbuild */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .oxbuild; sourceTree = "<group>"; };
 		C3E86F6A16EBC8EB00052915 /* coroutines.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = coroutines.cpp; sourceTree = "<group>"; };
 		C3E86F6A16EBC8EB00052915 /* coroutines.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = coroutines.cpp; sourceTree = "<group>"; };
 		C3E86F6B16EBC8EB00052915 /* coroutines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coroutines.h; sourceTree = "<group>"; };
 		C3E86F6B16EBC8EB00052915 /* coroutines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coroutines.h; sourceTree = "<group>"; };
 		C3E86F6D16EBC8EB00052915 /* files_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = files_io.h; sourceTree = "<group>"; };
 		C3E86F6D16EBC8EB00052915 /* files_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = files_io.h; sourceTree = "<group>"; };
@@ -309,8 +321,6 @@
 		C3E86F7416EBC8EB00052915 /* logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = "<group>"; };
 		C3E86F7416EBC8EB00052915 /* logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = "<group>"; };
 		C3E86F7516EBC8EB00052915 /* Mem2Native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mem2Native.cpp; sourceTree = "<group>"; };
 		C3E86F7516EBC8EB00052915 /* Mem2Native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mem2Native.cpp; sourceTree = "<group>"; };
 		C3E86F7616EBC8EB00052915 /* Mem2Native.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mem2Native.h; sourceTree = "<group>"; };
 		C3E86F7616EBC8EB00052915 /* Mem2Native.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mem2Native.h; sourceTree = "<group>"; };
-		C3E86F7716EBC8EB00052915 /* memory_pool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memory_pool.cpp; sourceTree = "<group>"; };
-		C3E86F7816EBC8EB00052915 /* memory_pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory_pool.h; sourceTree = "<group>"; };
 		C3E86F7916EBC8EB00052915 /* Mutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mutex.cpp; sourceTree = "<group>"; };
 		C3E86F7916EBC8EB00052915 /* Mutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mutex.cpp; sourceTree = "<group>"; };
 		C3E86F7A16EBC8EB00052915 /* Mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mutex.h; sourceTree = "<group>"; };
 		C3E86F7A16EBC8EB00052915 /* Mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mutex.h; sourceTree = "<group>"; };
 		C3E86F7B16EBC8EB00052915 /* NativeTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeTexture.cpp; sourceTree = "<group>"; };
 		C3E86F7B16EBC8EB00052915 /* NativeTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeTexture.cpp; sourceTree = "<group>"; };
@@ -395,7 +405,6 @@
 		C3E86FDA16EBC8EB00052915 /* TextBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBuilder.h; sourceTree = "<group>"; };
 		C3E86FDA16EBC8EB00052915 /* TextBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBuilder.h; sourceTree = "<group>"; };
 		C3E86FDC16EBC8EB00052915 /* TextActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextActor.h; path = ../../../src/TextActor.h; sourceTree = "<group>"; };
 		C3E86FDC16EBC8EB00052915 /* TextActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextActor.h; path = ../../../src/TextActor.h; sourceTree = "<group>"; };
 		C3E86FDD16EBC8EB00052915 /* TextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextStyle.h; path = ../../../src/TextStyle.h; sourceTree = "<group>"; };
 		C3E86FDD16EBC8EB00052915 /* TextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextStyle.h; path = ../../../src/TextStyle.h; sourceTree = "<group>"; };
-		C3E86FE916EBC8EB00052915 /* Tweener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tweener.cpp; path = ../../../src/Tweener.cpp; sourceTree = "<group>"; };
 		C3E86FEA16EBC8EB00052915 /* Tweener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tweener.h; path = ../../../src/Tweener.h; sourceTree = "<group>"; };
 		C3E86FEA16EBC8EB00052915 /* Tweener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tweener.h; path = ../../../src/Tweener.h; sourceTree = "<group>"; };
 		C3E86FEB16EBC8EB00052915 /* UpdateState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UpdateState.h; path = ../../../src/UpdateState.h; sourceTree = "<group>"; };
 		C3E86FEB16EBC8EB00052915 /* UpdateState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UpdateState.h; path = ../../../src/UpdateState.h; sourceTree = "<group>"; };
 		C3E86FED16EBC8EB00052915 /* .oxbuild */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .oxbuild; sourceTree = "<group>"; };
 		C3E86FED16EBC8EB00052915 /* .oxbuild */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .oxbuild; sourceTree = "<group>"; };
@@ -501,6 +510,14 @@
 		C3E86F5316EBC8C200052915 /* src */ = {
 		C3E86F5316EBC8C200052915 /* src */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				923663611A4756C500EB65B3 /* KeyEvent.h */,
+				923663621A4756C500EB65B3 /* Serializable.cpp */,
+				923663631A4756C500EB65B3 /* Serializable.h */,
+				923663641A4756C500EB65B3 /* TouchEvent.h */,
+				923663651A4756C500EB65B3 /* Tween.cpp */,
+				923663661A4756C500EB65B3 /* Tween.h */,
+				923663671A4756C500EB65B3 /* TweenQueue.cpp */,
+				923663681A4756C500EB65B3 /* TweenQueue.h */,
 				92DC0A221A2F0EB700D2B55C /* greenlet */,
 				92DC0A221A2F0EB700D2B55C /* greenlet */,
 				923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */,
 				923A9E931A1FCBB700A6F08E /* MaskedRenderer.cpp */,
 				923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */,
 				923A9E941A1FCBB700A6F08E /* MaskedRenderer.h */,
@@ -572,7 +589,6 @@
 				C3E86FD416EBC8EB00052915 /* text_utils */,
 				C3E86FD416EBC8EB00052915 /* text_utils */,
 				C3E86FDC16EBC8EB00052915 /* TextActor.h */,
 				C3E86FDC16EBC8EB00052915 /* TextActor.h */,
 				C3E86FDD16EBC8EB00052915 /* TextStyle.h */,
 				C3E86FDD16EBC8EB00052915 /* TextStyle.h */,
-				C3E86FE916EBC8EB00052915 /* Tweener.cpp */,
 				C3E86FEA16EBC8EB00052915 /* Tweener.h */,
 				C3E86FEA16EBC8EB00052915 /* Tweener.h */,
 				C3E86FEB16EBC8EB00052915 /* UpdateState.h */,
 				C3E86FEB16EBC8EB00052915 /* UpdateState.h */,
 				C3E86FEC16EBC8EB00052915 /* utils */,
 				C3E86FEC16EBC8EB00052915 /* utils */,
@@ -618,7 +634,6 @@
 				0472E35517F8A1A80016A832 /* ZipFileSystem.cpp */,
 				0472E35517F8A1A80016A832 /* ZipFileSystem.cpp */,
 				0472E35617F8A1A80016A832 /* ZipFileSystem.h */,
 				0472E35617F8A1A80016A832 /* ZipFileSystem.h */,
 				C3EE215017BECD6100715678 /* gl */,
 				C3EE215017BECD6100715678 /* gl */,
-				C3E86F6916EBC8EB00052915 /* .oxbuild */,
 				C3E86F6A16EBC8EB00052915 /* coroutines.cpp */,
 				C3E86F6A16EBC8EB00052915 /* coroutines.cpp */,
 				C3E86F6B16EBC8EB00052915 /* coroutines.h */,
 				C3E86F6B16EBC8EB00052915 /* coroutines.h */,
 				C3E86F6D16EBC8EB00052915 /* files_io.h */,
 				C3E86F6D16EBC8EB00052915 /* files_io.h */,
@@ -630,8 +645,6 @@
 				C3E86F7416EBC8EB00052915 /* logging.h */,
 				C3E86F7416EBC8EB00052915 /* logging.h */,
 				C3E86F7516EBC8EB00052915 /* Mem2Native.cpp */,
 				C3E86F7516EBC8EB00052915 /* Mem2Native.cpp */,
 				C3E86F7616EBC8EB00052915 /* Mem2Native.h */,
 				C3E86F7616EBC8EB00052915 /* Mem2Native.h */,
-				C3E86F7716EBC8EB00052915 /* memory_pool.cpp */,
-				C3E86F7816EBC8EB00052915 /* memory_pool.h */,
 				C3E86F7916EBC8EB00052915 /* Mutex.cpp */,
 				C3E86F7916EBC8EB00052915 /* Mutex.cpp */,
 				C3E86F7A16EBC8EB00052915 /* Mutex.h */,
 				C3E86F7A16EBC8EB00052915 /* Mutex.h */,
 				C3E86F7B16EBC8EB00052915 /* NativeTexture.cpp */,
 				C3E86F7B16EBC8EB00052915 /* NativeTexture.cpp */,
@@ -790,6 +803,7 @@
 				C3E8700516EBC8EB00052915 /* Box9Sprite.h in Headers */,
 				C3E8700516EBC8EB00052915 /* Box9Sprite.h in Headers */,
 				C3E8700716EBC8EB00052915 /* Button.h in Headers */,
 				C3E8700716EBC8EB00052915 /* Button.h in Headers */,
 				C3E8700916EBC8EB00052915 /* ClipRectActor.h in Headers */,
 				C3E8700916EBC8EB00052915 /* ClipRectActor.h in Headers */,
+				9236636E1A4756C500EB65B3 /* Tween.h in Headers */,
 				923A9E981A1FCBB700A6F08E /* MaskedRenderer.h in Headers */,
 				923A9E981A1FCBB700A6F08E /* MaskedRenderer.h in Headers */,
 				C3E8700B16EBC8EB00052915 /* Clock.h in Headers */,
 				C3E8700B16EBC8EB00052915 /* Clock.h in Headers */,
 				C3E8700C16EBC8EB00052915 /* closure.h in Headers */,
 				C3E8700C16EBC8EB00052915 /* closure.h in Headers */,
@@ -808,8 +822,9 @@
 				C3E8701A16EBC8EB00052915 /* logging.h in Headers */,
 				C3E8701A16EBC8EB00052915 /* logging.h in Headers */,
 				048AD0AB197D2444001963EF /* TextField.h in Headers */,
 				048AD0AB197D2444001963EF /* TextField.h in Headers */,
 				C3E8701C16EBC8EB00052915 /* Mem2Native.h in Headers */,
 				C3E8701C16EBC8EB00052915 /* Mem2Native.h in Headers */,
-				C3E8701E16EBC8EB00052915 /* memory_pool.h in Headers */,
 				C3E8702016EBC8EB00052915 /* Mutex.h in Headers */,
 				C3E8702016EBC8EB00052915 /* Mutex.h in Headers */,
+				9236636B1A4756C500EB65B3 /* Serializable.h in Headers */,
+				923663701A4756C500EB65B3 /* TweenQueue.h in Headers */,
 				C3E8702216EBC8EB00052915 /* NativeTexture.h in Headers */,
 				C3E8702216EBC8EB00052915 /* NativeTexture.h in Headers */,
 				048AD0CC19B1FD74001963EF /* Stage.h in Headers */,
 				048AD0CC19B1FD74001963EF /* Stage.h in Headers */,
 				C3E8702416EBC8EB00052915 /* Object.h in Headers */,
 				C3E8702416EBC8EB00052915 /* Object.h in Headers */,
@@ -820,6 +835,7 @@
 				C3E8702B16EBC8EB00052915 /* ref_counter.h in Headers */,
 				C3E8702B16EBC8EB00052915 /* ref_counter.h in Headers */,
 				04AEC310182BD912006413A9 /* ShaderProgramGL.h in Headers */,
 				04AEC310182BD912006413A9 /* ShaderProgramGL.h in Headers */,
 				0472E38217F8A2EC0016A832 /* oxygine-framework.h in Headers */,
 				0472E38217F8A2EC0016A832 /* oxygine-framework.h in Headers */,
+				9236636C1A4756C500EB65B3 /* TouchEvent.h in Headers */,
 				C3E8702D16EBC8EB00052915 /* Renderer.h in Headers */,
 				C3E8702D16EBC8EB00052915 /* Renderer.h in Headers */,
 				C3E8702F16EBC8EB00052915 /* Texture.h in Headers */,
 				C3E8702F16EBC8EB00052915 /* Texture.h in Headers */,
 				C3E8703116EBC8EB00052915 /* VideoDriver.h in Headers */,
 				C3E8703116EBC8EB00052915 /* VideoDriver.h in Headers */,
@@ -882,6 +898,7 @@
 				C3E8709016EBC8EB00052915 /* system_alloc.h in Headers */,
 				C3E8709016EBC8EB00052915 /* system_alloc.h in Headers */,
 				C3E8709216EBC8EB00052915 /* winnie_alloc.h in Headers */,
 				C3E8709216EBC8EB00052915 /* winnie_alloc.h in Headers */,
 				C3E8709316EBC8EB00052915 /* winnie_alloc_config.h in Headers */,
 				C3E8709316EBC8EB00052915 /* winnie_alloc_config.h in Headers */,
+				923663691A4756C500EB65B3 /* KeyEvent.h in Headers */,
 				04967C4E180B3D7400D66EFA /* Restorable.h in Headers */,
 				04967C4E180B3D7400D66EFA /* Restorable.h in Headers */,
 				C38EC2701709649300568283 /* DeveloperMenu.h in Headers */,
 				C38EC2701709649300568283 /* DeveloperMenu.h in Headers */,
 				C38EC2721709649300568283 /* TexturesInspector.h in Headers */,
 				C38EC2721709649300568283 /* TexturesInspector.h in Headers */,
@@ -966,7 +983,6 @@
 				0472E36417F8A1A80016A832 /* ZipFileSystem.cpp in Sources */,
 				0472E36417F8A1A80016A832 /* ZipFileSystem.cpp in Sources */,
 				C3E8701616EBC8EB00052915 /* ImageDataOperations.cpp in Sources */,
 				C3E8701616EBC8EB00052915 /* ImageDataOperations.cpp in Sources */,
 				C3E8701B16EBC8EB00052915 /* Mem2Native.cpp in Sources */,
 				C3E8701B16EBC8EB00052915 /* Mem2Native.cpp in Sources */,
-				C3E8701D16EBC8EB00052915 /* memory_pool.cpp in Sources */,
 				C3E8701F16EBC8EB00052915 /* Mutex.cpp in Sources */,
 				C3E8701F16EBC8EB00052915 /* Mutex.cpp in Sources */,
 				C3E8702116EBC8EB00052915 /* NativeTexture.cpp in Sources */,
 				C3E8702116EBC8EB00052915 /* NativeTexture.cpp in Sources */,
 				C3E8702316EBC8EB00052915 /* Object.cpp in Sources */,
 				C3E8702316EBC8EB00052915 /* Object.cpp in Sources */,
@@ -976,6 +992,7 @@
 				C3E8702C16EBC8EB00052915 /* Renderer.cpp in Sources */,
 				C3E8702C16EBC8EB00052915 /* Renderer.cpp in Sources */,
 				C3E8702E16EBC8EB00052915 /* Texture.cpp in Sources */,
 				C3E8702E16EBC8EB00052915 /* Texture.cpp in Sources */,
 				C3E8703016EBC8EB00052915 /* VideoDriver.cpp in Sources */,
 				C3E8703016EBC8EB00052915 /* VideoDriver.cpp in Sources */,
+				9236636A1A4756C500EB65B3 /* Serializable.cpp in Sources */,
 				C3E8703616EBC8EB00052915 /* DebugActor.cpp in Sources */,
 				C3E8703616EBC8EB00052915 /* DebugActor.cpp in Sources */,
 				C3E8703816EBC8EB00052915 /* Draggable.cpp in Sources */,
 				C3E8703816EBC8EB00052915 /* Draggable.cpp in Sources */,
 				C3E8703B16EBC8EB00052915 /* EventDispatcher.cpp in Sources */,
 				C3E8703B16EBC8EB00052915 /* EventDispatcher.cpp in Sources */,
@@ -1007,8 +1024,9 @@
 				C3E8707216EBC8EB00052915 /* Aligner.cpp in Sources */,
 				C3E8707216EBC8EB00052915 /* Aligner.cpp in Sources */,
 				04D6FB4C1851914000A5403A /* ThreadMessages.cpp in Sources */,
 				04D6FB4C1851914000A5403A /* ThreadMessages.cpp in Sources */,
 				C3E8707416EBC8EB00052915 /* Node.cpp in Sources */,
 				C3E8707416EBC8EB00052915 /* Node.cpp in Sources */,
+				9236636D1A4756C500EB65B3 /* Tween.cpp in Sources */,
+				9236636F1A4756C500EB65B3 /* TweenQueue.cpp in Sources */,
 				C3E8707616EBC8EB00052915 /* TextBuilder.cpp in Sources */,
 				C3E8707616EBC8EB00052915 /* TextBuilder.cpp in Sources */,
-				C3E8708316EBC8EB00052915 /* Tweener.cpp in Sources */,
 				04AEC30F182BD912006413A9 /* ShaderProgramGL.cpp in Sources */,
 				04AEC30F182BD912006413A9 /* ShaderProgramGL.cpp in Sources */,
 				C3E8708616EBC8EB00052915 /* AtlasTool.cpp in Sources */,
 				C3E8708616EBC8EB00052915 /* AtlasTool.cpp in Sources */,
 				0472E35E17F8A1A80016A832 /* STDFileSystem.cpp in Sources */,
 				0472E35E17F8A1A80016A832 /* STDFileSystem.cpp in Sources */,

+ 28 - 14
oxygine/SDL/macosx/oxygine_macosx/oxygine_macosx.xcodeproj/project.pbxproj

@@ -60,8 +60,6 @@
 		049B56931871F21E00EF3C66 /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C31871F21D00EF3C66 /* logging.h */; };
 		049B56931871F21E00EF3C66 /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C31871F21D00EF3C66 /* logging.h */; };
 		049B56941871F21E00EF3C66 /* Mem2Native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55C41871F21D00EF3C66 /* Mem2Native.cpp */; };
 		049B56941871F21E00EF3C66 /* Mem2Native.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55C41871F21D00EF3C66 /* Mem2Native.cpp */; };
 		049B56951871F21E00EF3C66 /* Mem2Native.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C51871F21D00EF3C66 /* Mem2Native.h */; };
 		049B56951871F21E00EF3C66 /* Mem2Native.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C51871F21D00EF3C66 /* Mem2Native.h */; };
-		049B56961871F21E00EF3C66 /* memory_pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55C61871F21D00EF3C66 /* memory_pool.cpp */; };
-		049B56971871F21E00EF3C66 /* memory_pool.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C71871F21D00EF3C66 /* memory_pool.h */; };
 		049B56981871F21E00EF3C66 /* Mutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55C81871F21D00EF3C66 /* Mutex.cpp */; };
 		049B56981871F21E00EF3C66 /* Mutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55C81871F21D00EF3C66 /* Mutex.cpp */; };
 		049B56991871F21E00EF3C66 /* Mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C91871F21D00EF3C66 /* Mutex.h */; };
 		049B56991871F21E00EF3C66 /* Mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B55C91871F21D00EF3C66 /* Mutex.h */; };
 		049B569A1871F21E00EF3C66 /* NativeTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55CA1871F21D00EF3C66 /* NativeTexture.cpp */; };
 		049B569A1871F21E00EF3C66 /* NativeTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B55CA1871F21D00EF3C66 /* NativeTexture.cpp */; };
@@ -180,7 +178,6 @@
 		049B57101871F21E00EF3C66 /* TextBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B564C1871F21E00EF3C66 /* TextBuilder.h */; };
 		049B57101871F21E00EF3C66 /* TextBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B564C1871F21E00EF3C66 /* TextBuilder.h */; };
 		049B57121871F21E00EF3C66 /* TextActor.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B564E1871F21E00EF3C66 /* TextActor.h */; };
 		049B57121871F21E00EF3C66 /* TextActor.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B564E1871F21E00EF3C66 /* TextActor.h */; };
 		049B57131871F21E00EF3C66 /* TextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B564F1871F21E00EF3C66 /* TextStyle.h */; };
 		049B57131871F21E00EF3C66 /* TextStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B564F1871F21E00EF3C66 /* TextStyle.h */; };
-		049B57141871F21E00EF3C66 /* Tweener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B56501871F21E00EF3C66 /* Tweener.cpp */; };
 		049B57151871F21E00EF3C66 /* Tweener.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56511871F21E00EF3C66 /* Tweener.h */; };
 		049B57151871F21E00EF3C66 /* Tweener.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56511871F21E00EF3C66 /* Tweener.h */; };
 		049B57161871F21E00EF3C66 /* UpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56521871F21E00EF3C66 /* UpdateState.h */; };
 		049B57161871F21E00EF3C66 /* UpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = 049B56521871F21E00EF3C66 /* UpdateState.h */; };
 		049B57171871F21E00EF3C66 /* AtlasTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B56551871F21E00EF3C66 /* AtlasTool.cpp */; };
 		049B57171871F21E00EF3C66 /* AtlasTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 049B56551871F21E00EF3C66 /* AtlasTool.cpp */; };
@@ -201,6 +198,13 @@
 		04B3A72018A6594D004C67E3 /* InputText.h in Headers */ = {isa = PBXBuildFile; fileRef = 04B3A71E18A6594D004C67E3 /* InputText.h */; };
 		04B3A72018A6594D004C67E3 /* InputText.h in Headers */ = {isa = PBXBuildFile; fileRef = 04B3A71E18A6594D004C67E3 /* InputText.h */; };
 		92214D5E19F149BC00A4459A /* Polygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92214D5C19F149BC00A4459A /* Polygon.cpp */; };
 		92214D5E19F149BC00A4459A /* Polygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92214D5C19F149BC00A4459A /* Polygon.cpp */; };
 		92214D5F19F149BC00A4459A /* Polygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 92214D5D19F149BC00A4459A /* Polygon.h */; };
 		92214D5F19F149BC00A4459A /* Polygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 92214D5D19F149BC00A4459A /* Polygon.h */; };
+		923663581A47561500EB65B3 /* Serializable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923663511A47561500EB65B3 /* Serializable.cpp */; };
+		923663591A47561500EB65B3 /* Serializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663521A47561500EB65B3 /* Serializable.h */; };
+		9236635A1A47561500EB65B3 /* TouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663531A47561500EB65B3 /* TouchEvent.h */; };
+		9236635B1A47561500EB65B3 /* Tween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923663541A47561500EB65B3 /* Tween.cpp */; };
+		9236635C1A47561500EB65B3 /* Tween.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663551A47561500EB65B3 /* Tween.h */; };
+		9236635D1A47561500EB65B3 /* TweenQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923663561A47561500EB65B3 /* TweenQueue.cpp */; };
+		9236635E1A47561500EB65B3 /* TweenQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 923663571A47561500EB65B3 /* TweenQueue.h */; };
 		923A9E8B1A1FCA3500A6F08E /* STDRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */; };
 		923A9E8B1A1FCA3500A6F08E /* STDRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */; };
 		923A9E8C1A1FCA3500A6F08E /* STDRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 923A9E8A1A1FCA3500A6F08E /* STDRenderer.h */; };
 		923A9E8C1A1FCA3500A6F08E /* STDRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 923A9E8A1A1FCA3500A6F08E /* STDRenderer.h */; };
 		923A9E8F1A1FCA6600A6F08E /* MaskedRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */; };
 		923A9E8F1A1FCA6600A6F08E /* MaskedRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */; };
@@ -233,7 +237,6 @@
 		049B55A11871F21D00EF3C66 /* closure_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = closure_impl.h; sourceTree = "<group>"; };
 		049B55A11871F21D00EF3C66 /* closure_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = closure_impl.h; sourceTree = "<group>"; };
 		049B55A21871F21D00EF3C66 /* ColorRectSprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColorRectSprite.cpp; path = ../../../src/ColorRectSprite.cpp; sourceTree = "<group>"; };
 		049B55A21871F21D00EF3C66 /* ColorRectSprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColorRectSprite.cpp; path = ../../../src/ColorRectSprite.cpp; sourceTree = "<group>"; };
 		049B55A31871F21D00EF3C66 /* ColorRectSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorRectSprite.h; path = ../../../src/ColorRectSprite.h; sourceTree = "<group>"; };
 		049B55A31871F21D00EF3C66 /* ColorRectSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorRectSprite.h; path = ../../../src/ColorRectSprite.h; sourceTree = "<group>"; };
-		049B55A51871F21D00EF3C66 /* .oxbuild */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .oxbuild; sourceTree = "<group>"; };
 		049B55A61871F21D00EF3C66 /* coroutines.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = coroutines.cpp; sourceTree = "<group>"; };
 		049B55A61871F21D00EF3C66 /* coroutines.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = coroutines.cpp; sourceTree = "<group>"; };
 		049B55A71871F21D00EF3C66 /* coroutines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coroutines.h; sourceTree = "<group>"; };
 		049B55A71871F21D00EF3C66 /* coroutines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coroutines.h; sourceTree = "<group>"; };
 		049B55A81871F21D00EF3C66 /* file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file.cpp; sourceTree = "<group>"; };
 		049B55A81871F21D00EF3C66 /* file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file.cpp; sourceTree = "<group>"; };
@@ -263,8 +266,6 @@
 		049B55C31871F21D00EF3C66 /* logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = "<group>"; };
 		049B55C31871F21D00EF3C66 /* logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = "<group>"; };
 		049B55C41871F21D00EF3C66 /* Mem2Native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mem2Native.cpp; sourceTree = "<group>"; };
 		049B55C41871F21D00EF3C66 /* Mem2Native.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mem2Native.cpp; sourceTree = "<group>"; };
 		049B55C51871F21D00EF3C66 /* Mem2Native.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mem2Native.h; sourceTree = "<group>"; };
 		049B55C51871F21D00EF3C66 /* Mem2Native.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mem2Native.h; sourceTree = "<group>"; };
-		049B55C61871F21D00EF3C66 /* memory_pool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memory_pool.cpp; sourceTree = "<group>"; };
-		049B55C71871F21D00EF3C66 /* memory_pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory_pool.h; sourceTree = "<group>"; };
 		049B55C81871F21D00EF3C66 /* Mutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mutex.cpp; sourceTree = "<group>"; };
 		049B55C81871F21D00EF3C66 /* Mutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mutex.cpp; sourceTree = "<group>"; };
 		049B55C91871F21D00EF3C66 /* Mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mutex.h; sourceTree = "<group>"; };
 		049B55C91871F21D00EF3C66 /* Mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mutex.h; sourceTree = "<group>"; };
 		049B55CA1871F21D00EF3C66 /* NativeTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeTexture.cpp; sourceTree = "<group>"; };
 		049B55CA1871F21D00EF3C66 /* NativeTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeTexture.cpp; sourceTree = "<group>"; };
@@ -388,7 +389,6 @@
 		049B564C1871F21E00EF3C66 /* TextBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBuilder.h; sourceTree = "<group>"; };
 		049B564C1871F21E00EF3C66 /* TextBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBuilder.h; sourceTree = "<group>"; };
 		049B564E1871F21E00EF3C66 /* TextActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextActor.h; path = ../../../src/TextActor.h; sourceTree = "<group>"; };
 		049B564E1871F21E00EF3C66 /* TextActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextActor.h; path = ../../../src/TextActor.h; sourceTree = "<group>"; };
 		049B564F1871F21E00EF3C66 /* TextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextStyle.h; path = ../../../src/TextStyle.h; sourceTree = "<group>"; };
 		049B564F1871F21E00EF3C66 /* TextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextStyle.h; path = ../../../src/TextStyle.h; sourceTree = "<group>"; };
-		049B56501871F21E00EF3C66 /* Tweener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tweener.cpp; path = ../../../src/Tweener.cpp; sourceTree = "<group>"; };
 		049B56511871F21E00EF3C66 /* Tweener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tweener.h; path = ../../../src/Tweener.h; sourceTree = "<group>"; };
 		049B56511871F21E00EF3C66 /* Tweener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tweener.h; path = ../../../src/Tweener.h; sourceTree = "<group>"; };
 		049B56521871F21E00EF3C66 /* UpdateState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UpdateState.h; path = ../../../src/UpdateState.h; sourceTree = "<group>"; };
 		049B56521871F21E00EF3C66 /* UpdateState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UpdateState.h; path = ../../../src/UpdateState.h; sourceTree = "<group>"; };
 		049B56541871F21E00EF3C66 /* .oxbuild */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .oxbuild; sourceTree = "<group>"; };
 		049B56541871F21E00EF3C66 /* .oxbuild */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .oxbuild; sourceTree = "<group>"; };
@@ -411,6 +411,13 @@
 		04B3A71E18A6594D004C67E3 /* InputText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InputText.h; path = ../../../src/InputText.h; sourceTree = "<group>"; };
 		04B3A71E18A6594D004C67E3 /* InputText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InputText.h; path = ../../../src/InputText.h; sourceTree = "<group>"; };
 		92214D5C19F149BC00A4459A /* Polygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Polygon.cpp; path = ../../../src/Polygon.cpp; sourceTree = "<group>"; };
 		92214D5C19F149BC00A4459A /* Polygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Polygon.cpp; path = ../../../src/Polygon.cpp; sourceTree = "<group>"; };
 		92214D5D19F149BC00A4459A /* Polygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Polygon.h; path = ../../../src/Polygon.h; sourceTree = "<group>"; };
 		92214D5D19F149BC00A4459A /* Polygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Polygon.h; path = ../../../src/Polygon.h; sourceTree = "<group>"; };
+		923663511A47561500EB65B3 /* Serializable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Serializable.cpp; path = ../../../src/Serializable.cpp; sourceTree = "<group>"; };
+		923663521A47561500EB65B3 /* Serializable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Serializable.h; path = ../../../src/Serializable.h; sourceTree = "<group>"; };
+		923663531A47561500EB65B3 /* TouchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchEvent.h; path = ../../../src/TouchEvent.h; sourceTree = "<group>"; };
+		923663541A47561500EB65B3 /* Tween.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tween.cpp; path = ../../../src/Tween.cpp; sourceTree = "<group>"; };
+		923663551A47561500EB65B3 /* Tween.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tween.h; path = ../../../src/Tween.h; sourceTree = "<group>"; };
+		923663561A47561500EB65B3 /* TweenQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TweenQueue.cpp; path = ../../../src/TweenQueue.cpp; sourceTree = "<group>"; };
+		923663571A47561500EB65B3 /* TweenQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TweenQueue.h; path = ../../../src/TweenQueue.h; sourceTree = "<group>"; };
 		923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STDRenderer.cpp; path = ../../../src/STDRenderer.cpp; sourceTree = "<group>"; };
 		923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STDRenderer.cpp; path = ../../../src/STDRenderer.cpp; sourceTree = "<group>"; };
 		923A9E8A1A1FCA3500A6F08E /* STDRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STDRenderer.h; path = ../../../src/STDRenderer.h; sourceTree = "<group>"; };
 		923A9E8A1A1FCA3500A6F08E /* STDRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STDRenderer.h; path = ../../../src/STDRenderer.h; sourceTree = "<group>"; };
 		923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaskedRenderer.cpp; path = ../../../src/MaskedRenderer.cpp; sourceTree = "<group>"; };
 		923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaskedRenderer.cpp; path = ../../../src/MaskedRenderer.cpp; sourceTree = "<group>"; };
@@ -447,6 +454,13 @@
 		049B55901871F21000EF3C66 /* src */ = {
 		049B55901871F21000EF3C66 /* src */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				923663511A47561500EB65B3 /* Serializable.cpp */,
+				923663521A47561500EB65B3 /* Serializable.h */,
+				923663531A47561500EB65B3 /* TouchEvent.h */,
+				923663541A47561500EB65B3 /* Tween.cpp */,
+				923663551A47561500EB65B3 /* Tween.h */,
+				923663561A47561500EB65B3 /* TweenQueue.cpp */,
+				923663571A47561500EB65B3 /* TweenQueue.h */,
 				923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */,
 				923A9E8D1A1FCA6600A6F08E /* MaskedRenderer.cpp */,
 				923A9E8E1A1FCA6600A6F08E /* MaskedRenderer.h */,
 				923A9E8E1A1FCA6600A6F08E /* MaskedRenderer.h */,
 				923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */,
 				923A9E891A1FCA3500A6F08E /* STDRenderer.cpp */,
@@ -517,7 +531,6 @@
 				049B56461871F21E00EF3C66 /* text_utils */,
 				049B56461871F21E00EF3C66 /* text_utils */,
 				049B564E1871F21E00EF3C66 /* TextActor.h */,
 				049B564E1871F21E00EF3C66 /* TextActor.h */,
 				049B564F1871F21E00EF3C66 /* TextStyle.h */,
 				049B564F1871F21E00EF3C66 /* TextStyle.h */,
-				049B56501871F21E00EF3C66 /* Tweener.cpp */,
 				049B56511871F21E00EF3C66 /* Tweener.h */,
 				049B56511871F21E00EF3C66 /* Tweener.h */,
 				049B56521871F21E00EF3C66 /* UpdateState.h */,
 				049B56521871F21E00EF3C66 /* UpdateState.h */,
 				049B56531871F21E00EF3C66 /* utils */,
 				049B56531871F21E00EF3C66 /* utils */,
@@ -541,7 +554,6 @@
 		049B55A41871F21D00EF3C66 /* core */ = {
 		049B55A41871F21D00EF3C66 /* core */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
-				049B55A51871F21D00EF3C66 /* .oxbuild */,
 				049B55A61871F21D00EF3C66 /* coroutines.cpp */,
 				049B55A61871F21D00EF3C66 /* coroutines.cpp */,
 				049B55A71871F21D00EF3C66 /* coroutines.h */,
 				049B55A71871F21D00EF3C66 /* coroutines.h */,
 				049B55A81871F21D00EF3C66 /* file.cpp */,
 				049B55A81871F21D00EF3C66 /* file.cpp */,
@@ -560,8 +572,6 @@
 				049B55C31871F21D00EF3C66 /* logging.h */,
 				049B55C31871F21D00EF3C66 /* logging.h */,
 				049B55C41871F21D00EF3C66 /* Mem2Native.cpp */,
 				049B55C41871F21D00EF3C66 /* Mem2Native.cpp */,
 				049B55C51871F21D00EF3C66 /* Mem2Native.h */,
 				049B55C51871F21D00EF3C66 /* Mem2Native.h */,
-				049B55C61871F21D00EF3C66 /* memory_pool.cpp */,
-				049B55C71871F21D00EF3C66 /* memory_pool.h */,
 				049B55C81871F21D00EF3C66 /* Mutex.cpp */,
 				049B55C81871F21D00EF3C66 /* Mutex.cpp */,
 				049B55C91871F21D00EF3C66 /* Mutex.h */,
 				049B55C91871F21D00EF3C66 /* Mutex.h */,
 				049B55CA1871F21D00EF3C66 /* NativeTexture.cpp */,
 				049B55CA1871F21D00EF3C66 /* NativeTexture.cpp */,
@@ -768,7 +778,6 @@
 				049B56CE1871F21E00EF3C66 /* EventDispatcher.h in Headers */,
 				049B56CE1871F21E00EF3C66 /* EventDispatcher.h in Headers */,
 				049B57241871F21E00EF3C66 /* winnie_alloc_config.h in Headers */,
 				049B57241871F21E00EF3C66 /* winnie_alloc_config.h in Headers */,
 				049B56D91871F21E00EF3C66 /* matrix.h in Headers */,
 				049B56D91871F21E00EF3C66 /* matrix.h in Headers */,
-				049B56971871F21E00EF3C66 /* memory_pool.h in Headers */,
 				049B567B1871F21E00EF3C66 /* files_io.h in Headers */,
 				049B567B1871F21E00EF3C66 /* files_io.h in Headers */,
 				049B56A11871F21E00EF3C66 /* pixel.h in Headers */,
 				049B56A11871F21E00EF3C66 /* pixel.h in Headers */,
 				049B57121871F21E00EF3C66 /* TextActor.h in Headers */,
 				049B57121871F21E00EF3C66 /* TextActor.h in Headers */,
@@ -781,7 +790,9 @@
 				049B56EC1871F21E00EF3C66 /* PointerState.h in Headers */,
 				049B56EC1871F21E00EF3C66 /* PointerState.h in Headers */,
 				923A9E8C1A1FCA3500A6F08E /* STDRenderer.h in Headers */,
 				923A9E8C1A1FCA3500A6F08E /* STDRenderer.h in Headers */,
 				049B57061871F21E00EF3C66 /* RootActor.h in Headers */,
 				049B57061871F21E00EF3C66 /* RootActor.h in Headers */,
+				9236635A1A47561500EB65B3 /* TouchEvent.h in Headers */,
 				049B56B71871F21E00EF3C66 /* VertexDeclaration.h in Headers */,
 				049B56B71871F21E00EF3C66 /* VertexDeclaration.h in Headers */,
+				9236635C1A47561500EB65B3 /* Tween.h in Headers */,
 				049B56B11871F21E00EF3C66 /* Texture.h in Headers */,
 				049B56B11871F21E00EF3C66 /* Texture.h in Headers */,
 				049B56991871F21E00EF3C66 /* Mutex.h in Headers */,
 				049B56991871F21E00EF3C66 /* Mutex.h in Headers */,
 				049B57131871F21E00EF3C66 /* TextStyle.h in Headers */,
 				049B57131871F21E00EF3C66 /* TextStyle.h in Headers */,
@@ -847,6 +858,7 @@
 				049B56EA1871F21E00EF3C66 /* oxygine-framework.h in Headers */,
 				049B56EA1871F21E00EF3C66 /* oxygine-framework.h in Headers */,
 				049B571F1871F21E00EF3C66 /* VisualStyle.h in Headers */,
 				049B571F1871F21E00EF3C66 /* VisualStyle.h in Headers */,
 				049B566A1871F21E00EF3C66 /* blocking.h in Headers */,
 				049B566A1871F21E00EF3C66 /* blocking.h in Headers */,
+				923663591A47561500EB65B3 /* Serializable.h in Headers */,
 				049B56741871F21E00EF3C66 /* closure_impl.h in Headers */,
 				049B56741871F21E00EF3C66 /* closure_impl.h in Headers */,
 				049B56931871F21E00EF3C66 /* logging.h in Headers */,
 				049B56931871F21E00EF3C66 /* logging.h in Headers */,
 				049B56E81871F21E00EF3C66 /* Multithreading.h in Headers */,
 				049B56E81871F21E00EF3C66 /* Multithreading.h in Headers */,
@@ -869,6 +881,7 @@
 				049B56DA1871F21E00EF3C66 /* Rect.h in Headers */,
 				049B56DA1871F21E00EF3C66 /* Rect.h in Headers */,
 				049B56D81871F21E00EF3C66 /* Color.h in Headers */,
 				049B56D81871F21E00EF3C66 /* Color.h in Headers */,
 				049B56DD1871F21E00EF3C66 /* vector3.h in Headers */,
 				049B56DD1871F21E00EF3C66 /* vector3.h in Headers */,
+				9236635E1A47561500EB65B3 /* TweenQueue.h in Headers */,
 				049B567D1871F21E00EF3C66 /* FileSystem.h in Headers */,
 				049B567D1871F21E00EF3C66 /* FileSystem.h in Headers */,
 				049B56EF1871F21E00EF3C66 /* pugiconfig.hpp in Headers */,
 				049B56EF1871F21E00EF3C66 /* pugiconfig.hpp in Headers */,
 				049B56F41871F21E00EF3C66 /* CreateResourceContext.h in Headers */,
 				049B56F41871F21E00EF3C66 /* CreateResourceContext.h in Headers */,
@@ -938,7 +951,6 @@
 				049B56E71871F21E00EF3C66 /* Multithreading.cpp in Sources */,
 				049B56E71871F21E00EF3C66 /* Multithreading.cpp in Sources */,
 				049B570B1871F21E00EF3C66 /* Aligner.cpp in Sources */,
 				049B570B1871F21E00EF3C66 /* Aligner.cpp in Sources */,
 				049B570D1871F21E00EF3C66 /* Node.cpp in Sources */,
 				049B570D1871F21E00EF3C66 /* Node.cpp in Sources */,
-				049B56961871F21E00EF3C66 /* memory_pool.cpp in Sources */,
 				049B57031871F21E00EF3C66 /* ResStarlingAtlas.cpp in Sources */,
 				049B57031871F21E00EF3C66 /* ResStarlingAtlas.cpp in Sources */,
 				049B568C1871F21E00EF3C66 /* ImageData.cpp in Sources */,
 				049B568C1871F21E00EF3C66 /* ImageData.cpp in Sources */,
 				049B56751871F21E00EF3C66 /* ColorRectSprite.cpp in Sources */,
 				049B56751871F21E00EF3C66 /* ColorRectSprite.cpp in Sources */,
@@ -954,6 +966,7 @@
 				049B56D21871F21E00EF3C66 /* Input.cpp in Sources */,
 				049B56D21871F21E00EF3C66 /* Input.cpp in Sources */,
 				049B56B01871F21E00EF3C66 /* Texture.cpp in Sources */,
 				049B56B01871F21E00EF3C66 /* Texture.cpp in Sources */,
 				049B56C61871F21E00EF3C66 /* TreeInspectorPage.cpp in Sources */,
 				049B56C61871F21E00EF3C66 /* TreeInspectorPage.cpp in Sources */,
+				923663581A47561500EB65B3 /* Serializable.cpp in Sources */,
 				049B56801871F21E00EF3C66 /* oxgl.cpp in Sources */,
 				049B56801871F21E00EF3C66 /* oxgl.cpp in Sources */,
 				049B566F1871F21E00EF3C66 /* ClipRectActor.cpp in Sources */,
 				049B566F1871F21E00EF3C66 /* ClipRectActor.cpp in Sources */,
 				049B57201871F21E00EF3C66 /* system_alloc.cpp in Sources */,
 				049B57201871F21E00EF3C66 /* system_alloc.cpp in Sources */,
@@ -973,7 +986,6 @@
 				049B56671871F21E00EF3C66 /* AnimationFrame.cpp in Sources */,
 				049B56671871F21E00EF3C66 /* AnimationFrame.cpp in Sources */,
 				049B57221871F21E00EF3C66 /* winnie_alloc.cpp in Sources */,
 				049B57221871F21E00EF3C66 /* winnie_alloc.cpp in Sources */,
 				049B56E11871F21E00EF3C66 /* ioapi.c in Sources */,
 				049B56E11871F21E00EF3C66 /* ioapi.c in Sources */,
-				049B57141871F21E00EF3C66 /* Tweener.cpp in Sources */,
 				049B56911871F21E00EF3C66 /* log.cpp in Sources */,
 				049B56911871F21E00EF3C66 /* log.cpp in Sources */,
 				049B56BA1871F21E00EF3C66 /* ZipFileSystem.cpp in Sources */,
 				049B56BA1871F21E00EF3C66 /* ZipFileSystem.cpp in Sources */,
 				049B56B21871F21E00EF3C66 /* ThreadMessages.cpp in Sources */,
 				049B56B21871F21E00EF3C66 /* ThreadMessages.cpp in Sources */,
@@ -986,6 +998,8 @@
 				049B567C1871F21E00EF3C66 /* FileSystem.cpp in Sources */,
 				049B567C1871F21E00EF3C66 /* FileSystem.cpp in Sources */,
 				049B571E1871F21E00EF3C66 /* VisualStyle.cpp in Sources */,
 				049B571E1871F21E00EF3C66 /* VisualStyle.cpp in Sources */,
 				049B57071871F21E00EF3C66 /* SlidingActor.cpp in Sources */,
 				049B57071871F21E00EF3C66 /* SlidingActor.cpp in Sources */,
+				9236635B1A47561500EB65B3 /* Tween.cpp in Sources */,
+				9236635D1A47561500EB65B3 /* TweenQueue.cpp in Sources */,
 				049B56E31871F21E00EF3C66 /* ioapi_mem.c in Sources */,
 				049B56E31871F21E00EF3C66 /* ioapi_mem.c in Sources */,
 				049B56C81871F21E00EF3C66 /* TreeInspectorPreview.cpp in Sources */,
 				049B56C81871F21E00EF3C66 /* TreeInspectorPreview.cpp in Sources */,
 				049B569F1871F21E00EF3C66 /* oxygine.cpp in Sources */,
 				049B569F1871F21E00EF3C66 /* oxygine.cpp in Sources */,

+ 9 - 3
oxygine/SDL/win32/oxygine_vs2013.vcxproj

@@ -115,7 +115,6 @@
     <ClCompile Include="..\..\src\core\ImageDataOperations.cpp" />
     <ClCompile Include="..\..\src\core\ImageDataOperations.cpp" />
     <ClCompile Include="..\..\src\core\log.cpp" />
     <ClCompile Include="..\..\src\core\log.cpp" />
     <ClCompile Include="..\..\src\core\Mem2Native.cpp" />
     <ClCompile Include="..\..\src\core\Mem2Native.cpp" />
-    <ClCompile Include="..\..\src\core\memory_pool.cpp" />
     <ClCompile Include="..\..\src\core\Mutex.cpp" />
     <ClCompile Include="..\..\src\core\Mutex.cpp" />
     <ClCompile Include="..\..\src\core\NativeTexture.cpp" />
     <ClCompile Include="..\..\src\core\NativeTexture.cpp" />
     <ClCompile Include="..\..\src\core\Object.cpp" />
     <ClCompile Include="..\..\src\core\Object.cpp" />
@@ -160,6 +159,7 @@
     <ClCompile Include="..\..\src\res\Resource.cpp" />
     <ClCompile Include="..\..\src\res\Resource.cpp" />
     <ClCompile Include="..\..\src\res\Resources.cpp" />
     <ClCompile Include="..\..\src\res\Resources.cpp" />
     <ClCompile Include="..\..\src\res\ResStarlingAtlas.cpp" />
     <ClCompile Include="..\..\src\res\ResStarlingAtlas.cpp" />
+    <ClCompile Include="..\..\src\Serializable.cpp" />
     <ClCompile Include="..\..\src\Stage.cpp" />
     <ClCompile Include="..\..\src\Stage.cpp" />
     <ClCompile Include="..\..\src\Serialize.cpp" />
     <ClCompile Include="..\..\src\Serialize.cpp" />
     <ClCompile Include="..\..\src\SlidingActor.cpp" />
     <ClCompile Include="..\..\src\SlidingActor.cpp" />
@@ -169,7 +169,8 @@
     <ClCompile Include="..\..\src\text_utils\Aligner.cpp" />
     <ClCompile Include="..\..\src\text_utils\Aligner.cpp" />
     <ClCompile Include="..\..\src\text_utils\Node.cpp" />
     <ClCompile Include="..\..\src\text_utils\Node.cpp" />
     <ClCompile Include="..\..\src\text_utils\TextBuilder.cpp" />
     <ClCompile Include="..\..\src\text_utils\TextBuilder.cpp" />
-    <ClCompile Include="..\..\src\Tweener.cpp" />
+    <ClCompile Include="..\..\src\Tween.cpp" />
+    <ClCompile Include="..\..\src\TweenQueue.cpp" />
     <ClCompile Include="..\..\src\utils\stringUtils.cpp" />
     <ClCompile Include="..\..\src\utils\stringUtils.cpp" />
     <ClCompile Include="..\..\src\math\AffineTransform.cpp" />
     <ClCompile Include="..\..\src\math\AffineTransform.cpp" />
     <ClCompile Include="..\..\src\pugixml\pugixml.cpp" />
     <ClCompile Include="..\..\src\pugixml\pugixml.cpp" />
@@ -205,7 +206,6 @@
     <ClInclude Include="..\..\src\core\log.h" />
     <ClInclude Include="..\..\src\core\log.h" />
     <ClInclude Include="..\..\src\core\logging.h" />
     <ClInclude Include="..\..\src\core\logging.h" />
     <ClInclude Include="..\..\src\core\Mem2Native.h" />
     <ClInclude Include="..\..\src\core\Mem2Native.h" />
-    <ClInclude Include="..\..\src\core\memory_pool.h" />
     <ClInclude Include="..\..\src\core\Mutex.h" />
     <ClInclude Include="..\..\src\core\Mutex.h" />
     <ClInclude Include="..\..\src\core\NativeTexture.h" />
     <ClInclude Include="..\..\src\core\NativeTexture.h" />
     <ClInclude Include="..\..\src\core\Object.h" />
     <ClInclude Include="..\..\src\core\Object.h" />
@@ -239,6 +239,7 @@
     <ClInclude Include="..\..\src\InitActor.h" />
     <ClInclude Include="..\..\src\InitActor.h" />
     <ClInclude Include="..\..\src\Input.h" />
     <ClInclude Include="..\..\src\Input.h" />
     <ClInclude Include="..\..\src\InputText.h" />
     <ClInclude Include="..\..\src\InputText.h" />
+    <ClInclude Include="..\..\src\KeyEvent.h" />
     <ClInclude Include="..\..\src\MaskedRenderer.h" />
     <ClInclude Include="..\..\src\MaskedRenderer.h" />
     <ClInclude Include="..\..\src\MaskedSprite.h" />
     <ClInclude Include="..\..\src\MaskedSprite.h" />
     <ClInclude Include="..\..\src\MemoryTexture.h" />
     <ClInclude Include="..\..\src\MemoryTexture.h" />
@@ -250,6 +251,7 @@
     <ClInclude Include="..\..\src\PointerState.h" />
     <ClInclude Include="..\..\src\PointerState.h" />
     <ClInclude Include="..\..\src\Polygon.h" />
     <ClInclude Include="..\..\src\Polygon.h" />
     <ClInclude Include="..\..\src\ProgressBar.h" />
     <ClInclude Include="..\..\src\ProgressBar.h" />
+    <ClInclude Include="..\..\src\Property.h" />
     <ClInclude Include="..\..\src\RenderState.h" />
     <ClInclude Include="..\..\src\RenderState.h" />
     <ClInclude Include="..\..\src\res\CreateResourceContext.h" />
     <ClInclude Include="..\..\src\res\CreateResourceContext.h" />
     <ClInclude Include="..\..\src\res\ResAnim.h" />
     <ClInclude Include="..\..\src\res\ResAnim.h" />
@@ -260,6 +262,7 @@
     <ClInclude Include="..\..\src\res\Resource.h" />
     <ClInclude Include="..\..\src\res\Resource.h" />
     <ClInclude Include="..\..\src\res\Resources.h" />
     <ClInclude Include="..\..\src\res\Resources.h" />
     <ClInclude Include="..\..\src\res\ResStarlingAtlas.h" />
     <ClInclude Include="..\..\src\res\ResStarlingAtlas.h" />
+    <ClInclude Include="..\..\src\Serializable.h" />
     <ClInclude Include="..\..\src\Stage.h" />
     <ClInclude Include="..\..\src\Stage.h" />
     <ClInclude Include="..\..\src\Serialize.h" />
     <ClInclude Include="..\..\src\Serialize.h" />
     <ClInclude Include="..\..\src\SlidingActor.h" />
     <ClInclude Include="..\..\src\SlidingActor.h" />
@@ -271,7 +274,10 @@
     <ClInclude Include="..\..\src\text_utils\Aligner.h" />
     <ClInclude Include="..\..\src\text_utils\Aligner.h" />
     <ClInclude Include="..\..\src\text_utils\Node.h" />
     <ClInclude Include="..\..\src\text_utils\Node.h" />
     <ClInclude Include="..\..\src\text_utils\TextBuilder.h" />
     <ClInclude Include="..\..\src\text_utils\TextBuilder.h" />
+    <ClInclude Include="..\..\src\TouchEvent.h" />
+    <ClInclude Include="..\..\src\Tween.h" />
     <ClInclude Include="..\..\src\Tweener.h" />
     <ClInclude Include="..\..\src\Tweener.h" />
+    <ClInclude Include="..\..\src\TweenQueue.h" />
     <ClInclude Include="..\..\src\UpdateState.h" />
     <ClInclude Include="..\..\src\UpdateState.h" />
     <ClInclude Include="..\..\src\utils\stringUtils.h" />
     <ClInclude Include="..\..\src\utils\stringUtils.h" />
     <ClInclude Include="..\..\src\closure\closure.h" />
     <ClInclude Include="..\..\src\closure\closure.h" />

+ 33 - 11
oxygine/SDL/win32/oxygine_vs2013.vcxproj.filters

@@ -156,9 +156,6 @@
     <ClCompile Include="..\..\src\core\Mem2Native.cpp">
     <ClCompile Include="..\..\src\core\Mem2Native.cpp">
       <Filter>src\core</Filter>
       <Filter>src\core</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\memory_pool.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\core\Mutex.cpp">
     <ClCompile Include="..\..\src\core\Mutex.cpp">
       <Filter>src\core</Filter>
       <Filter>src\core</Filter>
     </ClCompile>
     </ClCompile>
@@ -258,9 +255,6 @@
     <ClCompile Include="..\..\src\Sprite.cpp">
     <ClCompile Include="..\..\src\Sprite.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\src\Tweener.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\VisualStyle.cpp">
     <ClCompile Include="..\..\src\VisualStyle.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
@@ -282,7 +276,6 @@
     <ClCompile Include="..\..\src\InputText.cpp">
     <ClCompile Include="..\..\src\InputText.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\src\Serialize.cpp" />
     <ClCompile Include="..\..\src\TextField.cpp">
     <ClCompile Include="..\..\src\TextField.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
@@ -298,6 +291,18 @@
     <ClCompile Include="..\..\src\MaskedRenderer.cpp">
     <ClCompile Include="..\..\src\MaskedRenderer.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\src\TweenQueue.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\Tween.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\Serializable.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\Serialize.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\closure\closure.h">
     <ClInclude Include="..\..\src\closure\closure.h">
@@ -462,9 +467,6 @@
     <ClInclude Include="..\..\src\core\Mem2Native.h">
     <ClInclude Include="..\..\src\core\Mem2Native.h">
       <Filter>src\core</Filter>
       <Filter>src\core</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\src\core\memory_pool.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\src\core\Mutex.h">
     <ClInclude Include="..\..\src\core\Mutex.h">
       <Filter>src\core</Filter>
       <Filter>src\core</Filter>
     </ClInclude>
     </ClInclude>
@@ -624,7 +626,6 @@
     <ClInclude Include="..\..\src\InputText.h">
     <ClInclude Include="..\..\src\InputText.h">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\src\Serialize.h" />
     <ClInclude Include="..\..\src\TextField.h">
     <ClInclude Include="..\..\src\TextField.h">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClInclude>
     </ClInclude>
@@ -640,6 +641,27 @@
     <ClInclude Include="..\..\src\STDRenderer.h">
     <ClInclude Include="..\..\src\STDRenderer.h">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\src\TweenQueue.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\Tween.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\Serializable.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\Serialize.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\TouchEvent.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\KeyEvent.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\Property.h">
+      <Filter>src</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <None Include="ReadMe.txt" />
     <None Include="ReadMe.txt" />

+ 26 - 26
oxygine/src/Actor.cpp

@@ -4,7 +4,7 @@
 #include "res/ResAnim.h"
 #include "res/ResAnim.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "Clock.h"
 #include "Clock.h"
-#include "Tweener.h"
+#include "Tween.h"
 #include "math/AffineTransform.h"
 #include "math/AffineTransform.h"
 #include <sstream>
 #include <sstream>
 #include <typeinfo>
 #include <typeinfo>
@@ -19,10 +19,12 @@
 
 
 namespace oxygine
 namespace oxygine
 {
 {
-	string div(const string &val, const Color &color)
+	CREATE_COPYCLONE_NEW(Actor);
+
+	std::string div(const std::string &val, const Color &color)
 	{
 	{
 		char str[255];
 		char str[255];
-		sprintf(str, "<div c='%s'>%s</div>", color2hex(color).c_str(), val.c_str());
+		safe_sprintf(str, "<div c='%s'>%s</div>", color2hex(color).c_str(), val.c_str());
 		return str;
 		return str;
 	}
 	}
 
 
@@ -38,7 +40,7 @@ namespace oxygine
 			_parent(0),
 			_parent(0),
 			_alpha(255),
 			_alpha(255),
 			_pressed(0),
 			_pressed(0),
-			_overed(0)
+			_overred(0)
 	{
 	{
 		_transform.identity();
 		_transform.identity();
 		_transformInvert.identity();
 		_transformInvert.identity();
@@ -59,7 +61,7 @@ namespace oxygine
 		_flags = src._flags;
 		_flags = src._flags;
 		_parent = 0;
 		_parent = 0;
 		_alpha = src._alpha;
 		_alpha = src._alpha;
-		_overed = 0;
+		_overred = 0;
 		_pressed = 0;
 		_pressed = 0;
 
 
 		_transform = src._transform;
 		_transform = src._transform;
@@ -101,7 +103,7 @@ namespace oxygine
 
 
 	std::string Actor::dump(const dumpOptions &opt) const
 	std::string Actor::dump(const dumpOptions &opt) const
 	{
 	{
-		stringstream stream;
+		std::stringstream stream;
 		stream << "{" << typeid(*this).name() << "}";
 		stream << "{" << typeid(*this).name() << "}";
 		//stream << this;
 		//stream << this;
 
 
@@ -200,7 +202,7 @@ namespace oxygine
 
 
 	pointer_index Actor::getOvered() const
 	pointer_index Actor::getOvered() const
 	{
 	{
-		return _overed;
+		return _overred;
 	}
 	}
 
 
 	void Actor::setPressed(pointer_index v)
 	void Actor::setPressed(pointer_index v)
@@ -225,13 +227,13 @@ namespace oxygine
 			updateState();
 			updateState();
 	}
 	}
 
 
-	void Actor::setOvered(pointer_index v)
+	void Actor::setOverred(pointer_index v)
 	{
 	{
-		if (_overed == v)
+		if (_overred == v)
 			return;
 			return;
 
 
-		pointer_index old = _overed;
-		_overed = v;
+		pointer_index old = _overred;
+		_overred = v;
 		
 		
 		if (v)
 		if (v)
 		{
 		{
@@ -300,9 +302,9 @@ namespace oxygine
 			{
 			{
 				if (isDescendant(act))
 				if (isDescendant(act))
 				{					
 				{					
-					if (!_overed)
+					if (!_overred)
 					{
 					{
-						setOvered(me->index);
+						setOverred(me->index);
 
 
 						if (event->phase == Event::phase_target)
 						if (event->phase == Event::phase_target)
 							getStage()->addEventListener(TouchEvent::MOVE, CLOSURE(this, &Actor::_onMouseEvent));
 							getStage()->addEventListener(TouchEvent::MOVE, CLOSURE(this, &Actor::_onMouseEvent));
@@ -310,8 +312,8 @@ namespace oxygine
 				}
 				}
 				else
 				else
 				{
 				{
-					if (_overed == me->index)
-						setOvered(0);
+					if (_overred == me->index)
+						setOverred(0);
 				}				
 				}				
 			}
 			}
 			break;
 			break;
@@ -336,9 +338,7 @@ namespace oxygine
 
 
 			if (_parent)
 			if (_parent)
 			{
 			{
-				bool touchEvent = (event->type > (int)_et_TouchFirst) && (event->type < (int)_et_TouchLast);
-
-				if(touchEvent)
+				if (TouchEvent::isTouchEvent(event->type))
 				{	
 				{	
 					TouchEvent *me = safeCast<TouchEvent *>(event);
 					TouchEvent *me = safeCast<TouchEvent *>(event);
 					me->localPosition = local2global(me->localPosition);
 					me->localPosition = local2global(me->localPosition);
@@ -355,8 +355,8 @@ namespace oxygine
 
 
 	void Actor::handleEvent(Event *event)
 	void Actor::handleEvent(Event *event)
 	{
 	{
-		bool touchEvent = (event->type > (int)_et_TouchFirst) && (event->type < (int)_et_TouchLast);
-		if (touchEvent)
+		bool touchEvent = TouchEvent::isTouchEvent(event->type);
+		if (TouchEvent::isTouchEvent(event->type))
 		{
 		{
 			if (!(_flags & flag_visible) || getAlpha() == 0)
 			if (!(_flags & flag_visible) || getAlpha() == 0)
 			{
 			{
@@ -366,7 +366,7 @@ namespace oxygine
 		
 		
 		Vector2 originalLocalPos(0, 0);
 		Vector2 originalLocalPos(0, 0);
 
 
-		if(touchEvent)
+		if (touchEvent)
 		{				
 		{				
 			TouchEvent *me = safeCast<TouchEvent *>(event);
 			TouchEvent *me = safeCast<TouchEvent *>(event);
 			originalLocalPos = me->localPosition;
 			originalLocalPos = me->localPosition;
@@ -672,7 +672,7 @@ namespace oxygine
 		return false;
 		return false;
 	}
 	}
 
 
-	Actor* Actor::getDescendant(const string &name, error_policy ep)
+	Actor* Actor::getDescendant(const std::string &name, error_policy ep)
 	{
 	{
 		if (isName(name.c_str()))
 		if (isName(name.c_str()))
 			return this;
 			return this;
@@ -685,7 +685,7 @@ namespace oxygine
 		return actor;
 		return actor;
 	}
 	}
 
 
-	Actor* Actor::_getDescendant(const string &name)
+	Actor* Actor::_getDescendant(const std::string &name)
 	{
 	{
 		Actor *child = _children._first.get();
 		Actor *child = _children._first.get();
 		while (child)
 		while (child)
@@ -709,7 +709,7 @@ namespace oxygine
 		return 0;
 		return 0;
 	}
 	}
 
 
-	spActor	 Actor::getChild(const string &name, error_policy ep) const 
+	spActor	 Actor::getChild(const std::string &name, error_policy ep) const
 	{
 	{
 		spActor actor = _children._first;
 		spActor actor = _children._first;
 		while (actor)
 		while (actor)
@@ -1064,7 +1064,7 @@ namespace oxygine
 		return _addTween(tween, false);
 		return _addTween(tween, false);
 	}	
 	}	
 
 
-	spTween Actor::getTween(const string &name, error_policy ep)
+	spTween Actor::getTween(const std::string &name, error_policy ep)
 	{
 	{
 		spTween tween = _tweens._first;
 		spTween tween = _tweens._first;
 		while (tween)
 		while (tween)
@@ -1106,7 +1106,7 @@ namespace oxygine
 		}
 		}
 	}
 	}
 
 
-	void Actor::removeTweensByName(const string &name)
+	void Actor::removeTweensByName(const std::string &name)
 	{
 	{
 		spTween t = _tweens._first;
 		spTween t = _tweens._first;
 		while (t)
 		while (t)

+ 72 - 113
oxygine/src/Actor.h

@@ -1,26 +1,21 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
-#include "core/oxygine.h"
-#include "EventDispatcher.h"
 #include "core/Object.h"
 #include "core/Object.h"
-#include "math/Color.h"
-#include "Clock.h"
+#include "core/Renderer.h"
 #include "math/Rect.h"
 #include "math/Rect.h"
-#include "Tweener.h"
-
-#include <vector>
-#include <list>
 #include "math/AffineTransform.h"
 #include "math/AffineTransform.h"
-#include "core/Renderer.h"
 #include "utils/intrusive_list.h"
 #include "utils/intrusive_list.h"
-#include "Tweener.h"
-#include "Event.h"
+#include "Serializable.h"
+#include "EventDispatcher.h"
+#include "TouchEvent.h"
+#include "Tween.h"
+
+
 
 
 namespace oxygine
 namespace oxygine
 {
 {
-	class Renderer;
-	class Color;
 	class Event;
 	class Event;
+	typedef char pointer_index;
 
 
 	typedef unsigned int dumpOptions;
 	typedef unsigned int dumpOptions;
 
 
@@ -32,20 +27,6 @@ namespace oxygine
 	DECLARE_SMART(Actor, spActor);
 	DECLARE_SMART(Actor, spActor);
 	DECLARE_SMART(Clock, spClock);
 	DECLARE_SMART(Clock, spClock);
 
 
-	typedef std::vector<spActor> actors;
-
-	
-	/*
-	template<class T>
-	T *create(T *item, const Vector2 *pos, const char *name)
-	{
-		if (pos)
-			item->setPosition(pos);
-		if (name)
-			item->setName(name);
-		return item;
-	}
-	*/
 
 
 	typedef Closure<void (const UpdateState &us)> UpdateCallback;
 	typedef Closure<void (const UpdateState &us)> UpdateCallback;
 	typedef Closure<void (const RenderState &rs)> RenderCallback;
 	typedef Closure<void (const RenderState &rs)> RenderCallback;
@@ -64,26 +45,19 @@ namespace oxygine
 	virtual type* clone(cloneOptions opt=0) const {type *tp = new type(); tp->copyFrom(*this, opt); return tp;}\
 	virtual type* clone(cloneOptions opt=0) const {type *tp = new type(); tp->copyFrom(*this, opt); return tp;}\
 	virtual void copyFrom(const type &src, cloneOptions opt = 0);
 	virtual void copyFrom(const type &src, cloneOptions opt = 0);
 
 
+#define DECLARE_COPYCLONE_NEW2(type)  type(const type &src, cloneOptions opt = 0);\
+	virtual type* clone(cloneOptions opt=0) const;\
+	virtual void copyFrom(const type &src, cloneOptions opt = 0);
 
 
-
-
-	struct serializedata;
-	struct deserializedata;
-
-
-	class Serializable
-	{
-	public:
-		virtual void serialize(serializedata*){}
-		virtual void deserialize(const deserializedata*){}
-	};
+#define CREATE_COPYCLONE_NEW(type) type::type(const type &src, cloneOptions opt){copyFrom(src, opt);}\
+	type* type::clone(cloneOptions opt) const {type *tp = new type(); tp->copyFrom(*this, opt); return tp;}
 	
 	
 
 
 	class Actor : public EventDispatcher, public intrusive_list_item<spActor>, public Serializable
 	class Actor : public EventDispatcher, public intrusive_list_item<spActor>, public Serializable
 	{
 	{
 		typedef intrusive_list_item<spActor> intr_list;
 		typedef intrusive_list_item<spActor> intr_list;
 	public:
 	public:
-		DECLARE_COPYCLONE_NEW(Actor);
+		DECLARE_COPYCLONE_NEW2(Actor);
 
 
 		Actor();
 		Actor();
 		virtual ~Actor();
 		virtual ~Actor();
@@ -99,18 +73,18 @@ namespace oxygine
 
 
 		
 		
 		/**search child by name recursively, could return self*/
 		/**search child by name recursively, could return self*/
-		Actor*				getDescendant(const string &name, error_policy ep = ep_show_error);
+		Actor*				getDescendant(const std::string &name, error_policy ep = ep_show_error);
 		/**search child by name recursively and cast it to other class*/
 		/**search child by name recursively and cast it to other class*/
 		template<class T>
 		template<class T>
-		T*					getDescendantT(const string &name, error_policy ep = ep_show_error) {return safeCast<T*> (getDescendant(name, ep));}
+		T*					getDescendantT(const std::string &name, error_policy ep = ep_show_error) { return safeCast<T*>(getDescendant(name, ep)); }
 		/**search child by name*/
 		/**search child by name*/
-		spActor				getChild(const string &name, error_policy ep = ep_show_error) const;
+		spActor				getChild(const std::string &name, error_policy ep = ep_show_error) const;
 		/**search child by name and cast it to other class*/
 		/**search child by name and cast it to other class*/
 		template<class T>
 		template<class T>
-		T*					getChildT(const string &name, error_policy ep = ep_show_error) const {return safeCast<T*> (getChild(name, ep).get());}
+		T*					getChildT(const std::string &name, error_policy ep = ep_show_error) const { return safeCast<T*>(getChild(name, ep).get()); }
 
 
 		/**search tween by name*/
 		/**search tween by name*/
-		spTween				getTween(const string &name, error_policy ep = ep_show_error);
+		spTween				getTween(const std::string &name, error_policy ep = ep_show_error);
 		/**returns first tween in actor*/
 		/**returns first tween in actor*/
 		spTween				getFirstTween() const {return _tweens._first;}
 		spTween				getFirstTween() const {return _tweens._first;}
 		/**returns last tween in actor*/
 		/**returns last tween in actor*/
@@ -136,6 +110,10 @@ namespace oxygine
 		unsigned char		getAlpha() const {return _alpha;}
 		unsigned char		getAlpha() const {return _alpha;}
 		const spClock&		getClock() const;
 		const spClock&		getClock() const;
 		virtual RectF		getDestRect() const;
 		virtual RectF		getDestRect() const;
+		/**returns touch id if actor is pressed down*/
+		pointer_index		getPressed() const;
+		/**returns touch id if actor is moused overed*/
+		pointer_index		getOvered() const;
 		bool				getInputEnabled() const {return (_flags & flag_touchEnabled) != 0;}
 		bool				getInputEnabled() const {return (_flags & flag_touchEnabled) != 0;}
 		bool				getInputChildrenEnabled() const {return (_flags & flag_touchChildrenEnabled) != 0;}
 		bool				getInputChildrenEnabled() const {return (_flags & flag_touchChildrenEnabled) != 0;}
 		bool				getChildrenRelative() const {return (_flags & flag_childrenRelative) != 0;;}
 		bool				getChildrenRelative() const {return (_flags & flag_childrenRelative) != 0;;}
@@ -197,9 +175,9 @@ namespace oxygine
 		/**Enables/Disables Touch events for children of Actor.*/
 		/**Enables/Disables Touch events for children of Actor.*/
 		void setTouchChildrenEnabled(bool enabled) { _flags &= ~flag_touchChildrenEnabled; if (enabled) _flags |= flag_touchChildrenEnabled; }
 		void setTouchChildrenEnabled(bool enabled) { _flags &= ~flag_touchChildrenEnabled; if (enabled) _flags |= flag_touchChildrenEnabled; }
 
 
-		/**Sets callback which would be called each Actor::update cycle before doUpdate. Use it if you don't want inherit from Actor and overload Actor::doUpdate.*/
-		/**Sets callback which would be called each Actor::render cycle before doRender. Use it if you don't want inherit from Actor and overload Actor::doRender.*/
+		/**Sets callback which would be called each Actor::update cycle before doUpdate. Use it if you don't want inherit from Actor and overload Actor::doUpdate.*/		
 		void setCallbackDoUpdate(UpdateCallback cb){_cbDoUpdate = cb;}
 		void setCallbackDoUpdate(UpdateCallback cb){_cbDoUpdate = cb;}
+		/**Sets callback which would be called each Actor::render cycle before doRender. Use it if you don't want inherit from Actor and overload Actor::doRender.*/
 		//void setCallbackDoRender(RenderCallback cb){_cbDoRender = cb;}
 		//void setCallbackDoRender(RenderCallback cb){_cbDoRender = cb;}
 
 
 		virtual bool isOn(const Vector2 &localPosition);
 		virtual bool isOn(const Vector2 &localPosition);
@@ -225,13 +203,7 @@ namespace oxygine
 
 
 		/**Dispatches an event into the event flow. The event target is the EventDispatcher object upon which the dispatchEvent() method is called.*/
 		/**Dispatches an event into the event flow. The event target is the EventDispatcher object upon which the dispatchEvent() method is called.*/
 		void dispatchEvent(Event *event);
 		void dispatchEvent(Event *event);
-
-
-		pointer_index getPressed() const;
-		pointer_index getOvered() const;
-		void setPressed(pointer_index v);
-		void setOvered(pointer_index v);
-
+		
 		virtual void updateState(){}
 		virtual void updateState(){}
 		
 		
 		spTween addTween(spTween);		
 		spTween addTween(spTween);		
@@ -241,7 +213,7 @@ namespace oxygine
 		{return addTween(createTween(gs, duration, loops, twoSides, delay, ease));}
 		{return addTween(createTween(gs, duration, loops, twoSides, delay, ease));}
 
 
 		void removeTween(spTween);
 		void removeTween(spTween);
-		void removeTweensByName(const string &name);
+		void removeTweensByName(const std::string &name);
 		/**remove all tweens and call completes them if callComplete == true*/
 		/**remove all tweens and call completes them if callComplete == true*/
 		void removeTweens(bool callComplete = false);
 		void removeTweens(bool callComplete = false);
 		
 		
@@ -251,47 +223,49 @@ namespace oxygine
 		virtual void render(const RenderState &rs);
 		virtual void render(const RenderState &rs);
 		virtual void handleEvent(Event *event);		
 		virtual void handleEvent(Event *event);		
 		virtual void doRender(const RenderState &rs){}
 		virtual void doRender(const RenderState &rs){}
-
-		/**Returns detailed actor information. Used for debug purposes. */
-		virtual std::string dump(const dumpOptions &opt) const;
-
-
+		
 		//converts global position (position in parent space) to local space
 		//converts global position (position in parent space) to local space
 		Vector2 global2local(const Vector2 &pos) const;
 		Vector2 global2local(const Vector2 &pos) const;
 		//converts local position to parent space
 		//converts local position to parent space
 		Vector2 local2global(const Vector2 &pos) const;
 		Vector2 local2global(const Vector2 &pos) const;
 
 
 				
 				
-		typedef GetSet2Args<float, Vector2, const Vector2 &, Actor, &Actor::getPosition, &Actor::setPosition>	TweenPosition;
-		typedef GetSet<float, float, Actor, &Actor::getX, &Actor::setX>											TweenX;
-		typedef GetSet<float, float, Actor, &Actor::getY, &Actor::setY>											TweenY;
-		typedef GetSet<float, float, Actor, &Actor::getWidth, &Actor::setWidth>									TweenWidth;
-		typedef GetSet<float, float, Actor, &Actor::getHeight, &Actor::setHeight>								TweenHeight;
-		typedef GetSet<float, float, Actor, &Actor::getRotation, &Actor::setRotation>							TweenRotation;
-		typedef GetSet<float, float, Actor, &Actor::getRotationDegrees, &Actor::setRotationDegrees>				TweenRotationDegrees;
-		typedef GetSet2Args1Arg<float, Vector2, const Vector2 &, Actor, &Actor::getScale, &Actor::setScale>		TweenScale;
-		typedef GetSet<float, float, Actor, &Actor::getScaleX, &Actor::setScaleX>								TweenScaleX;
-		typedef GetSet<float, float, Actor, &Actor::getScaleY, &Actor::setScaleY>								TweenScaleY;
-		typedef GetSet<unsigned char, unsigned char, Actor, &Actor::getAlpha, &Actor::setAlpha>					TweenAlpha;
+		typedef Property2Args<float, Vector2, const Vector2 &, Actor, &Actor::getPosition, &Actor::setPosition>	TweenPosition;
+		typedef Property<float, float, Actor, &Actor::getX, &Actor::setX>											TweenX;
+		typedef Property<float, float, Actor, &Actor::getY, &Actor::setY>											TweenY;
+		typedef Property<float, float, Actor, &Actor::getWidth, &Actor::setWidth>									TweenWidth;
+		typedef Property<float, float, Actor, &Actor::getHeight, &Actor::setHeight>								TweenHeight;
+		typedef Property<float, float, Actor, &Actor::getRotation, &Actor::setRotation>							TweenRotation;
+		typedef Property<float, float, Actor, &Actor::getRotationDegrees, &Actor::setRotationDegrees>				TweenRotationDegrees;
+		typedef Property2Args1Arg<float, Vector2, const Vector2 &, Actor, &Actor::getScale, &Actor::setScale>		TweenScale;
+		typedef Property<float, float, Actor, &Actor::getScaleX, &Actor::setScaleX>								TweenScaleX;
+		typedef Property<float, float, Actor, &Actor::getScaleY, &Actor::setScaleY>								TweenScaleY;
+		typedef Property<unsigned char, unsigned char, Actor, &Actor::getAlpha, &Actor::setAlpha>					TweenAlpha;
 		
 		
 
 
 		void serialize(serializedata* data);
 		void serialize(serializedata* data);
 		void deserialize(const deserializedata* data);
 		void deserialize(const deserializedata* data);
 
 
-	protected:
-		void _setSize(const Vector2 &);
-		
-
-		Actor*	_getDescendant(const string &name);
-		spTween _addTween(spTween tween, bool rel);
+		/**Returns detailed actor information. Used for debug purposes. */
+		virtual std::string dump(const dumpOptions &opt) const;
 
 
 		
 		
-		/**doUpdate is virtual method for overloading in inherited classes. UpdateState struct has local time of Actor (relative to Clock) and delta time.*/
-		virtual void doUpdate(const UpdateState &us);
-		UpdateCallback _cbDoUpdate;
-		//RenderCallback _cbDoRender;
 
 
+	protected:
+		typedef intrusive_list<spActor> children;
+		static void setParent(Actor *actor, Actor *parent){ actor->_parent = parent; }
+		static void setPressed(Actor *actor, pointer_index v){ actor->setPressed(v); }
+		static children &getChildren(spActor &actor){ return actor->_children; }
+
+		void setOverred(pointer_index v);
+		void setPressed(pointer_index v);
+		void _onMouseEvent(Event *ev);
+		RectF calcDestRectF(const RectF &destRect, const Vector2 &size) const;		
+		void _setSize(const Vector2 &);
 		virtual void sizeChanged(const Vector2 &size);
 		virtual void sizeChanged(const Vector2 &size);
+		RectF	getScreenSpaceDestRect(const Renderer::transform &) const;
+		Actor*	_getDescendant(const std::string &name);
+		spTween _addTween(spTween tween, bool rel);
 
 
 		bool prepareRender(RenderState &rs, const RenderState &parentRS);
 		bool prepareRender(RenderState &rs, const RenderState &parentRS);
 		void completeRender(const RenderState &rs);
 		void completeRender(const RenderState &rs);
@@ -300,29 +274,14 @@ namespace oxygine
 		void updateTransform() const;
 		void updateTransform() const;
 		void internalUpdate(const UpdateState &us);
 		void internalUpdate(const UpdateState &us);
 
 
-		RectF getScreenSpaceDestRect(const Renderer::transform &) const; 
-
-		//static void internalRemoveChild(spActor parent, spActor actor, bool fast = false);
-
-
-		pointer_index _pressed;
-		pointer_index _overed;
-
-	private:
-		short	_zOrder;
-
-		Vector2 _pos;		
-		Vector2 _anchor;		
-		Vector2 _scale;
-		Vector2 _size;
-		float	_rotation;
-
-
-	protected:	
-		mutable unsigned short _flags;
+		/**doUpdate is virtual method for overloading in inherited classes. UpdateState struct has local time of Actor (relative to Clock) and delta time.*/
+		virtual void doUpdate(const UpdateState &us);
+		UpdateCallback _cbDoUpdate;
+		
 		mutable Renderer::transform	_transform;
 		mutable Renderer::transform	_transform;
 		mutable Renderer::transform	_transformInvert;
 		mutable Renderer::transform	_transformInvert;
 
 
+
 		enum flags
 		enum flags
 		{
 		{
 			flag_anchorInPixels			= 1,
 			flag_anchorInPixels			= 1,
@@ -337,29 +296,29 @@ namespace oxygine
 			flag_last					= flag_fastTransform
 			flag_last					= flag_fastTransform
 		};
 		};
 
 
-
+		mutable unsigned short _flags;
 		unsigned char	_alpha;
 		unsigned char	_alpha;
 		char	_extendedIsOn;
 		char	_extendedIsOn;
 
 
-		spClock _clock;	
-
+		spClock _clock;
 		Actor *_parent;
 		Actor *_parent;
 
 
 		typedef intrusive_list<spTween> tweens;
 		typedef intrusive_list<spTween> tweens;
 		tweens _tweens;
 		tweens _tweens;
 
 
+		children _children;		
 
 
-		static void setParent(Actor *actor, Actor *parent){actor->_parent = parent;}
-
-
-		void _onMouseEvent(Event *ev);
-		
-		typedef intrusive_list<spActor> children;
-		children _children;
+		pointer_index _pressed;
+		pointer_index _overred;
 
 
-		static children &getChildren(spActor &actor){return actor->_children;}
+	private:
+		short	_zOrder;
 
 
-		RectF calcDestRectF(const RectF &destRect, const Vector2 &size) const;
+		Vector2 _pos;
+		Vector2 _anchor;
+		Vector2 _scale;
+		Vector2 _size;
+		float	_rotation;
 	};
 	};
 
 
 	Vector2 convert_global2local(spActor child, spActor parent, const Vector2 &pos);//deprecated, use convert_stage2local
 	Vector2 convert_global2local(spActor child, spActor parent, const Vector2 &pos);//deprecated, use convert_stage2local

+ 2 - 2
oxygine/src/Box9Sprite.cpp

@@ -230,7 +230,7 @@ namespace oxygine
 		_prepared = true;
 		_prepared = true;
 	}
 	}
 
 
-	string stretchMode2String(Box9Sprite::StretchMode s)
+	std::string stretchMode2String(Box9Sprite::StretchMode s)
 	{
 	{
 		switch (s)
 		switch (s)
 		{
 		{
@@ -247,7 +247,7 @@ namespace oxygine
 
 
 	std::string Box9Sprite::dump(const dumpOptions &options) const
 	std::string Box9Sprite::dump(const dumpOptions &options) const
 	{
 	{
-		stringstream stream;
+		std::stringstream stream;
 		stream << "{Box9Sprite}\n";
 		stream << "{Box9Sprite}\n";
 		stream << "guideX1=" << _guideX[0] << " ";
 		stream << "guideX1=" << _guideX[0] << " ";
 		stream << "guideX2=" << _guideX[1] << " ";
 		stream << "guideX2=" << _guideX[1] << " ";

+ 1 - 1
oxygine/src/Button.cpp

@@ -106,7 +106,7 @@ namespace oxygine
 
 
 				//if (isOn(me->localPosition))
 				//if (isOn(me->localPosition))
 				//if (isDescendant(act))
 				//if (isDescendant(act))
-				if (_overed)
+				if (_overred)
 				{
 				{
 					//spMouseEvent e = new MouseEvent(et_Click);
 					//spMouseEvent e = new MouseEvent(et_Click);
 					//dispatchEvent(e.get());
 					//dispatchEvent(e.get());

+ 0 - 5
oxygine/src/Button.h

@@ -16,13 +16,8 @@ namespace oxygine
 		~Button();
 		~Button();
 
 
 		int	getRow() const {return _row;}
 		int	getRow() const {return _row;}
-		//spEventHandler getHandler() {return _ph;}
 
 
 		void setResAnim(const ResAnim *r);
 		void setResAnim(const ResAnim *r);
-		/**setAnimFrame is identical to setResAnim*/
-		//void setAnimFrame(const ResAnim *resanim, int col, int row);
-
-		//void setCallbackClick(EventCallback cb);		
 
 
 		/**Sets which row from ResAnim should be used. Default value is 0. Could be used for CheckBoxes*/
 		/**Sets which row from ResAnim should be used. Default value is 0. Could be used for CheckBoxes*/
 		void setRow(int row);
 		void setRow(int row);

+ 2 - 2
oxygine/src/ClipRectActor.cpp

@@ -1,6 +1,7 @@
 #include "ClipRectActor.h"
 #include "ClipRectActor.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "core/log.h"
 #include "core/log.h"
+#include "core/oxygine.h"
 #include "RenderState.h"
 #include "RenderState.h"
 #include "Serialize.h"
 #include "Serialize.h"
 
 
@@ -38,8 +39,7 @@ namespace oxygine
 
 
 	void ClipRectActor::handleEvent(Event *event)
 	void ClipRectActor::handleEvent(Event *event)
 	{
 	{
-		bool touchEvent = (event->type > (int)_et_TouchFirst && event->type < (int)_et_TouchLast);
-		if (touchEvent)
+		if (TouchEvent::isTouchEvent(event->type))
 		{
 		{
 			TouchEvent *te = safeCast<TouchEvent*>(event);
 			TouchEvent *te = safeCast<TouchEvent*>(event);
 			Vector2 localPosition = global2local(te->localPosition);		
 			Vector2 localPosition = global2local(te->localPosition);		

+ 0 - 1
oxygine/src/ClipRectActor.h

@@ -1,7 +1,6 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
 #include "Actor.h"
 #include "Actor.h"
-#include "math/Rect.h"
 
 
 namespace oxygine
 namespace oxygine
 {
 {

+ 2 - 2
oxygine/src/Clock.cpp

@@ -115,9 +115,9 @@ namespace oxygine
 		return _counter;
 		return _counter;
 	}
 	}
 
 
-	string Clock::dump() const
+	std::string Clock::dump() const
 	{
 	{
-		stringstream stream;
+		std::stringstream stream;
 		stream << "clock={time=" << getTime() << "ms";
 		stream << "clock={time=" << getTime() << "ms";
 		if (_counter)
 		if (_counter)
 			stream << "paused=" << _counter;
 			stream << "paused=" << _counter;

+ 2 - 2
oxygine/src/Clock.h

@@ -7,7 +7,6 @@ namespace oxygine
 	class UpdateState;
 	class UpdateState;
 
 
 
 
-
 	DECLARE_SMART(Clock, spClock);
 	DECLARE_SMART(Clock, spClock);
 	class Clock: public Object
 	class Clock: public Object
 	{
 	{
@@ -30,7 +29,8 @@ namespace oxygine
 		void	update(timeMS globalTime = -1);
 		void	update(timeMS globalTime = -1);
 		timeMS  doTick();
 		timeMS  doTick();
 
 
-		string dump() const;
+		std::string dump() const;
+
 	private:
 	private:
 		int		_counter;
 		int		_counter;
 		double	_destTime;
 		double	_destTime;

+ 18 - 10
oxygine/src/DebugActor.cpp

@@ -1,10 +1,11 @@
 #include <sstream>
 #include <sstream>
+#include "core/oxygine.h"
 
 
 #include "res/ResAnim.h"
 #include "res/ResAnim.h"
+#include "res/ResFont.h"
 #include "res/Resources.h"
 #include "res/Resources.h"
 
 
 #include "utils/stringUtils.h"
 #include "utils/stringUtils.h"
-
 #include "core/NativeTexture.h"
 #include "core/NativeTexture.h"
 #include "core/ZipFileSystem.h"
 #include "core/ZipFileSystem.h"
 #include "core/system_data.h"
 #include "core/system_data.h"
@@ -14,6 +15,7 @@
 #include "dev_tools/TreeInspector.h"
 #include "dev_tools/TreeInspector.h"
 #include "dev_tools/TexturesInspector.h"
 #include "dev_tools/TexturesInspector.h"
 
 
+#include "STDRenderer.h"
 #include "DebugActor.h"
 #include "DebugActor.h"
 #include "Stage.h"
 #include "Stage.h"
 #include "TextField.h"
 #include "TextField.h"
@@ -22,9 +24,10 @@
 #include "Event.h"
 #include "Event.h"
 #include "RenderState.h"
 #include "RenderState.h"
 #include "initActor.h"
 #include "initActor.h"
+#include "MaskedSprite.h"
+
 #include <stdio.h>
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdarg.h>
-#include "MaskedSprite.h"
 
 
 #ifdef __S3E__
 #ifdef __S3E__
 #include "s3eMemory.h"
 #include "s3eMemory.h"
@@ -178,7 +181,7 @@ namespace oxygine
 
 
 	void DebugActor::_btnClicked(Event *ev)
 	void DebugActor::_btnClicked(Event *ev)
 	{
 	{
-		string name = ev->currentTarget->getName();
+		std::string name = ev->currentTarget->getName();
 		if (name == "finger")
 		if (name == "finger")
 		{
 		{
 			showTouchedActor(!_showTouchedActor);
 			showTouchedActor(!_showTouchedActor);
@@ -248,8 +251,8 @@ namespace oxygine
 			_frames = 0;
 			_frames = 0;
 		}
 		}
 
 
-		stringstream s;
-		s << "fps=" << fps << endl;
+		std::stringstream s;
+		s << "fps=" << fps << std::endl;
 
 
 		
 		
 
 
@@ -260,16 +263,16 @@ namespace oxygine
 		mem_used = s3eMemoryGetInt(S3E_MEMORY_USED);
 		mem_used = s3eMemoryGetInt(S3E_MEMORY_USED);
 		mem_free = s3eMemoryGetInt(S3E_MEMORY_FREE);
 		mem_free = s3eMemoryGetInt(S3E_MEMORY_FREE);
 
 
-		s << "mfree=" << mem_free << " mem=" << mem_used << endl;
+		s << "mfree=" << mem_free << " mem=" << mem_used << std::endl;
 #endif
 #endif
 		
 		
 		
 		
 
 
 #ifdef OXYGINE_DEBUG_TRACE_LEAKS
 #ifdef OXYGINE_DEBUG_TRACE_LEAKS
-		s << "objects=" << (int)ObjectBase::__getCreatedObjects().size() << endl;
+		s << "objects=" << (int)ObjectBase::__getCreatedObjects().size() << std::endl;
 #endif
 #endif
 #ifdef OXYGINE_TRACE_VIDEO_STATS
 #ifdef OXYGINE_TRACE_VIDEO_STATS
-		s << "batches="<< _videoStats.batches << " triangles=" << _videoStats.triangles << endl;
+		s << "batches=" << _videoStats.batches << " triangles=" << _videoStats.triangles << std::endl;
 #endif
 #endif
 		s << "update=" << getStage()->_statUpdate << "ms ";
 		s << "update=" << getStage()->_statUpdate << "ms ";
 		s << "render=" << getStage()->_statRender << "ms ";
 		s << "render=" << getStage()->_statRender << "ms ";
@@ -317,6 +320,11 @@ namespace oxygine
 	{
 	{
 		parentRenderState.renderer->drawBatch();
 		parentRenderState.renderer->drawBatch();
 		parentRenderState.renderer->getDriver()->setDebugStats(false);
 		parentRenderState.renderer->getDriver()->setDebugStats(false);
+
+		Rect vp(Point(0, 0), core::getDisplaySize());
+		parentRenderState.renderer->getDriver()->setViewport(vp);
+		parentRenderState.renderer->initCoordinateSystem(vp.getWidth(), vp.getHeight());
+		parentRenderState.renderer->resetSettings();
 		Actor::render(parentRenderState);
 		Actor::render(parentRenderState);
 		parentRenderState.renderer->drawBatch();
 		parentRenderState.renderer->drawBatch();
 		parentRenderState.renderer->getDriver()->setDebugStats(true);
 		parentRenderState.renderer->getDriver()->setDebugStats(true);
@@ -326,7 +334,7 @@ namespace oxygine
 	{
 	{
 		_showTexel2PixelErrors = show;
 		_showTexel2PixelErrors = show;
 #ifdef OXYGINE_DEBUG_T2P
 #ifdef OXYGINE_DEBUG_T2P
-		Renderer::showTexel2PixelErrors(_showTexel2PixelErrors);
+		STDRenderer::showTexel2PixelErrors(_showTexel2PixelErrors);
 		spActor btn = getChild("t2p");
 		spActor btn = getChild("t2p");
 		btn->removeTweens(true);
 		btn->removeTweens(true);
 		if (show)
 		if (show)
@@ -364,7 +372,7 @@ namespace oxygine
 		cr->setSize(actor->getSize());
 		cr->setSize(actor->getSize());
 		cr->addTween(ColorRectSprite::TweenColor(Color(Color::White, 200)), 700, 1, true, 0, Tween::ease_inCubic)->setDetachActor(true);
 		cr->addTween(ColorRectSprite::TweenColor(Color(Color::White, 200)), 700, 1, true, 0, Tween::ease_inCubic)->setDetachActor(true);
 		actor->addChild(cr);
 		actor->addChild(cr);
-		string dmp = actor->dump(0);
+		std::string dmp = actor->dump(0);
 		log::messageln("touched actor:\n%s", dmp.c_str());
 		log::messageln("touched actor:\n%s", dmp.c_str());
 	}
 	}
 }
 }

+ 2 - 4
oxygine/src/DebugActor.h

@@ -1,7 +1,5 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
-#include "core/oxygine.h"
-#include "res/ResFontBM.h"
 #include "Actor.h"
 #include "Actor.h"
 
 
 
 
@@ -25,7 +23,7 @@ namespace oxygine
 		static void initialize();
 		static void initialize();
 		static void show();
 		static void show();
 		static void release();
 		static void release();
-		static string getDefaultName(){return "debug_actor";}
+		static std::string getDefaultName(){ return "debug_actor"; }
 
 
 		DebugActor();
 		DebugActor();
 		~DebugActor();
 		~DebugActor();
@@ -51,7 +49,7 @@ namespace oxygine
 		
 		
 		spColorRectSprite _bg;
 		spColorRectSprite _bg;
 		spTextField _text;
 		spTextField _text;
-		string _debugText;
+		std::string _debugText;
 		int _frames;
 		int _frames;
 		timeMS _startTime;
 		timeMS _startTime;
 		int _corner;
 		int _corner;

+ 4 - 4
oxygine/src/Draggable.cpp

@@ -230,11 +230,11 @@ namespace oxygine
 		Vector2 np = client->getPosition();
 		Vector2 np = client->getPosition();
 		if (_bounds.getWidth() != -1 && _bounds.getHeight() != -1)
 		if (_bounds.getWidth() != -1 && _bounds.getHeight() != -1)
 		{
 		{
-			np.x = max(np.x, (float)_bounds.getX());
-			np.y = max(np.y, (float)_bounds.getY());
+			np.x = std::max(np.x, (float)_bounds.getX());
+			np.y = std::max(np.y, (float)_bounds.getY());
 
 
-			np.x = min(np.x, (float)_bounds.getRight());
-			np.y = min(np.y, (float)_bounds.getBottom());
+			np.x = std::min(np.x, (float)_bounds.getRight());
+			np.y = std::min(np.y, (float)_bounds.getBottom());
 		}
 		}
 		client->setPosition(np);
 		client->setPosition(np);
 	}
 	}

+ 4 - 4
oxygine/src/Draggable.h

@@ -1,10 +1,11 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
 #include "Actor.h"
 #include "Actor.h"
-#include "Event.h"
+//#include "Event.h"
 
 
 namespace oxygine
 namespace oxygine
 {
 {
+	class TouchEvent;
 	Vector2 convertPosUp(Actor *src, Actor *dest, const Vector2 &pos, bool direction);
 	Vector2 convertPosUp(Actor *src, Actor *dest, const Vector2 &pos, bool direction);
 	Vector2 convertPosDown(Actor *src, Actor *dest, const Vector2 &pos, bool direction);
 	Vector2 convertPosDown(Actor *src, Actor *dest, const Vector2 &pos, bool direction);
 
 
@@ -22,11 +23,10 @@ namespace oxygine
 		Actor*			getDragClient() const {return _dragClient;}
 		Actor*			getDragClient() const {return _dragClient;}
 		const RectF&	getDragBounds() const {return _bounds;}
 		const RectF&	getDragBounds() const {return _bounds;}
 		const Vector2&  getClientPos() const {return _clientPos;}
 		const Vector2&  getClientPos() const {return _clientPos;}
+		bool			getDragEnabled() const { return _dragEnabled; }
 		bool			isDragging() const {return _pressed;}
 		bool			isDragging() const {return _pressed;}
-
-		bool getDragEnabled() const {return _dragEnabled;}
+		
 		void setDragEnabled(bool en){_dragEnabled = en;}
 		void setDragEnabled(bool en){_dragEnabled = en;}
-
 		/**sets bounds position for dragged actor*/
 		/**sets bounds position for dragged actor*/
 		void setDragBounds(const RectF &bounds);	
 		void setDragBounds(const RectF &bounds);	
 		/**sets destination drag client. Default value is Actor attached to DragHandler*/
 		/**sets destination drag client. Default value is Actor attached to DragHandler*/

+ 22 - 79
oxygine/src/Event.h

@@ -1,7 +1,5 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
-#include <list>
-#include "core/Object.h"
 #include "closure/closure.h"
 #include "closure/closure.h"
 #include "Input.h"
 #include "Input.h"
 #include "EventDispatcher.h"
 #include "EventDispatcher.h"
@@ -11,92 +9,37 @@ struct SDL_KeyboardEvent;
 
 
 namespace oxygine
 namespace oxygine
 {
 {
+	typedef int eventType;
+	DECLARE_SMART(EventDispatcher, spEventDispatcher);
 
 
-	enum events
-	{
-		_et_unknown,
-		_et_TouchFirst,
-		_et_TouchDown,
-		_et_TouchUp,
-		_et_TouchMove,
-		_et_TouchClick,
-		_et_TouchOver,
-		_et_TouchOut,
-
-		_et_WheelUp,
-		_et_WheelDown,
-
-		_et_TouchLast,
-
-		_et_KeyDown,
-		_et_KeyUp,
-
-		_et_Complete,
-		//_et_RollOver,
-		//_et_RollOut,
-
-
-		_et_maxEvent = 0xFFFFFFFF
-	};
-
-
-
-	DECLARE_SMART(Actor, spActor);
-
-	typedef char pointer_index;
-	class PointerState;
-
-	class TouchEvent: public Event
+	class Event
 	{
 	{
 	public:
 	public:
-		enum
-		{
-			/*
-			CLICK = makefourcc('_', 'C', 'L', 'C'),
-			OVER = makefourcc('_', 'O', 'V', 'R'),
-			OUT = makefourcc('_', 'O', 'U', 'T'),
-			MOVE = makefourcc('_', 'M', 'V', 'E'),
-			TOUCH_DOWN = makefourcc('_', 'T', 'D', 'W'),
-			TOUCH_UP = makefourcc('_', 'T', 'U', 'P'),
-
-			WHEEL_UP = makefourcc('_', 'W', 'U', 'P'),
-			WHEEL_DOWN = makefourcc('_', 'W', 'D', 'W'),
-			*/
+		enum { COMPLETE = sysEventID('C', 'M', 'P') };
 
 
-			CLICK = _et_TouchClick,
-			OVER = _et_TouchOver,
-			OUT = _et_TouchOut,
-			MOVE = _et_TouchMove,
-			TOUCH_DOWN = _et_TouchDown,
-			TOUCH_UP = _et_TouchUp,
-
-			WHEEL_UP = _et_WheelUp,
-			WHEEL_DOWN = _et_WheelDown,
+		enum Phase
+		{
+			phase_capturing = 1,
+			phase_target,
+			phase_bubbling
 		};
 		};
 
 
+		eventType type;
+		Phase phase;
+		bool bubbles;
+		bool stopsImmediatePropagation;
+		bool stopsPropagation;
 
 
-		TouchEvent(eventType type, bool Bubbles = true, const Vector2 &locPosition = Vector2(0, 0)):Event(type, Bubbles), localPosition(locPosition), position(locPosition), mouseButton(MouseButton_Touch), pressure(1.0f){}
-		Vector2 localPosition;
-		Vector2 position;
-		float pressure;
-
-		const PointerState *getPointer() const;
+		void *userData;
+		spObject userDataObject;
 
 
-		MouseButton mouseButton;//valid only for TouchUP/Down
+		spEventDispatcher target;
+		spEventDispatcher currentTarget;// = object with our listener
 
 
-		pointer_index index;
-	};
-
-	/**supported only on SDL*/
-	class KeyEvent : public Event
-	{
-	public:
-		enum KEY_EVENT { 
-			KEY_DOWN = _et_KeyDown,
-			KEY_UP = _et_KeyUp
-		};
+		Event(eventType Type, bool Bubbles = false) :userData(0), type(Type), phase(phase_target), bubbles(Bubbles), stopsImmediatePropagation(false), stopsPropagation(false){}
+		virtual ~Event(){}
 
 
-		SDL_KeyboardEvent* data;
-		KeyEvent(KEY_EVENT k, SDL_KeyboardEvent* d) :Event(k), data(d){}
+		void stopPropagation(){ stopsPropagation = true; }
+		void stopImmediatePropagation(){ stopsPropagation = stopsImmediatePropagation = true; }
 	};
 	};
 }
 }

+ 1 - 0
oxygine/src/EventDispatcher.cpp

@@ -1,4 +1,5 @@
 #include "EventDispatcher.h"
 #include "EventDispatcher.h"
+#include "Event.h"
 namespace oxygine
 namespace oxygine
 {
 {
 	EventDispatcher::EventDispatcher():_lastID(0), _listeners(0)
 	EventDispatcher::EventDispatcher():_lastID(0), _listeners(0)

+ 7 - 37
oxygine/src/EventDispatcher.h

@@ -7,50 +7,20 @@
 namespace oxygine
 namespace oxygine
 {
 {
 	typedef int eventType;
 	typedef int eventType;
-	DECLARE_SMART(EventDispatcher, spEventDispatcher);	
-	
-	class Event
-	{
-	public:
-		enum {COMPLETE = makefourcc('_', 'E', 'C', 'M')};
-
-		enum Phase
-		{
-			phase_capturing = 1,
-			phase_target,
-			phase_bubbling
-		};
-
-		eventType type;
-		Phase phase;
-		bool bubbles;
-		bool stopsImmediatePropagation;
-		bool stopsPropagation;
+	class Event;
 
 
-		void *userData;
-		spObject userDataObject;
+#define makefourcc(a,b,c,d) ( ((unsigned int)a) | (((unsigned int)b)<< 8) | (((unsigned int)c)<<16) | (((unsigned int)d)<<24))
 
 
-		spEventDispatcher target;
-		spEventDispatcher currentTarget;// = object with our listener
+	//eventID('_', '_', '_', '_')
+#define eventID(a,b,c,d) makefourcc(a,b,c,d)
 
 
-		Event(eventType Type, bool Bubbles = false):userData(0), type(Type), phase(phase_target), bubbles(Bubbles), stopsImmediatePropagation(false), stopsPropagation(false){}
-
-		virtual ~Event(){}
-
-		void stopPropagation(){stopsPropagation = true;}
-		void stopImmediatePropagation(){stopsPropagation = stopsImmediatePropagation = true;}
-
-		virtual Event* clone(){return new Event(*this);}
-		virtual void dump()
-		{
-
-		}
-	};
+	/*sysEventID is used for system Oxygine events, use 'eventID' for custom game events*/
+#define sysEventID(b,c,d) makefourcc(0xA,b,c,d)
 
 
-	
 
 
 	typedef Closure<void (Event *ev)> EventCallback;
 	typedef Closure<void (Event *ev)> EventCallback;
 
 
+	DECLARE_SMART(EventDispatcher, spEventDispatcher);
 	class EventDispatcher: public Object
 	class EventDispatcher: public Object
 	{
 	{
 	public:
 	public:

+ 10 - 5
oxygine/src/Font.cpp

@@ -18,7 +18,7 @@ namespace oxygine
 	}
 	}
 	*/
 	*/
 
 
-	Font::Font():_size(0), _baselineDistance(0), _scaleFactor(1.0f)
+	Font::Font() :_size(0), _baselineDistance(0), _scale(1.0f)
 	{
 	{
 	}
 	}
 
 
@@ -26,10 +26,10 @@ namespace oxygine
 	{
 	{
 	}	
 	}	
 	
 	
-	void Font::init(const char *name, int size, int baselineDistance, int lineHeight)
+	void Font::init(const char *name, int realSize, int baselineDistance, int lineHeight)
 	{
 	{
 		setName(name);
 		setName(name);
-		_size = size;
+		_size = realSize;
 		_baselineDistance = baselineDistance;
 		_baselineDistance = baselineDistance;
 		_lineHeight = lineHeight;
 		_lineHeight = lineHeight;
 		_glyphs.reserve(200);
 		_glyphs.reserve(200);
@@ -52,12 +52,12 @@ namespace oxygine
 
 
 	void Font::sortGlyphs()
 	void Font::sortGlyphs()
 	{
 	{
-		sort(_glyphs.begin(), _glyphs.end(), glyphsComparePred);
+		std::sort(_glyphs.begin(), _glyphs.end(), glyphsComparePred);
 	}
 	}
 
 
 	const glyph *Font::getGlyph(int ch) const
 	const glyph *Font::getGlyph(int ch) const
 	{
 	{
-		glyphs::const_iterator it = lower_bound(_glyphs.begin(), _glyphs.end(), ch, glyphFindPred);
+		glyphs::const_iterator it = std::lower_bound(_glyphs.begin(), _glyphs.end(), ch, glyphFindPred);
 		if (it != _glyphs.end())
 		if (it != _glyphs.end())
 		{
 		{
 			const glyph &g = *it;
 			const glyph &g = *it;
@@ -78,6 +78,11 @@ namespace oxygine
 		return _size;
 		return _size;
 	}
 	}
 
 
+	float Font::getScale() const
+	{
+		return _scale;
+	}
+
 	int Font::getLineHeight() const
 	int Font::getLineHeight() const
 	{
 	{
 		return _lineHeight;
 		return _lineHeight;

+ 7 - 6
oxygine/src/Font.h

@@ -31,25 +31,26 @@ namespace oxygine
 		Font();
 		Font();
 		~Font();
 		~Font();
 
 
-		float getScaleFactor() const {return _scaleFactor;}
-		void setScaleFactor(float scale){_scaleFactor = scale;}
-
 		void init(const char *name, int size, int baselineDistance, int lineHeight);
 		void init(const char *name, int size, int baselineDistance, int lineHeight);
+
 		void addGlyph(const glyph &g);
 		void addGlyph(const glyph &g);
 		void sortGlyphs();
 		void sortGlyphs();
 
 
+		void setScale(float scale){ _scale = scale; }
+
 		const glyph*	getGlyph(int code) const;
 		const glyph*	getGlyph(int code) const;
 		int				getBaselineDistance() const;
 		int				getBaselineDistance() const;
 		int				getSize() const;
 		int				getSize() const;
+		float			getScale() const;
 		int				getLineHeight() const;
 		int				getLineHeight() const;
 
 
 	private:
 	private:
-		typedef vector<glyph> glyphs;
+		typedef std::vector<glyph> glyphs;
 		glyphs _glyphs;		 
 		glyphs _glyphs;		 
 
 
-		float _scaleFactor;
+		float _scale;
 
 
-		int _size;
+		int _size;		
 		int _baselineDistance;
 		int _baselineDistance;
 		int _lineHeight;
 		int _lineHeight;
 	};
 	};

+ 1 - 1
oxygine/src/Input.cpp

@@ -88,7 +88,7 @@ namespace oxygine
 			return &_pointerMouse;
 			return &_pointerMouse;
 		index -= 1;
 		index -= 1;
 		OX_ASSERT(index >= 0 && index < MAX_TOUCHES);
 		OX_ASSERT(index >= 0 && index < MAX_TOUCHES);
-		index = min(max(index, 0), MAX_TOUCHES);
+		index = std::min(std::max(index, 0), MAX_TOUCHES);
 		return &_pointers[index];
 		return &_pointers[index];
 	}
 	}
 
 

+ 2 - 2
oxygine/src/Input.h

@@ -1,6 +1,6 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
-#include "EventDispatcher.h"
+#include "Event.h"
 #include "math/vector3.h"
 #include "math/vector3.h"
 #include "math/vector2.h"
 #include "math/vector2.h"
 #include "closure/closure.h"
 #include "closure/closure.h"
@@ -25,7 +25,7 @@ namespace oxygine
 
 
 		enum
 		enum
 		{
 		{
-			event_platform = makefourcc('_', 's', 'd', 'l')
+			event_platform = sysEventID('I', 'P', 'L')
 		};
 		};
 
 
 		void cleanup();
 		void cleanup();

+ 4 - 4
oxygine/src/InputText.cpp

@@ -59,22 +59,22 @@ namespace oxygine
 		updateText();
 		updateText();
 	}
 	}
 
 
-	void InputText::setAllowedSymbols(const string &utf8str)
+	void InputText::setAllowedSymbols(const std::string &utf8str)
 	{
 	{
 		_allowed = utf8str;
 		_allowed = utf8str;
 	}
 	}
 
 
-	void InputText::setAllowedSymbols(const wstring &str)
+	void InputText::setAllowedSymbols(const std::wstring &str)
 	{
 	{
 		_allowed = ws2utf8(str.c_str());
 		_allowed = ws2utf8(str.c_str());
 	}
 	}
 
 
-	void InputText::setDisallowedSymbols(const string &utf8str)
+	void InputText::setDisallowedSymbols(const std::string &utf8str)
 	{
 	{
 		_disallowed = utf8str;
 		_disallowed = utf8str;
 	}
 	}
 
 
-	void InputText::setDisallowedSymbols(const wstring &str)
+	void InputText::setDisallowedSymbols(const std::wstring &str)
 	{
 	{
 		_disallowed = ws2utf8(str.c_str());
 		_disallowed = ws2utf8(str.c_str());
 	}
 	}

+ 7 - 9
oxygine/src/InputText.h

@@ -9,8 +9,6 @@
 
 
 namespace oxygine
 namespace oxygine
 {
 {
-	using namespace std;
-
 	DECLARE_SMART(TextField, spTextField);
 	DECLARE_SMART(TextField, spTextField);
 	DECLARE_SMART(InputText, spInputText);
 	DECLARE_SMART(InputText, spInputText);
 
 
@@ -24,10 +22,10 @@ namespace oxygine
 		void start(spTextField textActor);
 		void start(spTextField textActor);
 		void stop();
 		void stop();
 
 
-		void setAllowedSymbols(const string &utf8str);
-		void setAllowedSymbols(const wstring &str);
-		void setDisallowedSymbols(const string &utf8str);
-		void setDisallowedSymbols(const wstring &str);
+		void setAllowedSymbols(const std::string &utf8str);
+		void setAllowedSymbols(const std::wstring &str);
+		void setDisallowedSymbols(const std::string &utf8str);
+		void setDisallowedSymbols(const std::wstring &str);
 		void setMaxTextLength(int);
 		void setMaxTextLength(int);
 
 
 		static void stopAnyInput();
 		static void stopAnyInput();
@@ -35,9 +33,9 @@ namespace oxygine
 	private:
 	private:
 		spTextField _textActor;
 		spTextField _textActor;
 
 
-		string _allowed;
-		string _disallowed;
-		string _txt;
+		std::string _allowed;
+		std::string _disallowed;
+		std::string _txt;
 		int	_maxLength;
 		int	_maxLength;
 		void updateText();
 		void updateText();
 		static InputText *_active;		
 		static InputText *_active;		

+ 18 - 0
oxygine/src/KeyEvent.h

@@ -0,0 +1,18 @@
+#pragma once
+#include "Event.h"
+
+namespace oxygine
+{
+	/**supported only on SDL*/
+	class KeyEvent : public Event
+	{
+	public:
+		enum KEY_EVENT {
+			KEY_DOWN = sysEventID('K', 'E', 'D'),
+			KEY_UP = sysEventID('K', 'E', 'U')
+		};
+
+		SDL_KeyboardEvent* data;
+		KeyEvent(KEY_EVENT k, SDL_KeyboardEvent* d) :Event(k), data(d){}
+	};
+}

+ 0 - 2
oxygine/src/MemoryTexture.h

@@ -1,8 +1,6 @@
 #pragma once
 #pragma once
 #include "oxygine_include.h"
 #include "oxygine_include.h"
 #include "core/Texture.h"
 #include "core/Texture.h"
-#include "core/oxygine.h"
-#include "math/Rect.h"
 #include "core/file.h"
 #include "core/file.h"
 
 
 namespace oxygine
 namespace oxygine

Some files were not shown because too many files changed in this diff