Browse Source

Python3 compatible
updated pugixml to 1.5
minor fixes
improved examples
added Game/Part5

Denis Muratshin 11 years ago
parent
commit
d9aa98a2f5
100 changed files with 2671 additions and 270 deletions
  1. 0 22
      .gitattributes
  2. 0 216
      .gitignore
  3. 2 2
      .hg_archival.txt
  4. 2 0
      .hgignore
  5. 1 0
      Doxyfile
  6. 6 1
      doc/Home.md
  7. 17 4
      doc/actors.md
  8. BIN
      doc/doc.zip
  9. 1 1
      doc/events.md
  10. BIN
      doc/img/actor.png
  11. BIN
      doc/img/mask.png
  12. BIN
      doc/img/mpexport.png
  13. BIN
      doc/img/polygon.png
  14. BIN
      doc/img/progressbar.png
  15. BIN
      doc/img/sprite.png
  16. BIN
      doc/img/text.png
  17. 44 0
      doc/magicparticles.md
  18. 0 0
      doc/new_project.md
  19. 103 0
      doc/sounds.md
  20. 12 2
      doc/start.md
  21. BIN
      examples/Demo/data/images/equal_orange.png
  22. 27 19
      examples/Demo/src/TestDrag.h
  23. 1 1
      examples/Demo/src/TestMask.h
  24. 1 1
      examples/Demo/src/test.cpp
  25. 1 1
      examples/Demo/src/test.h
  26. 28 0
      examples/Game/part5/data/app.icf
  27. 107 0
      examples/Game/part5/data/development.icf
  28. 105 0
      examples/Game/part5/data/fonts/huge.fnt
  29. BIN
      examples/Game/part5/data/fonts/huge_0.png
  30. 105 0
      examples/Game/part5/data/fonts/normal.fnt
  31. BIN
      examples/Game/part5/data/fonts/normal_0.png
  32. BIN
      examples/Game/part5/data/ui.xml.ox/atlas/1_0.png
  33. BIN
      examples/Game/part5/data/ui.xml.ox/atlas/2_0.png
  34. 1 0
      examples/Game/part5/data/ui.xml.ox/meta.xml
  35. 28 0
      examples/Game/part5/data/xmls/ui.xml
  36. 1 0
      examples/Game/part5/gen-atlasses-android(ETC1).bat
  37. 2 0
      examples/Game/part5/gen-atlasses-android(ETC1).sh
  38. 1 0
      examples/Game/part5/gen-atlasses-ios(PVRTC).bat
  39. 2 0
      examples/Game/part5/gen-atlasses-ios(PVRTC).sh
  40. 1 0
      examples/Game/part5/gen-atlasses-low-definition.bat
  41. 2 0
      examples/Game/part5/gen-atlasses-low-definition.sh
  42. 1 0
      examples/Game/part5/gen-atlasses.bat
  43. 2 0
      examples/Game/part5/gen-atlasses.sh
  44. BIN
      examples/Game/part5/images/asteroid.png
  45. BIN
      examples/Game/part5/images/explosion.png
  46. BIN
      examples/Game/part5/images/rocket.png
  47. BIN
      examples/Game/part5/images/ship.png
  48. BIN
      examples/Game/part5/images/shipengine.png
  49. BIN
      examples/Game/part5/images/sky.jpg
  50. BIN
      examples/Game/part5/images/ui/bg.jpg
  51. BIN
      examples/Game/part5/images/ui/box9.png
  52. BIN
      examples/Game/part5/images/ui/buttons.png
  53. BIN
      examples/Game/part5/images/ui/finger.png
  54. BIN
      examples/Game/part5/images/ui/joystick.png
  55. BIN
      examples/Game/part5/images/ui/logo2.png
  56. BIN
      examples/Game/part5/images/ui/menu.png
  57. BIN
      examples/Game/part5/images/ui/play.png
  58. 33 0
      examples/Game/part5/proj.android/AndroidManifest.xml
  59. 18 0
      examples/Game/part5/proj.android/ant.properties
  60. 1 0
      examples/Game/part5/proj.android/ant_debug.bat
  61. 2 0
      examples/Game/part5/proj.android/ant_debug.sh
  62. 3 0
      examples/Game/part5/proj.android/build-run.bat
  63. 4 0
      examples/Game/part5/proj.android/build-run.sh
  64. 1 0
      examples/Game/part5/proj.android/build.bat
  65. 2 0
      examples/Game/part5/proj.android/build.sh
  66. 93 0
      examples/Game/part5/proj.android/build.xml
  67. 11 0
      examples/Game/part5/proj.android/default.properties
  68. 2 0
      examples/Game/part5/proj.android/install.bat
  69. 3 0
      examples/Game/part5/proj.android/install.sh
  70. 1 0
      examples/Game/part5/proj.android/jni/Android.mk
  71. 5 0
      examples/Game/part5/proj.android/jni/Application.mk
  72. 19 0
      examples/Game/part5/proj.android/jni/src/Android.mk
  73. 15 0
      examples/Game/part5/proj.android/project.properties
  74. BIN
      examples/Game/part5/proj.android/res/drawable-hdpi/ic_launcher.png
  75. BIN
      examples/Game/part5/proj.android/res/drawable-mdpi/ic_launcher.png
  76. BIN
      examples/Game/part5/proj.android/res/drawable-xhdpi/ic_launcher.png
  77. BIN
      examples/Game/part5/proj.android/res/drawable-xxhdpi/ic_launcher.png
  78. 13 0
      examples/Game/part5/proj.android/res/layout/main.xml
  79. 4 0
      examples/Game/part5/proj.android/res/values/strings.xml
  80. 8 0
      examples/Game/part5/proj.android/src/org/oxygine/GamePart5/MainActivity.java
  81. 11 0
      examples/Game/part5/proj.cmake/CMakeLists.txt
  82. 25 0
      examples/Game/part5/proj.emscripten/CMakeLists.txt
  83. 7 0
      examples/Game/part5/proj.emscripten/build.bat
  84. 7 0
      examples/Game/part5/proj.emscripten/build_release.bat
  85. 51 0
      examples/Game/part5/proj.ios/GamePart5/GamePart5_ios-Info.plist
  86. 53 0
      examples/Game/part5/proj.ios/GamePart5/Images.xcassets/AppIcon.appiconset/Contents.json
  87. 49 0
      examples/Game/part5/proj.ios/GamePart5/Images.xcassets/LaunchImage.launchimage/Contents.json
  88. 51 0
      examples/Game/part5/proj.ios/GamePart5/LaunchImage.launchimage/Contents.json
  89. 535 0
      examples/Game/part5/proj.ios/GamePart5_ios.xcodeproj/project.pbxproj
  90. 58 0
      examples/Game/part5/proj.macosx/GamePart5/Images.xcassets/AppIcon.appiconset/Contents.json
  91. 34 0
      examples/Game/part5/proj.macosx/GamePart5_macosx-Info.plist
  92. 565 0
      examples/Game/part5/proj.macosx/GamePart5_macosx.xcodeproj/project.pbxproj
  93. 48 0
      examples/Game/part5/proj.win32/GamePart5_vs2010.sln
  94. 97 0
      examples/Game/part5/proj.win32/GamePart5_vs2010.vcxproj
  95. 17 0
      examples/Game/part5/proj.win32/GamePart5_vs2010.vcxproj.filters
  96. 49 0
      examples/Game/part5/proj.win32/GamePart5_vs2013.sln
  97. 99 0
      examples/Game/part5/proj.win32/GamePart5_vs2013.vcxproj
  98. 17 0
      examples/Game/part5/proj.win32/GamePart5_vs2013.vcxproj.filters
  99. 41 0
      examples/Game/part5/src/Enemy.cpp
  100. 15 0
      examples/Game/part5/src/Enemy.h

+ 0 - 22
.gitattributes

@@ -1,22 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
-
-# Custom for Visual Studio
-*.cs     diff=csharp
-*.sln    merge=union
-*.csproj merge=union
-*.vbproj merge=union
-*.fsproj merge=union
-*.dbproj merge=union
-
-# Standard to msysgit
-*.doc	 diff=astextplain
-*.DOC	 diff=astextplain
-*.docx diff=astextplain
-*.DOCX diff=astextplain
-*.dot  diff=astextplain
-*.DOT  diff=astextplain
-*.pdf  diff=astextplain
-*.PDF	 diff=astextplain
-*.rtf	 diff=astextplain
-*.RTF	 diff=astextplain

+ 0 - 216
.gitignore

@@ -1,216 +0,0 @@
-#################
-## Eclipse
-#################
-
-*.pydevproject
-.project
-.metadata
-bin/
-tmp/
-*.tmp
-*.bak
-*.swp
-*~.nib
-local.properties
-.classpath
-.settings/
-.loadpath
-
-# External tool builders
-.externalToolBuilders/
-
-# Locally stored "Eclipse launch configurations"
-*.launch
-
-# CDT-specific
-.cproject
-
-# PDT-specific
-.buildpath
-
-
-#################
-## Visual Studio
-#################
-
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-
-# User-specific files
-*.suo
-*.user
-*.sln.docstates
-
-# Build results
-
-[Dd]ebug_vs20*/
-[Rr]elease_vs20*/
-x64/
-build/
-[Bb]in/
-[Oo]bj/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-*_i.c
-*_p.c
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.log
-*.scc
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opensdf
-*.sdf
-*.cachefile
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# NCrunch
-*.ncrunch*
-.*crunch*.local.xml
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.Publish.xml
-*.pubxml
-*.publishproj
-
-# NuGet Packages Directory
-## TODO: If you have NuGet Package Restore enabled, uncomment the next line
-#packages/
-
-# Windows Azure Build Output
-csx
-*.build.csdef
-
-# Windows Store app package directory
-AppPackages/
-
-# Others
-sql/
-*.Cache
-ClientBin/
-[Ss]tyle[Cc]op.*
-~$*
-*~
-*.dbmdl
-*.[Pp]ublish.xml
-*.pfx
-*.publishsettings
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file to a newer
-# Visual Studio version. Backup files are not needed, because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-App_Data/*.mdf
-App_Data/*.ldf
-
-#############
-## Windows detritus
-#############
-
-# Windows image file caches
-Thumbs.db
-ehthumbs.db
-
-# Folder config file
-Desktop.ini
-
-# Recycle Bin used on file shares
-$RECYCLE.BIN/
-
-# Mac crap
-.DS_Store
-
-
-#############
-## Python
-#############
-
-*.py[cod]
-
-# Packages
-*.egg
-*.egg-info
-dist/
-build/
-eggs/
-parts/
-var/
-sdist/
-develop-eggs/
-.installed.cfg
-
-# Installer logs
-pip-log.txt
-
-# Unit test / coverage reports
-.coverage
-.tox
-
-#Translations
-*.mo
-
-#Mr Developer
-.mr.developer.cfg

+ 2 - 2
.hg_archival.txt

@@ -1,5 +1,5 @@
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
-node: 625ecdd430f681d80297ced8906abfb39d4ca394
+node: 75aff0614d1b9381798892e301c4900ccbf626ea
 branch: default
 latesttag: oldrender
-latesttagdistance: 473
+latesttagdistance: 493

+ 2 - 0
.hgignore

@@ -135,5 +135,7 @@ build_release
 */proj.android/bin/
 oxygine/SDL/win32/Debug_vs2015
 oxygine-framework-with-sdl.zip
+examples/Game/part2/proj.win32/Debug
+*/proj.win32/Debug/
 syntax: regexp
 ^build/

+ 1 - 0
Doxyfile

@@ -748,6 +748,7 @@ EXCLUDE_PATTERNS       =
 # AClass::ANamespace, ANamespace::*Test
 
 EXCLUDE_SYMBOLS        = detail:* \
+                         TextActor \
                          pugi:* \
                          Closure \
                          AffineTransformT \

+ 6 - 1
doc/Home.md

@@ -10,4 +10,9 @@ Work in progress...
 5. [Fonts](fonts)
 6. [Shaders](shaders)
 7. [Resources](resources)
-8. [Colors Table](colors)
+8. [Colors Table](colors)
+
+
+##Extensions:
+1. [oxygine-sound library](sounds)
+2. [oxygine-magicparticles library](magicparticles)

+ 17 - 4
doc/actors.md

@@ -7,11 +7,11 @@ Oxygine isn't low level 2D framework and in addition to this it provides own sce
 You could create Sprite, set position and image, attach it to scene and "forget". Sprite would be displayed and updated each frame automatically. You could say to this sprite "rotate on 360 degrees for 2 seconds 5 times and then remove self".
 
 	spSrite sprite = new Sprite;
-	sprite->attachTo(getRoot()); 
+	sprite->attachTo(getStage()); 
 	sprite->addTween(Sprite::TweenRotation(2*PI), 2000, 5)->setDetachActor(true);
 
 > it is pseudocode, you also should set to sprite "image" resource or it would be empty and invisible  
-> getRoot() returns root node of the scene graph
+> getStage() returns root node of the scene graph
 
 You could create second *"child"* sprite attached to already created and they would be rotating both:
 
@@ -39,19 +39,32 @@ Actor has properties:
 You would widely use Sprites in your app.
 
 ##Sprite
-Sprite is inherited from Actor. Sprite = Actor + Image 
+Sprite is main Actor for displaying images and animations. Sprite = Actor + Image
+
+![Actor inheritance](img/sprite.png)
+
+##Polygon
+Sprite for rendering custom vertices array. Polygon = Sprite + Vertices 
+
+![Actor inheritance](img/polygon.png)
 
 ##TextField
 TextField is used for displaying text.
 
+![Actor inheritance](img/text.png)
+
 ##Progress Bar
 Progress Bar is used for displaying progress.
 
+![Actor inheritance](img/progressbar.png)
+
 ##ColorRectSprite
 It is rectangle filled with one color.
 
 ##ClipRectActor
-ClipRectActor is clipping outside childre.
+ClipRectActor is clipping outside children.
 
 ##MaskedSprite
 Sprite which is using other sprite for masking own children.
+
+![Actor inheritance](img/mask.png)

BIN
doc/doc.zip


+ 1 - 1
doc/events.md

@@ -254,7 +254,7 @@ Custom events are useful for indicating events which are not inherently recogniz
 	class AchieveEarnedEvent: public Event
 	{
 	public:
-		enum {EVENT = makefourcc('A','c','E','r');}
+		enum {EVENT = makefourcc('A','c','E','r')};
 
 		string achievementID;
 

BIN
doc/img/actor.png


BIN
doc/img/mask.png


BIN
doc/img/mpexport.png


BIN
doc/img/polygon.png


BIN
doc/img/progressbar.png


BIN
doc/img/sprite.png


BIN
doc/img/text.png


+ 44 - 0
doc/magicparticles.md

@@ -0,0 +1,44 @@
+#Particles
+
+[**oxygine-magicparticles**](https://bitbucket.org/oxygine/oxygine-magicparticles) is extension for oxygine-framework. It is based on commercial particles library [**Magic Particles**](http://astralax.com/).
+
+ 
+##Usage
+
+Install **Magic Particles 3D (Dev) Free**.
+
+Create and export your particles (Save for API mode):
+
+![](img/mpexport.png)
+
+Copy exported files to data folder and add reference to resources xml file:
+
+	<magicparticles file="particles/effects.ptc"/>
+
+Include headers:
+
+	#include "MagicEmitter.h"
+	#include "ResMagicParticles.h"
+
+Initialize particles:
+
+	ResMagicParticles::init();
+
+Create Emitter actor:
+
+	ResMagicParticles *rs = gameResources.getT<ResMagicParticles>("effects");
+	const ResMagicEmitter *mpem = rs->getEmitter("emitter_id");
+
+	spMagicEmitter em = new MagicEmitter;
+
+	em->attachTo(getRoot());
+	em->setPosition(pos);
+	em->setEmitter(mpem);
+	em->setAutoDetach(true);
+
+Where *emitter_id* is unique identifier of emitter created in the *Magic Particles Editor*.
+
+
+
+
+	 

+ 0 - 0
doc/new_project.md


+ 103 - 0
doc/sounds.md

@@ -0,0 +1,103 @@
+#Sounds
+
+[**oxygine-sound**](https://bitbucket.org/oxygine/oxygine-sound) is extension for oxygine-framework. It is based on OpenAL library and could be used for playing ogg files.
+
+It supports streaming for long sound tracks and using separate thread for decoding and reading ogg files.
+ 
+##Usage
+
+Include headers:
+
+	#include "SoundPlayer.h"
+	#include "SoundSystem.h"
+	#include "SoundInstance.h"
+
+Initialize sound system with 16 channels:
+	
+	SoundSystem::instance = SoundSystem::create();
+	SoundSystem::instance->init(16);
+
+	SoundPlayer::initialize();
+
+*SoundPlayer::initialize* registers new type of resource "sound".
+	
+Add your ogg tracks to resources file, lets call it "sounds.xml":
+
+	<?xml version="1.0"?>
+	<resources>
+		<set path = "sounds" />	
+	
+	 	<sound file="sfx1.ogg" />
+		<sound file="sfx2.ogg" />
+		<sound file="voice1.ogg"/>
+		<sound file="music.ogg" streaming="true"/>
+	
+	</resources>
+
+> you could	have multiple resources files
+
+* If sound is too short if would be automaticaly decoded to buffer when loading. 
+* If sound is longer than about 5 seconds it would be decoded step by step from memory when playing.
+* **streaming=true** attribute means that sound would be loaded from file and decoded on the fly when playing.   
+
+
+Load resources:
+
+	Resources resources;
+	resources.loadXML("sounds.xml");
+
+Next step is declaring SoundPlayer instance:
+
+	SoundPlayer sfxPlayer;
+
+SoundPlayer is a container for group of sounds playing right now. You could declare multiple instances of SoundPlayer and control them individually:
+
+	SoundPlayer sfxPlayer;
+	SoundPlayer musicPlayer;
+
+	...
+
+	sfxPlayer.setVolume(1.0f);
+	musicPlayer.setVolume(0.5f);
+
+
+Play sounds:
+	
+	sfxPlayer.play(resources.get("sfx1"));
+	musicPlayer.play(resources.get("music"));
+
+You could save handle to playing sound instance and use it for control:
+
+	spSoundInstance music = musicPlayer.play(resources.get("music"));	
+
+	void levelCompleted()
+	{
+		music->fadeOut();
+	}
+
+Or you could control group of sounds belonging to SoundPlayer:
+
+	sfxPlayer.pause();
+	...
+	sfxPlayer.stop();
+
+
+You could subscribe to events:
+
+	spSoundInstance music = musicPlayer.play(resources.get("music"));
+	music->addEventListener(SoundInstance::SoundEvent::EVENT_DONE, CLOSURE(this, &SomeClass::musicDone));
+
+
+	void SomeClass::musicDone(Event*)
+	{
+		musicPlayer.play(resources.get("music2"));
+	} 
+
+
+
+
+
+
+
+
+	 

+ 12 - 2
doc/start.md

@@ -3,16 +3,26 @@
 ###Windows, MacOSX users
 [Download](http://oxygine.org/download.php) Oxygine. I recommend to download **All-In-One** version with SDL. It includes everything to fast and easy start and has prebuilt SDL binaries.
 
-Go to oxygine-framework/examples folder and open any of them. Each example has configuration folders for different platforms/OS:
+Go to **oxygine-framework/examples** folder and open any of them.
+There are examples:
+
+* **HelloWorld** is starting Point.
+* **Game** is tutorial example. It has 4 parts from beggining to advanced usage.
+* **Demo** has tests and demonstation Oxygine functionality. 
+* **DemoBox2D** is example with integrated Box2D.
+* **Match3** is match3 mechanics demonstration implemented on Oxygine.
+ 
+Each example has configuration folders for different platforms/OS:
 
 * **proj.win32** - solutions for VisualStudio
 * **proj.ios** - iOS xcode project
 * **proj.macosx** - MacOSX xcode project
+* **proj.marmalade** - Marmalade project
 * *proj.android* - build folder for Android SDK/NDK
 * *proj.cmake* - CMake configuration folder
 * *proj.emscripten* - Emscripten configuration folder
 
-> to build for android, cmake, emscripten check **oxygine-framework/readme** folder
+> if you have any troubles or if you need to build for android, cmake, emscripten check **oxygine-framework/readme** folder
 
 ###Advanced users 
 

BIN
examples/Demo/data/images/equal_orange.png


+ 27 - 19
examples/Demo/src/TestDrag.h

@@ -27,19 +27,6 @@ public:
 
 			sprite->setRotation(scalar::randFloat(0, (float)MATH_PI * 2));
 			sprite->setScale(scalar::randFloat(1.0f, 2.0f));
-
-			/*
-			for (int n = 0; n < 3; ++n)
-			{
-				DraggableSprite *child = new DraggableSprite;
-				float scale = 0.5f;
-				child->drag.setDragBounds(Rect(0,0, sprite->getWidth(), sprite->getHeight()));
-				child->setScale(scale);
-				child->setAnimFrame(resources.getResAnim("batterfly2"));
-				child->attachTo(sprite);
-				child->setX(n * 30.0f);
-			}
-			*/
 		}
 	}
 
@@ -68,6 +55,7 @@ public:
 	spSprite basket;
 	spSprite ball;
 	spSprite dragging;
+	spTextActor txt;
 
 	timeMS timeLeft;
 	const PointerState *touchedBy;
@@ -75,10 +63,11 @@ public:
 	
 	Drag2Test():touchedBy(0), timeLeft(0)
 	{
-		basket = initActor(new Sprite,
+		basket = initActor(new Sprite,			
 			arg_name = "basket",
 			arg_resAnim = resources.getResAnim("batterfly"),
 			arg_attachTo= content,
+			arg_anchor = Vector2(0.5f, 0.5f),
 			arg_x = content->getWidth() * 3 / 4,
 			arg_y = content->getHeight() / 2);
 
@@ -86,12 +75,19 @@ public:
 			arg_name = "ball",
 			arg_resAnim = resources.getResAnim("batterfly"),
 			arg_attachTo= content,
+			arg_anchor = Vector2(0.5f, 0.5f),
 			arg_x = content->getWidth() * 1 / 4,
 			arg_y = content->getHeight() / 2);
 
 		ball->addEventListener(TouchEvent::TOUCH_DOWN, CLOSURE(this,  &Drag2Test::ballTouchDown));
 		ball->addEventListener(TouchEvent::TOUCH_UP, CLOSURE(this,  &Drag2Test::ballTouchUp));
 		content->addEventListener(TouchEvent::TOUCH_UP, CLOSURE(this, &Drag2Test::touchUp));
+
+		txt = new TextActor;
+		txt->attachTo(content);
+		txt->setVAlign(TextStyle::VALIGN_MIDDLE);
+		txt->setHAlign(TextStyle::HALIGN_MIDDLE);
+		txt->setPosition(getSize() / 2);
 	}
 
 	
@@ -110,9 +106,9 @@ public:
 		dragging->setColor(Color::White);
 		spTween t;
 		if (event->target == basket)
-			t = dragging->addTween(Actor::TweenPosition(basket->getPosition()), 500);
+			t = dragging->addTween(Actor::TweenPosition(basket->getPosition() - basket->getSize()/2), 500);
 		else
-			t = dragging->addTween(Actor::TweenPosition(ball->getPosition()), 500);
+			t = dragging->addTween(Actor::TweenPosition(ball->getPosition() - ball->getSize() / 2), 500);
 		t->setDetachActor(true);
 		dragging = 0;
 	}
@@ -127,21 +123,33 @@ public:
 
 	void doUpdate(const UpdateState &us)
 	{
-		if (!timeLeft)
-			return;
 		if (!touchedBy)
+		{
+			txt->setText("Drag left object and drop on right object");
+			if (!ball->getTween("scale", ep_ignore_error))
+				ball->addTween(Actor::TweenScale(1.1f), 500, -1, true)->setName("scale");
+			basket->removeTweens();
+			return;
+		}
+
+		if (!timeLeft)
 			return;
 
 		timeLeft -= us.dt;
 		if (timeLeft <= 0)
 		{
+			ball->removeTweens();
+			basket->addTween(Actor::TweenScale(1.1f), 500, -1, true);
+			txt->setText("Now drop it on right object");
+
 			timeLeft = 0;
 			dragging = initActor(ball->clone(),
 				arg_name = "dragging",
 				arg_attachTo = ball->getParent(),
 				arg_color = Color(0xff0000ff),
+				arg_anchor = Vector2(0, 0),
 				arg_input = false);
-			drag.start(touchedBy, dragging.get(), dragging->getSize()/2);
+			drag.start(touchedBy, dragging.get(), dragging->getSize() / 2);
 		}
 	}
 private:

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

@@ -15,7 +15,7 @@ public:
 	TestMask():_lastSnow(0)
 	{		
 		_mask = initActor(new Sprite, 
-			arg_scale = 3,
+			arg_scale = 2.5f,
 			arg_priority = 1,
 			arg_alpha = 100,
 			arg_x = 100,

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

@@ -195,6 +195,6 @@ void Test::notify(string txt, int time)
 
 void Test::notifyDone(Event *ev)
 {
-	size_t N = size_t(ev->currentTarget->getUserData());
+	size_t N = size_t(ev->target->getUserData());
 	_notifies[N] -= 1;
 }

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

@@ -63,7 +63,7 @@ protected:
 	float _y;
 	spActor ui;
 	Content *content;
-	enum {MAX_NOTIFIES = 6};
+	enum {MAX_NOTIFIES = 8};
 	int _notifies[MAX_NOTIFIES];
 };
 

+ 28 - 0
examples/Game/part5/data/app.icf

@@ -0,0 +1,28 @@
+[S3E]
+MemSize = 64777216
+DispFixRot=Landscape
+SysGlesVersion=2
+SysStackSize=131072
+MemMgrMaxAllocWarning=0
+
+[Trace]
+ALL=0
+EXT=0
+NONE=0
+DEVICE=0
+FIBRE=0
+THREAD=0
+LOADER=0
+SOUND=0
+FILE=0
+SURFACE=0
+MEMORY=0
+ERROR=0
+IW_GL=0
+SURFACE=0
+SOCKET=0
+JPEG=0
+VIDEO=0
+LOADER=0
+FILE=0
+IWCRT=0

+ 107 - 0
examples/Game/part5/data/development.icf

@@ -0,0 +1,107 @@
+# Settings ICF file automatically generated by S3E development environment
+
+AccelEnabled                   = Type=bool, Default="true", Value = "true"
+AudioAAC                       = Type=bool, Default="false", Value = "false"
+AudioAACPlus                   = Type=bool, Default="false", Value = "false"
+AudioMIDI                      = Type=bool, Default="true", Value = "true"
+AudioMP3                       = Type=bool, Default="true", Value = "true"
+AudioPCM                       = Type=bool, Default="true", Value = "true"
+AudioQCP                       = Type=bool, Default="false", Value = "false"
+AudioVolumeDefault             = Type=int, Min=0.000000, Max=256.000000, Default="256", Value = "256"
+BacklightTimeout               = Type=int, Min=0.000000, Max=120000.000000, Default="10000", Value = "10000"
+CompassEnabled                 = Type=bool, Default="true", Value = "true"
+ContactsFromAddrBook           = Type=bool, Default="false", Value = "false"
+DeviceAdvanceSoftkeyPosition   = Type=string, Allowed="Bottom Left" "Bottom Right" "Top Right" "Top Left", Default="Bottom Left", Value = "Bottom Left"
+DeviceArch                     = Type=string, Allowed="<Use Native Architecture>" "ARM4T" "ARM4" "ARM5T" "ARM5TE" "ARM5TEJ" "ARM6" "ARM6K" "ARM6T2" "ARM6Z" "X86" "PPC" "AMD64" "ARM7", Default="<Use Native Architecture>", Value = "<Use Native Architecture>"
+DeviceBackSoftkeyPosition      = Type=string, Allowed="Bottom Left" "Bottom Right" "Top Right" "Top Left", Default="Bottom Right", Value = "Bottom Right"
+DeviceBatteryLevel             = Type=int, Min=0.000000, Max=100.000000, Default="50", Value = "50"
+DeviceClass                    = Type=string, Allowed="UNKNOWN" "SYMBIAN_GENERIC" "SYMBIAN_SERIES60" "SYMBIAN_SERIES60_EMULATOR" "SYMBIAN_UIQ" "SYMBIAN_UIQ_EMULATOR" "BREW_GENERIC" "BREW_QCIF_3D" "BREW_QCIF_25G" "BREW_SQCIF_256" "BREW_QVGA_3G" "WINDOWS_GENERIC" "WINMOBILE_GENERIC" "WINMOBILE_SP" "WINMOBILE_PPC" "LINUX_GENERIC" "LINUX_DESKTOP" "LINUX_EMBED" "WIPI_GENERIC" "NDS_GENERIC" "ARM_SEMIH_GENERIC" "NULCUES_GENERIC" "NGI_GENERIC", Default="WINDOWS_GENERIC", Value = "WINDOWS_GENERIC"
+DeviceFPU                      = Type=string, Allowed="None" "VFP Present", Default="VFP Present", Value = "VFP Present"
+DeviceFreeRAM                  = Type=int, Min=0.000000, Max=2097151.000000, Default="1048576", Value = "1048576"
+DeviceIDInt                    = Type=int, Default="0", Value = "0"
+DeviceIDString                 = Type=string, Default="", Value = ""
+DeviceIMSI                     = Type=string, Default="SIMULATOR_IMSI", Value = "SIMULATOR_IMSI"
+DeviceLSKIsBack                = Type=bool, Default="false", Value = "false"
+DeviceLanguage                 = Type=string, Allowed="UNKNOWN" "ENGLISH" "FRENCH" "GERMAN" "SPANISH" "ITALIAN" "PORTUGUESE" "DUTCH" "TURKISH" "CROATIAN" "CZECH" "DANISH" "FINNISH" "HUNGARIAN" "NORWEGIAN" "POLISH" "RUSSIAN" "SERBIAN" "SLOVAK" "SLOVENIAN" "SWEDISH" "UKRAINIAN" "GREEK" "JAPANESE" "SIMPL_CHINESE" "TRAD_CHINESE" "KOREAN" "ICELANDIC" "FLEMISH" "THAI" "AFRIKAANS" "ALBANIAN" "AMHARIC" "ARABIC" "ARMENIAN" "AZERBAIJANI" "TAGALOG" "BELARUSSIAN" "BENGALI" "BULGARIAN" "BURMESE" "CATALAN" "ESTONIAN" "FARSI" "GAELIC" "GEORGIAN" "GUJARATI" "HEBREW" "HINDI" "INDONESIAN" "IRISH" "KANNADA" "KAZAKH" "KHMER" "LAO" "LATVIAN" "LITHUANIAN" "MACEDONIAN" "MALAY" "MALAYALAM" "MARATHI" "MOLDOVIAN" "MONGOLIAN" "PUNJABI" "ROMANIAN" "SINHALESE" "SOMALI" "SWAHILI" "TAJIK" "TAMIL" "TELUGU" "TIBETAN" "TIGRINYA" "TURKMEN" "URDU" "UZBEK" "VIETNAMESE" "WELSH" "ZULU" "<Use Native Language>", Default="<Use Native Language>", Value = "<Use Native Language>"
+DeviceMainsPower               = Type=bool, Default="false", Value = "false"
+DeviceName                     = Type=string, Default="My Computer", Value = "My Computer"
+DeviceOS                       = Type=string, Allowed="NONE" "SYMBIAN" "BREW" "WINDOWS" "WINMOBILE" "LINUX" "WIPI" "NDS" "ARM_SEMIH" "NUCLEUS" "NGI" "WINCE" "SHARPEMP" "OSX" "IPHONE" "UIQ" "PS3" "X360" "ANDROID" "WEBOS" "QNX", Default="NONE", Value = "NONE"
+DeviceOSVersion                = Type=string, Default="", Value = ""
+DeviceOSVersionNumber          = Type=int, Default="0", Value = "0"
+DevicePhoneNumber              = Type=string, Default="0044123456789", Value = "0044123456789"
+DeviceTimezone                 = Type=string, Default="SYSTEM", Value = "SYSTEM"
+DeviceTotalRAM                 = Type=int, Min=0.000000, Max=2097151.000000, Default="1048576", Value = "1048576"
+DeviceUniqueID                 = Type=string, Default="SIMULATOR_ID", Value = "SIMULATOR_ID"
+DeviceUniqueIDInt              = Type=int, Default="01234567890", Value = "01234567890"
+FileTotalStorageSize           = Type=int, Min=0.000000, Max=2147483648.000000, Default="67108864", Value = "67108864"
+FileUseSeparateRomRam          = Type=bool, Default="true", Value = "true"
+FileUseTotalStorageSize        = Type=bool, Default="false", Value = "false"
+GLAPI                          = Type=string, Allowed="None" "GLES 1.0 Common-Lite Profile from Imagination POWERVR(TM)" "GLES 1.1 Common-Lite Profile from Imagination POWERVR(TM)" "GLES 1.0 Common Profile from Imagination POWERVR(TM)" "GLES 1.1 Common Profile from Imagination POWERVR(TM)" "GLES 2.0 from Imagination POWERVR(TM)" "Obey [S3E] SysGlesVersion .icf setting" "GLES 1.1 Common Profile from Qualcomm Snapdragon(TM)" "GLES 2.0 from Qualcomm Snapdragon(TM)" "GLES 2.0 ANGLE" "GLES 2.0 ANGLE DirectX 11", Default="Obey [S3E] SysGlesVersion .icf setting", Value = "Obey [S3E] SysGlesVersion .icf setting"
+GLDontUseHiddenWindow          = Type=bool, Default="false", Value = "false"
+GLTerminateOnSuspend           = Type=bool, Default="false", Value = "false"
+GLUsePVRVFrame                 = Type=bool, Default="false", Value = "false"
+KeyboardHasAlpha               = Type=bool, Default="true", Value = "true"
+KeyboardHasDirection           = Type=bool, Default="true", Value = "true"
+KeyboardHasKeypad              = Type=bool, Default="true", Value = "true"
+KeyboardNumpadRotation         = Type=string, Allowed="Rot0" "Rot90" "Rot180" "Rot270", Default="Rot0", Value = "Rot0"
+LicenseExpiryDate              = Type=int, Min=0.000000, Max=999999995904.000000, Default="0", Value = "0"
+LicenseMinutesRemaining        = Type=int, Min=0.000000, Max=10000000.000000, Default="0", Value = "0"
+LicenseStatus                  = Type=string, Allowed="EXPIRED" "DEMO" "USECOUNT" "EXPIRYDATE" "EXPIRYMINSUSE" "PURCHASE" "SUBSCRIPTION" "UPGRADE" "NONCOMMERCIAL", Default="NONCOMMERCIAL", Value = "NONCOMMERCIAL"
+LicenseUsesRemaining           = Type=int, Min=0.000000, Max=10000000.000000, Default="0", Value = "0"
+LocationAltitude               = Type=float, Min=-2000.000000, Max=100000.000000, Default="60.0", Value = "60.0"
+LocationAvailable              = Type=bool, Default="true", Value = "true"
+LocationHeading                = Type=float, Min=0.000000, Max=359.000000, Default="0.0", Value = "0.0"
+LocationHorizontalAccuracy     = Type=float, Min=0.000000, Max=100000.000000, Default="20.0", Value = "20.0"
+LocationLatitude               = Type=float, Min=-90.000000, Max=90.000000, Default="51.511791", Value = "51.511791"
+LocationLongitude              = Type=float, Min=-180.000000, Max=180.000000, Default="-0.191084", Value = "-0.191084"
+LocationSpeed                  = Type=float, Min=0.000000, Max=10000.000000, Default="0", Value = "0"
+LocationVerticalAccuracy       = Type=float, Min=0.000000, Max=100000.000000, Default="100.0", Value = "100.0"
+MacOSSimulatorCustomSettings   = Type=string, Default="", Value = ""
+MacOSSimulatorDevices_ANDROID  = Type=string, Allowed="Samsung Galaxy S:480x800:512" "HTC Sensation XL:480x800:768" "Samsung Galaxy Note:800x1280:1024" "Motorola Droid Razr:540x960:1024" "Kindle Fire:1024x600:512" "Samsung Galaxy Tab:1024x600:512", Default="Samsung Galaxy S:480x800:512", Value = "Samsung Galaxy S:480x800:512"
+MacOSSimulatorDevices_IPHONE   = Type=string, Allowed="iPhone 3GS:320x480:256" "iPhone 4:640x960:512" "iPhone 5:640x1136:1024" "iPad:768x1024:256" "iPad 2:768x1024:512" "iPad 3:1536x2048:1024", Default="iPhone 3GS:320x480:256", Value = "iPhone 3GS:320x480:256"
+MacOSSimulatorPlatforms        = Type=string, Allowed="IPHONE" "ANDROID", Default="IPHONE", Value = "IPHONE"
+MacOSSimulatorUseCustomSettings = Type=bool, Default="true", Value = "true"
+MemoryPoison                   = Type=bool, Default="true", Value = "true"
+MemoryPoisonAlloc              = Type=int, Min=0.000000, Max=255.000000, Default="170", Value = "170"
+MemoryPoisonFree               = Type=int, Min=0.000000, Max=255.000000, Default="221", Value = "221"
+MemoryPoisonInit               = Type=int, Min=0.000000, Max=255.000000, Default="204", Value = "204"
+PointerAvailable               = Type=bool, Default="true", Value = "true"
+PointerMultiSimulationMode     = Type=bool, Default="false", Value = "false"
+PointerMultiTouchAvailable     = Type=bool, Default="false", Value = "false"
+PointerStylusType              = Type=string, Allowed="INVALID" "STYLUS" "FINGER", Default="INVALID", Value = "INVALID"
+PointerType                    = Type=string, Allowed="INVALID" "MOUSE" "STYLUS", Default="MOUSE", Value = "MOUSE"
+SMSEnabled                     = Type=bool, Default="true", Value = "true"
+SMSReceiveEnabled              = Type=bool, Default="true", Value = "true"
+SocketDNSDelay                 = Type=int, Min=0.000000, Max=30000.000000, Default="0", Value = "0"
+SocketHTTPProxy                = Type=string, Default="", Value = ""
+SocketHostName                 = Type=string, Default="", Value = ""
+SocketNetworkAvailable         = Type=bool, Default="true", Value = "true"
+SocketNetworkLoss              = Type=bool, Default="false", Value = "false"
+SocketNetworkType              = Type=string, Allowed="NONE" "UNKNOWN" "LAN" "WLAN" "GPRS" "UMTS" "EVDO" "CDMA2000" "HSDPA" "WIMAX" "BLUETOOTH" "EDGE" "CDMA" "IDEN" "LTE" "EHRPD" "HSPAPLUS", Default="LAN", Value = "LAN"
+SocketRecvLimit                = Type=int, Min=0.000000, Max=1000000.000000, Default="0", Value = "0"
+SocketSendLimit                = Type=int, Min=0.000000, Max=1000000.000000, Default="0", Value = "0"
+SoundEnabled                   = Type=bool, Default="true", Value = "true"
+SoundRecordEnabled             = Type=bool, Default="true", Value = "true"
+SoundSampleRate                = Type=int, Allowed="8192" "11025" "16000" "22050" "44100", Default="22050", Value = "22050"
+SoundStereo                    = Type=bool, Default="true", Value = "true"
+SoundVolumeDefault             = Type=int, Min=0.000000, Max=256.000000, Default="256", Value = "256"
+SurfaceDisableWhenGLIsActive   = Type=bool, Default="false", Value = "false"
+SurfaceDoubleBuffer            = Type=bool, Default="false", Value = "false"
+SurfaceHeight                  = Type=int, Min=128.000000, Max=4096.000000, Default="480", Value = "640"
+SurfacePitch                   = Type=int, Min=0.000000, Max=8192.000000, Default="0", Value = "0"
+SurfacePixelType               = Type=string, Allowed="RGB444" "RGB555" "RGB565" "RGB666" "RGB888" "BGR444" "BGR555" "BGR565" "BGR666" "BGR888", Default="RGB565", Value = "RGB565"
+SurfacePredefinedResolution    = Type=string, Allowed="176x200" "176x208" "240x320 (QVGA Portrait)" "240x400" "320x240 (QVGA Landscape)" "320x400" "320x480 (iPhone Portrait)" "400x240" "480x320 (iPhone Landscape)" "360x640 (qHD Portrait)" "640x360 (qHD Landscape)" "480x640 (VGA Portrait)" "480x800 (WVGA Portrait)" "640x480 (VGA Landscape)" "800x400" "800x480 (WVGA Landscape)" "640x960 (iPhone 4 Portrait)" "960x640 (iPhone 4 Landscape)" "640x1136 (iPhone 5 Portrait)" "1136x640 (iPhone 5 Landscape)" "1024x600 (Playbook Landscape)" "600x1024 (Playbook Portrait)" "768x1024 (iPad Portrait)" "1024x768 (iPad Landscape)" "2048x1536 (iPad Retina Landscape)" "1536x2048 (iPad Retina Portrait)", Default="320x480 (iPhone Portrait)", Value = "176x200"
+SurfaceRotation                = Type=string, Allowed="Rot0" "Rot90" "Rot180" "Rot270", Default="Rot0", Value = "Rot0"
+SurfaceUnalign                 = Type=bool, Default="true", Value = "true"
+SurfaceUseMultiBuffers         = Type=bool, Default="true", Value = "true"
+SurfaceWidth                   = Type=int, Min=128.000000, Max=4096.000000, Default="320", Value = "960"
+SymbianSoundLatency            = Type=int, Min=20.000000, Max=1400.000000, Default="120", Value = "120"
+ThreadEnabled                  = Type=bool, Default="true", Value = "true"
+TimerAccuracy                  = Type=int, Min=0.000000, Max=1000.000000, Default="0", Value = "0"
+TimerHiRes                     = Type=bool, Default="false", Value = "false"
+TimerLocaltimeOffsetHours      = Type=string, Allowed="-12" "-11" "-10" "-9" "-8" "-7" "-6" "-5" "-4" "-3" "-2" "-1" "0" "+1" "+2" "+3" "+4" "+5" "+6" "+7" "+8" "+9" "+10" "+11" "+12" "+13" "SYSTEM", Default="SYSTEM", Value = "SYSTEM"
+VibraEnabled                   = Type=bool, Default="true", Value = "true"
+Video3GPP                      = Type=bool, Default="false", Value = "false"
+VideoJPEG                      = Type=bool, Default="true", Value = "true"
+VideoMPEG4                     = Type=bool, Default="true", Value = "true"
+VideoVolumeDefault             = Type=int, Min=0.000000, Max=256.000000, Default="256", Value = "256"

+ 105 - 0
examples/Game/part5/data/fonts/huge.fnt

@@ -0,0 +1,105 @@
+<?xml version="1.0"?>
+<font>
+  <info face="Comic Sans MS" size="-48" bold="1" italic="0" charset="" unicode="1" stretchH="100" smooth="1" aa="1" padding="0,0,0,0" spacing="1,1" outline="2"/>
+  <common lineHeight="67" base="53" scaleW="512" scaleH="512" pages="1" packed="0" alphaChnl="1" redChnl="0" greenChnl="0" blueChnl="0"/>
+  <pages>
+    <page id="0" file="huge_0.png" />
+  </pages>
+  <chars count="95">
+    <char id="32" x="499" y="149" width="7" height="5" xoffset="-3" yoffset="64" xadvance="21" page="0" chnl="15" />
+    <char id="33" x="180" y="51" width="12" height="43" xoffset="-1" yoffset="13" xadvance="11" page="0" chnl="15" />
+    <char id="34" x="131" y="216" width="23" height="19" xoffset="-1" yoffset="13" xadvance="21" page="0" chnl="15" />
+    <char id="35" x="391" y="0" width="45" height="43" xoffset="-3" yoffset="13" xadvance="40" page="0" chnl="15" />
+    <char id="36" x="0" y="0" width="34" height="53" xoffset="-1" yoffset="11" xadvance="33" page="0" chnl="15" />
+    <char id="37" x="307" y="46" width="41" height="42" xoffset="0" yoffset="13" xadvance="39" page="0" chnl="15" />
+    <char id="38" x="0" y="98" width="35" height="42" xoffset="-2" yoffset="15" xadvance="31" page="0" chnl="15" />
+    <char id="39" x="499" y="129" width="12" height="19" xoffset="4" yoffset="13" xadvance="21" page="0" chnl="15" />
+    <char id="40" x="57" y="0" width="21" height="52" xoffset="-1" yoffset="13" xadvance="18" page="0" chnl="15" />
+    <char id="41" x="35" y="0" width="21" height="52" xoffset="-1" yoffset="13" xadvance="18" page="0" chnl="15" />
+    <char id="42" x="75" y="223" width="29" height="23" xoffset="-3" yoffset="13" xadvance="25" page="0" chnl="15" />
+    <char id="43" x="24" y="223" width="28" height="25" xoffset="1" yoffset="26" xadvance="29" page="0" chnl="15" />
+    <char id="44" x="234" y="211" width="15" height="15" xoffset="2" yoffset="48" xadvance="21" page="0" chnl="15" />
+    <char id="45" x="264" y="211" width="25" height="9" xoffset="2" yoffset="36" xadvance="29" page="0" chnl="15" />
+    <char id="46" x="250" y="211" width="13" height="10" xoffset="4" yoffset="47" xadvance="21" page="0" chnl="15" />
+    <char id="47" x="362" y="0" width="28" height="44" xoffset="-2" yoffset="13" xadvance="25" page="0" chnl="15" />
+    <char id="48" x="255" y="137" width="33" height="41" xoffset="-2" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="49" x="476" y="129" width="22" height="40" xoffset="3" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="50" x="446" y="129" width="29" height="40" xoffset="0" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="51" x="299" y="90" width="30" height="42" xoffset="-1" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="52" x="220" y="138" width="34" height="41" xoffset="-3" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="53" x="140" y="96" width="31" height="42" xoffset="-1" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="54" x="204" y="95" width="31" height="42" xoffset="-1" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="55" x="150" y="139" width="34" height="41" xoffset="-2" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="56" x="172" y="96" width="31" height="42" xoffset="-1" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="57" x="322" y="133" width="32" height="41" xoffset="-2" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="58" x="498" y="170" width="13" height="28" xoffset="4" yoffset="26" xadvance="21" page="0" chnl="15" />
+    <char id="59" x="81" y="182" width="15" height="35" xoffset="2" yoffset="26" xadvance="21" page="0" chnl="15" />
+    <char id="60" x="53" y="223" width="21" height="24" xoffset="3" yoffset="26" xadvance="29" page="0" chnl="15" />
+    <char id="61" x="105" y="216" width="25" height="19" xoffset="2" yoffset="29" xadvance="29" page="0" chnl="15" />
+    <char id="62" x="0" y="224" width="23" height="26" xoffset="4" yoffset="26" xadvance="29" page="0" chnl="15" />
+    <char id="63" x="355" y="132" width="29" height="41" xoffset="-1" yoffset="15" xadvance="27" page="0" chnl="15" />
+    <char id="64" x="282" y="0" width="46" height="45" xoffset="-1" yoffset="13" xadvance="45" page="0" chnl="15" />
+    <char id="65" x="77" y="140" width="36" height="41" xoffset="-1" yoffset="15" xadvance="35" page="0" chnl="15" />
+    <char id="66" x="289" y="133" width="32" height="41" xoffset="0" yoffset="15" xadvance="30" page="0" chnl="15" />
+    <char id="67" x="72" y="97" width="34" height="42" xoffset="-2" yoffset="14" xadvance="30" page="0" chnl="15" />
+    <char id="68" x="36" y="98" width="35" height="42" xoffset="1" yoffset="15" xadvance="35" page="0" chnl="15" />
+    <char id="69" x="329" y="0" width="32" height="44" xoffset="0" yoffset="13" xadvance="30" page="0" chnl="15" />
+    <char id="70" x="107" y="96" width="32" height="42" xoffset="-1" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="71" x="391" y="44" width="38" height="42" xoffset="-2" yoffset="15" xadvance="33" page="0" chnl="15" />
+    <char id="72" x="470" y="87" width="38" height="41" xoffset="0" yoffset="15" xadvance="37" page="0" chnl="15" />
+    <char id="73" x="415" y="130" width="30" height="40" xoffset="-2" yoffset="15" xadvance="26" page="0" chnl="15" />
+    <char id="74" x="437" y="0" width="35" height="43" xoffset="-1" yoffset="15" xadvance="32" page="0" chnl="15" />
+    <char id="75" x="473" y="0" width="31" height="43" xoffset="0" yoffset="15" xadvance="29" page="0" chnl="15" />
+    <char id="76" x="268" y="90" width="30" height="42" xoffset="-1" yoffset="15" xadvance="26" page="0" chnl="15" />
+    <char id="77" x="261" y="47" width="45" height="42" xoffset="-1" yoffset="15" xadvance="42" page="0" chnl="15" />
+    <char id="78" x="349" y="45" width="41" height="42" xoffset="-1" yoffset="15" xadvance="39" page="0" chnl="15" />
+    <char id="79" x="389" y="88" width="40" height="41" xoffset="-1" yoffset="15" xadvance="38" page="0" chnl="15" />
+    <char id="80" x="385" y="131" width="29" height="41" xoffset="-1" yoffset="15" xadvance="26" page="0" chnl="15" />
+    <char id="81" x="164" y="0" width="47" height="50" xoffset="-2" yoffset="15" xadvance="42" page="0" chnl="15" />
+    <char id="82" x="185" y="139" width="34" height="41" xoffset="-1" yoffset="15" xadvance="31" page="0" chnl="15" />
+    <char id="83" x="15" y="183" width="37" height="39" xoffset="-2" yoffset="17" xadvance="33" page="0" chnl="15" />
+    <char id="84" x="0" y="141" width="38" height="41" xoffset="-2" yoffset="15" xadvance="33" page="0" chnl="15" />
+    <char id="85" x="430" y="44" width="37" height="42" xoffset="-1" yoffset="15" xadvance="35" page="0" chnl="15" />
+    <char id="86" x="114" y="139" width="35" height="41" xoffset="-1" yoffset="15" xadvance="32" page="0" chnl="15" />
+    <char id="87" x="206" y="51" width="54" height="42" xoffset="-2" yoffset="15" xadvance="50" page="0" chnl="15" />
+    <char id="88" x="430" y="87" width="39" height="41" xoffset="-2" yoffset="15" xadvance="35" page="0" chnl="15" />
+    <char id="89" x="468" y="44" width="36" height="42" xoffset="-3" yoffset="15" xadvance="31" page="0" chnl="15" />
+    <char id="90" x="39" y="141" width="37" height="41" xoffset="-2" yoffset="15" xadvance="33" page="0" chnl="15" />
+    <char id="91" x="212" y="0" width="20" height="50" xoffset="0" yoffset="15" xadvance="18" page="0" chnl="15" />
+    <char id="92" x="153" y="52" width="26" height="43" xoffset="1" yoffset="15" xadvance="26" page="0" chnl="15" />
+    <char id="93" x="233" y="0" width="19" height="50" xoffset="-1" yoffset="15" xadvance="18" page="0" chnl="15" />
+    <char id="94" x="155" y="214" width="27" height="16" xoffset="1" yoffset="11" xadvance="29" page="0" chnl="15" />
+    <char id="95" x="290" y="210" width="40" height="8" xoffset="-5" yoffset="55" xadvance="30" page="0" chnl="15" />
+    <char id="96" x="216" y="213" width="17" height="15" xoffset="0" yoffset="12" xadvance="27" page="0" chnl="15" />
+    <char id="97" x="265" y="179" width="30" height="30" xoffset="-1" yoffset="26" xadvance="27" page="0" chnl="15" />
+    <char id="98" x="32" y="54" width="30" height="43" xoffset="-1" yoffset="13" xadvance="28" page="0" chnl="15" />
+    <char id="99" x="414" y="173" width="28" height="30" xoffset="-2" yoffset="26" xadvance="25" page="0" chnl="15" />
+    <char id="100" x="0" y="54" width="31" height="43" xoffset="-2" yoffset="13" xadvance="28" page="0" chnl="15" />
+    <char id="101" x="296" y="175" width="30" height="30" xoffset="-2" yoffset="26" xadvance="27" page="0" chnl="15" />
+    <char id="102" x="253" y="0" width="28" height="46" xoffset="-2" yoffset="13" xadvance="24" page="0" chnl="15" />
+    <char id="103" x="330" y="89" width="29" height="42" xoffset="-2" yoffset="26" xadvance="25" page="0" chnl="15" />
+    <char id="104" x="123" y="52" width="29" height="43" xoffset="0" yoffset="13" xadvance="28" page="0" chnl="15" />
+    <char id="105" x="0" y="183" width="14" height="40" xoffset="0" yoffset="16" xadvance="13" page="0" chnl="15" />
+    <char id="106" x="140" y="0" width="23" height="51" xoffset="-4" yoffset="17" xadvance="19" page="0" chnl="15" />
+    <char id="107" x="93" y="52" width="29" height="43" xoffset="-1" yoffset="13" xadvance="26" page="0" chnl="15" />
+    <char id="108" x="193" y="51" width="12" height="43" xoffset="0" yoffset="13" xadvance="13" page="0" chnl="15" />
+    <char id="109" x="97" y="182" width="40" height="33" xoffset="-1" yoffset="25" xadvance="37" page="0" chnl="15" />
+    <char id="110" x="138" y="181" width="28" height="32" xoffset="-1" yoffset="25" xadvance="25" page="0" chnl="15" />
+    <char id="111" x="327" y="175" width="28" height="30" xoffset="-2" yoffset="26" xadvance="25" page="0" chnl="15" />
+    <char id="112" x="63" y="53" width="29" height="43" xoffset="-1" yoffset="25" xadvance="26" page="0" chnl="15" />
+    <char id="113" x="360" y="88" width="28" height="42" xoffset="-2" yoffset="26" xadvance="25" page="0" chnl="15" />
+    <char id="114" x="205" y="181" width="26" height="31" xoffset="-1" yoffset="26" xadvance="23" page="0" chnl="15" />
+    <char id="115" x="471" y="170" width="26" height="30" xoffset="-2" yoffset="26" xadvance="23" page="0" chnl="15" />
+    <char id="116" x="53" y="183" width="27" height="39" xoffset="-2" yoffset="18" xadvance="23" page="0" chnl="15" />
+    <char id="117" x="443" y="171" width="27" height="30" xoffset="-1" yoffset="26" xadvance="25" page="0" chnl="15" />
+    <char id="118" x="356" y="174" width="28" height="30" xoffset="-2" yoffset="26" xadvance="23" page="0" chnl="15" />
+    <char id="119" x="167" y="181" width="37" height="31" xoffset="-2" yoffset="26" xadvance="33" page="0" chnl="15" />
+    <char id="120" x="232" y="180" width="32" height="30" xoffset="-2" yoffset="26" xadvance="28" page="0" chnl="15" />
+    <char id="121" x="236" y="94" width="31" height="42" xoffset="-2" yoffset="26" xadvance="27" page="0" chnl="15" />
+    <char id="122" x="385" y="173" width="28" height="30" xoffset="-1" yoffset="26" xadvance="26" page="0" chnl="15" />
+    <char id="123" x="116" y="0" width="23" height="51" xoffset="-3" yoffset="13" xadvance="18" page="0" chnl="15" />
+    <char id="124" x="79" y="0" width="12" height="52" xoffset="4" yoffset="11" xadvance="20" page="0" chnl="15" />
+    <char id="125" x="92" y="0" width="23" height="51" xoffset="-3" yoffset="13" xadvance="18" page="0" chnl="15" />
+    <char id="126" x="183" y="213" width="32" height="15" xoffset="-2" yoffset="29" xadvance="29" page="0" chnl="15" />
+  </chars>
+</font>

BIN
examples/Game/part5/data/fonts/huge_0.png


+ 105 - 0
examples/Game/part5/data/fonts/normal.fnt

@@ -0,0 +1,105 @@
+<?xml version="1.0"?>
+<font>
+  <info face="Comic Sans MS" size="-32" 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="45" base="36" scaleW="512" scaleH="128" pages="1" packed="0" alphaChnl="0" redChnl="4" greenChnl="4" blueChnl="4"/>
+  <pages>
+    <page id="0" file="normal_0.png" />
+  </pages>
+  <chars count="95">
+    <char id="32" x="507" y="0" width="3" height="1" xoffset="-1" yoffset="44" xadvance="14" page="0" chnl="15" />
+    <char id="33" x="107" y="32" width="6" height="26" xoffset="1" yoffset="11" xadvance="8" page="0" chnl="15" />
+    <char id="34" x="78" y="85" width="12" height="10" xoffset="1" yoffset="11" xadvance="14" page="0" chnl="15" />
+    <char id="35" x="250" y="0" width="28" height="26" xoffset="-1" yoffset="11" xadvance="27" page="0" chnl="15" />
+    <char id="36" x="0" y="0" width="20" height="34" xoffset="1" yoffset="8" xadvance="22" page="0" chnl="15" />
+    <char id="37" x="308" y="0" width="25" height="26" xoffset="1" yoffset="10" xadvance="26" page="0" chnl="15" />
+    <char id="38" x="406" y="0" width="21" height="26" xoffset="0" yoffset="12" xadvance="21" page="0" chnl="15" />
+    <char id="39" x="91" y="85" width="6" height="10" xoffset="4" yoffset="11" xadvance="14" page="0" chnl="15" />
+    <char id="40" x="55" y="0" width="12" height="32" xoffset="0" yoffset="11" xadvance="12" page="0" chnl="15" />
+    <char id="41" x="42" y="0" width="12" height="32" xoffset="0" yoffset="11" xadvance="12" page="0" chnl="15" />
+    <char id="42" x="43" y="86" width="17" height="13" xoffset="-1" yoffset="11" xadvance="17" page="0" chnl="15" />
+    <char id="43" x="61" y="86" width="16" height="13" xoffset="2" yoffset="20" xadvance="20" page="0" chnl="15" />
+    <char id="44" x="140" y="84" width="7" height="8" xoffset="3" yoffset="34" xadvance="14" page="0" chnl="15" />
+    <char id="45" x="173" y="54" width="14" height="3" xoffset="3" yoffset="26" xadvance="20" page="0" chnl="15" />
+    <char id="46" x="168" y="84" width="6" height="4" xoffset="4" yoffset="34" xadvance="14" page="0" chnl="15" />
+    <char id="47" x="116" y="59" width="17" height="25" xoffset="0" yoffset="12" xadvance="16" page="0" chnl="15" />
+    <char id="48" x="426" y="27" width="20" height="25" xoffset="0" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="49" x="227" y="53" width="13" height="24" xoffset="3" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="50" x="190" y="54" width="18" height="24" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="51" x="40" y="60" width="18" height="25" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="52" x="169" y="58" width="20" height="24" xoffset="0" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="53" x="0" y="62" width="19" height="25" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="54" x="78" y="59" width="18" height="25" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="55" x="361" y="27" width="21" height="25" xoffset="0" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="56" x="59" y="60" width="18" height="25" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="57" x="447" y="27" width="20" height="25" xoffset="0" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="58" x="503" y="53" width="6" height="16" xoffset="4" yoffset="19" xadvance="14" page="0" chnl="15" />
+    <char id="59" x="290" y="53" width="8" height="20" xoffset="3" yoffset="19" xadvance="14" page="0" chnl="15" />
+    <char id="60" x="30" y="88" width="12" height="14" xoffset="3" yoffset="19" xadvance="20" page="0" chnl="15" />
+    <char id="61" x="98" y="85" width="14" height="9" xoffset="3" yoffset="23" xadvance="20" page="0" chnl="15" />
+    <char id="62" x="16" y="88" width="13" height="15" xoffset="4" yoffset="19" xadvance="20" page="0" chnl="15" />
+    <char id="63" x="152" y="58" width="16" height="25" xoffset="1" yoffset="12" xadvance="18" page="0" chnl="15" />
+    <char id="64" x="168" y="0" width="29" height="27" xoffset="0" yoffset="11" xadvance="30" page="0" chnl="15" />
+    <char id="65" x="383" y="27" width="21" height="25" xoffset="1" yoffset="12" xadvance="23" page="0" chnl="15" />
+    <char id="66" x="488" y="27" width="19" height="25" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="67" x="405" y="27" width="20" height="25" xoffset="0" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="68" x="383" y="0" width="22" height="26" xoffset="1" yoffset="12" xadvance="23" page="0" chnl="15" />
+    <char id="69" x="448" y="0" width="19" height="26" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="70" x="97" y="59" width="18" height="25" xoffset="1" yoffset="12" xadvance="19" page="0" chnl="15" />
+    <char id="71" x="246" y="27" width="23" height="25" xoffset="0" yoffset="12" xadvance="22" page="0" chnl="15" />
+    <char id="72" x="222" y="27" width="23" height="25" xoffset="1" yoffset="12" xadvance="25" page="0" chnl="15" />
+    <char id="73" x="209" y="54" width="17" height="24" xoffset="0" yoffset="12" xadvance="17" page="0" chnl="15" />
+    <char id="74" x="360" y="0" width="22" height="26" xoffset="0" yoffset="12" xadvance="21" page="0" chnl="15" />
+    <char id="75" x="468" y="0" width="19" height="26" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="76" x="20" y="62" width="19" height="25" xoffset="0" yoffset="12" xadvance="18" page="0" chnl="15" />
+    <char id="77" x="279" y="0" width="28" height="26" xoffset="0" yoffset="12" xadvance="28" page="0" chnl="15" />
+    <char id="78" x="334" y="0" width="25" height="26" xoffset="1" yoffset="12" xadvance="26" page="0" chnl="15" />
+    <char id="79" x="121" y="32" width="26" height="25" xoffset="0" yoffset="12" xadvance="26" page="0" chnl="15" />
+    <char id="80" x="134" y="58" width="17" height="25" xoffset="0" yoffset="12" xadvance="17" page="0" chnl="15" />
+    <char id="81" x="68" y="0" width="29" height="31" xoffset="0" yoffset="12" xadvance="28" page="0" chnl="15" />
+    <char id="82" x="468" y="27" width="19" height="25" xoffset="1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="83" x="270" y="27" width="22" height="25" xoffset="0" yoffset="12" xadvance="22" page="0" chnl="15" />
+    <char id="84" x="173" y="28" width="24" height="25" xoffset="-1" yoffset="12" xadvance="22" page="0" chnl="15" />
+    <char id="85" x="293" y="27" width="22" height="25" xoffset="1" yoffset="12" xadvance="24" page="0" chnl="15" />
+    <char id="86" x="316" y="27" width="22" height="25" xoffset="0" yoffset="12" xadvance="22" page="0" chnl="15" />
+    <char id="87" x="216" y="0" width="33" height="26" xoffset="0" yoffset="12" xadvance="33" page="0" chnl="15" />
+    <char id="88" x="148" y="32" width="24" height="25" xoffset="-1" yoffset="12" xadvance="23" page="0" chnl="15" />
+    <char id="89" x="339" y="27" width="21" height="25" xoffset="-1" yoffset="12" xadvance="20" page="0" chnl="15" />
+    <char id="90" x="198" y="28" width="23" height="25" xoffset="-1" yoffset="12" xadvance="22" page="0" chnl="15" />
+    <char id="91" x="139" y="0" width="11" height="31" xoffset="1" yoffset="11" xadvance="12" page="0" chnl="15" />
+    <char id="92" x="90" y="32" width="16" height="26" xoffset="1" yoffset="12" xadvance="18" page="0" chnl="15" />
+    <char id="93" x="127" y="0" width="11" height="31" xoffset="0" yoffset="11" xadvance="12" page="0" chnl="15" />
+    <char id="94" x="113" y="85" width="16" height="8" xoffset="2" yoffset="9" xadvance="20" page="0" chnl="15" />
+    <char id="95" x="175" y="83" width="24" height="3" xoffset="-2" yoffset="38" xadvance="20" page="0" chnl="15" />
+    <char id="96" x="130" y="85" width="9" height="8" xoffset="1" yoffset="9" xadvance="18" page="0" chnl="15" />
+    <char id="97" x="342" y="53" width="18" height="18" xoffset="0" yoffset="19" xadvance="18" page="0" chnl="15" />
+    <char id="98" x="0" y="35" width="17" height="26" xoffset="1" yoffset="11" xadvance="19" page="0" chnl="15" />
+    <char id="99" x="470" y="53" width="16" height="18" xoffset="0" yoffset="19" xadvance="16" page="0" chnl="15" />
+    <char id="100" x="488" y="0" width="18" height="26" xoffset="0" yoffset="11" xadvance="19" page="0" chnl="15" />
+    <char id="101" x="361" y="53" width="18" height="18" xoffset="0" yoffset="19" xadvance="18" page="0" chnl="15" />
+    <char id="102" x="151" y="0" width="16" height="28" xoffset="0" yoffset="11" xadvance="16" page="0" chnl="15" />
+    <char id="103" x="18" y="35" width="17" height="26" xoffset="0" yoffset="19" xadvance="17" page="0" chnl="15" />
+    <char id="104" x="36" y="33" width="17" height="26" xoffset="1" yoffset="11" xadvance="18" page="0" chnl="15" />
+    <char id="105" x="241" y="53" width="7" height="24" xoffset="1" yoffset="13" xadvance="9" page="0" chnl="15" />
+    <char id="106" x="27" y="0" width="14" height="32" xoffset="-2" yoffset="13" xadvance="13" page="0" chnl="15" />
+    <char id="107" x="72" y="32" width="17" height="26" xoffset="1" yoffset="11" xadvance="17" page="0" chnl="15" />
+    <char id="108" x="114" y="32" width="6" height="26" xoffset="1" yoffset="11" xadvance="9" page="0" chnl="15" />
+    <char id="109" x="265" y="53" width="24" height="20" xoffset="1" yoffset="18" xadvance="25" page="0" chnl="15" />
+    <char id="110" x="380" y="53" width="17" height="18" xoffset="0" yoffset="19" xadvance="17" page="0" chnl="15" />
+    <char id="111" x="398" y="53" width="17" height="18" xoffset="0" yoffset="19" xadvance="17" page="0" chnl="15" />
+    <char id="112" x="198" y="0" width="17" height="27" xoffset="0" yoffset="18" xadvance="17" page="0" chnl="15" />
+    <char id="113" x="54" y="33" width="17" height="26" xoffset="-1" yoffset="19" xadvance="17" page="0" chnl="15" />
+    <char id="114" x="0" y="88" width="15" height="18" xoffset="0" yoffset="19" xadvance="15" page="0" chnl="15" />
+    <char id="115" x="487" y="53" width="15" height="18" xoffset="0" yoffset="19" xadvance="16" page="0" chnl="15" />
+    <char id="116" x="249" y="53" width="15" height="23" xoffset="0" yoffset="14" xadvance="15" page="0" chnl="15" />
+    <char id="117" x="416" y="53" width="17" height="18" xoffset="0" yoffset="19" xadvance="17" page="0" chnl="15" />
+    <char id="118" x="434" y="53" width="17" height="18" xoffset="0" yoffset="19" xadvance="16" page="0" chnl="15" />
+    <char id="119" x="299" y="53" width="22" height="18" xoffset="0" yoffset="19" xadvance="22" page="0" chnl="15" />
+    <char id="120" x="322" y="53" width="19" height="18" xoffset="0" yoffset="19" xadvance="19" page="0" chnl="15" />
+    <char id="121" x="428" y="0" width="19" height="26" xoffset="-1" yoffset="19" xadvance="18" page="0" chnl="15" />
+    <char id="122" x="452" y="53" width="17" height="18" xoffset="0" yoffset="19" xadvance="17" page="0" chnl="15" />
+    <char id="123" x="113" y="0" width="13" height="31" xoffset="-1" yoffset="11" xadvance="12" page="0" chnl="15" />
+    <char id="124" x="21" y="0" width="5" height="33" xoffset="4" yoffset="9" xadvance="13" page="0" chnl="15" />
+    <char id="125" x="98" y="0" width="14" height="31" xoffset="-1" yoffset="11" xadvance="12" page="0" chnl="15" />
+    <char id="126" x="148" y="84" width="19" height="7" xoffset="0" yoffset="22" xadvance="20" page="0" chnl="15" />
+  </chars>
+</font>

BIN
examples/Game/part5/data/fonts/normal_0.png


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


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


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

@@ -0,0 +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>

+ 28 - 0
examples/Game/part5/data/xmls/ui.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<resources>
+	<set path = "../images/ui" />
+	<atlas>
+		<image file="joystick.png" />
+		<image file="finger.png" />
+		<image file="play.png" />
+		<image file="logo2.png" />
+		<image file="menu.png" />
+		<image file="box9.png" />
+		<image file="bg.jpg" />
+		<image file="buttons.png" rows="5" cols="2"/>
+	</atlas>
+
+	<set path = "fonts" />
+	<font file="normal.fnt"/>
+	<font id="big" file="huge.fnt"/>
+
+	<set path = "../images" />
+	<atlas>
+		<image file="sky.jpg" />
+		<image file="ship.png" />
+		<image file="shipengine.png" />
+		<image file="rocket.png" />
+		<image file="explosion.png" cols="12"/>
+		<image file="asteroid.png"/>
+	</atlas>
+</resources>

+ 1 - 0
examples/Game/part5/gen-atlasses-android(ETC1).bat

@@ -0,0 +1 @@
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data --compress etc1

+ 2 - 0
examples/Game/part5/gen-atlasses-android(ETC1).sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data --compress etc1

+ 1 - 0
examples/Game/part5/gen-atlasses-ios(PVRTC).bat

@@ -0,0 +1 @@
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data --compress pvrtc --quality best

+ 2 - 0
examples/Game/part5/gen-atlasses-ios(PVRTC).sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data --compress pvrtc --quality best

+ 1 - 0
examples/Game/part5/gen-atlasses-low-definition.bat

@@ -0,0 +1 @@
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data -s 0.5 -r

+ 2 - 0
examples/Game/part5/gen-atlasses-low-definition.sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data -s 0.5 -r

+ 1 - 0
examples/Game/part5/gen-atlasses.bat

@@ -0,0 +1 @@
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data

+ 2 - 0
examples/Game/part5/gen-atlasses.sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+python ../../../tools/oxyresbuild.py -x xmls/ui.xml --src_data data --dest_data data

BIN
examples/Game/part5/images/asteroid.png


BIN
examples/Game/part5/images/explosion.png


BIN
examples/Game/part5/images/rocket.png


BIN
examples/Game/part5/images/ship.png


BIN
examples/Game/part5/images/shipengine.png


BIN
examples/Game/part5/images/sky.jpg


BIN
examples/Game/part5/images/ui/bg.jpg


BIN
examples/Game/part5/images/ui/box9.png


BIN
examples/Game/part5/images/ui/buttons.png


BIN
examples/Game/part5/images/ui/finger.png


BIN
examples/Game/part5/images/ui/joystick.png


BIN
examples/Game/part5/images/ui/logo2.png


BIN
examples/Game/part5/images/ui/menu.png


BIN
examples/Game/part5/images/ui/play.png


+ 33 - 0
examples/Game/part5/proj.android/AndroidManifest.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.oxygine.GamePart5"
+      android:versionCode="1"
+      android:versionName="1.0"
+      android:installLocation="auto">
+
+    <application android:label="@string/app_name"
+                 android:icon="@drawable/ic_launcher"
+                 android:allowBackup="true"
+                 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+                 android:hardwareAccelerated="true" >
+
+        <activity android:name="org.oxygine.GamePart5.MainActivity"
+                  android:label="@string/app_name"
+                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+                  android:configChanges="locale|orientation|keyboardHidden" 
+                  android:screenOrientation="landscape">
+
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+    <!-- Android 2.3.3 -->
+    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="12" />
+
+    <!-- OpenGL ES 2.0 -->
+    <uses-feature android:glEsVersion="0x00020000" /> 
+
+</manifest> 

+ 18 - 0
examples/Game/part5/proj.android/ant.properties

@@ -0,0 +1,18 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked into Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+#  'source.dir' for the location of your java source folder and
+#  'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+#  'key.store' for the location of your keystore and
+#  'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
+asset.dir=../data

+ 1 - 0
examples/Game/part5/proj.android/ant_debug.bat

@@ -0,0 +1 @@
+ant debug

+ 2 - 0
examples/Game/part5/proj.android/ant_debug.sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+ant debug

+ 3 - 0
examples/Game/part5/proj.android/build-run.bat

@@ -0,0 +1,3 @@
+call build
+call ant_debug
+call install

+ 4 - 0
examples/Game/part5/proj.android/build-run.sh

@@ -0,0 +1,4 @@
+#!/bin/bash
+sh build.sh
+sh ant_debug.sh
+sh install.sh

+ 1 - 0
examples/Game/part5/proj.android/build.bat

@@ -0,0 +1 @@
+ndk-build NDK_MODULE_PATH=../../../../../ %*

+ 2 - 0
examples/Game/part5/proj.android/build.sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+ndk-build NDK_MODULE_PATH=${ROOT} $@

+ 93 - 0
examples/Game/part5/proj.android/build.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This should be changed to the name of your project -->
+<project name="GamePart5" default="help">
+
+    <!-- The local.properties file is created and updated by the 'android' tool.
+         It contains the path to the SDK. It should *NOT* be checked into
+         Version Control Systems. -->
+    <property file="local.properties" />
+
+    <!-- The ant.properties file can be created by you. It is only edited by the
+         'android' tool to add properties to it.
+         This is the place to change some Ant specific build properties.
+         Here are some properties you may want to change/update:
+
+         source.dir
+             The name of the source directory. Default is 'src'.
+         out.dir
+             The name of the output directory. Default is 'bin'.
+
+         For other overridable properties, look at the beginning of the rules
+         files in the SDK, at tools/ant/build.xml
+
+         Properties related to the SDK location or the project target should
+         be updated using the 'android' tool with the 'update' action.
+
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems.
+
+         -->
+    <property file="ant.properties" />
+
+    <!-- if sdk.dir was not set from one of the property file, then
+         get it from the ANDROID_HOME env var.
+         This must be done before we load project.properties since
+         the proguard config can use sdk.dir -->
+    <property environment="env" />
+    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
+        <isset property="env.ANDROID_HOME" />
+    </condition>
+
+    <!-- The project.properties file is created and updated by the 'android'
+         tool, as well as ADT.
+
+         This contains project specific properties such as project target, and library
+         dependencies. Lower level build properties are stored in ant.properties
+         (or in .classpath for Eclipse projects).
+
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems. -->
+    <loadproperties srcFile="project.properties" />
+
+    <!-- quick check on sdk.dir -->
+    <fail
+            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
+            unless="sdk.dir"
+    />
+
+    <!--
+        Import per project custom build rules if present at the root of the project.
+        This is the place to put custom intermediary targets such as:
+            -pre-build
+            -pre-compile
+            -post-compile (This is typically used for code obfuscation.
+                           Compiled code location: ${out.classes.absolute.dir}
+                           If this is not done in place, override ${out.dex.input.absolute.dir})
+            -post-package
+            -post-build
+            -pre-clean
+    -->
+    <import file="custom_rules.xml" optional="true" />
+
+    <!-- Import the actual build file.
+
+         To customize existing targets, there are two options:
+         - Customize only one target:
+             - copy/paste the target into this file, *before* the
+               <import> task.
+             - customize it to your needs.
+         - Customize the whole content of build.xml
+             - copy/paste the content of the rules files (minus the top node)
+               into this file, replacing the <import> task.
+             - customize to your needs.
+
+         ***********************
+         ****** IMPORTANT ******
+         ***********************
+         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+         in order to avoid having your file be overridden by tools such as "android update project"
+    -->
+    <!-- version-tag: 1 -->
+    <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>

+ 11 - 0
examples/Game/part5/proj.android/default.properties

@@ -0,0 +1,11 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+# 
+# This file must be checked in Version Control Systems.
+# 
+# To customize properties used by the Ant build system use,
+# "build.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-12

+ 2 - 0
examples/Game/part5/proj.android/install.bat

@@ -0,0 +1,2 @@
+adb install -r bin/GamePart5-debug.apk
+adb shell am start -n org.oxygine.GamePart5/org.oxygine.GamePart5.MainActivity

+ 3 - 0
examples/Game/part5/proj.android/install.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+adb install -r bin/${PROJECT}-debug.apk
+adb shell am start -n org.oxygine.${PROJECT}/org.oxygine.${PROJECT}.MainActivity

+ 1 - 0
examples/Game/part5/proj.android/jni/Android.mk

@@ -0,0 +1 @@
+include $(call all-subdir-makefiles)

+ 5 - 0
examples/Game/part5/proj.android/jni/Application.mk

@@ -0,0 +1,5 @@
+APP_STL := gnustl_static
+APP_CPPFLAGS += -fexceptions
+APP_CPPFLAGS += -frtti
+APP_CPPFLAGS += -lstdc++
+APP_ABI := armeabi-v7a

+ 19 - 0
examples/Game/part5/proj.android/jni/src/Android.mk

@@ -0,0 +1,19 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := main
+
+#SDK_ROOT points to folder with SDL and oxygine-framework
+LOCAL_SRC_FILES := ../../../../../../..//SDL/src/main/android/SDL_android_main.c
+
+LOCAL_SRC_FILES += ../../../src/Enemy.cpp ../../../src/Game.cpp ../../../src/GameMenu.cpp ../../../src/GameScene.cpp ../../../src/Joystick.cpp ../../../src/MainMenuScene.cpp ../../../src/MyButton.cpp ../../../src/Player.cpp ../../../src/Rocket.cpp ../../../src/Scene.cpp ../../../src/Unit.cpp ../../../src/entry_point.cpp ../../../src/example.cpp ../../../src/res.cpp 
+
+
+LOCAL_STATIC_LIBRARIES := oxygine-framework_static
+LOCAL_SHARED_LIBRARIES := SDL2
+
+include $(BUILD_SHARED_LIBRARY)
+
+
+#import from NDK_MODULE_PATH defined in build.cmd
+$(call import-module, oxygine-framework)

+ 15 - 0
examples/Game/part5/proj.android/project.properties

@@ -0,0 +1,15 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-12
+android.library.reference.1=../../../../..//oxygine-framework/oxygine/SDL/android/lib

BIN
examples/Game/part5/proj.android/res/drawable-hdpi/ic_launcher.png


BIN
examples/Game/part5/proj.android/res/drawable-mdpi/ic_launcher.png


BIN
examples/Game/part5/proj.android/res/drawable-xhdpi/ic_launcher.png


BIN
examples/Game/part5/proj.android/res/drawable-xxhdpi/ic_launcher.png


+ 13 - 0
examples/Game/part5/proj.android/res/layout/main.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    >
+<TextView  
+    android:layout_width="fill_parent" 
+    android:layout_height="wrap_content" 
+    android:text="Hello World, SDLActivity"
+    />
+</LinearLayout>
+

+ 4 - 0
examples/Game/part5/proj.android/res/values/strings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">GamePart5</string>
+</resources>

+ 8 - 0
examples/Game/part5/proj.android/src/org/oxygine/GamePart5/MainActivity.java

@@ -0,0 +1,8 @@
+package org.oxygine.GamePart5;
+
+import org.oxygine.lib.OxygineActivity;
+
+public class MainActivity extends OxygineActivity
+{
+
+}

+ 11 - 0
examples/Game/part5/proj.cmake/CMakeLists.txt

@@ -0,0 +1,11 @@
+cmake_minimum_required (VERSION 2.6)
+project (GamePart5)
+
+add_subdirectory(../../../../ oxygine-framework)
+add_definitions(${OXYGINE_DEFINITIONS})
+include_directories(${OXYGINE_INCLUDE_DIRS})
+link_directories(${OXYGINE_LIBRARY_DIRS})
+
+add_executable(GamePart5 ../src/Enemy.cpp ../src/Game.cpp ../src/GameMenu.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameMenu.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
+
+target_link_libraries(GamePart5 ${OXYGINE_CORE_LIBS})

+ 25 - 0
examples/Game/part5/proj.emscripten/CMakeLists.txt

@@ -0,0 +1,25 @@
+cmake_minimum_required (VERSION 2.6)
+project (GamePart5)
+
+add_subdirectory(../../../../ oxygine-framework)
+add_definitions(${OXYGINE_DEFINITIONS})
+include_directories(${OXYGINE_INCLUDE_DIRS})
+link_directories(${OXYGINE_LIBRARY_DIRS})
+
+SET(CMAKE_EXECUTABLE_SUFFIX ".html")
+set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wno-warn-absolute-paths")
+
+add_executable(GamePart5 ../src/Enemy.cpp ../src/Game.cpp ../src/GameMenu.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameMenu.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
+
+if (CMAKE_BUILD_TYPE STREQUAL Debug)
+	SET(linkFlags "-g4 ")
+else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimizations enabled.
+	SET(linkFlags "-O2 ")
+endif()
+
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+
+set_target_properties(GamePart5 PROPERTIES LINK_FLAGS "${linkFlags}")
+
+target_link_libraries(GamePart5 ${OXYGINE_CORE_LIBS})
+em_link_pre_js(GamePart5 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 7 - 0
examples/Game/part5/proj.emscripten/build.bat

@@ -0,0 +1,7 @@
+python ../../../..//tools/others/embed_folder_js.py -s ../data
+
+mkdir build
+cd build
+cmake -DCMAKE_TOOLCHAIN_FILE="%EMSCRIPTEN%/cmake/Modules/Platform/emscripten.cmake" -G"Unix Makefiles" .. 
+make
+cd ..

+ 7 - 0
examples/Game/part5/proj.emscripten/build_release.bat

@@ -0,0 +1,7 @@
+python ../../../..//tools/others/embed_folder_js.py -s ../data
+
+mkdir build_release
+cd build_release
+cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="%EMSCRIPTEN%/cmake/Modules/Platform/emscripten.cmake" -G"Unix Makefiles" .. 
+make
+cd ..

+ 51 - 0
examples/Game/part5/proj.ios/GamePart5/GamePart5_ios-Info.plist

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIcons</key>
+	<dict/>
+	<key>CFBundleIcons~ipad</key>
+	<dict/>
+	<key>CFBundleIdentifier</key>
+	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UIStatusBarHidden</key>
+	<true/>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<false/>
+</dict>
+</plist>

+ 53 - 0
examples/Game/part5/proj.ios/GamePart5/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,53 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "60x60"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "76x76"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "76x76"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "29x29"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "29x29"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "29x29"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 49 - 0
examples/Game/part5/proj.ios/GamePart5/Images.xcassets/LaunchImage.launchimage/Contents.json

@@ -0,0 +1,49 @@
+{
+  "images" : [
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "minimum-system-version" : "7.0",
+      "extent" : "full-screen",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "minimum-system-version" : "7.0",
+      "extent" : "full-screen",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "minimum-system-version" : "7.0",
+      "extent" : "full-screen",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "minimum-system-version" : "7.0",
+      "subtype" : "retina4",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "minimum-system-version" : "7.0",
+      "extent" : "full-screen",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 51 - 0
examples/Game/part5/proj.ios/GamePart5/LaunchImage.launchimage/Contents.json

@@ -0,0 +1,51 @@
+{
+  "images" : [
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "subtype" : "retina4",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 535 - 0
examples/Game/part5/proj.ios/GamePart5_ios.xcodeproj/project.pbxproj

@@ -0,0 +1,535 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		048AD0AE197D24AB001963EF /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 048AD0AD197D24AB001963EF /* CoreMotion.framework */; };
+		04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998D3517F8A96E003441C3 /* libSDL2.a */; };
+		04998EE617F8ADB4003441C3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE117F8ADB4003441C3 /* libz.dylib */; };
+		04998EE717F8ADB4003441C3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE217F8ADB4003441C3 /* QuartzCore.framework */; };
+		04998EE817F8ADB4003441C3 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE317F8ADB4003441C3 /* AudioToolbox.framework */; };
+		04998EE917F8ADB4003441C3 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE417F8ADB4003441C3 /* CoreAudio.framework */; };
+		04998EE917F8ADB4003441C3 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE417F8ADB4003441C3 /* CoreAudio.framework */; };
+		04998EEA17F8ADB4003441C3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EE517F8ADB4003441C3 /* OpenGLES.framework */; };
+		04998EEE17F8ADD4003441C3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EEB17F8ADD4003441C3 /* UIKit.framework */; };
+		04998EEF17F8ADD4003441C3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EEC17F8ADD4003441C3 /* Foundation.framework */; };
+		04998EF017F8ADD4003441C3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EED17F8ADD4003441C3 /* CoreGraphics.framework */; };
+		04998EF717F8B6F3003441C3 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF517F8B6F3003441C3 /* libpng.a */; };
+		04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04998EF617F8B6F3003441C3 /* libjpeg.a */; };
+		049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */; };
+		04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04E9AD3E1876FE84006A7317 /* Images.xcassets */; };
+		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
+		DA49ED8903C628BA578C8670 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */; };
+		C8860D93875589970329DCCD /* ../src/GameMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/GameMenu.cpp */; };
+		1E839D002B2BA83FC83A695A /* ../src/GameScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04FE4D4FB640E0DF92DFB865 /* ../src/GameScene.cpp */; };
+		3A631A475DE035FC53ADE5EA /* ../src/Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F3B12E3C9D554D9FE28101D /* ../src/Joystick.cpp */; };
+		CD59C69314E9E74CD0A11E03 /* ../src/MainMenuScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6123B1E6FE4471A00F49751 /* ../src/MainMenuScene.cpp */; };
+		EFF139F8BA484314F7AAF645 /* ../src/MyButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DE458993031811A4C7D28C1 /* ../src/MyButton.cpp */; };
+		F2CFD518E4E2E05ECEDBB262 /* ../src/Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA41FC88D76540A6905224D6 /* ../src/Player.cpp */; };
+		693088A7AB377368EE4A018E /* ../src/Rocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CE4BD5BB9DEF92439C0AB58 /* ../src/Rocket.cpp */; };
+		2B0FCA4EF2CDAB7EF6C6252E /* ../src/Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F196143B0370A9D348494ACC /* ../src/Scene.cpp */; };
+		F87DC9641C1B8FCF28948580 /* ../src/Unit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7746CA7A63049ED8F7D6BF42 /* ../src/Unit.cpp */; };
+		9850666D9BEB7BAAA6AAECDC /* ../src/entry_point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D954BD82D7708B65A08FB6B9 /* ../src/entry_point.cpp */; };
+		33E41D858B2ABD49382CD53F /* ../src/example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0E956CC3A2F7EB94822B5C /* ../src/example.cpp */; };
+		3BB41671209E30BDF95D1B16 /* ../src/res.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7623D793B59EF0CD569E6EC2 /* ../src/res.cpp */; };
+		E02A0627DE00D04110ABADA6 /* ../data/fonts in Sources */ = {isa = PBXBuildFile; fileRef = AFA30E959880563E6ABBBC4F /* ../data/fonts */; };
+		2EDD01D75F08726BE081C106 /* ../data/ui.xml.ox in Sources */ = {isa = PBXBuildFile; fileRef = B52CCD463855CF91A7FBDB8E /* ../data/ui.xml.ox */; };
+		D42581590DA5455B882E551F /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */; };
+
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		04998D3417F8A96E003441C3 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04998D2F17F8A96E003441C3 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = FD6526630DE8FCCB002AD96B;
+			remoteInfo = libSDL;
+		};
+		04998D3717F8A982003441C3 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04998D2F17F8A96E003441C3 /* SDL.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = FD6526620DE8FCCB002AD96B;
+			remoteInfo = libSDL;
+		};
+		049B52AC1871EBBA00EF3C66 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = C3E86F4C16EBC8A500052915;
+			remoteInfo = oxygine_ios;
+		};
+		049B52AF1871EBD100EF3C66 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = C3E86F4B16EBC8A500052915;
+			remoteInfo = oxygine_ios;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		04998CEC17F8A933003441C3 /* GamePart5_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GamePart5_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		04998D2F17F8A96E003441C3 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = "../../../../..//SDL/Xcode-iOS/SDL/SDL.xcodeproj"; sourceTree = "<group>"; };
+		04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = oxygine_ios.xcodeproj; path = "../../../..//oxygine/SDL/ios/oxygine/oxygine_ios.xcodeproj"; sourceTree = "<group>"; };
+		04998EE117F8ADB4003441C3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		04998EE217F8ADB4003441C3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		04998EE317F8ADB4003441C3 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+		04998EE417F8ADB4003441C3 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
+		048AD0AD197D24AB001963EF /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
+		04998EE517F8ADB4003441C3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+		04998EEB17F8ADD4003441C3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		04998EEC17F8ADD4003441C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		04998EED17F8ADD4003441C3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		04998EF517F8B6F3003441C3 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../../../..//oxygine/third_party/ios/libraries/libpng.a"; sourceTree = "<group>"; };
+		04998EF617F8B6F3003441C3 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = "../../../..//oxygine/third_party/ios/libraries/libjpeg.a"; sourceTree = "<group>"; };
+		04E9AD3E1876FE84006A7317 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name =Images.xcassets; path = GamePart5/Images.xcassets; sourceTree = "<group>"; };
+		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
+		0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
+		4DA100C319512824B7570663 /* ../src/GameMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameMenu.cpp; path = ../src/GameMenu.cpp; sourceTree = "<group>"; };
+		04FE4D4FB640E0DF92DFB865 /* ../src/GameScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameScene.cpp; path = ../src/GameScene.cpp; sourceTree = "<group>"; };
+		7F3B12E3C9D554D9FE28101D /* ../src/Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Joystick.cpp; path = ../src/Joystick.cpp; sourceTree = "<group>"; };
+		F6123B1E6FE4471A00F49751 /* ../src/MainMenuScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainMenuScene.cpp; path = ../src/MainMenuScene.cpp; sourceTree = "<group>"; };
+		5DE458993031811A4C7D28C1 /* ../src/MyButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MyButton.cpp; path = ../src/MyButton.cpp; sourceTree = "<group>"; };
+		BA41FC88D76540A6905224D6 /* ../src/Player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Player.cpp; path = ../src/Player.cpp; sourceTree = "<group>"; };
+		2CE4BD5BB9DEF92439C0AB58 /* ../src/Rocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Rocket.cpp; path = ../src/Rocket.cpp; sourceTree = "<group>"; };
+		F196143B0370A9D348494ACC /* ../src/Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scene.cpp; path = ../src/Scene.cpp; sourceTree = "<group>"; };
+		7746CA7A63049ED8F7D6BF42 /* ../src/Unit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Unit.cpp; path = ../src/Unit.cpp; sourceTree = "<group>"; };
+		D954BD82D7708B65A08FB6B9 /* ../src/entry_point.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = entry_point.cpp; path = ../src/entry_point.cpp; sourceTree = "<group>"; };
+		BD0E956CC3A2F7EB94822B5C /* ../src/example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
+		7623D793B59EF0CD569E6EC2 /* ../src/res.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = res.cpp; path = ../src/res.cpp; sourceTree = "<group>"; };
+		4E9DE6A8FCBDF43BC876EC90 /* ../src/Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Enemy.h; path = ../src/Enemy.h; sourceTree = "<group>"; };
+		8F2AFB956EEAEED67C5B7571 /* ../src/Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Game.h; path = ../src/Game.h; sourceTree = "<group>"; };
+		047F6BD19F885FF186A1447C /* ../src/GameMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GameMenu.h; path = ../src/GameMenu.h; sourceTree = "<group>"; };
+		C570FAEF487CD34B62389F89 /* ../src/GameScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GameScene.h; path = ../src/GameScene.h; sourceTree = "<group>"; };
+		2418B9A339E6004913AF5980 /* ../src/Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Joystick.h; path = ../src/Joystick.h; sourceTree = "<group>"; };
+		CAD9D6A98986EA8082368448 /* ../src/MainMenuScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainMenuScene.h; path = ../src/MainMenuScene.h; sourceTree = "<group>"; };
+		67194AC90FEA68E7C96E6907 /* ../src/MyButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MyButton.h; path = ../src/MyButton.h; sourceTree = "<group>"; };
+		5AFC0664D7BA80AE2A75BF0E /* ../src/Player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Player.h; path = ../src/Player.h; sourceTree = "<group>"; };
+		12CAC42FDF06ABE860CFEA53 /* ../src/Rocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Rocket.h; path = ../src/Rocket.h; sourceTree = "<group>"; };
+		0F4469FB587862663D529DC9 /* ../src/Scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scene.h; path = ../src/Scene.h; sourceTree = "<group>"; };
+		B6A9281364AF5D3B581D374C /* ../src/Unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Unit.h; path = ../src/Unit.h; sourceTree = "<group>"; };
+		4013C6794AAE8DFC641D2870 /* ../src/example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
+		22E408FD6FCDA6E7E8E76952 /* ../src/res.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = res.h; path = ../src/res.h; sourceTree = "<group>"; };
+		AFA30E959880563E6ABBBC4F /* ../data/fonts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = fonts; path = ../data/fonts; sourceTree = "<group>"; };
+		B52CCD463855CF91A7FBDB8E /* ../data/ui.xml.ox */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = ui.xml.ox; path = ../data/ui.xml.ox; sourceTree = "<group>"; };
+		7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
+
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		04998CE917F8A933003441C3 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				049B52B11871EBFA00EF3C66 /* liboxygine_ios.a in Frameworks */,
+				04998D3617F8A97D003441C3 /* libSDL2.a in Frameworks */,
+				04998EF017F8ADD4003441C3 /* CoreGraphics.framework in Frameworks */,
+				048AD0AE197D24AB001963EF /* CoreMotion.framework in Frameworks */,
+				04998EEF17F8ADD4003441C3 /* Foundation.framework in Frameworks */,
+				04998EE617F8ADB4003441C3 /* libz.dylib in Frameworks */,
+				04998EE917F8ADB4003441C3 /* CoreAudio.framework in Frameworks */,
+				04998EF817F8B6F3003441C3 /* libjpeg.a in Frameworks */,
+				04998EEE17F8ADD4003441C3 /* UIKit.framework in Frameworks */,
+				04998EE817F8ADB4003441C3 /* AudioToolbox.framework in Frameworks */,
+				04998EE717F8ADB4003441C3 /* QuartzCore.framework in Frameworks */,
+				04998EEA17F8ADB4003441C3 /* OpenGLES.framework in Frameworks */,
+				04998EF717F8B6F3003441C3 /* libpng.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		045D531C17F8BD5E00CC2C64 /* dependencies */ = {
+			isa = PBXGroup;
+			children = (
+				04998EE117F8ADB4003441C3 /* libz.dylib */,
+				04998EF617F8B6F3003441C3 /* libjpeg.a */,
+				04998EF517F8B6F3003441C3 /* libpng.a */,
+			);
+			name = dependencies;
+			sourceTree = "<group>";
+		};
+		04998CE317F8A933003441C3 = {
+			isa = PBXGroup;
+			children = (
+				045D531C17F8BD5E00CC2C64 /* dependencies */,
+				04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */,
+				04998D2F17F8A96E003441C3 /* SDL.xcodeproj */,
+				04998D4417F8A9ED003441C3 /* src */,
+				04E9AD3E1876FE84006A7317 /* Images.xcassets */,
+				04998CF617F8A933003441C3 /* Supporting Files */,
+				04998CEE17F8A933003441C3 /* Frameworks */,
+				04998CED17F8A933003441C3 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		04998CED17F8A933003441C3 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				04998CEC17F8A933003441C3 /* GamePart5_ios.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		04998CEE17F8A933003441C3 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				04998EEB17F8ADD4003441C3 /* UIKit.framework */,
+				048AD0AD197D24AB001963EF /* CoreMotion.framework */,
+				04998EEC17F8ADD4003441C3 /* Foundation.framework */,
+				04998EED17F8ADD4003441C3 /* CoreGraphics.framework */,
+				04998EE217F8ADB4003441C3 /* QuartzCore.framework */,
+				04998EE317F8ADB4003441C3 /* AudioToolbox.framework */,
+				04998EE417F8ADB4003441C3 /* CoreAudio.framework */,
+				04998EE517F8ADB4003441C3 /* OpenGLES.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+
+		04998CF617F8A933003441C3 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				AFA30E959880563E6ABBBC4F /* fonts */, 
+				B52CCD463855CF91A7FBDB8E /* ui.xml.ox */, 
+				7EEFDEEC289FCBB5FA67F822 /* xmls */, 
+
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		04998D3017F8A96E003441C3 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				04998D3517F8A96E003441C3 /* libSDL2.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		04998D4417F8A9ED003441C3 /* src */ = {
+			isa = PBXGroup;
+			children = (
+				360377333740D8A2FD15BBE6 /* Enemy.cpp */, 
+				0BF9628FC8D38F9748F0CDEB /* Game.cpp */, 
+				4DA100C319512824B7570663 /* GameMenu.cpp */, 
+				04FE4D4FB640E0DF92DFB865 /* GameScene.cpp */, 
+				7F3B12E3C9D554D9FE28101D /* Joystick.cpp */, 
+				F6123B1E6FE4471A00F49751 /* MainMenuScene.cpp */, 
+				5DE458993031811A4C7D28C1 /* MyButton.cpp */, 
+				BA41FC88D76540A6905224D6 /* Player.cpp */, 
+				2CE4BD5BB9DEF92439C0AB58 /* Rocket.cpp */, 
+				F196143B0370A9D348494ACC /* Scene.cpp */, 
+				7746CA7A63049ED8F7D6BF42 /* Unit.cpp */, 
+				D954BD82D7708B65A08FB6B9 /* entry_point.cpp */, 
+				BD0E956CC3A2F7EB94822B5C /* example.cpp */, 
+				7623D793B59EF0CD569E6EC2 /* res.cpp */, 
+				4E9DE6A8FCBDF43BC876EC90 /* Enemy.h */, 
+				8F2AFB956EEAEED67C5B7571 /* Game.h */, 
+				047F6BD19F885FF186A1447C /* GameMenu.h */, 
+				C570FAEF487CD34B62389F89 /* GameScene.h */, 
+				2418B9A339E6004913AF5980 /* Joystick.h */, 
+				CAD9D6A98986EA8082368448 /* MainMenuScene.h */, 
+				67194AC90FEA68E7C96E6907 /* MyButton.h */, 
+				5AFC0664D7BA80AE2A75BF0E /* Player.h */, 
+				12CAC42FDF06ABE860CFEA53 /* Rocket.h */, 
+				0F4469FB587862663D529DC9 /* Scene.h */, 
+				B6A9281364AF5D3B581D374C /* Unit.h */, 
+				4013C6794AAE8DFC641D2870 /* example.h */, 
+				22E408FD6FCDA6E7E8E76952 /* res.h */, 
+
+			);
+			name = src;
+			sourceTree = "<group>";
+		};
+		049B52A91871EBBA00EF3C66 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		04998CEB17F8A933003441C3 /* GamePart5_ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 04998D2117F8A933003441C3 /* Build configuration list for PBXNativeTarget "GamePart5_ios" */;
+			buildPhases = (
+				04998CE817F8A933003441C3 /* Sources */,
+				04998CE917F8A933003441C3 /* Frameworks */,
+				04998CEA17F8A933003441C3 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				04998D3817F8A982003441C3 /* PBXTargetDependency */,
+				049B52B01871EBD100EF3C66 /* PBXTargetDependency */,
+			);
+			name = GamePart5_ios;
+			productName = GamePart5;
+			productReference = 04998CEC17F8A933003441C3 /* GamePart5_ios.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		04998CE417F8A933003441C3 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0510;
+				ORGANIZATIONNAME = Mac;
+			};
+			buildConfigurationList = 04998CE717F8A933003441C3 /* Build configuration list for PBXProject "GamePart5_ios" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 04998CE317F8A933003441C3;
+			productRefGroup = 04998CED17F8A933003441C3 /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 049B52A91871EBBA00EF3C66 /* Products */;
+					ProjectRef = 04998D3917F8A9AA003441C3 /* oxygine_ios.xcodeproj */;
+				},
+				{
+					ProductGroup = 04998D3017F8A96E003441C3 /* Products */;
+					ProjectRef = 04998D2F17F8A96E003441C3 /* SDL.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				04998CEB17F8A933003441C3 /* GamePart5_ios */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		04998D3517F8A96E003441C3 /* libSDL2.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libSDL2.a;
+			remoteRef = 04998D3417F8A96E003441C3 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		049B52AD1871EBBA00EF3C66 /* liboxygine_ios.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = liboxygine_ios.a;
+			remoteRef = 049B52AC1871EBBA00EF3C66 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		04998CEA17F8A933003441C3 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				04E9AD3F1876FE84006A7317 /* Images.xcassets in Resources */,
+				E02A0627DE00D04110ABADA6 /* fonts */, 
+				2EDD01D75F08726BE081C106 /* ui.xml.ox */, 
+				D42581590DA5455B882E551F /* xmls */, 
+
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		04998CE817F8A933003441C3 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2DC477AC10D6C07B3FE008F6 /* Enemy.cpp */, 
+				DA49ED8903C628BA578C8670 /* Game.cpp */, 
+				C8860D93875589970329DCCD /* GameMenu.cpp */, 
+				1E839D002B2BA83FC83A695A /* GameScene.cpp */, 
+				3A631A475DE035FC53ADE5EA /* Joystick.cpp */, 
+				CD59C69314E9E74CD0A11E03 /* MainMenuScene.cpp */, 
+				EFF139F8BA484314F7AAF645 /* MyButton.cpp */, 
+				F2CFD518E4E2E05ECEDBB262 /* Player.cpp */, 
+				693088A7AB377368EE4A018E /* Rocket.cpp */, 
+				2B0FCA4EF2CDAB7EF6C6252E /* Scene.cpp */, 
+				F87DC9641C1B8FCF28948580 /* Unit.cpp */, 
+				9850666D9BEB7BAAA6AAECDC /* entry_point.cpp */, 
+				33E41D858B2ABD49382CD53F /* example.cpp */, 
+				3BB41671209E30BDF95D1B16 /* res.cpp */, 
+
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		04998D3817F8A982003441C3 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = libSDL;
+			targetProxy = 04998D3717F8A982003441C3 /* PBXContainerItemProxy */;
+		};
+		049B52B01871EBD100EF3C66 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = oxygine_ios;
+			targetProxy = 049B52AF1871EBD100EF3C66 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		04998D1F17F8A933003441C3 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				ONLY_ACTIVE_ARCH = NO;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
+			};
+			name = Debug;
+		};
+		04998D2017F8A933003441C3 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		04998D2217F8A933003441C3 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "GamePart5/GamePart5_ios-Prefix.pch";
+				GCC_WARN_UNUSED_VALUE = YES;
+				GCC_WARN_UNUSED_VARIABLE = NO;
+				INFOPLIST_FILE = "GamePart5/GamePart5_ios-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../..//oxygine/third_party/ios/libraries",
+				);
+				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_NAME = GamePart5_ios;
+				PROVISIONING_PROFILE = "A34F5D84-E1EB-47B5-AD4B-67D0FA4A5BE6";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		04998D2317F8A933003441C3 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "GamePart5/GamePart5_ios-Prefix.pch";
+				GCC_WARN_UNUSED_VALUE = YES;
+				GCC_WARN_UNUSED_VARIABLE = NO;
+				INFOPLIST_FILE = "GamePart5/GamePart5_ios-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../..//oxygine/third_party/ios/libraries",
+				);
+				ONLY_ACTIVE_ARCH = NO;
+				PRODUCT_NAME = GamePart5_ios;
+				PROVISIONING_PROFILE = "A34F5D84-E1EB-47B5-AD4B-67D0FA4A5BE6";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		04998CE717F8A933003441C3 /* Build configuration list for PBXProject "GamePart5_ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				04998D1F17F8A933003441C3 /* Debug */,
+				04998D2017F8A933003441C3 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		04998D2117F8A933003441C3 /* Build configuration list for PBXNativeTarget "GamePart5_ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				04998D2217F8A933003441C3 /* Debug */,
+				04998D2317F8A933003441C3 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 04998CE417F8A933003441C3 /* Project object */;
+}

+ 58 - 0
examples/Game/part5/proj.macosx/GamePart5/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,58 @@
+{
+  "images" : [
+    {
+      "idiom" : "mac",
+      "size" : "16x16",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "16x16",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "32x32",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "32x32",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "128x128",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "128x128",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "256x256",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "256x256",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "512x512",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "mac",
+      "size" : "512x512",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 34 - 0
examples/Game/part5/proj.macosx/GamePart5_macosx-Info.plist

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string></string>
+	<key>CFBundleIdentifier</key>
+	<string>oxygine.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSMinimumSystemVersion</key>
+	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>Copyright © 2013 oxygine. All rights reserved.</string>
+	<key>NSMainNibFile</key>
+	<string>MainMenu</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>

+ 565 - 0
examples/Game/part5/proj.macosx/GamePart5_macosx.xcodeproj/project.pbxproj

@@ -0,0 +1,565 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		04059FEA1872027500BA6557 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04A57D861872012D0068B1E5 /* SDL2.framework */; };
+		04059FEB1872027B00BA6557 /* liboxygine_macosx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04059FE41872026200BA6557 /* liboxygine_macosx.a */; };
+		04059FED187202A200BA6557 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 04059FEC187202A200BA6557 /* libz.dylib */; };
+		04059FEF187202AC00BA6557 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04059FEE187202AC00BA6557 /* OpenGL.framework */; };
+		0405A00018720D2200BA6557 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04059FF01872031A00BA6557 /* libjpeg.a */; };
+		0405A00118720D2200BA6557 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04059FF11872031A00BA6557 /* libpng.a */; };
+		049B57321871FBE900EF3C66 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 049B57311871FBE900EF3C66 /* Cocoa.framework */; };
+		049B574A1871FBE900EF3C66 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 049B57491871FBE900EF3C66 /* Images.xcassets */; };
+		2DC477AC10D6C07B3FE008F6 /* ../src/Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */; };
+		DA49ED8903C628BA578C8670 /* ../src/Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */; };
+		C8860D93875589970329DCCD /* ../src/GameMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA100C319512824B7570663 /* ../src/GameMenu.cpp */; };
+		1E839D002B2BA83FC83A695A /* ../src/GameScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04FE4D4FB640E0DF92DFB865 /* ../src/GameScene.cpp */; };
+		3A631A475DE035FC53ADE5EA /* ../src/Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F3B12E3C9D554D9FE28101D /* ../src/Joystick.cpp */; };
+		CD59C69314E9E74CD0A11E03 /* ../src/MainMenuScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6123B1E6FE4471A00F49751 /* ../src/MainMenuScene.cpp */; };
+		EFF139F8BA484314F7AAF645 /* ../src/MyButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DE458993031811A4C7D28C1 /* ../src/MyButton.cpp */; };
+		F2CFD518E4E2E05ECEDBB262 /* ../src/Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA41FC88D76540A6905224D6 /* ../src/Player.cpp */; };
+		693088A7AB377368EE4A018E /* ../src/Rocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CE4BD5BB9DEF92439C0AB58 /* ../src/Rocket.cpp */; };
+		2B0FCA4EF2CDAB7EF6C6252E /* ../src/Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F196143B0370A9D348494ACC /* ../src/Scene.cpp */; };
+		F87DC9641C1B8FCF28948580 /* ../src/Unit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7746CA7A63049ED8F7D6BF42 /* ../src/Unit.cpp */; };
+		9850666D9BEB7BAAA6AAECDC /* ../src/entry_point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D954BD82D7708B65A08FB6B9 /* ../src/entry_point.cpp */; };
+		33E41D858B2ABD49382CD53F /* ../src/example.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD0E956CC3A2F7EB94822B5C /* ../src/example.cpp */; };
+		3BB41671209E30BDF95D1B16 /* ../src/res.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7623D793B59EF0CD569E6EC2 /* ../src/res.cpp */; };
+		E02A0627DE00D04110ABADA6 /* ../data/fonts in Sources */ = {isa = PBXBuildFile; fileRef = AFA30E959880563E6ABBBC4F /* ../data/fonts */; };
+		2EDD01D75F08726BE081C106 /* ../data/ui.xml.ox in Sources */ = {isa = PBXBuildFile; fileRef = B52CCD463855CF91A7FBDB8E /* ../data/ui.xml.ox */; };
+		D42581590DA5455B882E551F /* ../data/xmls in Sources */ = {isa = PBXBuildFile; fileRef = 7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */; };
+
+		
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		04059FE31872026200BA6557 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D761871FFEB0068B1E5 /* oxygine_macosx.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 049B52BB1871EDE900EF3C66;
+			remoteInfo = oxygine_macosx;
+		};
+		04059FE81872027200BA6557 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D761871FFEB0068B1E5 /* oxygine_macosx.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 049B52BA1871EDE900EF3C66;
+			remoteInfo = oxygine_macosx;
+		};
+		04A57D851872012D0068B1E5 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = BECDF66C0761BA81005FE872;
+			remoteInfo = Framework;
+		};
+		04A57D871872012D0068B1E5 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = BECDF6B30761BA81005FE872;
+			remoteInfo = "Static Library";
+		};
+		04A57D891872012D0068B1E5 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = DB31407717554B71006C0E22;
+			remoteInfo = "Shared Library";
+		};
+		04A57D8B1872012D0068B1E5 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = BECDF6BE0761BA81005FE872;
+			remoteInfo = "Standard DMG";
+		};
+		04A57D8E187201EF0068B1E5 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = BECDF5FE0761BA81005FE872;
+			remoteInfo = Framework;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		04059FEC187202A200BA6557 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		04059FEE187202AC00BA6557 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+		04059FF01872031A00BA6557 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = ../../../..//oxygine/third_party/macosx/libraries/libjpeg.a; sourceTree = "<group>"; };
+		04059FF11872031A00BA6557 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = ../../../..//oxygine/third_party/macosx/libraries/libpng.a; sourceTree = "<group>"; };
+		04059FF4187203A600BA6557 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libjpeg.a; path = ../../../..//oxygine/third_party/ios/libraries/libjpeg.a; sourceTree = "<group>"; };
+		04059FF5187203A600BA6557 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = ../../../..//oxygine/third_party/ios/libraries/libpng.a; sourceTree = "<group>"; };
+		049B572E1871FBE900EF3C66 /* demo_macosx.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GamePart5_macosx.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		049B57311871FBE900EF3C66 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		049B57341871FBE900EF3C66 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+		049B57351871FBE900EF3C66 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		049B57361871FBE900EF3C66 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		049B57391871FBE900EF3C66 /* demo_macosx-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GamePart5_macosx-Info.plist"; sourceTree = "<group>"; };
+		049B57491871FBE900EF3C66 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = GamePart5/Images.xcassets; sourceTree = "<group>"; };
+		049B57501871FBE900EF3C66 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+		360377333740D8A2FD15BBE6 /* ../src/Enemy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Enemy.cpp; path = ../src/Enemy.cpp; sourceTree = "<group>"; };
+		0BF9628FC8D38F9748F0CDEB /* ../src/Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = ../src/Game.cpp; sourceTree = "<group>"; };
+		4DA100C319512824B7570663 /* ../src/GameMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameMenu.cpp; path = ../src/GameMenu.cpp; sourceTree = "<group>"; };
+		04FE4D4FB640E0DF92DFB865 /* ../src/GameScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameScene.cpp; path = ../src/GameScene.cpp; sourceTree = "<group>"; };
+		7F3B12E3C9D554D9FE28101D /* ../src/Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Joystick.cpp; path = ../src/Joystick.cpp; sourceTree = "<group>"; };
+		F6123B1E6FE4471A00F49751 /* ../src/MainMenuScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainMenuScene.cpp; path = ../src/MainMenuScene.cpp; sourceTree = "<group>"; };
+		5DE458993031811A4C7D28C1 /* ../src/MyButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MyButton.cpp; path = ../src/MyButton.cpp; sourceTree = "<group>"; };
+		BA41FC88D76540A6905224D6 /* ../src/Player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Player.cpp; path = ../src/Player.cpp; sourceTree = "<group>"; };
+		2CE4BD5BB9DEF92439C0AB58 /* ../src/Rocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Rocket.cpp; path = ../src/Rocket.cpp; sourceTree = "<group>"; };
+		F196143B0370A9D348494ACC /* ../src/Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scene.cpp; path = ../src/Scene.cpp; sourceTree = "<group>"; };
+		7746CA7A63049ED8F7D6BF42 /* ../src/Unit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Unit.cpp; path = ../src/Unit.cpp; sourceTree = "<group>"; };
+		D954BD82D7708B65A08FB6B9 /* ../src/entry_point.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = entry_point.cpp; path = ../src/entry_point.cpp; sourceTree = "<group>"; };
+		BD0E956CC3A2F7EB94822B5C /* ../src/example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = example.cpp; path = ../src/example.cpp; sourceTree = "<group>"; };
+		7623D793B59EF0CD569E6EC2 /* ../src/res.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = res.cpp; path = ../src/res.cpp; sourceTree = "<group>"; };
+		4E9DE6A8FCBDF43BC876EC90 /* ../src/Enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Enemy.h; path = ../src/Enemy.h; sourceTree = "<group>"; };
+		8F2AFB956EEAEED67C5B7571 /* ../src/Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Game.h; path = ../src/Game.h; sourceTree = "<group>"; };
+		047F6BD19F885FF186A1447C /* ../src/GameMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GameMenu.h; path = ../src/GameMenu.h; sourceTree = "<group>"; };
+		C570FAEF487CD34B62389F89 /* ../src/GameScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GameScene.h; path = ../src/GameScene.h; sourceTree = "<group>"; };
+		2418B9A339E6004913AF5980 /* ../src/Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Joystick.h; path = ../src/Joystick.h; sourceTree = "<group>"; };
+		CAD9D6A98986EA8082368448 /* ../src/MainMenuScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainMenuScene.h; path = ../src/MainMenuScene.h; sourceTree = "<group>"; };
+		67194AC90FEA68E7C96E6907 /* ../src/MyButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MyButton.h; path = ../src/MyButton.h; sourceTree = "<group>"; };
+		5AFC0664D7BA80AE2A75BF0E /* ../src/Player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Player.h; path = ../src/Player.h; sourceTree = "<group>"; };
+		12CAC42FDF06ABE860CFEA53 /* ../src/Rocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Rocket.h; path = ../src/Rocket.h; sourceTree = "<group>"; };
+		0F4469FB587862663D529DC9 /* ../src/Scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scene.h; path = ../src/Scene.h; sourceTree = "<group>"; };
+		B6A9281364AF5D3B581D374C /* ../src/Unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Unit.h; path = ../src/Unit.h; sourceTree = "<group>"; };
+		4013C6794AAE8DFC641D2870 /* ../src/example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = example.h; path = ../src/example.h; sourceTree = "<group>"; };
+		22E408FD6FCDA6E7E8E76952 /* ../src/res.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = res.h; path = ../src/res.h; sourceTree = "<group>"; };
+		AFA30E959880563E6ABBBC4F /* ../data/fonts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = fonts; path = ../data/fonts; sourceTree = "<group>"; };
+		B52CCD463855CF91A7FBDB8E /* ../data/ui.xml.ox */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = ui.xml.ox; path = ../data/ui.xml.ox; sourceTree = "<group>"; };
+		7EEFDEEC289FCBB5FA67F822 /* ../data/xmls */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; name = xmls; path = ../data/xmls; sourceTree = "<group>"; };
+
+		04A57D761871FFEB0068B1E5 /* oxygine_macosx.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = oxygine_macosx.xcodeproj; path = ../../../..//oxygine/SDL/macosx/oxygine_macosx/oxygine_macosx.xcodeproj; sourceTree = "<group>"; };
+		04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../../../../..//SDL/Xcode/SDL/SDL.xcodeproj; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		049B572B1871FBE900EF3C66 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				0405A00018720D2200BA6557 /* libjpeg.a in Frameworks */,
+				0405A00118720D2200BA6557 /* libpng.a in Frameworks */,
+				04059FEF187202AC00BA6557 /* OpenGL.framework in Frameworks */,
+				04059FED187202A200BA6557 /* libz.dylib in Frameworks */,
+				04059FEB1872027B00BA6557 /* liboxygine_macosx.a in Frameworks */,
+				04059FEA1872027500BA6557 /* SDL2.framework in Frameworks */,
+				049B57321871FBE900EF3C66 /* Cocoa.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		04059FE01872026200BA6557 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				04059FE41872026200BA6557 /* liboxygine_macosx.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		049B57251871FBE900EF3C66 = {
+			isa = PBXGroup;
+			children = (
+				049B57491871FBE900EF3C66 /* Images.xcassets */,
+				049B57381871FBE900EF3C66 /* Supporting Files */,
+				04A57D391871FF8B0068B1E5 /* src */,
+				04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */,
+				04A57D761871FFEB0068B1E5 /* oxygine_macosx.xcodeproj */,
+				049B57301871FBE900EF3C66 /* Frameworks */,
+				049B572F1871FBE900EF3C66 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		049B572F1871FBE900EF3C66 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				049B572E1871FBE900EF3C66 /* GamePart5_macosx.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		049B57301871FBE900EF3C66 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				04059FF4187203A600BA6557 /* libjpeg.a */,
+				04059FF5187203A600BA6557 /* libpng.a */,
+				04059FF01872031A00BA6557 /* libjpeg.a */,
+				04059FF11872031A00BA6557 /* libpng.a */,
+				04059FEE187202AC00BA6557 /* OpenGL.framework */,
+				04059FEC187202A200BA6557 /* libz.dylib */,
+				049B57311871FBE900EF3C66 /* Cocoa.framework */,
+				049B57501871FBE900EF3C66 /* XCTest.framework */,
+				049B57331871FBE900EF3C66 /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		049B57331871FBE900EF3C66 /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				049B57341871FBE900EF3C66 /* AppKit.framework */,
+				049B57351871FBE900EF3C66 /* CoreData.framework */,
+				049B57361871FBE900EF3C66 /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+		049B57371871FBE900EF3C66 /* demo */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = demo;
+			sourceTree = "<group>";
+		};
+		049B57381871FBE900EF3C66 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				AFA30E959880563E6ABBBC4F /* fonts */, 
+				B52CCD463855CF91A7FBDB8E /* ui.xml.ox */, 
+				7EEFDEEC289FCBB5FA67F822 /* xmls */, 
+
+				049B57391871FBE900EF3C66 /* GamePart5_macosx-Info.plist */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		04A57D391871FF8B0068B1E5 /* src */ = {
+			isa = PBXGroup;
+			children = (
+				360377333740D8A2FD15BBE6 /* Enemy.cpp */, 
+				0BF9628FC8D38F9748F0CDEB /* Game.cpp */, 
+				4DA100C319512824B7570663 /* GameMenu.cpp */, 
+				04FE4D4FB640E0DF92DFB865 /* GameScene.cpp */, 
+				7F3B12E3C9D554D9FE28101D /* Joystick.cpp */, 
+				F6123B1E6FE4471A00F49751 /* MainMenuScene.cpp */, 
+				5DE458993031811A4C7D28C1 /* MyButton.cpp */, 
+				BA41FC88D76540A6905224D6 /* Player.cpp */, 
+				2CE4BD5BB9DEF92439C0AB58 /* Rocket.cpp */, 
+				F196143B0370A9D348494ACC /* Scene.cpp */, 
+				7746CA7A63049ED8F7D6BF42 /* Unit.cpp */, 
+				D954BD82D7708B65A08FB6B9 /* entry_point.cpp */, 
+				BD0E956CC3A2F7EB94822B5C /* example.cpp */, 
+				7623D793B59EF0CD569E6EC2 /* res.cpp */, 
+				4E9DE6A8FCBDF43BC876EC90 /* Enemy.h */, 
+				8F2AFB956EEAEED67C5B7571 /* Game.h */, 
+				047F6BD19F885FF186A1447C /* GameMenu.h */, 
+				C570FAEF487CD34B62389F89 /* GameScene.h */, 
+				2418B9A339E6004913AF5980 /* Joystick.h */, 
+				CAD9D6A98986EA8082368448 /* MainMenuScene.h */, 
+				67194AC90FEA68E7C96E6907 /* MyButton.h */, 
+				5AFC0664D7BA80AE2A75BF0E /* Player.h */, 
+				12CAC42FDF06ABE860CFEA53 /* Rocket.h */, 
+				0F4469FB587862663D529DC9 /* Scene.h */, 
+				B6A9281364AF5D3B581D374C /* Unit.h */, 
+				4013C6794AAE8DFC641D2870 /* example.h */, 
+				22E408FD6FCDA6E7E8E76952 /* res.h */, 
+
+			);
+			name = src;
+			sourceTree = "<group>";
+		};
+		04A57D7F1872012A0068B1E5 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				04A57D861872012D0068B1E5 /* SDL2.framework */,
+				04A57D881872012D0068B1E5 /* libSDL2.a */,
+				04A57D8A1872012D0068B1E5 /* libSDL2.dylib */,
+				04A57D8C1872012D0068B1E5 /* Standard DMG */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		049B572D1871FBE900EF3C66 /* GamePart5_macosx */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 049B575F1871FBE900EF3C66 /* Build configuration list for PBXNativeTarget "GamePart5_macosx" */;
+			buildPhases = (
+				049B572A1871FBE900EF3C66 /* Sources */,
+				049B572B1871FBE900EF3C66 /* Frameworks */,
+				049B572C1871FBE900EF3C66 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				04059FE91872027200BA6557 /* PBXTargetDependency */,
+				04A57D8F187201EF0068B1E5 /* PBXTargetDependency */,
+			);
+			name = GamePart5_macosx;
+			productName = GamePart5;
+			productReference = 049B572E1871FBE900EF3C66 /* GamePart5_macosx.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		049B57261871FBE900EF3C66 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0510;
+				ORGANIZATIONNAME = oxygine;
+			};
+			buildConfigurationList = 049B57291871FBE900EF3C66 /* Build configuration list for PBXProject "GamePart5_macosx" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 049B57251871FBE900EF3C66;
+			productRefGroup = 049B572F1871FBE900EF3C66 /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 04059FE01872026200BA6557 /* Products */;
+					ProjectRef = 04A57D761871FFEB0068B1E5 /* oxygine_macosx.xcodeproj */;
+				},
+				{
+					ProductGroup = 04A57D7F1872012A0068B1E5 /* Products */;
+					ProjectRef = 04A57D7E1872012A0068B1E5 /* SDL.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				049B572D1871FBE900EF3C66 /* GamePart5_macosx */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		04059FE41872026200BA6557 /* liboxygine_macosx.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = liboxygine_macosx.a;
+			remoteRef = 04059FE31872026200BA6557 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		04A57D861872012D0068B1E5 /* SDL2.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = SDL2.framework;
+			remoteRef = 04A57D851872012D0068B1E5 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		04A57D881872012D0068B1E5 /* libSDL2.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libSDL2.a;
+			remoteRef = 04A57D871872012D0068B1E5 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		04A57D8A1872012D0068B1E5 /* libSDL2.dylib */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.dylib";
+			path = libSDL2.dylib;
+			remoteRef = 04A57D891872012D0068B1E5 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		04A57D8C1872012D0068B1E5 /* Standard DMG */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = "Standard DMG";
+			remoteRef = 04A57D8B1872012D0068B1E5 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		049B572C1871FBE900EF3C66 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				E02A0627DE00D04110ABADA6 /* fonts */, 
+				2EDD01D75F08726BE081C106 /* ui.xml.ox */, 
+				D42581590DA5455B882E551F /* xmls */, 
+
+				049B574A1871FBE900EF3C66 /* Images.xcassets in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		049B572A1871FBE900EF3C66 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2DC477AC10D6C07B3FE008F6 /* Enemy.cpp */, 
+				DA49ED8903C628BA578C8670 /* Game.cpp */, 
+				C8860D93875589970329DCCD /* GameMenu.cpp */, 
+				1E839D002B2BA83FC83A695A /* GameScene.cpp */, 
+				3A631A475DE035FC53ADE5EA /* Joystick.cpp */, 
+				CD59C69314E9E74CD0A11E03 /* MainMenuScene.cpp */, 
+				EFF139F8BA484314F7AAF645 /* MyButton.cpp */, 
+				F2CFD518E4E2E05ECEDBB262 /* Player.cpp */, 
+				693088A7AB377368EE4A018E /* Rocket.cpp */, 
+				2B0FCA4EF2CDAB7EF6C6252E /* Scene.cpp */, 
+				F87DC9641C1B8FCF28948580 /* Unit.cpp */, 
+				9850666D9BEB7BAAA6AAECDC /* entry_point.cpp */, 
+				33E41D858B2ABD49382CD53F /* example.cpp */, 
+				3BB41671209E30BDF95D1B16 /* res.cpp */, 
+
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		04059FE91872027200BA6557 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = oxygine_macosx;
+			targetProxy = 04059FE81872027200BA6557 /* PBXContainerItemProxy */;
+		};
+		04A57D8F187201EF0068B1E5 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = Framework;
+			targetProxy = 04A57D8E187201EF0068B1E5 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		049B575D1871FBE900EF3C66 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
+				VALID_ARCHS = "i386 x86_64";
+			};
+			name = Debug;
+		};
+		049B575E1871FBE900EF3C66 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_OBJC_ARC = NO;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+				USER_HEADER_SEARCH_PATHS = "../../../..//oxygine/src ../../../../..//SDL/include";
+				VALID_ARCHS = "i386 x86_64";
+			};
+			name = Release;
+		};
+		049B57601871FBE900EF3C66 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				COMBINE_HIDPI_IMAGES = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "GamePart5/GamePart5_macosx-Prefix.pch";
+				INFOPLIST_FILE = "GamePart5_macosx-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../..//oxygine/third_party/macosx/libraries",
+					"../../../..//oxygine/third_party/ios/libraries",
+				);
+				PRODUCT_NAME = GamePart5_macosx;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		049B57611871FBE900EF3C66 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				COMBINE_HIDPI_IMAGES = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "GamePart5/GamePart5_macosx-Prefix.pch";
+				INFOPLIST_FILE = "GamePart5_macosx-Info.plist";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"../../../..//oxygine/third_party/macosx/libraries",
+					"../../../..//oxygine/third_party/ios/libraries",
+				);
+				PRODUCT_NAME = GamePart5_macosx;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		049B57291871FBE900EF3C66 /* Build configuration list for PBXProject "GamePart5_macosx" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				049B575D1871FBE900EF3C66 /* Debug */,
+				049B575E1871FBE900EF3C66 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		049B575F1871FBE900EF3C66 /* Build configuration list for PBXNativeTarget "GamePart5_macosx" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				049B57601871FBE900EF3C66 /* Debug */,
+				049B57611871FBE900EF3C66 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 049B57261871FBE900EF3C66 /* Project object */;
+}

+ 48 - 0
examples/Game/part5/proj.win32/GamePart5_vs2010.sln

@@ -0,0 +1,48 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GamePart5_vs2010", "GamePart5_vs2010.vcxproj", "{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "{project}", "../../../../\oxygine\SDL\win32\oxygine_vs2010.vcxproj", "{52411305-CFE1-4FA8-9885-5729BFC816CF}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Debug|Win32.Build.0 = Debug|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Debug|x64.ActiveCfg = Debug|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Release|Win32.ActiveCfg = Release|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Release|Win32.Build.0 = Release|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Release|x64.ActiveCfg = Release|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.ActiveCfg = Debug|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.Build.0 = Debug|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.ActiveCfg = Debug|x64
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.Build.0 = Debug|x64
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.ActiveCfg = Release|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.Build.0 = Release|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.ActiveCfg = Release|x64
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.Build.0 = Release|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.Build.0 = Debug|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.ActiveCfg = Debug|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.Build.0 = Debug|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.ActiveCfg = Release|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.Build.0 = Release|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.ActiveCfg = Release|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.Build.0 = Release|x64
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Debug|Win32.Build.0 = Debug|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Debug|x64.ActiveCfg = Debug|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Release|Win32.ActiveCfg = Release|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Release|Win32.Build.0 = Release|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Release|x64.ActiveCfg = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

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

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GamePart5</RootNamespace>
+    <ProjectName>GamePart5</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../../..//oxygine/src;../../../../..//SDL/include;../../../..//oxygine/third_party/win32/pthreads/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <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>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../../..//oxygine/src;../../../../..//SDL/include;../../../..//oxygine/third_party/win32/pthreads/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <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>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>    
+    <ProjectReference Include="../../../../\oxygine\SDL\win32\oxygine_vs2010.vcxproj">
+      <Project>{52411305-cfe1-4fa8-9885-5729bfc816cf}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../src/Enemy.cpp" /><ClCompile Include="../src/Game.cpp" /><ClCompile Include="../src/GameMenu.cpp" /><ClCompile Include="../src/GameScene.cpp" /><ClCompile Include="../src/Joystick.cpp" /><ClCompile Include="../src/MainMenuScene.cpp" /><ClCompile Include="../src/MyButton.cpp" /><ClCompile Include="../src/Player.cpp" /><ClCompile Include="../src/Rocket.cpp" /><ClCompile Include="../src/Scene.cpp" /><ClCompile Include="../src/Unit.cpp" /><ClCompile Include="../src/entry_point.cpp" /><ClCompile Include="../src/example.cpp" /><ClCompile Include="../src/res.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="../src/Enemy.h" /><ClInclude Include="../src/Game.h" /><ClInclude Include="../src/GameMenu.h" /><ClInclude Include="../src/GameScene.h" /><ClInclude Include="../src/Joystick.h" /><ClInclude Include="../src/MainMenuScene.h" /><ClInclude Include="../src/MyButton.h" /><ClInclude Include="../src/Player.h" /><ClInclude Include="../src/Rocket.h" /><ClInclude Include="../src/Scene.h" /><ClInclude Include="../src/Unit.h" /><ClInclude Include="../src/example.h" /><ClInclude Include="../src/res.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

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

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>

+ 49 - 0
examples/Game/part5/proj.win32/GamePart5_vs2013.sln

@@ -0,0 +1,49 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.21005.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GamePart5_vs2013", "GamePart5_vs2013.vcxproj", "{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "{project}", "../../../../\oxygine\SDL\win32\oxygine_vs2013.vcxproj", "{52411305-CFE1-4FA8-9885-5729BFC816CF}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Debug|Win32.Build.0 = Debug|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Debug|x64.ActiveCfg = Debug|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Release|Win32.ActiveCfg = Release|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Release|Win32.Build.0 = Release|Win32
+		{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}.Release|x64.ActiveCfg = Release|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.ActiveCfg = Debug|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.Build.0 = Debug|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.ActiveCfg = Debug|x64
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.Build.0 = Debug|x64
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.ActiveCfg = Release|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.Build.0 = Release|Win32
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.ActiveCfg = Release|x64
+		{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.Build.0 = Release|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.Build.0 = Debug|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.ActiveCfg = Debug|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.Build.0 = Debug|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.ActiveCfg = Release|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.Build.0 = Release|Win32
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.ActiveCfg = Release|x64
+		{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.Build.0 = Release|x64
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Debug|Win32.Build.0 = Debug|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Debug|x64.ActiveCfg = Debug|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Release|Win32.ActiveCfg = Release|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Release|Win32.Build.0 = Release|Win32
+		{52411305-CFE1-4FA8-9885-5729BFC816CF}.Release|x64.ActiveCfg = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

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

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2B4D7491-A4F8-4606-B0E3-2A1FCE3C46C4}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GamePart5</RootNamespace>
+    <ProjectName>GamePart5</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../../..//oxygine/src;../../../../..//SDL/include;../../../..//oxygine/third_party/win32/pthreads/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <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>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../../..//oxygine/src;../../../../..//SDL/include;../../../..//oxygine/third_party/win32/pthreads/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <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>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>    
+    <ProjectReference Include="../../../../\oxygine\SDL\win32\oxygine_vs2013.vcxproj">
+      <Project>{52411305-cfe1-4fa8-9885-5729bfc816cf}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../src/Enemy.cpp" /><ClCompile Include="../src/Game.cpp" /><ClCompile Include="../src/GameMenu.cpp" /><ClCompile Include="../src/GameScene.cpp" /><ClCompile Include="../src/Joystick.cpp" /><ClCompile Include="../src/MainMenuScene.cpp" /><ClCompile Include="../src/MyButton.cpp" /><ClCompile Include="../src/Player.cpp" /><ClCompile Include="../src/Rocket.cpp" /><ClCompile Include="../src/Scene.cpp" /><ClCompile Include="../src/Unit.cpp" /><ClCompile Include="../src/entry_point.cpp" /><ClCompile Include="../src/example.cpp" /><ClCompile Include="../src/res.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="../src/Enemy.h" /><ClInclude Include="../src/Game.h" /><ClInclude Include="../src/GameMenu.h" /><ClInclude Include="../src/GameScene.h" /><ClInclude Include="../src/Joystick.h" /><ClInclude Include="../src/MainMenuScene.h" /><ClInclude Include="../src/MyButton.h" /><ClInclude Include="../src/Player.h" /><ClInclude Include="../src/Rocket.h" /><ClInclude Include="../src/Scene.h" /><ClInclude Include="../src/Unit.h" /><ClInclude Include="../src/example.h" /><ClInclude Include="../src/res.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

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

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>

+ 41 - 0
examples/Game/part5/src/Enemy.cpp

@@ -0,0 +1,41 @@
+#include "Enemy.h"
+#include "res.h"
+
+void Enemy::_init()
+{
+	//you could hit enemy 3 times
+	_hp = 3;
+
+	spSprite sprite = new Sprite;
+	sprite->setResAnim(res::ui.getResAnim("asteroid"));
+	sprite->attachTo(_view);
+	sprite->setAnchor(Vector2(0.5f, 0.5f));
+
+	//it random scale and rotation
+	sprite->setRotation(scalar::randFloat(0, MATH_PI * 2));
+	sprite->setScale(scalar::randFloat(0.5f, 1.0f));
+
+	//it is rotating by tween with random speed
+	float dest = MATH_PI * 2;
+	if (rand() % 2 == 0)
+		dest *= -1;
+	dest += sprite->getRotation();
+	sprite->addTween(Sprite::TweenRotation(dest), rand() % 12000 + 10000, -1);
+}
+
+void Enemy::_update(const UpdateState &us)
+{
+	//nothing to do
+}
+
+void Enemy::explode()
+{
+	//hit by rocket
+	_hp--;
+	if (_hp == 0)
+	{
+		//dead, hide it with alpha tween
+		_dead = true;
+		_view->addTween(Actor::TweenAlpha(0), 300)->setDetachActor(true);
+	}
+}

+ 15 - 0
examples/Game/part5/src/Enemy.h

@@ -0,0 +1,15 @@
+#pragma once
+#include "Unit.h"
+
+DECLARE_SMART(Enemy, spEnemy);
+class Enemy: public Unit
+{
+public:
+
+	void explode();
+
+private:
+	void _init();
+	void _update(const UpdateState &us);
+	int _hp;
+};

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