소스 검색

Added initialDirectory to FileSystem::displayOpenDialog of desktop tools.

seanpaultaylor 12 년 전
부모
커밋
0360e021cc

+ 880 - 880
gameplay/gameplay.vcxproj

@@ -1,881 +1,881 @@
-<?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="DebugMem|Win32">
-      <Configuration>DebugMem</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DebugMem|x64">
-      <Configuration>DebugMem</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\AbsoluteLayout.cpp" />
-    <ClCompile Include="src\AIAgent.cpp" />
-    <ClCompile Include="src\AIController.cpp" />
-    <ClCompile Include="src\AIMessage.cpp" />
-    <ClCompile Include="src\AIState.cpp" />
-    <ClCompile Include="src\AIStateMachine.cpp" />
-    <ClCompile Include="src\Animation.cpp" />
-    <ClCompile Include="src\AnimationClip.cpp" />
-    <ClCompile Include="src\AnimationController.cpp" />
-    <ClCompile Include="src\AnimationTarget.cpp" />
-    <ClCompile Include="src\AnimationValue.cpp" />
-    <ClCompile Include="src\AudioBuffer.cpp" />
-    <ClCompile Include="src\AudioController.cpp" />
-    <ClCompile Include="src\AudioListener.cpp" />
-    <ClCompile Include="src\AudioSource.cpp" />
-    <ClCompile Include="src\BoundingBox.cpp" />
-    <ClCompile Include="src\BoundingSphere.cpp" />
-    <ClCompile Include="src\Button.cpp" />
-    <ClCompile Include="src\Camera.cpp" />
-    <ClCompile Include="src\CheckBox.cpp" />
-    <ClCompile Include="src\Container.cpp" />
-    <ClCompile Include="src\Control.cpp" />
-    <ClCompile Include="src\ControlFactory.cpp" />
-    <ClCompile Include="src\Curve.cpp" />
-    <ClCompile Include="src\DebugNew.cpp" />
-    <ClCompile Include="src\DepthStencilTarget.cpp" />
-    <ClCompile Include="src\Effect.cpp" />
-    <ClCompile Include="src\FileSystem.cpp" />
-    <ClCompile Include="src\FlowLayout.cpp" />
-    <ClCompile Include="src\Font.cpp" />
-    <ClCompile Include="src\Form.cpp" />
-    <ClCompile Include="src\FrameBuffer.cpp" />
-    <ClCompile Include="src\Frustum.cpp" />
-    <ClCompile Include="src\Game.cpp" />
-    <ClCompile Include="src\Gamepad.cpp" />
-    <ClCompile Include="src\gameplay-main-android.cpp" />
-    <ClCompile Include="src\gameplay-main-blackberry.cpp" />
-    <ClCompile Include="src\gameplay-main-linux.cpp" />
-    <ClCompile Include="src\gameplay-main-windows.cpp" />
-    <ClCompile Include="src\HeightField.cpp" />
-    <ClCompile Include="src\Image.cpp" />
-    <ClCompile Include="src\ImageControl.cpp" />
-    <ClCompile Include="src\Joint.cpp" />
-    <ClCompile Include="src\Joystick.cpp" />
-    <ClCompile Include="src\Label.cpp" />
-    <ClCompile Include="src\Layout.cpp" />
-    <ClCompile Include="src\Light.cpp" />
-    <ClCompile Include="src\Logger.cpp" />
-    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp" />
-    <ClCompile Include="src\lua\lua_AIAgent.cpp" />
-    <ClCompile Include="src\lua\lua_AIAgentListener.cpp" />
-    <ClCompile Include="src\lua\lua_AIController.cpp" />
-    <ClCompile Include="src\lua\lua_AIMessage.cpp" />
-    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp" />
-    <ClCompile Include="src\lua\lua_AIState.cpp" />
-    <ClCompile Include="src\lua\lua_AIStateListener.cpp" />
-    <ClCompile Include="src\lua\lua_AIStateMachine.cpp" />
-    <ClCompile Include="src\lua\lua_all_bindings.cpp" />
-    <ClCompile Include="src\lua\lua_Animation.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationClip.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationController.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationTarget.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationValue.cpp" />
-    <ClCompile Include="src\lua\lua_AudioBuffer.cpp" />
-    <ClCompile Include="src\lua\lua_AudioController.cpp" />
-    <ClCompile Include="src\lua\lua_AudioListener.cpp" />
-    <ClCompile Include="src\lua\lua_AudioSource.cpp" />
-    <ClCompile Include="src\lua\lua_AudioSourceState.cpp" />
-    <ClCompile Include="src\lua\lua_BoundingBox.cpp" />
-    <ClCompile Include="src\lua\lua_BoundingSphere.cpp" />
-    <ClCompile Include="src\lua\lua_Bundle.cpp" />
-    <ClCompile Include="src\lua\lua_Button.cpp" />
-    <ClCompile Include="src\lua\lua_Camera.cpp" />
-    <ClCompile Include="src\lua\lua_CameraListener.cpp" />
-    <ClCompile Include="src\lua\lua_CameraType.cpp" />
-    <ClCompile Include="src\lua\lua_CheckBox.cpp" />
-    <ClCompile Include="src\lua\lua_Container.cpp" />
-    <ClCompile Include="src\lua\lua_ContainerScroll.cpp" />
-    <ClCompile Include="src\lua\lua_Control.cpp" />
-    <ClCompile Include="src\lua\lua_ControlAlignment.cpp" />
-    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp" />
-    <ClCompile Include="src\lua\lua_ControlListener.cpp" />
-    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_ControlState.cpp" />
-    <ClCompile Include="src\lua\lua_Curve.cpp" />
-    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp" />
-    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp" />
-    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp" />
-    <ClCompile Include="src\lua\lua_Effect.cpp" />
-    <ClCompile Include="src\lua\lua_FileSystem.cpp" />
-    <ClCompile Include="src\lua\lua_FlowLayout.cpp" />
-    <ClCompile Include="src\lua\lua_Font.cpp" />
-    <ClCompile Include="src\lua\lua_FontFormat.cpp" />
-    <ClCompile Include="src\lua\lua_FontJustify.cpp" />
-    <ClCompile Include="src\lua\lua_FontStyle.cpp" />
-    <ClCompile Include="src\lua\lua_FontText.cpp" />
-    <ClCompile Include="src\lua\lua_Form.cpp" />
-    <ClCompile Include="src\lua\lua_FrameBuffer.cpp" />
-    <ClCompile Include="src\lua\lua_Frustum.cpp" />
-    <ClCompile Include="src\lua\lua_Game.cpp" />
-    <ClCompile Include="src\lua\lua_GameClearFlags.cpp" />
-    <ClCompile Include="src\lua\lua_Gamepad.cpp" />
-    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp" />
-    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp" />
-    <ClCompile Include="src\lua\lua_GameState.cpp" />
-    <ClCompile Include="src\lua\lua_Gesture.cpp" />
-    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Global.cpp" />
-    <ClCompile Include="src\lua\lua_HeightField.cpp" />
-    <ClCompile Include="src\lua\lua_Image.cpp" />
-    <ClCompile Include="src\lua\lua_ImageControl.cpp" />
-    <ClCompile Include="src\lua\lua_ImageFormat.cpp" />
-    <ClCompile Include="src\lua\lua_Joint.cpp" />
-    <ClCompile Include="src\lua\lua_Joystick.cpp" />
-    <ClCompile Include="src\lua\lua_Keyboard.cpp" />
-    <ClCompile Include="src\lua\lua_KeyboardKey.cpp" />
-    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Label.cpp" />
-    <ClCompile Include="src\lua\lua_Layout.cpp" />
-    <ClCompile Include="src\lua\lua_LayoutType.cpp" />
-    <ClCompile Include="src\lua\lua_Light.cpp" />
-    <ClCompile Include="src\lua\lua_LightType.cpp" />
-    <ClCompile Include="src\lua\lua_Logger.cpp" />
-    <ClCompile Include="src\lua\lua_LoggerLevel.cpp" />
-    <ClCompile Include="src\lua\lua_Material.cpp" />
-    <ClCompile Include="src\lua\lua_MaterialParameter.cpp" />
-    <ClCompile Include="src\lua\lua_MathUtil.cpp" />
-    <ClCompile Include="src\lua\lua_Matrix.cpp" />
-    <ClCompile Include="src\lua\lua_Mesh.cpp" />
-    <ClCompile Include="src\lua\lua_MeshBatch.cpp" />
-    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp" />
-    <ClCompile Include="src\lua\lua_MeshPart.cpp" />
-    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp" />
-    <ClCompile Include="src\lua\lua_MeshSkin.cpp" />
-    <ClCompile Include="src\lua\lua_Model.cpp" />
-    <ClCompile Include="src\lua\lua_Mouse.cpp" />
-    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Node.cpp" />
-    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp" />
-    <ClCompile Include="src\lua\lua_NodeType.cpp" />
-    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp" />
-    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp" />
-    <ClCompile Include="src\lua\lua_Pass.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsController.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp" />
-    <ClCompile Include="src\lua\lua_Plane.cpp" />
-    <ClCompile Include="src\lua\lua_Platform.cpp" />
-    <ClCompile Include="src\lua\lua_Properties.cpp" />
-    <ClCompile Include="src\lua\lua_PropertiesType.cpp" />
-    <ClCompile Include="src\lua\lua_Quaternion.cpp" />
-    <ClCompile Include="src\lua\lua_RadioButton.cpp" />
-    <ClCompile Include="src\lua\lua_Ray.cpp" />
-    <ClCompile Include="src\lua\lua_Rectangle.cpp" />
-    <ClCompile Include="src\lua\lua_Ref.cpp" />
-    <ClCompile Include="src\lua\lua_RenderState.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp" />
-    <ClCompile Include="src\lua\lua_RenderTarget.cpp" />
-    <ClCompile Include="src\lua\lua_Scene.cpp" />
-    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptController.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptTarget.cpp" />
-    <ClCompile Include="src\lua\lua_Slider.cpp" />
-    <ClCompile Include="src\lua\lua_SpriteBatch.cpp" />
-    <ClCompile Include="src\lua\lua_Technique.cpp" />
-    <ClCompile Include="src\lua\lua_Terrain.cpp" />
-    <ClCompile Include="src\lua\lua_TerrainFlags.cpp" />
-    <ClCompile Include="src\lua\lua_TerrainPatch.cpp" />
-    <ClCompile Include="src\lua\lua_TextBox.cpp" />
-    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp" />
-    <ClCompile Include="src\lua\lua_Texture.cpp" />
-    <ClCompile Include="src\lua\lua_TextureFilter.cpp" />
-    <ClCompile Include="src\lua\lua_TextureFormat.cpp" />
-    <ClCompile Include="src\lua\lua_TextureSampler.cpp" />
-    <ClCompile Include="src\lua\lua_TextureWrap.cpp" />
-    <ClCompile Include="src\lua\lua_Theme.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeStyle.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeUVs.cpp" />
-    <ClCompile Include="src\lua\lua_Touch.cpp" />
-    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Transform.cpp" />
-    <ClCompile Include="src\lua\lua_TransformListener.cpp" />
-    <ClCompile Include="src\lua\lua_Uniform.cpp" />
-    <ClCompile Include="src\lua\lua_Vector2.cpp" />
-    <ClCompile Include="src\lua\lua_Vector3.cpp" />
-    <ClCompile Include="src\lua\lua_Vector4.cpp" />
-    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp" />
-    <ClCompile Include="src\lua\lua_VertexFormat.cpp" />
-    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp" />
-    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp" />
-    <ClCompile Include="src\lua\lua_VerticalLayout.cpp" />
-    <ClCompile Include="src\Material.cpp" />
-    <ClCompile Include="src\MathUtil.cpp" />
-    <ClCompile Include="src\MeshBatch.cpp" />
-    <ClCompile Include="src\Pass.cpp" />
-    <ClCompile Include="src\MaterialParameter.cpp" />
-    <ClCompile Include="src\Matrix.cpp" />
-    <ClCompile Include="src\Mesh.cpp" />
-    <ClCompile Include="src\MeshPart.cpp" />
-    <ClCompile Include="src\MeshSkin.cpp" />
-    <ClCompile Include="src\Model.cpp" />
-    <ClCompile Include="src\Node.cpp" />
-    <ClCompile Include="src\Bundle.cpp" />
-    <ClCompile Include="src\ParticleEmitter.cpp" />
-    <ClCompile Include="src\PhysicsCharacter.cpp" />
-    <ClCompile Include="src\PhysicsCollisionObject.cpp" />
-    <ClCompile Include="src\PhysicsCollisionShape.cpp" />
-    <ClCompile Include="src\PhysicsConstraint.cpp" />
-    <ClCompile Include="src\PhysicsController.cpp" />
-    <ClCompile Include="src\PhysicsFixedConstraint.cpp" />
-    <ClCompile Include="src\PhysicsGenericConstraint.cpp" />
-    <ClCompile Include="src\PhysicsGhostObject.cpp" />
-    <ClCompile Include="src\PhysicsHingeConstraint.cpp" />
-    <ClCompile Include="src\PhysicsRigidBody.cpp" />
-    <ClCompile Include="src\PhysicsSocketConstraint.cpp" />
-    <ClCompile Include="src\PhysicsSpringConstraint.cpp" />
-    <ClCompile Include="src\PhysicsVehicle.cpp" />
-    <ClCompile Include="src\PhysicsVehicleWheel.cpp" />
-    <ClCompile Include="src\Plane.cpp" />
-    <ClCompile Include="src\Platform.cpp" />
-    <ClCompile Include="src\PlatformAndroid.cpp" />
-    <ClCompile Include="src\PlatformBlackBerry.cpp" />
-    <ClCompile Include="src\PlatformLinux.cpp" />
-    <ClCompile Include="src\PlatformWindows.cpp" />
-    <ClCompile Include="src\Properties.cpp" />
-    <ClCompile Include="src\Quaternion.cpp" />
-    <ClCompile Include="src\RadioButton.cpp" />
-    <ClCompile Include="src\Ray.cpp" />
-    <ClCompile Include="src\Rectangle.cpp" />
-    <ClCompile Include="src\Ref.cpp" />
-    <ClCompile Include="src\RenderState.cpp" />
-    <ClCompile Include="src\RenderTarget.cpp" />
-    <ClCompile Include="src\Scene.cpp" />
-    <ClCompile Include="src\SceneLoader.cpp" />
-    <ClCompile Include="src\ScreenDisplayer.cpp" />
-    <ClCompile Include="src\ScriptController.cpp" />
-    <ClCompile Include="src\ScriptTarget.cpp" />
-    <ClCompile Include="src\Slider.cpp" />
-    <ClCompile Include="src\SpriteBatch.cpp" />
-    <ClCompile Include="src\Technique.cpp" />
-    <ClCompile Include="src\Terrain.cpp" />
-    <ClCompile Include="src\TerrainPatch.cpp" />
-    <ClCompile Include="src\TextBox.cpp" />
-    <ClCompile Include="src\Texture.cpp" />
-    <ClCompile Include="src\Theme.cpp" />
-    <ClCompile Include="src\ThemeStyle.cpp" />
-    <ClCompile Include="src\Transform.cpp" />
-    <ClCompile Include="src\Vector2.cpp" />
-    <ClCompile Include="src\Vector3.cpp" />
-    <ClCompile Include="src\Vector4.cpp" />
-    <ClCompile Include="src\VertexAttributeBinding.cpp" />
-    <ClCompile Include="src\VertexFormat.cpp" />
-    <ClCompile Include="src\VerticalLayout.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\AbsoluteLayout.h" />
-    <ClInclude Include="src\AIAgent.h" />
-    <ClInclude Include="src\AIController.h" />
-    <ClInclude Include="src\AIMessage.h" />
-    <ClInclude Include="src\AIState.h" />
-    <ClInclude Include="src\AIStateMachine.h" />
-    <ClInclude Include="src\Animation.h" />
-    <ClInclude Include="src\AnimationClip.h" />
-    <ClInclude Include="src\AnimationController.h" />
-    <ClInclude Include="src\AnimationTarget.h" />
-    <ClInclude Include="src\AnimationValue.h" />
-    <ClInclude Include="src\AudioBuffer.h" />
-    <ClInclude Include="src\AudioController.h" />
-    <ClInclude Include="src\AudioListener.h" />
-    <ClInclude Include="src\AudioSource.h" />
-    <ClInclude Include="src\Base.h" />
-    <ClInclude Include="src\BoundingBox.h" />
-    <ClInclude Include="src\BoundingSphere.h" />
-    <ClInclude Include="src\Button.h" />
-    <ClInclude Include="src\Camera.h" />
-    <ClInclude Include="src\CheckBox.h" />
-    <ClInclude Include="src\Container.h" />
-    <ClInclude Include="src\Control.h" />
-    <ClInclude Include="src\ControlFactory.h" />
-    <ClInclude Include="src\Curve.h" />
-    <ClInclude Include="src\DebugNew.h" />
-    <ClInclude Include="src\DepthStencilTarget.h" />
-    <ClInclude Include="src\Effect.h" />
-    <ClInclude Include="src\FileSystem.h" />
-    <ClInclude Include="src\FlowLayout.h" />
-    <ClInclude Include="src\Font.h" />
-    <ClInclude Include="src\Form.h" />
-    <ClInclude Include="src\FrameBuffer.h" />
-    <ClInclude Include="src\Frustum.h" />
-    <ClInclude Include="src\Game.h" />
-    <ClInclude Include="src\Gamepad.h" />
-    <ClInclude Include="src\gameplay.h" />
-    <ClInclude Include="src\Gesture.h" />
-    <ClInclude Include="src\HeightField.h" />
-    <ClInclude Include="src\Image.h" />
-    <ClInclude Include="src\ImageControl.h" />
-    <ClInclude Include="src\Joint.h" />
-    <ClInclude Include="src\Joystick.h" />
-    <ClInclude Include="src\Keyboard.h" />
-    <ClInclude Include="src\Label.h" />
-    <ClInclude Include="src\Layout.h" />
-    <ClInclude Include="src\Light.h" />
-    <ClInclude Include="src\Logger.h" />
-    <ClInclude Include="src\lua\lua_AbsoluteLayout.h" />
-    <ClInclude Include="src\lua\lua_AIAgent.h" />
-    <ClInclude Include="src\lua\lua_AIAgentListener.h" />
-    <ClInclude Include="src\lua\lua_AIController.h" />
-    <ClInclude Include="src\lua\lua_AIMessage.h" />
-    <ClInclude Include="src\lua\lua_AIMessageParameterType.h" />
-    <ClInclude Include="src\lua\lua_AIState.h" />
-    <ClInclude Include="src\lua\lua_AIStateListener.h" />
-    <ClInclude Include="src\lua\lua_AIStateMachine.h" />
-    <ClInclude Include="src\lua\lua_all_bindings.h" />
-    <ClInclude Include="src\lua\lua_Animation.h" />
-    <ClInclude Include="src\lua\lua_AnimationClip.h" />
-    <ClInclude Include="src\lua\lua_AnimationClipListener.h" />
-    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_AnimationController.h" />
-    <ClInclude Include="src\lua\lua_AnimationTarget.h" />
-    <ClInclude Include="src\lua\lua_AnimationValue.h" />
-    <ClInclude Include="src\lua\lua_AudioBuffer.h" />
-    <ClInclude Include="src\lua\lua_AudioController.h" />
-    <ClInclude Include="src\lua\lua_AudioListener.h" />
-    <ClInclude Include="src\lua\lua_AudioSource.h" />
-    <ClInclude Include="src\lua\lua_AudioSourceState.h" />
-    <ClInclude Include="src\lua\lua_BoundingBox.h" />
-    <ClInclude Include="src\lua\lua_BoundingSphere.h" />
-    <ClInclude Include="src\lua\lua_Bundle.h" />
-    <ClInclude Include="src\lua\lua_Button.h" />
-    <ClInclude Include="src\lua\lua_Camera.h" />
-    <ClInclude Include="src\lua\lua_CameraListener.h" />
-    <ClInclude Include="src\lua\lua_CameraType.h" />
-    <ClInclude Include="src\lua\lua_CheckBox.h" />
-    <ClInclude Include="src\lua\lua_Container.h" />
-    <ClInclude Include="src\lua\lua_ContainerScroll.h" />
-    <ClInclude Include="src\lua\lua_Control.h" />
-    <ClInclude Include="src\lua\lua_ControlAlignment.h" />
-    <ClInclude Include="src\lua\lua_ControlAutoSize.h" />
-    <ClInclude Include="src\lua\lua_ControlListener.h" />
-    <ClInclude Include="src\lua\lua_ControlListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_ControlState.h" />
-    <ClInclude Include="src\lua\lua_Curve.h" />
-    <ClInclude Include="src\lua\lua_CurveInterpolationType.h" />
-    <ClInclude Include="src\lua\lua_DepthStencilTarget.h" />
-    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h" />
-    <ClInclude Include="src\lua\lua_Effect.h" />
-    <ClInclude Include="src\lua\lua_FileSystem.h" />
-    <ClInclude Include="src\lua\lua_FlowLayout.h" />
-    <ClInclude Include="src\lua\lua_Font.h" />
-    <ClInclude Include="src\lua\lua_FontFormat.h" />
-    <ClInclude Include="src\lua\lua_FontJustify.h" />
-    <ClInclude Include="src\lua\lua_FontStyle.h" />
-    <ClInclude Include="src\lua\lua_FontText.h" />
-    <ClInclude Include="src\lua\lua_Form.h" />
-    <ClInclude Include="src\lua\lua_FrameBuffer.h" />
-    <ClInclude Include="src\lua\lua_Frustum.h" />
-    <ClInclude Include="src\lua\lua_Game.h" />
-    <ClInclude Include="src\lua\lua_GameClearFlags.h" />
-    <ClInclude Include="src\lua\lua_Gamepad.h" />
-    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h" />
-    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h" />
-    <ClInclude Include="src\lua\lua_GameState.h" />
-    <ClInclude Include="src\lua\lua_Gesture.h" />
-    <ClInclude Include="src\lua\lua_GestureGestureEvent.h" />
-    <ClInclude Include="src\lua\lua_Global.h" />
-    <ClInclude Include="src\lua\lua_HeightField.h" />
-    <ClInclude Include="src\lua\lua_Image.h" />
-    <ClInclude Include="src\lua\lua_ImageControl.h" />
-    <ClInclude Include="src\lua\lua_ImageFormat.h" />
-    <ClInclude Include="src\lua\lua_Joint.h" />
-    <ClInclude Include="src\lua\lua_Joystick.h" />
-    <ClInclude Include="src\lua\lua_Keyboard.h" />
-    <ClInclude Include="src\lua\lua_KeyboardKey.h" />
-    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h" />
-    <ClInclude Include="src\lua\lua_Label.h" />
-    <ClInclude Include="src\lua\lua_Layout.h" />
-    <ClInclude Include="src\lua\lua_LayoutType.h" />
-    <ClInclude Include="src\lua\lua_Light.h" />
-    <ClInclude Include="src\lua\lua_LightType.h" />
-    <ClInclude Include="src\lua\lua_Logger.h" />
-    <ClInclude Include="src\lua\lua_LoggerLevel.h" />
-    <ClInclude Include="src\lua\lua_Material.h" />
-    <ClInclude Include="src\lua\lua_MaterialParameter.h" />
-    <ClInclude Include="src\lua\lua_MathUtil.h" />
-    <ClInclude Include="src\lua\lua_Matrix.h" />
-    <ClInclude Include="src\lua\lua_Mesh.h" />
-    <ClInclude Include="src\lua\lua_MeshBatch.h" />
-    <ClInclude Include="src\lua\lua_MeshIndexFormat.h" />
-    <ClInclude Include="src\lua\lua_MeshPart.h" />
-    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h" />
-    <ClInclude Include="src\lua\lua_MeshSkin.h" />
-    <ClInclude Include="src\lua\lua_Model.h" />
-    <ClInclude Include="src\lua\lua_Mouse.h" />
-    <ClInclude Include="src\lua\lua_MouseMouseEvent.h" />
-    <ClInclude Include="src\lua\lua_Node.h" />
-    <ClInclude Include="src\lua\lua_NodeCloneContext.h" />
-    <ClInclude Include="src\lua\lua_NodeType.h" />
-    <ClInclude Include="src\lua\lua_ParticleEmitter.h" />
-    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h" />
-    <ClInclude Include="src\lua\lua_Pass.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCharacter.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsController.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h" />
-    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h" />
-    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h" />
-    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsVehicle.h" />
-    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h" />
-    <ClInclude Include="src\lua\lua_Plane.h" />
-    <ClInclude Include="src\lua\lua_Platform.h" />
-    <ClInclude Include="src\lua\lua_Properties.h" />
-    <ClInclude Include="src\lua\lua_PropertiesType.h" />
-    <ClInclude Include="src\lua\lua_Quaternion.h" />
-    <ClInclude Include="src\lua\lua_RadioButton.h" />
-    <ClInclude Include="src\lua\lua_Ray.h" />
-    <ClInclude Include="src\lua\lua_Rectangle.h" />
-    <ClInclude Include="src\lua\lua_Ref.h" />
-    <ClInclude Include="src\lua\lua_RenderState.h" />
-    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h" />
-    <ClInclude Include="src\lua\lua_RenderStateBlend.h" />
-    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h" />
-    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h" />
-    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h" />
-    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h" />
-    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h" />
-    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h" />
-    <ClInclude Include="src\lua\lua_RenderTarget.h" />
-    <ClInclude Include="src\lua\lua_Scene.h" />
-    <ClInclude Include="src\lua\lua_ScreenDisplayer.h" />
-    <ClInclude Include="src\lua\lua_ScriptController.h" />
-    <ClInclude Include="src\lua\lua_ScriptTarget.h" />
-    <ClInclude Include="src\lua\lua_Slider.h" />
-    <ClInclude Include="src\lua\lua_SpriteBatch.h" />
-    <ClInclude Include="src\lua\lua_Technique.h" />
-    <ClInclude Include="src\lua\lua_Terrain.h" />
-    <ClInclude Include="src\lua\lua_TerrainFlags.h" />
-    <ClInclude Include="src\lua\lua_TerrainPatch.h" />
-    <ClInclude Include="src\lua\lua_TextBox.h" />
-    <ClInclude Include="src\lua\lua_TextBoxInputMode.h" />
-    <ClInclude Include="src\lua\lua_Texture.h" />
-    <ClInclude Include="src\lua\lua_TextureFilter.h" />
-    <ClInclude Include="src\lua\lua_TextureFormat.h" />
-    <ClInclude Include="src\lua\lua_TextureSampler.h" />
-    <ClInclude Include="src\lua\lua_TextureWrap.h" />
-    <ClInclude Include="src\lua\lua_Theme.h" />
-    <ClInclude Include="src\lua\lua_ThemeSideRegions.h" />
-    <ClInclude Include="src\lua\lua_ThemeStyle.h" />
-    <ClInclude Include="src\lua\lua_ThemeThemeImage.h" />
-    <ClInclude Include="src\lua\lua_ThemeUVs.h" />
-    <ClInclude Include="src\lua\lua_Touch.h" />
-    <ClInclude Include="src\lua\lua_TouchTouchEvent.h" />
-    <ClInclude Include="src\lua\lua_Transform.h" />
-    <ClInclude Include="src\lua\lua_TransformListener.h" />
-    <ClInclude Include="src\lua\lua_Uniform.h" />
-    <ClInclude Include="src\lua\lua_Vector2.h" />
-    <ClInclude Include="src\lua\lua_Vector3.h" />
-    <ClInclude Include="src\lua\lua_Vector4.h" />
-    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h" />
-    <ClInclude Include="src\lua\lua_VertexFormat.h" />
-    <ClInclude Include="src\lua\lua_VertexFormatElement.h" />
-    <ClInclude Include="src\lua\lua_VertexFormatUsage.h" />
-    <ClInclude Include="src\lua\lua_VerticalLayout.h" />
-    <ClInclude Include="src\Material.h" />
-    <ClInclude Include="src\MathUtil.h" />
-    <ClInclude Include="src\MeshBatch.h" />
-    <ClInclude Include="src\Mouse.h" />
-    <ClInclude Include="src\Pass.h" />
-    <ClInclude Include="src\MaterialParameter.h" />
-    <ClInclude Include="src\Matrix.h" />
-    <ClInclude Include="src\Mesh.h" />
-    <ClInclude Include="src\MeshPart.h" />
-    <ClInclude Include="src\MeshSkin.h" />
-    <ClInclude Include="src\Model.h" />
-    <ClInclude Include="src\Node.h" />
-    <ClInclude Include="src\Bundle.h" />
-    <ClInclude Include="src\ParticleEmitter.h" />
-    <ClInclude Include="src\PhysicsCharacter.h" />
-    <ClInclude Include="src\PhysicsCollisionObject.h" />
-    <ClInclude Include="src\PhysicsCollisionShape.h" />
-    <ClInclude Include="src\PhysicsConstraint.h" />
-    <ClInclude Include="src\PhysicsController.h" />
-    <ClInclude Include="src\PhysicsFixedConstraint.h" />
-    <ClInclude Include="src\PhysicsGenericConstraint.h" />
-    <ClInclude Include="src\PhysicsGhostObject.h" />
-    <ClInclude Include="src\PhysicsHingeConstraint.h" />
-    <ClInclude Include="src\PhysicsRigidBody.h" />
-    <ClInclude Include="src\PhysicsSocketConstraint.h" />
-    <ClInclude Include="src\PhysicsSpringConstraint.h" />
-    <ClInclude Include="src\PhysicsVehicle.h" />
-    <ClInclude Include="src\PhysicsVehicleWheel.h" />
-    <ClInclude Include="src\Plane.h" />
-    <ClInclude Include="src\Platform.h" />
-    <ClInclude Include="src\Properties.h" />
-    <ClInclude Include="src\Quaternion.h" />
-    <ClInclude Include="src\RadioButton.h" />
-    <ClInclude Include="src\Ray.h" />
-    <ClInclude Include="src\Rectangle.h" />
-    <ClInclude Include="src\Ref.h" />
-    <ClInclude Include="src\RenderState.h" />
-    <ClInclude Include="src\RenderTarget.h" />
-    <ClInclude Include="src\Scene.h" />
-    <ClInclude Include="src\SceneLoader.h" />
-    <ClInclude Include="src\ScreenDisplayer.h" />
-    <ClInclude Include="src\ScriptController.h" />
-    <ClInclude Include="src\ScriptTarget.h" />
-    <ClInclude Include="src\Slider.h" />
-    <ClInclude Include="src\SpriteBatch.h" />
-    <ClInclude Include="src\Stream.h" />
-    <ClInclude Include="src\Technique.h" />
-    <ClInclude Include="src\Terrain.h" />
-    <ClInclude Include="src\TerrainPatch.h" />
-    <ClInclude Include="src\TextBox.h" />
-    <ClInclude Include="src\Texture.h" />
-    <ClInclude Include="src\Theme.h" />
-    <ClInclude Include="src\ThemeStyle.h" />
-    <ClInclude Include="src\TimeListener.h" />
-    <ClInclude Include="src\Touch.h" />
-    <ClInclude Include="src\Transform.h" />
-    <ClInclude Include="src\Vector2.h" />
-    <ClInclude Include="src\Vector3.h" />
-    <ClInclude Include="src\Vector4.h" />
-    <ClInclude Include="src\VertexAttributeBinding.h" />
-    <ClInclude Include="src\VertexFormat.h" />
-    <ClInclude Include="src\VerticalLayout.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="res\shaders\colored.frag" />
-    <None Include="res\shaders\colored.vert" />
-    <None Include="res\shaders\font.frag" />
-    <None Include="res\shaders\font.vert" />
-    <None Include="res\shaders\form.frag" />
-    <None Include="res\shaders\form.vert" />
-    <None Include="res\shaders\lighting.frag" />
-    <None Include="res\shaders\lighting.vert" />
-    <None Include="res\shaders\skinning-none.vert" />
-    <None Include="res\shaders\skinning.vert" />
-    <None Include="res\shaders\sprite.frag" />
-    <None Include="res\shaders\sprite.vert" />
-    <None Include="res\shaders\terrain.frag" />
-    <None Include="res\shaders\terrain.vert" />
-    <None Include="res\shaders\textured.frag" />
-    <None Include="res\shaders\textured.vert" />
-    <None Include="src\BoundingBox.inl" />
-    <None Include="src\BoundingSphere.inl" />
-    <None Include="src\Game.inl" />
-    <None Include="src\Image.inl" />
-    <None Include="src\MathUtil.inl" />
-    <None Include="src\MathUtilNeon.inl" />
-    <None Include="src\Joystick.inl" />
-    <None Include="src\Matrix.inl" />
-    <None Include="src\MeshBatch.inl" />
-    <None Include="src\Plane.inl" />
-    <None Include="src\Quaternion.inl" />
-    <None Include="src\Ray.inl" />
-    <None Include="src\ScriptController.inl" />
-    <None Include="src\Vector2.inl" />
-    <None Include="src\Vector3.inl" />
-    <None Include="src\Vector4.inl" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="src\PhysicsConstraint.inl" />
-    <None Include="src\PhysicsFixedConstraint.inl" />
-    <None Include="src\PhysicsGenericConstraint.inl" />
-    <None Include="src\PhysicsRigidBody.inl" />
-    <None Include="src\PhysicsSpringConstraint.inl" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{1032BA4B-57EB-4348-9E03-29DD63E80E4A}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>gameplay</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</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 Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
-    <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>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <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'">
-    <OutDir>windows\x86\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>windows\x64\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <OutDir>windows\x86\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <OutDir>windows\x64\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>windows\x86\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <IntDir>windows\x64\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <IntDir>windows\x86\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <IntDir>windows\x64\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>windows\x86\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>windows\x64\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>windows\x86\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <IntDir>windows\x64\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>
-      </RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <DisableSpecificWarnings>
-      </DisableSpecificWarnings>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>
-      </RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <DisableSpecificWarnings>
-      </DisableSpecificWarnings>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <Verbose>
-      </Verbose>
-      <AdditionalDependencies>
-      </AdditionalDependencies>
-      <AdditionalLibraryDirectories>
-      </AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <Verbose>
-      </Verbose>
-    </Lib>
-  </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;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-      <DisableSpecificWarnings>
-      </DisableSpecificWarnings>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?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="DebugMem|Win32">
+      <Configuration>DebugMem</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugMem|x64">
+      <Configuration>DebugMem</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\AbsoluteLayout.cpp" />
+    <ClCompile Include="src\AIAgent.cpp" />
+    <ClCompile Include="src\AIController.cpp" />
+    <ClCompile Include="src\AIMessage.cpp" />
+    <ClCompile Include="src\AIState.cpp" />
+    <ClCompile Include="src\AIStateMachine.cpp" />
+    <ClCompile Include="src\Animation.cpp" />
+    <ClCompile Include="src\AnimationClip.cpp" />
+    <ClCompile Include="src\AnimationController.cpp" />
+    <ClCompile Include="src\AnimationTarget.cpp" />
+    <ClCompile Include="src\AnimationValue.cpp" />
+    <ClCompile Include="src\AudioBuffer.cpp" />
+    <ClCompile Include="src\AudioController.cpp" />
+    <ClCompile Include="src\AudioListener.cpp" />
+    <ClCompile Include="src\AudioSource.cpp" />
+    <ClCompile Include="src\BoundingBox.cpp" />
+    <ClCompile Include="src\BoundingSphere.cpp" />
+    <ClCompile Include="src\Button.cpp" />
+    <ClCompile Include="src\Camera.cpp" />
+    <ClCompile Include="src\CheckBox.cpp" />
+    <ClCompile Include="src\Container.cpp" />
+    <ClCompile Include="src\Control.cpp" />
+    <ClCompile Include="src\ControlFactory.cpp" />
+    <ClCompile Include="src\Curve.cpp" />
+    <ClCompile Include="src\DebugNew.cpp" />
+    <ClCompile Include="src\DepthStencilTarget.cpp" />
+    <ClCompile Include="src\Effect.cpp" />
+    <ClCompile Include="src\FileSystem.cpp" />
+    <ClCompile Include="src\FlowLayout.cpp" />
+    <ClCompile Include="src\Font.cpp" />
+    <ClCompile Include="src\Form.cpp" />
+    <ClCompile Include="src\FrameBuffer.cpp" />
+    <ClCompile Include="src\Frustum.cpp" />
+    <ClCompile Include="src\Game.cpp" />
+    <ClCompile Include="src\Gamepad.cpp" />
+    <ClCompile Include="src\gameplay-main-android.cpp" />
+    <ClCompile Include="src\gameplay-main-blackberry.cpp" />
+    <ClCompile Include="src\gameplay-main-linux.cpp" />
+    <ClCompile Include="src\gameplay-main-windows.cpp" />
+    <ClCompile Include="src\HeightField.cpp" />
+    <ClCompile Include="src\Image.cpp" />
+    <ClCompile Include="src\ImageControl.cpp" />
+    <ClCompile Include="src\Joint.cpp" />
+    <ClCompile Include="src\Joystick.cpp" />
+    <ClCompile Include="src\Label.cpp" />
+    <ClCompile Include="src\Layout.cpp" />
+    <ClCompile Include="src\Light.cpp" />
+    <ClCompile Include="src\Logger.cpp" />
+    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp" />
+    <ClCompile Include="src\lua\lua_AIAgent.cpp" />
+    <ClCompile Include="src\lua\lua_AIAgentListener.cpp" />
+    <ClCompile Include="src\lua\lua_AIController.cpp" />
+    <ClCompile Include="src\lua\lua_AIMessage.cpp" />
+    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp" />
+    <ClCompile Include="src\lua\lua_AIState.cpp" />
+    <ClCompile Include="src\lua\lua_AIStateListener.cpp" />
+    <ClCompile Include="src\lua\lua_AIStateMachine.cpp" />
+    <ClCompile Include="src\lua\lua_all_bindings.cpp" />
+    <ClCompile Include="src\lua\lua_Animation.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationClip.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationController.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationTarget.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationValue.cpp" />
+    <ClCompile Include="src\lua\lua_AudioBuffer.cpp" />
+    <ClCompile Include="src\lua\lua_AudioController.cpp" />
+    <ClCompile Include="src\lua\lua_AudioListener.cpp" />
+    <ClCompile Include="src\lua\lua_AudioSource.cpp" />
+    <ClCompile Include="src\lua\lua_AudioSourceState.cpp" />
+    <ClCompile Include="src\lua\lua_BoundingBox.cpp" />
+    <ClCompile Include="src\lua\lua_BoundingSphere.cpp" />
+    <ClCompile Include="src\lua\lua_Bundle.cpp" />
+    <ClCompile Include="src\lua\lua_Button.cpp" />
+    <ClCompile Include="src\lua\lua_Camera.cpp" />
+    <ClCompile Include="src\lua\lua_CameraListener.cpp" />
+    <ClCompile Include="src\lua\lua_CameraType.cpp" />
+    <ClCompile Include="src\lua\lua_CheckBox.cpp" />
+    <ClCompile Include="src\lua\lua_Container.cpp" />
+    <ClCompile Include="src\lua\lua_ContainerScroll.cpp" />
+    <ClCompile Include="src\lua\lua_Control.cpp" />
+    <ClCompile Include="src\lua\lua_ControlAlignment.cpp" />
+    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp" />
+    <ClCompile Include="src\lua\lua_ControlListener.cpp" />
+    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_ControlState.cpp" />
+    <ClCompile Include="src\lua\lua_Curve.cpp" />
+    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp" />
+    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp" />
+    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp" />
+    <ClCompile Include="src\lua\lua_Effect.cpp" />
+    <ClCompile Include="src\lua\lua_FileSystem.cpp" />
+    <ClCompile Include="src\lua\lua_FlowLayout.cpp" />
+    <ClCompile Include="src\lua\lua_Font.cpp" />
+    <ClCompile Include="src\lua\lua_FontFormat.cpp" />
+    <ClCompile Include="src\lua\lua_FontJustify.cpp" />
+    <ClCompile Include="src\lua\lua_FontStyle.cpp" />
+    <ClCompile Include="src\lua\lua_FontText.cpp" />
+    <ClCompile Include="src\lua\lua_Form.cpp" />
+    <ClCompile Include="src\lua\lua_FrameBuffer.cpp" />
+    <ClCompile Include="src\lua\lua_Frustum.cpp" />
+    <ClCompile Include="src\lua\lua_Game.cpp" />
+    <ClCompile Include="src\lua\lua_GameClearFlags.cpp" />
+    <ClCompile Include="src\lua\lua_Gamepad.cpp" />
+    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp" />
+    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp" />
+    <ClCompile Include="src\lua\lua_GameState.cpp" />
+    <ClCompile Include="src\lua\lua_Gesture.cpp" />
+    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Global.cpp" />
+    <ClCompile Include="src\lua\lua_HeightField.cpp" />
+    <ClCompile Include="src\lua\lua_Image.cpp" />
+    <ClCompile Include="src\lua\lua_ImageControl.cpp" />
+    <ClCompile Include="src\lua\lua_ImageFormat.cpp" />
+    <ClCompile Include="src\lua\lua_Joint.cpp" />
+    <ClCompile Include="src\lua\lua_Joystick.cpp" />
+    <ClCompile Include="src\lua\lua_Keyboard.cpp" />
+    <ClCompile Include="src\lua\lua_KeyboardKey.cpp" />
+    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Label.cpp" />
+    <ClCompile Include="src\lua\lua_Layout.cpp" />
+    <ClCompile Include="src\lua\lua_LayoutType.cpp" />
+    <ClCompile Include="src\lua\lua_Light.cpp" />
+    <ClCompile Include="src\lua\lua_LightType.cpp" />
+    <ClCompile Include="src\lua\lua_Logger.cpp" />
+    <ClCompile Include="src\lua\lua_LoggerLevel.cpp" />
+    <ClCompile Include="src\lua\lua_Material.cpp" />
+    <ClCompile Include="src\lua\lua_MaterialParameter.cpp" />
+    <ClCompile Include="src\lua\lua_MathUtil.cpp" />
+    <ClCompile Include="src\lua\lua_Matrix.cpp" />
+    <ClCompile Include="src\lua\lua_Mesh.cpp" />
+    <ClCompile Include="src\lua\lua_MeshBatch.cpp" />
+    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp" />
+    <ClCompile Include="src\lua\lua_MeshPart.cpp" />
+    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp" />
+    <ClCompile Include="src\lua\lua_MeshSkin.cpp" />
+    <ClCompile Include="src\lua\lua_Model.cpp" />
+    <ClCompile Include="src\lua\lua_Mouse.cpp" />
+    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Node.cpp" />
+    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp" />
+    <ClCompile Include="src\lua\lua_NodeType.cpp" />
+    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp" />
+    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp" />
+    <ClCompile Include="src\lua\lua_Pass.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsController.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp" />
+    <ClCompile Include="src\lua\lua_Plane.cpp" />
+    <ClCompile Include="src\lua\lua_Platform.cpp" />
+    <ClCompile Include="src\lua\lua_Properties.cpp" />
+    <ClCompile Include="src\lua\lua_PropertiesType.cpp" />
+    <ClCompile Include="src\lua\lua_Quaternion.cpp" />
+    <ClCompile Include="src\lua\lua_RadioButton.cpp" />
+    <ClCompile Include="src\lua\lua_Ray.cpp" />
+    <ClCompile Include="src\lua\lua_Rectangle.cpp" />
+    <ClCompile Include="src\lua\lua_Ref.cpp" />
+    <ClCompile Include="src\lua\lua_RenderState.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp" />
+    <ClCompile Include="src\lua\lua_RenderTarget.cpp" />
+    <ClCompile Include="src\lua\lua_Scene.cpp" />
+    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp" />
+    <ClCompile Include="src\lua\lua_ScriptController.cpp" />
+    <ClCompile Include="src\lua\lua_ScriptTarget.cpp" />
+    <ClCompile Include="src\lua\lua_Slider.cpp" />
+    <ClCompile Include="src\lua\lua_SpriteBatch.cpp" />
+    <ClCompile Include="src\lua\lua_Technique.cpp" />
+    <ClCompile Include="src\lua\lua_Terrain.cpp" />
+    <ClCompile Include="src\lua\lua_TerrainFlags.cpp" />
+    <ClCompile Include="src\lua\lua_TerrainPatch.cpp" />
+    <ClCompile Include="src\lua\lua_TextBox.cpp" />
+    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp" />
+    <ClCompile Include="src\lua\lua_Texture.cpp" />
+    <ClCompile Include="src\lua\lua_TextureFilter.cpp" />
+    <ClCompile Include="src\lua\lua_TextureFormat.cpp" />
+    <ClCompile Include="src\lua\lua_TextureSampler.cpp" />
+    <ClCompile Include="src\lua\lua_TextureWrap.cpp" />
+    <ClCompile Include="src\lua\lua_Theme.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeStyle.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeUVs.cpp" />
+    <ClCompile Include="src\lua\lua_Touch.cpp" />
+    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Transform.cpp" />
+    <ClCompile Include="src\lua\lua_TransformListener.cpp" />
+    <ClCompile Include="src\lua\lua_Uniform.cpp" />
+    <ClCompile Include="src\lua\lua_Vector2.cpp" />
+    <ClCompile Include="src\lua\lua_Vector3.cpp" />
+    <ClCompile Include="src\lua\lua_Vector4.cpp" />
+    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp" />
+    <ClCompile Include="src\lua\lua_VertexFormat.cpp" />
+    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp" />
+    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp" />
+    <ClCompile Include="src\lua\lua_VerticalLayout.cpp" />
+    <ClCompile Include="src\Material.cpp" />
+    <ClCompile Include="src\MathUtil.cpp" />
+    <ClCompile Include="src\MeshBatch.cpp" />
+    <ClCompile Include="src\Pass.cpp" />
+    <ClCompile Include="src\MaterialParameter.cpp" />
+    <ClCompile Include="src\Matrix.cpp" />
+    <ClCompile Include="src\Mesh.cpp" />
+    <ClCompile Include="src\MeshPart.cpp" />
+    <ClCompile Include="src\MeshSkin.cpp" />
+    <ClCompile Include="src\Model.cpp" />
+    <ClCompile Include="src\Node.cpp" />
+    <ClCompile Include="src\Bundle.cpp" />
+    <ClCompile Include="src\ParticleEmitter.cpp" />
+    <ClCompile Include="src\PhysicsCharacter.cpp" />
+    <ClCompile Include="src\PhysicsCollisionObject.cpp" />
+    <ClCompile Include="src\PhysicsCollisionShape.cpp" />
+    <ClCompile Include="src\PhysicsConstraint.cpp" />
+    <ClCompile Include="src\PhysicsController.cpp" />
+    <ClCompile Include="src\PhysicsFixedConstraint.cpp" />
+    <ClCompile Include="src\PhysicsGenericConstraint.cpp" />
+    <ClCompile Include="src\PhysicsGhostObject.cpp" />
+    <ClCompile Include="src\PhysicsHingeConstraint.cpp" />
+    <ClCompile Include="src\PhysicsRigidBody.cpp" />
+    <ClCompile Include="src\PhysicsSocketConstraint.cpp" />
+    <ClCompile Include="src\PhysicsSpringConstraint.cpp" />
+    <ClCompile Include="src\PhysicsVehicle.cpp" />
+    <ClCompile Include="src\PhysicsVehicleWheel.cpp" />
+    <ClCompile Include="src\Plane.cpp" />
+    <ClCompile Include="src\Platform.cpp" />
+    <ClCompile Include="src\PlatformAndroid.cpp" />
+    <ClCompile Include="src\PlatformBlackBerry.cpp" />
+    <ClCompile Include="src\PlatformLinux.cpp" />
+    <ClCompile Include="src\PlatformWindows.cpp" />
+    <ClCompile Include="src\Properties.cpp" />
+    <ClCompile Include="src\Quaternion.cpp" />
+    <ClCompile Include="src\RadioButton.cpp" />
+    <ClCompile Include="src\Ray.cpp" />
+    <ClCompile Include="src\Rectangle.cpp" />
+    <ClCompile Include="src\Ref.cpp" />
+    <ClCompile Include="src\RenderState.cpp" />
+    <ClCompile Include="src\RenderTarget.cpp" />
+    <ClCompile Include="src\Scene.cpp" />
+    <ClCompile Include="src\SceneLoader.cpp" />
+    <ClCompile Include="src\ScreenDisplayer.cpp" />
+    <ClCompile Include="src\ScriptController.cpp" />
+    <ClCompile Include="src\ScriptTarget.cpp" />
+    <ClCompile Include="src\Slider.cpp" />
+    <ClCompile Include="src\SpriteBatch.cpp" />
+    <ClCompile Include="src\Technique.cpp" />
+    <ClCompile Include="src\Terrain.cpp" />
+    <ClCompile Include="src\TerrainPatch.cpp" />
+    <ClCompile Include="src\TextBox.cpp" />
+    <ClCompile Include="src\Texture.cpp" />
+    <ClCompile Include="src\Theme.cpp" />
+    <ClCompile Include="src\ThemeStyle.cpp" />
+    <ClCompile Include="src\Transform.cpp" />
+    <ClCompile Include="src\Vector2.cpp" />
+    <ClCompile Include="src\Vector3.cpp" />
+    <ClCompile Include="src\Vector4.cpp" />
+    <ClCompile Include="src\VertexAttributeBinding.cpp" />
+    <ClCompile Include="src\VertexFormat.cpp" />
+    <ClCompile Include="src\VerticalLayout.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\AbsoluteLayout.h" />
+    <ClInclude Include="src\AIAgent.h" />
+    <ClInclude Include="src\AIController.h" />
+    <ClInclude Include="src\AIMessage.h" />
+    <ClInclude Include="src\AIState.h" />
+    <ClInclude Include="src\AIStateMachine.h" />
+    <ClInclude Include="src\Animation.h" />
+    <ClInclude Include="src\AnimationClip.h" />
+    <ClInclude Include="src\AnimationController.h" />
+    <ClInclude Include="src\AnimationTarget.h" />
+    <ClInclude Include="src\AnimationValue.h" />
+    <ClInclude Include="src\AudioBuffer.h" />
+    <ClInclude Include="src\AudioController.h" />
+    <ClInclude Include="src\AudioListener.h" />
+    <ClInclude Include="src\AudioSource.h" />
+    <ClInclude Include="src\Base.h" />
+    <ClInclude Include="src\BoundingBox.h" />
+    <ClInclude Include="src\BoundingSphere.h" />
+    <ClInclude Include="src\Button.h" />
+    <ClInclude Include="src\Camera.h" />
+    <ClInclude Include="src\CheckBox.h" />
+    <ClInclude Include="src\Container.h" />
+    <ClInclude Include="src\Control.h" />
+    <ClInclude Include="src\ControlFactory.h" />
+    <ClInclude Include="src\Curve.h" />
+    <ClInclude Include="src\DebugNew.h" />
+    <ClInclude Include="src\DepthStencilTarget.h" />
+    <ClInclude Include="src\Effect.h" />
+    <ClInclude Include="src\FileSystem.h" />
+    <ClInclude Include="src\FlowLayout.h" />
+    <ClInclude Include="src\Font.h" />
+    <ClInclude Include="src\Form.h" />
+    <ClInclude Include="src\FrameBuffer.h" />
+    <ClInclude Include="src\Frustum.h" />
+    <ClInclude Include="src\Game.h" />
+    <ClInclude Include="src\Gamepad.h" />
+    <ClInclude Include="src\gameplay.h" />
+    <ClInclude Include="src\Gesture.h" />
+    <ClInclude Include="src\HeightField.h" />
+    <ClInclude Include="src\Image.h" />
+    <ClInclude Include="src\ImageControl.h" />
+    <ClInclude Include="src\Joint.h" />
+    <ClInclude Include="src\Joystick.h" />
+    <ClInclude Include="src\Keyboard.h" />
+    <ClInclude Include="src\Label.h" />
+    <ClInclude Include="src\Layout.h" />
+    <ClInclude Include="src\Light.h" />
+    <ClInclude Include="src\Logger.h" />
+    <ClInclude Include="src\lua\lua_AbsoluteLayout.h" />
+    <ClInclude Include="src\lua\lua_AIAgent.h" />
+    <ClInclude Include="src\lua\lua_AIAgentListener.h" />
+    <ClInclude Include="src\lua\lua_AIController.h" />
+    <ClInclude Include="src\lua\lua_AIMessage.h" />
+    <ClInclude Include="src\lua\lua_AIMessageParameterType.h" />
+    <ClInclude Include="src\lua\lua_AIState.h" />
+    <ClInclude Include="src\lua\lua_AIStateListener.h" />
+    <ClInclude Include="src\lua\lua_AIStateMachine.h" />
+    <ClInclude Include="src\lua\lua_all_bindings.h" />
+    <ClInclude Include="src\lua\lua_Animation.h" />
+    <ClInclude Include="src\lua\lua_AnimationClip.h" />
+    <ClInclude Include="src\lua\lua_AnimationClipListener.h" />
+    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_AnimationController.h" />
+    <ClInclude Include="src\lua\lua_AnimationTarget.h" />
+    <ClInclude Include="src\lua\lua_AnimationValue.h" />
+    <ClInclude Include="src\lua\lua_AudioBuffer.h" />
+    <ClInclude Include="src\lua\lua_AudioController.h" />
+    <ClInclude Include="src\lua\lua_AudioListener.h" />
+    <ClInclude Include="src\lua\lua_AudioSource.h" />
+    <ClInclude Include="src\lua\lua_AudioSourceState.h" />
+    <ClInclude Include="src\lua\lua_BoundingBox.h" />
+    <ClInclude Include="src\lua\lua_BoundingSphere.h" />
+    <ClInclude Include="src\lua\lua_Bundle.h" />
+    <ClInclude Include="src\lua\lua_Button.h" />
+    <ClInclude Include="src\lua\lua_Camera.h" />
+    <ClInclude Include="src\lua\lua_CameraListener.h" />
+    <ClInclude Include="src\lua\lua_CameraType.h" />
+    <ClInclude Include="src\lua\lua_CheckBox.h" />
+    <ClInclude Include="src\lua\lua_Container.h" />
+    <ClInclude Include="src\lua\lua_ContainerScroll.h" />
+    <ClInclude Include="src\lua\lua_Control.h" />
+    <ClInclude Include="src\lua\lua_ControlAlignment.h" />
+    <ClInclude Include="src\lua\lua_ControlAutoSize.h" />
+    <ClInclude Include="src\lua\lua_ControlListener.h" />
+    <ClInclude Include="src\lua\lua_ControlListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_ControlState.h" />
+    <ClInclude Include="src\lua\lua_Curve.h" />
+    <ClInclude Include="src\lua\lua_CurveInterpolationType.h" />
+    <ClInclude Include="src\lua\lua_DepthStencilTarget.h" />
+    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h" />
+    <ClInclude Include="src\lua\lua_Effect.h" />
+    <ClInclude Include="src\lua\lua_FileSystem.h" />
+    <ClInclude Include="src\lua\lua_FlowLayout.h" />
+    <ClInclude Include="src\lua\lua_Font.h" />
+    <ClInclude Include="src\lua\lua_FontFormat.h" />
+    <ClInclude Include="src\lua\lua_FontJustify.h" />
+    <ClInclude Include="src\lua\lua_FontStyle.h" />
+    <ClInclude Include="src\lua\lua_FontText.h" />
+    <ClInclude Include="src\lua\lua_Form.h" />
+    <ClInclude Include="src\lua\lua_FrameBuffer.h" />
+    <ClInclude Include="src\lua\lua_Frustum.h" />
+    <ClInclude Include="src\lua\lua_Game.h" />
+    <ClInclude Include="src\lua\lua_GameClearFlags.h" />
+    <ClInclude Include="src\lua\lua_Gamepad.h" />
+    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h" />
+    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h" />
+    <ClInclude Include="src\lua\lua_GameState.h" />
+    <ClInclude Include="src\lua\lua_Gesture.h" />
+    <ClInclude Include="src\lua\lua_GestureGestureEvent.h" />
+    <ClInclude Include="src\lua\lua_Global.h" />
+    <ClInclude Include="src\lua\lua_HeightField.h" />
+    <ClInclude Include="src\lua\lua_Image.h" />
+    <ClInclude Include="src\lua\lua_ImageControl.h" />
+    <ClInclude Include="src\lua\lua_ImageFormat.h" />
+    <ClInclude Include="src\lua\lua_Joint.h" />
+    <ClInclude Include="src\lua\lua_Joystick.h" />
+    <ClInclude Include="src\lua\lua_Keyboard.h" />
+    <ClInclude Include="src\lua\lua_KeyboardKey.h" />
+    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h" />
+    <ClInclude Include="src\lua\lua_Label.h" />
+    <ClInclude Include="src\lua\lua_Layout.h" />
+    <ClInclude Include="src\lua\lua_LayoutType.h" />
+    <ClInclude Include="src\lua\lua_Light.h" />
+    <ClInclude Include="src\lua\lua_LightType.h" />
+    <ClInclude Include="src\lua\lua_Logger.h" />
+    <ClInclude Include="src\lua\lua_LoggerLevel.h" />
+    <ClInclude Include="src\lua\lua_Material.h" />
+    <ClInclude Include="src\lua\lua_MaterialParameter.h" />
+    <ClInclude Include="src\lua\lua_MathUtil.h" />
+    <ClInclude Include="src\lua\lua_Matrix.h" />
+    <ClInclude Include="src\lua\lua_Mesh.h" />
+    <ClInclude Include="src\lua\lua_MeshBatch.h" />
+    <ClInclude Include="src\lua\lua_MeshIndexFormat.h" />
+    <ClInclude Include="src\lua\lua_MeshPart.h" />
+    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h" />
+    <ClInclude Include="src\lua\lua_MeshSkin.h" />
+    <ClInclude Include="src\lua\lua_Model.h" />
+    <ClInclude Include="src\lua\lua_Mouse.h" />
+    <ClInclude Include="src\lua\lua_MouseMouseEvent.h" />
+    <ClInclude Include="src\lua\lua_Node.h" />
+    <ClInclude Include="src\lua\lua_NodeCloneContext.h" />
+    <ClInclude Include="src\lua\lua_NodeType.h" />
+    <ClInclude Include="src\lua\lua_ParticleEmitter.h" />
+    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h" />
+    <ClInclude Include="src\lua\lua_Pass.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCharacter.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsController.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h" />
+    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h" />
+    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h" />
+    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsVehicle.h" />
+    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h" />
+    <ClInclude Include="src\lua\lua_Plane.h" />
+    <ClInclude Include="src\lua\lua_Platform.h" />
+    <ClInclude Include="src\lua\lua_Properties.h" />
+    <ClInclude Include="src\lua\lua_PropertiesType.h" />
+    <ClInclude Include="src\lua\lua_Quaternion.h" />
+    <ClInclude Include="src\lua\lua_RadioButton.h" />
+    <ClInclude Include="src\lua\lua_Ray.h" />
+    <ClInclude Include="src\lua\lua_Rectangle.h" />
+    <ClInclude Include="src\lua\lua_Ref.h" />
+    <ClInclude Include="src\lua\lua_RenderState.h" />
+    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h" />
+    <ClInclude Include="src\lua\lua_RenderStateBlend.h" />
+    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h" />
+    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h" />
+    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h" />
+    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h" />
+    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h" />
+    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h" />
+    <ClInclude Include="src\lua\lua_RenderTarget.h" />
+    <ClInclude Include="src\lua\lua_Scene.h" />
+    <ClInclude Include="src\lua\lua_ScreenDisplayer.h" />
+    <ClInclude Include="src\lua\lua_ScriptController.h" />
+    <ClInclude Include="src\lua\lua_ScriptTarget.h" />
+    <ClInclude Include="src\lua\lua_Slider.h" />
+    <ClInclude Include="src\lua\lua_SpriteBatch.h" />
+    <ClInclude Include="src\lua\lua_Technique.h" />
+    <ClInclude Include="src\lua\lua_Terrain.h" />
+    <ClInclude Include="src\lua\lua_TerrainFlags.h" />
+    <ClInclude Include="src\lua\lua_TerrainPatch.h" />
+    <ClInclude Include="src\lua\lua_TextBox.h" />
+    <ClInclude Include="src\lua\lua_TextBoxInputMode.h" />
+    <ClInclude Include="src\lua\lua_Texture.h" />
+    <ClInclude Include="src\lua\lua_TextureFilter.h" />
+    <ClInclude Include="src\lua\lua_TextureFormat.h" />
+    <ClInclude Include="src\lua\lua_TextureSampler.h" />
+    <ClInclude Include="src\lua\lua_TextureWrap.h" />
+    <ClInclude Include="src\lua\lua_Theme.h" />
+    <ClInclude Include="src\lua\lua_ThemeSideRegions.h" />
+    <ClInclude Include="src\lua\lua_ThemeStyle.h" />
+    <ClInclude Include="src\lua\lua_ThemeThemeImage.h" />
+    <ClInclude Include="src\lua\lua_ThemeUVs.h" />
+    <ClInclude Include="src\lua\lua_Touch.h" />
+    <ClInclude Include="src\lua\lua_TouchTouchEvent.h" />
+    <ClInclude Include="src\lua\lua_Transform.h" />
+    <ClInclude Include="src\lua\lua_TransformListener.h" />
+    <ClInclude Include="src\lua\lua_Uniform.h" />
+    <ClInclude Include="src\lua\lua_Vector2.h" />
+    <ClInclude Include="src\lua\lua_Vector3.h" />
+    <ClInclude Include="src\lua\lua_Vector4.h" />
+    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h" />
+    <ClInclude Include="src\lua\lua_VertexFormat.h" />
+    <ClInclude Include="src\lua\lua_VertexFormatElement.h" />
+    <ClInclude Include="src\lua\lua_VertexFormatUsage.h" />
+    <ClInclude Include="src\lua\lua_VerticalLayout.h" />
+    <ClInclude Include="src\Material.h" />
+    <ClInclude Include="src\MathUtil.h" />
+    <ClInclude Include="src\MeshBatch.h" />
+    <ClInclude Include="src\Mouse.h" />
+    <ClInclude Include="src\Pass.h" />
+    <ClInclude Include="src\MaterialParameter.h" />
+    <ClInclude Include="src\Matrix.h" />
+    <ClInclude Include="src\Mesh.h" />
+    <ClInclude Include="src\MeshPart.h" />
+    <ClInclude Include="src\MeshSkin.h" />
+    <ClInclude Include="src\Model.h" />
+    <ClInclude Include="src\Node.h" />
+    <ClInclude Include="src\Bundle.h" />
+    <ClInclude Include="src\ParticleEmitter.h" />
+    <ClInclude Include="src\PhysicsCharacter.h" />
+    <ClInclude Include="src\PhysicsCollisionObject.h" />
+    <ClInclude Include="src\PhysicsCollisionShape.h" />
+    <ClInclude Include="src\PhysicsConstraint.h" />
+    <ClInclude Include="src\PhysicsController.h" />
+    <ClInclude Include="src\PhysicsFixedConstraint.h" />
+    <ClInclude Include="src\PhysicsGenericConstraint.h" />
+    <ClInclude Include="src\PhysicsGhostObject.h" />
+    <ClInclude Include="src\PhysicsHingeConstraint.h" />
+    <ClInclude Include="src\PhysicsRigidBody.h" />
+    <ClInclude Include="src\PhysicsSocketConstraint.h" />
+    <ClInclude Include="src\PhysicsSpringConstraint.h" />
+    <ClInclude Include="src\PhysicsVehicle.h" />
+    <ClInclude Include="src\PhysicsVehicleWheel.h" />
+    <ClInclude Include="src\Plane.h" />
+    <ClInclude Include="src\Platform.h" />
+    <ClInclude Include="src\Properties.h" />
+    <ClInclude Include="src\Quaternion.h" />
+    <ClInclude Include="src\RadioButton.h" />
+    <ClInclude Include="src\Ray.h" />
+    <ClInclude Include="src\Rectangle.h" />
+    <ClInclude Include="src\Ref.h" />
+    <ClInclude Include="src\RenderState.h" />
+    <ClInclude Include="src\RenderTarget.h" />
+    <ClInclude Include="src\Scene.h" />
+    <ClInclude Include="src\SceneLoader.h" />
+    <ClInclude Include="src\ScreenDisplayer.h" />
+    <ClInclude Include="src\ScriptController.h" />
+    <ClInclude Include="src\ScriptTarget.h" />
+    <ClInclude Include="src\Slider.h" />
+    <ClInclude Include="src\SpriteBatch.h" />
+    <ClInclude Include="src\Stream.h" />
+    <ClInclude Include="src\Technique.h" />
+    <ClInclude Include="src\Terrain.h" />
+    <ClInclude Include="src\TerrainPatch.h" />
+    <ClInclude Include="src\TextBox.h" />
+    <ClInclude Include="src\Texture.h" />
+    <ClInclude Include="src\Theme.h" />
+    <ClInclude Include="src\ThemeStyle.h" />
+    <ClInclude Include="src\TimeListener.h" />
+    <ClInclude Include="src\Touch.h" />
+    <ClInclude Include="src\Transform.h" />
+    <ClInclude Include="src\Vector2.h" />
+    <ClInclude Include="src\Vector3.h" />
+    <ClInclude Include="src\Vector4.h" />
+    <ClInclude Include="src\VertexAttributeBinding.h" />
+    <ClInclude Include="src\VertexFormat.h" />
+    <ClInclude Include="src\VerticalLayout.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
+    <None Include="src\BoundingBox.inl" />
+    <None Include="src\BoundingSphere.inl" />
+    <None Include="src\Game.inl" />
+    <None Include="src\Image.inl" />
+    <None Include="src\MathUtil.inl" />
+    <None Include="src\MathUtilNeon.inl" />
+    <None Include="src\Joystick.inl" />
+    <None Include="src\Matrix.inl" />
+    <None Include="src\MeshBatch.inl" />
+    <None Include="src\Plane.inl" />
+    <None Include="src\Quaternion.inl" />
+    <None Include="src\Ray.inl" />
+    <None Include="src\ScriptController.inl" />
+    <None Include="src\Vector2.inl" />
+    <None Include="src\Vector3.inl" />
+    <None Include="src\Vector4.inl" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="src\PhysicsConstraint.inl" />
+    <None Include="src\PhysicsFixedConstraint.inl" />
+    <None Include="src\PhysicsGenericConstraint.inl" />
+    <None Include="src\PhysicsRigidBody.inl" />
+    <None Include="src\PhysicsSpringConstraint.inl" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1032BA4B-57EB-4348-9E03-29DD63E80E4A}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>gameplay</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</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 Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
+    <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>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <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'">
+    <OutDir>windows\x86\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>windows\x64\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <OutDir>windows\x86\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <OutDir>windows\x64\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IntDir>windows\x86\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <IntDir>windows\x64\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <IntDir>windows\x86\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <IntDir>windows\x64\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>windows\x86\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>windows\x64\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <IntDir>windows\x86\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IntDir>windows\x64\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>
+      </RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <DisableSpecificWarnings>
+      </DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>
+      </RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <DisableSpecificWarnings>
+      </DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <Verbose>
+      </Verbose>
+      <AdditionalDependencies>
+      </AdditionalDependencies>
+      <AdditionalLibraryDirectories>
+      </AdditionalLibraryDirectories>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <Verbose>
+      </Verbose>
+    </Lib>
+  </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;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+      <DisableSpecificWarnings>
+      </DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>

+ 1851 - 1851
gameplay/gameplay.vcxproj.filters

@@ -1,1852 +1,1852 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-      <UniqueIdentifier>{c4d4da1c-81e2-4944-901c-200e1c4d80e5}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res">
-      <UniqueIdentifier>{4a30ac71-e135-47d3-9f56-baac7cffe64c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\shaders">
-      <UniqueIdentifier>{be0b36f1-49ed-4a06-9f1f-57c654a554fe}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\lua">
-      <UniqueIdentifier>{21cf31c6-9c10-44cb-a864-d46a0e7bfe5e}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\Plane.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformBlackBerry.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformWindows.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Quaternion.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Ray.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Rectangle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Ref.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Scene.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SpriteBatch.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Texture.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Transform.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Vector2.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Vector3.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Vector4.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VertexAttributeBinding.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VertexFormat.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Properties.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Technique.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Pass.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\RenderState.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsRigidBody.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsHingeConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsFixedConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsGenericConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsSocketConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsSpringConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SceneLoader.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\RenderTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformAndroid.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AbsoluteLayout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\RadioButton.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Slider.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VerticalLayout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Theme.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TextBox.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCharacter.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCollisionObject.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsGhostObject.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCollisionShape.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ThemeStyle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ScriptController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ScreenDisplayer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIAgent.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIMessage.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ScriptTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformLinux.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsVehicle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsVehicleWheel.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Terrain.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TerrainPatch.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Platform.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIState.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIStateMachine.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Animation.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationClip.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationValue.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioBuffer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioListener.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioSource.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\BoundingBox.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\BoundingSphere.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Bundle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Button.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Camera.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\CheckBox.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Container.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Control.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Curve.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\DebugNew.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\DepthStencilTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Effect.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FileSystem.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FlowLayout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Font.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Form.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FrameBuffer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Frustum.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Game.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Gamepad.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-android.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-blackberry.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-linux.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-windows.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\HeightField.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Image.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ImageControl.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Joint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Joystick.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Label.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Layout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Light.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Logger.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Material.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MaterialParameter.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MathUtil.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Matrix.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Mesh.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshBatch.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshPart.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshSkin.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Model.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Node.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ParticleEmitter.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ControlFactory.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIAgent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIAgentListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIMessage.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIStateListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIStateMachine.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_all_bindings.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Animation.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationClip.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationValue.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioBuffer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioSource.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioSourceState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_BoundingBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_BoundingSphere.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Bundle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Button.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Camera.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CameraType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CheckBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Container.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ContainerScroll.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Control.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlAlignment.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Curve.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Effect.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FileSystem.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FlowLayout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Font.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontJustify.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontStyle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontText.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Form.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FrameBuffer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Frustum.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Game.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GameClearFlags.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Gamepad.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GameState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Gesture.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Global.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_HeightField.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Image.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ImageControl.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ImageFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Joint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Joystick.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Keyboard.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_KeyboardKey.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Label.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Layout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_LayoutType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Light.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_LightType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Logger.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_LoggerLevel.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Material.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MaterialParameter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MathUtil.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Matrix.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Mesh.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshBatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshPart.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshSkin.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Model.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Mouse.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Node.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_NodeType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Pass.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Plane.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Platform.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Properties.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PropertiesType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Quaternion.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RadioButton.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Ray.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Rectangle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Ref.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Scene.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScriptController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScriptTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Slider.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SpriteBatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Technique.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Terrain.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TerrainFlags.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Texture.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureFilter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureSampler.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureWrap.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Theme.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeStyle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeUVs.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Touch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Transform.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TransformListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Uniform.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Vector2.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Vector3.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Vector4.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VerticalLayout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TerrainPatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CameraListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\Plane.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Platform.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Quaternion.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Ray.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Rectangle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Ref.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Scene.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SpriteBatch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Texture.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Transform.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Vector2.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Vector3.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Vector4.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VertexAttributeBinding.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VertexFormat.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ParticleEmitter.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Properties.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Technique.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Pass.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\RenderState.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsRigidBody.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsSpringConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsFixedConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsGenericConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsHingeConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsSocketConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SceneLoader.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\RenderTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Touch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AbsoluteLayout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\RadioButton.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Slider.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VerticalLayout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Theme.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TextBox.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCharacter.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCollisionObject.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TimeListener.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsGhostObject.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCollisionShape.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ScreenDisplayer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ThemeStyle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ScriptController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIAgent.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ScriptTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsVehicleWheel.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsVehicle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Stream.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Terrain.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TerrainPatch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIMessage.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIState.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIStateMachine.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Animation.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationClip.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationValue.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioBuffer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioListener.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioSource.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Base.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\BoundingBox.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\BoundingSphere.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Bundle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Button.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Camera.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\CheckBox.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Container.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Control.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Curve.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\DebugNew.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\DepthStencilTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Effect.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FileSystem.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FlowLayout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Font.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Form.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FrameBuffer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Frustum.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Game.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Gamepad.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\gameplay.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Gesture.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\HeightField.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Image.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ImageControl.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Joint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Joystick.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Keyboard.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Label.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Layout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Light.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Logger.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Material.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MaterialParameter.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MathUtil.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Matrix.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Mesh.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshBatch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshPart.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshSkin.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Model.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Mouse.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Node.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ControlFactory.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AbsoluteLayout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIAgent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIAgentListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIMessage.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIMessageParameterType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIStateListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIStateMachine.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_all_bindings.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Animation.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationClip.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationClipListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationValue.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioBuffer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioSource.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioSourceState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_BoundingBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_BoundingSphere.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Bundle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Button.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Camera.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CameraType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CheckBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Container.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ContainerScroll.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Control.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlAlignment.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlAutoSize.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Curve.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CurveInterpolationType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_DepthStencilTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Effect.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FileSystem.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FlowLayout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Font.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontJustify.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontStyle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontText.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Form.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FrameBuffer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Frustum.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Game.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GameClearFlags.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Gamepad.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GameState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Gesture.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GestureGestureEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Global.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_HeightField.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Image.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ImageControl.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ImageFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Joint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Joystick.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Keyboard.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_KeyboardKey.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Label.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Layout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_LayoutType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Light.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_LightType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Logger.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_LoggerLevel.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Material.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MaterialParameter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MathUtil.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Matrix.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Mesh.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshBatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshIndexFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshPart.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshSkin.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Model.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Mouse.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MouseMouseEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Node.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_NodeCloneContext.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_NodeType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ParticleEmitter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Pass.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCharacter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsVehicle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Plane.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Platform.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Properties.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PropertiesType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Quaternion.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RadioButton.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Ray.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Rectangle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Ref.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateBlend.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Scene.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScreenDisplayer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScriptController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScriptTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Slider.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SpriteBatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Technique.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Terrain.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TerrainFlags.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextBoxInputMode.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Texture.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureFilter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureSampler.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureWrap.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Theme.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeSideRegions.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeStyle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeThemeImage.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeUVs.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Touch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TouchTouchEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Transform.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TransformListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Uniform.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Vector2.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Vector3.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Vector4.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexFormatElement.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexFormatUsage.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VerticalLayout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TerrainPatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CameraListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="src\ScriptController.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\BoundingBox.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\BoundingSphere.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Game.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Image.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Joystick.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\MathUtil.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\MathUtilNeon.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Matrix.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\MeshBatch.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="res\shaders\colored.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\colored.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\font.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\font.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\form.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\form.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\lighting.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\lighting.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\sprite.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\sprite.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\terrain.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\terrain.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\textured.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\textured.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\skinning.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\skinning-none.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="src\PhysicsFixedConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsGenericConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsSpringConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsRigidBody.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Plane.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Quaternion.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Ray.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Vector2.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Vector3.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Vector4.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="src">
+      <UniqueIdentifier>{c4d4da1c-81e2-4944-901c-200e1c4d80e5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res">
+      <UniqueIdentifier>{4a30ac71-e135-47d3-9f56-baac7cffe64c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{be0b36f1-49ed-4a06-9f1f-57c654a554fe}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\lua">
+      <UniqueIdentifier>{21cf31c6-9c10-44cb-a864-d46a0e7bfe5e}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\Plane.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformBlackBerry.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformWindows.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Quaternion.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Ray.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Rectangle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Ref.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Scene.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SpriteBatch.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Texture.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Transform.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Vector2.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Vector3.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Vector4.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VertexAttributeBinding.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VertexFormat.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Properties.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Technique.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Pass.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\RenderState.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsRigidBody.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsHingeConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsFixedConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsGenericConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsSocketConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsSpringConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SceneLoader.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\RenderTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformAndroid.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AbsoluteLayout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\RadioButton.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Slider.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VerticalLayout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Theme.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TextBox.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCharacter.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCollisionObject.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsGhostObject.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCollisionShape.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ThemeStyle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ScriptController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ScreenDisplayer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIAgent.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIMessage.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ScriptTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformLinux.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsVehicle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsVehicleWheel.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Terrain.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TerrainPatch.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Platform.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIState.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIStateMachine.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Animation.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationClip.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationValue.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioBuffer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioListener.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioSource.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\BoundingBox.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\BoundingSphere.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Bundle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Button.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Camera.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\CheckBox.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Container.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Control.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Curve.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\DebugNew.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\DepthStencilTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Effect.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FileSystem.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FlowLayout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Font.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Form.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FrameBuffer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Frustum.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Game.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Gamepad.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-android.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-blackberry.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-linux.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-windows.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\HeightField.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Image.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ImageControl.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Joint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Joystick.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Label.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Layout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Light.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Logger.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Material.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MaterialParameter.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MathUtil.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Matrix.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Mesh.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshBatch.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshPart.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshSkin.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Model.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Node.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ParticleEmitter.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ControlFactory.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIAgent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIAgentListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIMessage.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIStateListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIStateMachine.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_all_bindings.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Animation.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationClip.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationValue.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioBuffer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioSource.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioSourceState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_BoundingBox.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_BoundingSphere.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Bundle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Button.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Camera.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CameraType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CheckBox.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Container.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ContainerScroll.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Control.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlAlignment.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Curve.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Effect.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FileSystem.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FlowLayout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Font.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontJustify.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontStyle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontText.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Form.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FrameBuffer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Frustum.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Game.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GameClearFlags.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Gamepad.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GameState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Gesture.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Global.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_HeightField.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Image.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ImageControl.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ImageFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Joint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Joystick.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Keyboard.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_KeyboardKey.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Label.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Layout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_LayoutType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Light.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_LightType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Logger.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_LoggerLevel.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Material.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MaterialParameter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MathUtil.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Matrix.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Mesh.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshBatch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshPart.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshSkin.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Model.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Mouse.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Node.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_NodeType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Pass.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Plane.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Platform.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Properties.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PropertiesType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Quaternion.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RadioButton.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Ray.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Rectangle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Ref.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Scene.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ScriptController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ScriptTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Slider.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_SpriteBatch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Technique.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Terrain.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TerrainFlags.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextBox.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Texture.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureFilter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureSampler.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureWrap.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Theme.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeStyle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeUVs.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Touch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Transform.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TransformListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Uniform.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Vector2.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Vector3.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Vector4.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VerticalLayout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TerrainPatch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CameraListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\Plane.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Platform.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Quaternion.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Ray.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Rectangle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Ref.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Scene.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SpriteBatch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Texture.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Transform.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Vector2.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Vector3.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Vector4.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VertexAttributeBinding.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VertexFormat.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ParticleEmitter.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Properties.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Technique.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Pass.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\RenderState.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsRigidBody.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsSpringConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsFixedConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsGenericConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsHingeConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsSocketConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SceneLoader.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\RenderTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Touch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AbsoluteLayout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\RadioButton.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Slider.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VerticalLayout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Theme.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TextBox.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCharacter.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCollisionObject.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TimeListener.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsGhostObject.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCollisionShape.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ScreenDisplayer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ThemeStyle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ScriptController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIAgent.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ScriptTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsVehicleWheel.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsVehicle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Stream.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Terrain.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TerrainPatch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIMessage.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIState.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIStateMachine.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Animation.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationClip.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationValue.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioBuffer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioListener.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioSource.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Base.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\BoundingBox.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\BoundingSphere.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Bundle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Button.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Camera.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\CheckBox.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Container.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Control.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Curve.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\DebugNew.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\DepthStencilTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Effect.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FileSystem.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FlowLayout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Font.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Form.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FrameBuffer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Frustum.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Game.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Gamepad.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\gameplay.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Gesture.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\HeightField.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Image.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ImageControl.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Joint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Joystick.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Keyboard.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Label.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Layout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Light.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Logger.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Material.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MaterialParameter.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MathUtil.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Matrix.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Mesh.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshBatch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshPart.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshSkin.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Model.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Mouse.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Node.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ControlFactory.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AbsoluteLayout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIAgent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIAgentListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIMessage.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIMessageParameterType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIStateListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIStateMachine.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_all_bindings.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Animation.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationClip.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationClipListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationValue.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioBuffer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioSource.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioSourceState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_BoundingBox.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_BoundingSphere.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Bundle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Button.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Camera.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CameraType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CheckBox.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Container.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ContainerScroll.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Control.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlAlignment.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlAutoSize.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Curve.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CurveInterpolationType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_DepthStencilTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Effect.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FileSystem.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FlowLayout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Font.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontJustify.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontStyle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontText.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Form.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FrameBuffer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Frustum.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Game.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GameClearFlags.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Gamepad.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GameState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Gesture.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GestureGestureEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Global.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_HeightField.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Image.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ImageControl.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ImageFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Joint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Joystick.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Keyboard.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_KeyboardKey.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Label.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Layout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_LayoutType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Light.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_LightType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Logger.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_LoggerLevel.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Material.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MaterialParameter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MathUtil.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Matrix.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Mesh.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshBatch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshIndexFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshPart.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshSkin.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Model.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Mouse.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MouseMouseEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Node.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_NodeCloneContext.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_NodeType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ParticleEmitter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Pass.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCharacter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsVehicle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Plane.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Platform.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Properties.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PropertiesType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Quaternion.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RadioButton.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Ray.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Rectangle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Ref.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateBlend.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Scene.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ScreenDisplayer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ScriptController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ScriptTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Slider.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_SpriteBatch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Technique.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Terrain.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TerrainFlags.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextBox.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextBoxInputMode.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Texture.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureFilter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureSampler.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureWrap.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Theme.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeSideRegions.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeStyle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeThemeImage.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeUVs.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Touch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TouchTouchEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Transform.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TransformListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Uniform.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Vector2.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Vector3.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Vector4.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexFormatElement.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexFormatUsage.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VerticalLayout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TerrainPatch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CameraListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="src\ScriptController.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\BoundingBox.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\BoundingSphere.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Game.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Image.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Joystick.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\MathUtil.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\MathUtilNeon.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Matrix.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\MeshBatch.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="src\PhysicsFixedConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsGenericConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsSpringConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsRigidBody.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Plane.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Quaternion.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Ray.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Vector2.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Vector3.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Vector4.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+  </ItemGroup>
 </Project>

+ 5 - 5
gameplay/src/FileSystem.cpp

@@ -225,9 +225,9 @@ void FileSystem::loadResourceAliases(Properties* properties)
     }
 }
 
-std::string FileSystem::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string FileSystem::displayFileDialog(size_t dialogMode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
-    return Platform::displayFileDialog(mode, title, filterDescription, filterExtension);
+    return Platform::displayFileDialog(dialogMode, title, filterDescription, filterExtensions, initialDirectory);
 }
 
 const char* FileSystem::resolvePath(const char* path)
@@ -358,13 +358,13 @@ bool FileSystem::fileExists(const char* filePath)
 
 }
 
-Stream* FileSystem::open(const char* path, size_t mode)
+Stream* FileSystem::open(const char* path, size_t streamMode)
 {
     char modeStr[] = "rb";
-    if ((mode & WRITE) != 0)
+    if ((streamMode & WRITE) != 0)
         modeStr[0] = 'w';
 #ifdef __ANDROID__
-    if ((mode & WRITE) != 0)
+    if ((streamMode & WRITE) != 0)
     {
         // Open a file on the SD card
         std::string fullPath(__resourcePath);

+ 12 - 9
gameplay/src/FileSystem.h

@@ -18,6 +18,7 @@ public:
 
     /**
      * Mode flags for opening a stream.
+     *
      * @script{ignore}
      */
     enum StreamMode
@@ -27,13 +28,14 @@ public:
     };
 
     /**
-     * Mode flags for opening a stream.
+     * Mode flags for displaying a dialog.
+     *
      * @script{ignore}
      */
     enum DialogMode
     {
         OPEN,
-        SAVE
+        SAVE 
     };
 
     /**
@@ -97,15 +99,16 @@ public:
     /**
      * Displays an open or save dialog using the native platform dialog system.
      *
-     * @param mode The mode of the dialog. (Ex. OPEN or SAVE)
+     * @param dialogMode The mode of the dialog. (Ex. OPEN or SAVE)
      * @param title The title of the dialog. (Ex. Select File or Save File)
-     * @param filterDescription The file filter description. (Ex. All Files or PNG Files)
-     * @param filterExtension The extension. Ex. (* or png)  Note: This prefixed with *.
+     * @param filterDescription The file filter description. (Ex. All Files or Image Files)
+     * @param filterExtensions The extensions to filter on. (Ex. png;bmp)
+     * @param initialDirectory The initial directory to start. NULL runs from the executable directory.
      * @return The file that is opened or saved.
      *
      * @script{ignore}
      */
-    static std::string displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension);
+    static std::string displayFileDialog(size_t dialogMode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory);
 
     /**
      * Resolves a filesystem path.
@@ -150,14 +153,14 @@ public:
      * resource path.
      *
      * @param path The path to the resource to be opened, relative to the currently set resource path.
-     * @param mode The mode used to open the file.
+     * @param streamMode The stream mode used to open the file.
      * 
      * @return A stream that can be used to read or write to the file depending on the mode.
      *         Returns NULL if there was an error. (Request mode not supported).
-     * 
+     *
      * @script{ignore}
      */
-    static Stream* open(const char* path, size_t mode = READ);
+    static Stream* open(const char* path, size_t streamMode = READ);
 
     /**
      * Opens the specified file.

+ 4 - 3
gameplay/src/Platform.h

@@ -403,13 +403,14 @@ public:
      *
      * @param mode The mode of the dialog. (Ex. OPEN or SAVE)
      * @param title The title of the dialog. (Ex. Select File or Save File)
-     *  @param filterDescription The file filter description. (Ex. All Files or PNG Files)
-     * @param filterExtension The extension. Ex. (* or png)  Note: This prefixed with *.
+     * @param filterDescription The file filter description. (Ex. Image Files)
+     * @param filterExtensions The semi-colon delimited list of filtered file extensions. (Ex. png;jpg;bmp)
+     * @param initialDirectory The initial directory to open or save files from. (Ex. "res") If NULL this will use the executable directory.
      * @return The file that is opened or saved.
      *
      * @script{ignore}
      */
-    static std::string displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension);
+    static std::string displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory);
 
     /**
      * Internal method used only from static code in various platform implementation.

+ 1 - 1
gameplay/src/PlatformAndroid.cpp

@@ -1621,7 +1621,7 @@ bool Platform::launchURL(const char *url)
     return result;
 }
 
-std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
     return "";
 }

+ 1 - 1
gameplay/src/PlatformBlackBerry.cpp

@@ -1650,7 +1650,7 @@ bool Platform::launchURL(const char* url)
     return navigator_invoke(url, NULL) == BPS_SUCCESS;
 }
 
-std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
     return "";
 }

+ 1 - 1
gameplay/src/PlatformLinux.cpp

@@ -1662,7 +1662,7 @@ bool Platform::launchURL(const char* url)
     return (r == 0);
 }
 
-std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
     return "";
 }

+ 3 - 3
gameplay/src/PlatformMacOSX.mm

@@ -2324,7 +2324,7 @@ bool Platform::launchURL(const char *url)
     return (err == noErr);
 }
 
-std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
     std::string filename;
     
@@ -2341,7 +2341,7 @@ std::string Platform::displayFileDialog(size_t mode, const char* title, const ch
         NSString* titleStr = [NSString stringWithUTF8String:title];
         [openPanel setTitle:titleStr];
         // Filter ext.
-        NSString* ext = [NSString stringWithUTF8String:filterExtension];
+        NSString* ext = [NSString stringWithUTF8String:filterExtensions];
         NSArray* fileTypes = [NSArray arrayWithObjects: ext, nil];
         [openPanel setAllowedFileTypes:fileTypes];
         
@@ -2372,7 +2372,7 @@ std::string Platform::displayFileDialog(size_t mode, const char* title, const ch
         NSString* titleStr = [NSString stringWithUTF8String:title];
         [savePanel setTitle:titleStr];
         // Filter ext.
-        NSString* ext = [NSString stringWithUTF8String:filterExtension];
+        NSString* ext = [NSString stringWithUTF8String:filterExtensions];
         NSArray* fileTypes = [NSArray arrayWithObjects: ext, nil];
         [savePanel setAllowedFileTypes:fileTypes];
         

+ 41 - 21
gameplay/src/PlatformWindows.cpp

@@ -1350,36 +1350,56 @@ bool Platform::launchURL(const char* url)
     return (r > 32);
 }
 
-std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
     std::string filename;
     OPENFILENAMEA ofn;
     memset(&ofn, 0, sizeof(ofn));
 
+    // Set initial directory
+    std::string initialDirectoryStr;
     char currentDir[256];
-    GetCurrentDirectoryA(256, currentDir);
-    std::string initialDir = currentDir;
-    initialDir += "\\res";
-
-    std::string desc = filterDescription;
-    desc += " (*.";
-    desc += filterExtension;
-    desc += ")";
-    std::string ext = "*.";
-    ext += filterExtension;
-    char filter[512];
-    memset(filter, 0, 512);
-    strcpy(filter, desc.c_str());
-    strcpy(filter + desc.length() + 1, ext.c_str());
-
-    char szFileName[256] = "";
+    if (initialDirectory == NULL)
+    {
+        char currentDir[512];
+        GetCurrentDirectoryA(512, currentDir);
+        initialDirectoryStr = currentDir;
+    }
+    else
+    {
+        initialDirectoryStr = initialDirectory;
+    }
+
+    // Filter on extensions
+    std::istringstream f(filterExtensions);
+    std::string s;
+    unsigned int count = 0;
+    std::string descStr = filterDescription;
+    descStr += " (";
+    std::string extStr = "";
+    while (std::getline(f, s, ';'))
+    {
+        if (count > 0)
+            extStr += ";";
+        extStr += "*.";
+        extStr += s;
+        count++;
+    }
+    descStr += extStr;
+    descStr += ")";
+    char filter[1024];
+    memset(filter, 0, 1024);
+    strcpy(filter, descStr.c_str());
+    strcpy(filter + descStr.length() + 1, extStr.c_str());
+
+    char szFileName[512] = "";
     ofn.lpstrFile = szFileName;
     ofn.lStructSize = sizeof(ofn);
     ofn.hwndOwner = GetForegroundWindow();
     ofn.lpstrTitle = title;
     ofn.lpstrFilter = filter;
-    ofn.lpstrInitialDir = initialDir.c_str();
-    ofn.nMaxFile = 256;
+    ofn.lpstrInitialDir = initialDirectoryStr.c_str();
+    ofn.nMaxFile = 512;
     ofn.lpstrDefExt = filter;
 
     if (mode == FileSystem::OPEN)
@@ -1395,8 +1415,8 @@ std::string Platform::displayFileDialog(size_t mode, const char* title, const ch
 
     filename = szFileName;
         
-    // Restore current dir
-    SetCurrentDirectoryA(currentDir);
+    if (initialDirectory == NULL)
+        SetCurrentDirectoryA(currentDir);
 
     return filename;
 }

+ 1 - 1
gameplay/src/PlatformiOS.mm

@@ -1698,7 +1698,7 @@ bool Platform::launchURL(const char *url)
     return [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithUTF8String: url]]];
 }
 
-std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtension)
+std::string Platform::displayFileDialog(size_t mode, const char* title, const char* filterDescription, const char* filterExtensions, const char* initialDirectory)
 {
     return "";
 }

+ 1373 - 1373
gameplay/src/ScriptController.cpp

@@ -1,1373 +1,1373 @@
-#include "Base.h"
-#include "FileSystem.h"
-#include "ScriptController.h"
-
-#ifndef NO_LUA_BINDINGS
-#include "lua/lua_all_bindings.h"
-#endif
-
-#define GENERATE_LUA_GET_POINTER(type, checkFunc) \
-    ScriptController* sc = Game::getInstance()->getScriptController(); \
-    /* Check that the parameter is the correct type. */ \
-    if (!lua_istable(sc->_lua, index)) \
-    { \
-        if (lua_islightuserdata(sc->_lua, index)) \
-            return LuaArray<type>((type*)lua_touserdata(sc->_lua, index)); \
-        lua_pushfstring(sc->_lua, "Expected a " #type " pointer (an array represented as a Lua table), got '%s' instead.", \
-            luaL_typename(sc->_lua, index)); \
-        lua_error(sc->_lua); \
-        return LuaArray<type>((type*)NULL); \
-    } \
-    \
-    /* Get the size of the array. */ \
-    lua_len(sc->_lua, index); \
-    int size = luaL_checkint(sc->_lua, -1); \
-    lua_pop(sc->_lua, 1); \
-    if (size <= 0) \
-        return LuaArray<type>((type*)NULL); \
-    \
-    /* Declare a LuaArray to store the values. */ \
-    LuaArray<type> arr(size); \
-    \
-    /* Push the first key. */ \
-    lua_pushnil(sc->_lua); \
-    int i = 0; \
-    for (; lua_next(sc->_lua, index) != 0 && i < size; i++) \
-    { \
-        arr[i] = (checkFunc(sc->_lua, -1)); \
-        \
-        /* Remove the value we just retrieved, but leave the key for the next iteration. */ \
-        lua_pop(sc->_lua, 1); \
-    } \
-    \
-    return arr
-
-#define PUSH_NESTED_VARIABLE(name, defaultValue) \
-    int top = lua_gettop(_lua); \
-    if (!getNestedVariable(_lua, (name))) \
-    { \
-        lua_settop(_lua, top); \
-        return (defaultValue); \
-    }
-
-#define POP_NESTED_VARIABLE() \
-    lua_settop(_lua, top)
-
-/**
- * Pushes onto the stack, the value of the global 'name' or the nested table value if 'name' is a '.' separated 
- * list of tables of the form "A.B.C.D", where A, B and C are tables and D is a variable name in the table C.
- * 
- * If 'name' does not contain any '.' then it is assumed to be the name of a global variable.
- * 
- * This function will not restore the stack if there is an error.
- * 
- * @param lua  The Lua state.
- * @param name The name of a global variable or a '.' separated list of nested tables ending with a variable name.
- *             The name value may be in the format "A.B.C.D" where A is a table and B, C are child tables.
- *             D is any type, which will be accessed by the calling function.
- * 
- * @return True if the tables were pushed on the stack or the global variable was pushed. Returns false on error.
- */
-static bool getNestedVariable(lua_State* lua, const char* name)
-{
-    if (strchr(name, '.') == NULL)
-    {
-        lua_getglobal(lua, name);
-        return true;
-    }
-    static std::string str;
-    // Copy the input string to a std::string so we can modify it because 
-    // some of the Lua functions require NULL terminated c-strings.
-    str.assign(name);
-
-    // Find the first table, which will be a global variable.
-    char* start = const_cast<char*>(str.c_str());
-    char* end = strchr(start, '.');
-    if (end == NULL)
-    {
-        return false;
-    }
-    ++end;
-    *(end - 1) = '\0';
-    lua_getglobal(lua, start);
-    *(end - 1) = '.';
-    if (!lua_istable(lua, -1))
-    {
-        return false;
-    }
-    // Push the nested tables
-    for (;;)
-    {
-        start = end;
-        end = strchr(start, '.');
-        if (end == NULL || *end == '\0')
-        {
-            // push the last variable
-            lua_pushstring(lua, start);
-            lua_gettable(lua, -2);
-            return true;
-        }
-        else
-        {
-            // Push the next table
-            *end = '\0';
-            lua_pushstring(lua, start);
-            *end = '.';
-            lua_gettable(lua, -2);
-            if (!lua_istable(lua, -1))
-            {
-                return false;
-            }
-            ++end;
-            if (*end == '.')
-            {
-                return false;
-            }
-        }
-    }
-    return false;
-}
-
-namespace gameplay
-{
-
-extern void splitURL(const std::string& url, std::string* file, std::string* id);
-
-void ScriptUtil::registerLibrary(const char* name, const luaL_Reg* functions)
-{
-    ScriptController* sc = Game::getInstance()->getScriptController();
-    lua_newtable(sc->_lua);
-
-    // Go through the list of functions and add them to the table.
-    const luaL_Reg* iter = functions;
-    for (; iter && iter->name; iter++)
-    {
-        lua_pushcfunction(sc->_lua, iter->func);
-        lua_setfield(sc->_lua, -2, iter->name);
-    }
-
-    lua_setglobal(sc->_lua, name);
-}
-
-void ScriptUtil::registerConstantBool(const std::string& name, bool value, const std::vector<std::string>& scopePath)
-{
-    ScriptController* sc = Game::getInstance()->getScriptController();
-
-    // If the constant is within a scope, get the correct parent 
-    // table on the stack before setting its value.
-    if (!scopePath.empty())
-    {
-        lua_getglobal(sc->_lua, scopePath[0].c_str());
-        for (unsigned int i = 1; i < scopePath.size(); i++)
-        {
-            lua_pushstring(sc->_lua, scopePath[i].c_str());
-            lua_gettable(sc->_lua, -2);
-        }
-        
-        // Add the constant to the parent table.
-        lua_pushboolean(sc->_lua, value);
-        lua_setfield(sc->_lua, -2, name.c_str());
-
-        // Pop all the parent tables off the stack.
-        int size = (int)scopePath.size();
-        lua_pop(sc->_lua, size);
-    }
-    else
-    {
-        // TODO: Currently unsupported (we don't parse for this yet).
-        // If the constant is global, add it to the global table.
-        lua_pushboolean(sc->_lua, value);
-        lua_pushvalue(sc->_lua, -1);
-        lua_setglobal(sc->_lua, name.c_str());
-    }
-}
-
-void ScriptUtil::registerConstantNumber(const std::string& name, double value, const std::vector<std::string>& scopePath)
-{
-    ScriptController* sc = Game::getInstance()->getScriptController();
-
-    // If the constant is within a scope, get the correct parent 
-    // table on the stack before setting its value.
-    if (!scopePath.empty())
-    {
-        lua_getglobal(sc->_lua, scopePath[0].c_str());
-        for (unsigned int i = 1; i < scopePath.size(); i++)
-        {
-            lua_pushstring(sc->_lua, scopePath[i].c_str());
-            lua_gettable(sc->_lua, -2);
-        }
-        
-        // Add the constant to the parent table.
-        lua_pushnumber(sc->_lua, value);
-        lua_setfield(sc->_lua, -2, name.c_str());
-
-        // Pop all the parent tables off the stack.
-        int size = (int)scopePath.size();
-        lua_pop(sc->_lua, size);
-    }
-    else
-    {
-        // TODO: Currently unsupported (we don't parse for this yet).
-        // If the constant is global, add it to the global table.
-        lua_pushnumber(sc->_lua, value);
-        lua_pushvalue(sc->_lua, -1);
-        lua_setglobal(sc->_lua, name.c_str());
-    }
-}
-
-void ScriptUtil::registerConstantString(const std::string& name, const std::string& value, const std::vector<std::string>& scopePath)
-{
-    ScriptController* sc = Game::getInstance()->getScriptController();
-
-    // If the constant is within a scope, get the correct parent 
-    // table on the stack before setting its value.
-    if (!scopePath.empty())
-    {
-        lua_getglobal(sc->_lua, scopePath[0].c_str());
-        for (unsigned int i = 1; i < scopePath.size(); i++)
-        {
-            lua_pushstring(sc->_lua, scopePath[i].c_str());
-            lua_gettable(sc->_lua, -2);
-        }
-        
-        // Add the constant to the parent table.
-        lua_pushstring(sc->_lua, value.c_str());
-        lua_setfield(sc->_lua, -2, name.c_str());
-
-        // Pop all the parent tables off the stack.
-        int size = (int)scopePath.size();
-        lua_pop(sc->_lua, size);
-    }
-    else
-    {
-        // TODO: Currently unsupported (we don't parse for this yet).
-        // If the constant is global, add it to the global table.
-        lua_pushstring(sc->_lua, value.c_str());
-        lua_pushvalue(sc->_lua, -1);
-        lua_setglobal(sc->_lua, name.c_str());
-    }
-}
-
-void ScriptUtil::registerClass(const char* name, const luaL_Reg* members, lua_CFunction newFunction, 
-    lua_CFunction deleteFunction, const luaL_Reg* statics,  const std::vector<std::string>& scopePath)
-{
-    ScriptController* sc = Game::getInstance()->getScriptController();
-
-    // If the type is an inner type, get the correct parent 
-    // table on the stack before creating the table for the class.
-    if (!scopePath.empty())
-    {
-        std::string tablename = name;
-
-        // Strip off the scope path part of the name.
-        lua_getglobal(sc->_lua, scopePath[0].c_str());
-        std::size_t index = tablename.find(scopePath[0]);
-        if (index != std::string::npos)
-            tablename = tablename.substr(index + scopePath[0].size());
-        
-        for (unsigned int i = 1; i < scopePath.size(); i++)
-        {
-            lua_pushstring(sc->_lua, scopePath[i].c_str());
-            lua_gettable(sc->_lua, -2);
-
-            index = tablename.find(scopePath[i]);
-            if (index != std::string::npos)
-                tablename = tablename.substr(index + scopePath[i].size());
-        }
-
-        lua_pushstring(sc->_lua, tablename.c_str());
-        lua_newtable(sc->_lua);
-    }
-    else
-    {
-        // If the type is not an inner type, set it as a global table.
-        lua_newtable(sc->_lua);
-        lua_pushvalue(sc->_lua, -1);
-        lua_setglobal(sc->_lua, name);
-    }
-    
-    // Create the metatable and populate it with the member functions.
-    lua_pushliteral(sc->_lua, "__metatable");
-    luaL_newmetatable(sc->_lua, name);
-    if (members)
-        luaL_setfuncs(sc->_lua, members, 0);
-    lua_pushstring(sc->_lua, "__index");
-    lua_pushvalue(sc->_lua, -2);
-    lua_settable(sc->_lua, -3);
-
-    // Add the delete function if it was specified.
-    if (deleteFunction)
-    {
-        lua_pushstring(sc->_lua, "__gc");
-        lua_pushcfunction(sc->_lua, deleteFunction);
-        lua_settable(sc->_lua, -3);
-    }
-
-    // Set the metatable on the main table.
-    lua_settable(sc->_lua, -3);
-    
-    // Populate the main table with the static functions.
-    if (statics)
-        luaL_setfuncs(sc->_lua, statics, 0);
-
-    // Set the new function(s) for the class.
-    if (newFunction)
-    {
-        lua_pushliteral(sc->_lua, "new");
-        lua_pushcfunction(sc->_lua, newFunction);
-        lua_settable(sc->_lua, -3);
-    }
-
-    // Set the table we just created within the correct parent table.
-    if (!scopePath.empty())
-    {
-        lua_settable(sc->_lua, -3);
-
-        // Pop all the parent tables off the stack.
-        int size = (int)scopePath.size();
-        lua_pop(sc->_lua, size);
-    }
-    else
-    {
-        // Pop the main table off the stack.
-        lua_pop(sc->_lua, 1);
-    }
-}
-
-void ScriptUtil::registerFunction(const char* luaFunction, lua_CFunction cppFunction)
-{
-    lua_pushcfunction(Game::getInstance()->getScriptController()->_lua, cppFunction);
-    lua_setglobal(Game::getInstance()->getScriptController()->_lua, luaFunction);
-}
-
-void ScriptUtil::setGlobalHierarchyPair(const std::string& base, const std::string& derived)
-{
-    Game::getInstance()->getScriptController()->_hierarchy[base].push_back(derived);
-}
-
-void ScriptUtil::addStringFromEnumConversionFunction(luaStringEnumConversionFunction stringFromEnum)
-{
-    Game::getInstance()->getScriptController()->_stringFromEnum.push_back(stringFromEnum);
-}
-
-ScriptUtil::LuaArray<bool> ScriptUtil::getBoolPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(bool, luaCheckBool);
-}
-
-ScriptUtil::LuaArray<short> ScriptUtil::getShortPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(short, (short)luaL_checkint);
-}
-
-ScriptUtil::LuaArray<int> ScriptUtil::getIntPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(int, (int)luaL_checkint);
-}
-
-ScriptUtil::LuaArray<long> ScriptUtil::getLongPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(long, (long)luaL_checkint);
-}
-
-ScriptUtil::LuaArray<unsigned char> ScriptUtil::getUnsignedCharPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(unsigned char, (unsigned char)luaL_checkunsigned);
-}
-
-ScriptUtil::LuaArray<unsigned short> ScriptUtil::getUnsignedShortPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(unsigned short, (unsigned short)luaL_checkunsigned);
-}
-
-ScriptUtil::LuaArray<unsigned int> ScriptUtil::getUnsignedIntPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(unsigned int, (unsigned int)luaL_checkunsigned);
-}
-
-ScriptUtil::LuaArray<unsigned long> ScriptUtil::getUnsignedLongPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(unsigned long, (unsigned long)luaL_checkunsigned);
-}
-
-ScriptUtil::LuaArray<float> ScriptUtil::getFloatPointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(float, (float)luaL_checknumber);
-}
-
-ScriptUtil::LuaArray<double> ScriptUtil::getDoublePointer(int index)
-{
-    GENERATE_LUA_GET_POINTER(double, (double)luaL_checknumber);
-}
-
-const char* ScriptUtil::getString(int index, bool isStdString)
-{
-    if (lua_type(Game::getInstance()->getScriptController()->_lua, index) == LUA_TSTRING)
-        return luaL_checkstring(Game::getInstance()->getScriptController()->_lua, index);
-    else if (lua_type(Game::getInstance()->getScriptController()->_lua, index) == LUA_TNIL && !isStdString)
-        return NULL;
-    else
-    {
-        GP_ERROR("Invalid string parameter (index = %d).", index);
-        return NULL;
-    }
-}
-
-bool ScriptUtil::luaCheckBool(lua_State* state, int n)
-{
-    if (!lua_isboolean(state, n))
-    {
-        const char* msg = lua_pushfstring(state, "%s expected, got %s", lua_typename(state, LUA_TBOOLEAN), luaL_typename(state, n));
-        luaL_argerror(state, n, msg);
-        return false;
-    }
-    return (lua_toboolean(state, n) != 0);
-}
-
-
-void ScriptController::loadScript(const char* path, bool forceReload)
-{
-    GP_ASSERT(path);
-    std::set<std::string>::iterator iter = _loadedScripts.find(path);
-    if (iter == _loadedScripts.end() || forceReload)
-    {
-        bool success = false;
-        if (iter == _loadedScripts.end())
-            _loadedScripts.insert(path); // insert before loading script to prevent load recursion
-
-#ifdef __ANDROID__
-        const char* scriptContents = FileSystem::readAll(path);
-        if (luaL_dostring(_lua, scriptContents))
-        {
-            GP_WARN("Failed to run Lua script with error: '%s'.", lua_tostring(_lua, -1));
-        }
-        else
-        {
-            success = true;
-        }
-        SAFE_DELETE_ARRAY(scriptContents);
-#else
-        std::string fullPath;
-        if (!FileSystem::isAbsolutePath(path))
-        {
-            fullPath.append(FileSystem::getResourcePath());
-        }
-        fullPath.append(path);
-        if (luaL_dofile(_lua, fullPath.c_str()))
-        {
-            GP_WARN("Failed to run Lua script with error: '%s'.", lua_tostring(_lua, -1));
-        }
-        else
-        {
-            success = true;
-        }
-#endif
-        if (!success && (iter == _loadedScripts.end()))
-        {
-            iter = _loadedScripts.find(path);
-            _loadedScripts.erase(iter);
-        }
-    }
-}
-
-std::string ScriptController::loadUrl(const char* url)
-{
-    std::string file;
-    std::string id;
-    splitURL(url, &file, &id);
-
-    if (id.size() <= 0)
-    {
-        // The url does not reference a script - only a function
-        return file;
-    }
-
-    // Ensure the script is loaded.
-    if (file.size() > 0)
-        Game::getInstance()->getScriptController()->loadScript(file.c_str());
-
-    // Return the function name.
-    return id;
-}
-
-bool ScriptController::getBool(const char* name, bool defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    bool b = lua_isboolean(_lua, -1) ? ScriptUtil::luaCheckBool(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return b;
-}
-
-char ScriptController::getChar(const char* name, char defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    char c = lua_isnumber(_lua, -1) ?  (char)luaL_checkint(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return c;
-}
-
-short ScriptController::getShort(const char* name, short defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    short n = lua_isnumber(_lua, -1) ? (short)luaL_checkint(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-int ScriptController::getInt(const char* name, int defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    int n = lua_isnumber(_lua, -1) ? luaL_checkint(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-long ScriptController::getLong(const char* name, long defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    long n = lua_isnumber(_lua, -1) ? luaL_checklong(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-unsigned char ScriptController::getUnsignedChar(const char* name, unsigned char defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    unsigned char c = lua_isnumber(_lua, -1) ? (unsigned char)luaL_checkunsigned(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return c;
-}
-
-unsigned short ScriptController::getUnsignedShort(const char* name, unsigned short defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    unsigned short n = lua_isnumber(_lua, -1) ? (unsigned short)luaL_checkunsigned(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-unsigned int ScriptController::getUnsignedInt(const char* name, unsigned int defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    unsigned int n = lua_isnumber(_lua, -1) ? (unsigned int)luaL_checkunsigned(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-unsigned long ScriptController::getUnsignedLong(const char* name, unsigned long defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    unsigned long n = lua_isnumber(_lua, -1) ? (unsigned long)luaL_checkunsigned(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-float ScriptController::getFloat(const char* name, float defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    float f = lua_isnumber(_lua, -1) ? (float)luaL_checknumber(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return f;
-}
-
-double ScriptController::getDouble(const char* name, double defaultValue)
-{
-    PUSH_NESTED_VARIABLE(name, defaultValue);
-    double n = lua_isnumber(_lua, -1) ? (double)luaL_checknumber(_lua, -1) : defaultValue;
-    POP_NESTED_VARIABLE();
-    return n;
-}
-
-const char* ScriptController::getString(const char* name)
-{
-    PUSH_NESTED_VARIABLE(name, NULL);
-    const char* s = lua_isstring(_lua, -1) ? luaL_checkstring(_lua, -1) : NULL;
-    POP_NESTED_VARIABLE();
-    return s;
-}
-
-void ScriptController::setBool(const char* name, bool v)
-{
-    lua_pushboolean(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setChar(const char* name, char v)
-{
-    lua_pushinteger(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setShort(const char* name, short v)
-{
-    lua_pushinteger(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setInt(const char* name, int v)
-{
-    lua_pushinteger(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setLong(const char* name, long v)
-{
-    lua_pushinteger(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setUnsignedChar(const char* name, unsigned char v)
-{
-    lua_pushunsigned(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setUnsignedShort(const char* name, unsigned short v)
-{
-    lua_pushunsigned(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setUnsignedInt(const char* name, unsigned int v)
-{
-    lua_pushunsigned(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setUnsignedLong(const char* name, unsigned long v)
-{
-    lua_pushunsigned(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setFloat(const char* name, float v)
-{
-    lua_pushnumber(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setDouble(const char* name, double v)
-{
-    lua_pushnumber(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::setString(const char* name, const char* v)
-{
-    lua_pushstring(_lua, v);
-    lua_setglobal(_lua, name);
-}
-
-void ScriptController::print(const char* str)
-{
-    gameplay::print("%s", str);
-}
-
-void ScriptController::print(const char* str1, const char* str2)
-{
-    gameplay::print("%s%s", str1, str2);
-}
-
-ScriptController::ScriptController() : _lua(NULL)
-{
-}
-
-ScriptController::~ScriptController()
-{
-}
-
-static const char* lua_print_function = 
-    "function print(...)\n"
-    "    ScriptController.print(table.concat({...},\"\\t\"), \"\\n\")\n"
-    "end\n";
-
-static const char* lua_loadfile_function = 
-    "do\n"
-    "    local oldLoadfile = loadfile\n"
-    "    loadfile = function(filename)\n"
-    "        if filename ~= nil and not FileSystem.isAbsolutePath(filename) then\n"
-    "            FileSystem.createFileFromAsset(filename)\n"
-    "            filename = FileSystem.getResourcePath() .. filename\n"
-    "        end\n"
-    "        return oldLoadfile(filename)\n"
-    "    end\n"
-    "end\n";
-
-static const char* lua_dofile_function = 
-    "do\n"
-    "    local oldDofile = dofile\n"
-    "    dofile = function(filename)\n"
-    "        if filename ~= nil and not FileSystem.isAbsolutePath(filename) then\n"
-    "            FileSystem.createFileFromAsset(filename)\n"
-    "            filename = FileSystem.getResourcePath() .. filename\n"
-    "        end\n"
-    "        return oldDofile(filename)\n"
-    "    end\n"
-    "end\n";
-
-/**
- * @script{ignore}
- */
-void appendLuaPath(lua_State* state, const char* path)
-{
-    lua_getglobal(state, "package");
-
-    // Get the current path string from top of stack
-    lua_getfield(state, -1, "path");
-    std::string cur_path = lua_tostring(state, -1);
-    lua_pop(state, 1);
-
-    // Append our game resource path to the path
-    cur_path += ';';
-    cur_path += path;
-    cur_path += "?.lua";
-
-    // Push the new path
-    lua_pushstring(state, cur_path.c_str());
-    lua_setfield(state, -2, "path");
-    lua_pop(state, 1);
-}
-
-void ScriptController::initialize()
-{
-    _lua = luaL_newstate();
-    if (!_lua)
-        GP_ERROR("Failed to initialize Lua scripting engine.");
-    luaL_openlibs(_lua);
-
-#ifndef NO_LUA_BINDINGS
-    lua_RegisterAllBindings();
-    ScriptUtil::registerFunction("convert", ScriptController::convert);
-#endif
-
-    // Append to the LUA_PATH to allow scripts to be found in the resource folder on all platforms
-    appendLuaPath(_lua, FileSystem::getResourcePath());
-
-    // Create our own print() function that uses gameplay::print.
-    if (luaL_dostring(_lua, lua_print_function))
-        GP_ERROR("Failed to load custom print() function with error: '%s'.", lua_tostring(_lua, -1));
-
-    // Change the functions that read a file to use FileSystem.getResourcePath as their base path.
-    if (luaL_dostring(_lua, lua_loadfile_function))
-        GP_ERROR("Failed to load custom loadfile() function with error: '%s'.", lua_tostring(_lua, -1));
-    if (luaL_dostring(_lua, lua_dofile_function))
-        GP_ERROR("Failed to load custom dofile() function with error: '%s'.", lua_tostring(_lua, -1));
-
-    // Write game command-line arguments to a global lua "arg" table
-    std::ostringstream args;
-    int argc;
-    char** argv;
-    Game::getInstance()->getArguments(&argc, &argv);
-    args << "arg = { }\n";
-    for (int i = 0; i < argc; ++i)
-    {
-        args << "arg[" << (i) << "] = [[" << argv[i] << "]]\n";
-    }
-    std::string argsStr = args.str();
-    if (argsStr.length() > 0)
-    {
-        if (luaL_dostring(_lua, argsStr.c_str()))
-            GP_ERROR("Failed to pass command-line arguments with error: '%s'.", lua_tostring(_lua, -1));
-    }
-}
-
-void ScriptController::initializeGame()
-{
-    std::vector<std::string>& list = _callbacks[INITIALIZE];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str());
-}
-
-void ScriptController::finalize()
-{
-    if (_lua)
-	{
-        lua_close(_lua);
-		_lua = NULL;
-	}
-}
-
-void ScriptController::finalizeGame()
-{
-    std::vector<std::string> finalizeCallbacks = _callbacks[FINALIZE]; // no & : makes a copy of the vector
-
-	// Remove any registered callbacks so they don't get called after shutdown
-	for (unsigned int i = 0; i < CALLBACK_COUNT; i++)
-        _callbacks[i].clear();
-
-	// Fire script finalize callbacks
-    for (size_t i = 0; i < finalizeCallbacks.size(); ++i)
-        executeFunction<void>(finalizeCallbacks[i].c_str());
-
-    // Perform a full garbage collection cycle.
-	// Note that this does NOT free any global variables declared in scripts, since 
-	// they are stored in the global state and are still referenced. Only after 
-	// closing the state (lua_close) will those variables be released.
-    lua_gc(_lua, LUA_GCCOLLECT, 0);
-}
-
-void ScriptController::update(float elapsedTime)
-{
-    std::vector<std::string>& list = _callbacks[UPDATE];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "f", elapsedTime);
-}
-
-void ScriptController::render(float elapsedTime)
-{
-    std::vector<std::string>& list = _callbacks[RENDER];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "f", elapsedTime);
-}
-
-void ScriptController::resizeEvent(unsigned int width, unsigned int height)
-{
-    std::vector<std::string>& list = _callbacks[RESIZE_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "uiui", width, height);
-}
-
-void ScriptController::keyEvent(Keyboard::KeyEvent evt, int key)
-{
-    std::vector<std::string>& list = _callbacks[KEY_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "[Keyboard::KeyEvent][Keyboard::Key]", evt, key);
-}
-
-void ScriptController::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    std::vector<std::string>& list = _callbacks[TOUCH_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "[Touch::TouchEvent]iiui", evt, x, y, contactIndex);
-}
-
-bool ScriptController::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
-{
-    std::vector<std::string>& list = _callbacks[MOUSE_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-    {
-        if (executeFunction<bool>(list[i].c_str(), "[Mouse::MouseEvent]iii", evt, x, y, wheelDelta))
-            return true;
-    }
-    return false;
-}
-
-void ScriptController::gestureSwipeEvent(int x, int y, int direction)
-{
-    std::vector<std::string>& list = _callbacks[GESTURE_SWIPE_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "iii", x, y, direction);
-}
-
-void ScriptController::gesturePinchEvent(int x, int y, float scale)
-{
-    std::vector<std::string>& list = _callbacks[GESTURE_PINCH_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "iif", x, y, scale);
-}
-
-void ScriptController::gestureTapEvent(int x, int y)
-{
-    std::vector<std::string>& list = _callbacks[GESTURE_TAP_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "ii", x, y);
-}
-
-void ScriptController::gestureLongTapEvent(int x, int y, float duration)
-{
-}
-
-void ScriptController::gestureDragEvent(int x, int y)
-{
-}
-
-void ScriptController::gestureDropEvent(int x, int y)
-{
-}
-
-void ScriptController::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex)
-{
-    std::vector<std::string>& list = _callbacks[GAMEPAD_EVENT];
-    for (size_t i = 0; i < list.size(); ++i)
-        executeFunction<void>(list[i].c_str(), "[Gamepad::GamepadEvent]<Gamepad>", evt, gamepad);
-}
-
-void ScriptController::executeFunctionHelper(int resultCount, const char* func, const char* args, va_list* list)
-{
-	if (!_lua)
-		return; // handles calling this method after script is finalized
-
-    if (func == NULL)
-    {
-        GP_ERROR("Lua function name must be non-null.");
-        return;
-    }
-
-    if (!getNestedVariable(_lua, func))
-    {
-        GP_WARN("Failed to call function '%s'", func);
-        return;
-    }
-
-    const char* sig = args;
-    int argumentCount = 0;
-
-    // Push the arguments to the Lua stack if there are any.
-    if (sig)
-    {
-        while (true)
-        {
-            if (!(*sig))
-                break;
-
-            switch(*sig++)
-            {
-            // Signed integers.
-            case 'c':
-            case 'h':
-            case 'i':
-            case 'l':
-                lua_pushinteger(_lua, va_arg(*list, int));
-                break;
-            // Unsigned integers.
-            case 'u':
-                // Skip past the actual type (long, int, short, char).
-                sig++;
-                lua_pushunsigned(_lua, va_arg(*list, int));
-                break;
-            // Booleans.
-            case 'b':
-                lua_pushboolean(_lua, va_arg(*list, int));
-                break;
-            // Floating point numbers.
-            case 'f':
-            case 'd':
-                lua_pushnumber(_lua, va_arg(*list, double));
-                break;
-            // Strings.
-            case 's':
-                lua_pushstring(_lua, va_arg(*list, char*));
-                break;
-            // Pointers.
-            case 'p':
-                lua_pushlightuserdata(_lua, va_arg(*list, void*));
-                break;
-            // Enums.
-            case '[':
-            {
-                std::string type = sig;
-                type = type.substr(0, type.find("]"));
-
-                // Skip past the closing ']' (the semi-colon here is intentional-do not remove).
-                while (*sig++ != ']');
-
-                unsigned int value = va_arg(*list, int);
-                std::string enumStr = "";
-                for (unsigned int i = 0; enumStr.size() == 0 && i < _stringFromEnum.size(); i++)
-                {
-                    enumStr = (*_stringFromEnum[i])(type, value);
-                }
-
-                lua_pushstring(_lua, enumStr.c_str());
-                break;
-            }
-            // Object references/pointers (Lua userdata).
-            case '<':
-            {
-                std::string type = sig;
-                type = type.substr(0, type.find(">"));
-
-                // Skip past the closing '>' (the semi-colon here is intentional-do not remove).
-                while (*sig++ != '>');
-
-                // Calculate the unique Lua type name.
-                size_t i = type.find("::");
-                while (i != std::string::npos)
-                {
-                    // We use "" as the replacement here-this must match the preprocessor
-                    // define SCOPE_REPLACEMENT from the gameplay-luagen project.
-                    type.replace(i, 2, "");
-                    i = type.find("::");
-                }
-
-                void* ptr = va_arg(*list, void*);
-                if (ptr == NULL)
-                {
-                    lua_pushnil(_lua);
-                }
-                else
-                {
-                    ScriptUtil::LuaObject* object = (ScriptUtil::LuaObject*)lua_newuserdata(_lua, sizeof(ScriptUtil::LuaObject));
-                    object->instance = ptr;
-                    object->owns = false;
-                    luaL_getmetatable(_lua, type.c_str());
-                    lua_setmetatable(_lua, -2);
-                }
-                break;
-            }
-            default:
-                GP_ERROR("Invalid argument type '%d'.", *(sig - 1));
-                break;
-            }
-
-            argumentCount++;
-            luaL_checkstack(_lua, 1, "Too many arguments.");
-        }
-    }
-
-    // Perform the function call.
-    if (lua_pcall(_lua, argumentCount, resultCount, 0) != 0)
-        GP_WARN("Failed to call function '%s' with error '%s'.", func, lua_tostring(_lua, -1));
-}
-
-void ScriptController::registerCallback(const char* callback, const char* function)
-{
-    ScriptCallback scb = toCallback(callback);
-    if (scb < INVALID_CALLBACK)
-    {
-        _callbacks[scb].push_back(function);
-    }
-    else
-    {
-        GP_WARN("Invalid script callback function specified: %s", callback);
-    }
-}
-
-void ScriptController::unregisterCallback(const char* callback, const char* function)
-{
-    ScriptCallback scb = toCallback(callback);
-    if (scb < INVALID_CALLBACK)
-    {
-        std::vector<std::string>& list = _callbacks[scb];
-        std::vector<std::string>::iterator itr = std::find(list.begin(), list.end(), std::string(function));
-        if (itr != list.end())
-            list.erase(itr);
-    }
-    else
-    {
-        GP_WARN("Invalid script callback function specified: %s", callback);
-    }
-}
-
-ScriptController::ScriptCallback ScriptController::toCallback(const char* name)
-{
-    if (strcmp(name, "initialize") == 0)
-        return ScriptController::INITIALIZE;
-    else if (strcmp(name, "update") == 0)
-        return ScriptController::UPDATE;
-    else if (strcmp(name, "render") == 0)
-        return ScriptController::RENDER;
-    else if (strcmp(name, "finalize") == 0)
-        return ScriptController::FINALIZE;
-    else if (strcmp(name, "resizeEvent") == 0)
-        return ScriptController::RESIZE_EVENT;
-    else if (strcmp(name, "keyEvent") == 0)
-        return ScriptController::KEY_EVENT;
-    else if (strcmp(name, "touchEvent") == 0)
-        return ScriptController::TOUCH_EVENT;
-    else if (strcmp(name, "mouseEvent") == 0)
-        return ScriptController::MOUSE_EVENT;
-    else if (strcmp(name, "gestureSwipeEvent") == 0)
-        return ScriptController::GESTURE_SWIPE_EVENT;
-    else if (strcmp(name, "gesturePinchEvent") == 0)
-        return ScriptController::GESTURE_PINCH_EVENT;
-    else if (strcmp(name, "gestureTapEvent") == 0)
-        return ScriptController::GESTURE_TAP_EVENT;
-    else if (strcmp(name, "gamepadEvent") == 0)
-        return ScriptController::GAMEPAD_EVENT;
-    else
-        return ScriptController::INVALID_CALLBACK;
-}
-
-int ScriptController::convert(lua_State* state)
-{
-    // Get the number of parameters.
-    int paramCount = lua_gettop(state);
-    // Attempt to match the parameters to a valid binding.
-    switch (paramCount)
-    {
-        case 2:
-        {
-            if (lua_type(state, 1) == LUA_TUSERDATA && lua_type(state, 2) == LUA_TSTRING )
-            {
-                // Get parameter 2
-                const char* param2 = ScriptUtil::getString(2, false);
-                if (param2 != NULL)
-                {
-                    luaL_getmetatable(state, param2);
-                    lua_setmetatable(state, -3);
-                }
-                return 0;
-            }
-
-            lua_pushstring(state, "lua_convert - Failed to match the given parameters to a valid function signature.");
-            lua_error(state);
-            break;
-        }
-        default:
-        {
-            lua_pushstring(state, "Invalid number of parameters (expected 2).");
-            lua_error(state);
-            break;
-        }
-    }
-    return 0;
-}
-
-// Helper macros.
-#define SCRIPT_EXECUTE_FUNCTION_NO_PARAM(type, checkfunc) \
-    int top = lua_gettop(_lua); \
-    executeFunctionHelper(1, func, NULL, NULL); \
-    type value = (type)checkfunc(_lua, -1); \
-    lua_pop(_lua, -1); \
-    lua_settop(_lua, top); \
-    return value;
-
-#define SCRIPT_EXECUTE_FUNCTION_PARAM(type, checkfunc) \
-    int top = lua_gettop(_lua); \
-    va_list list; \
-    va_start(list, args); \
-    executeFunctionHelper(1, func, args, &list); \
-    type value = (type)checkfunc(_lua, -1); \
-    lua_pop(_lua, -1); \
-    va_end(list); \
-    lua_settop(_lua, top); \
-    return value;
-
-#define SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(type, checkfunc) \
-    int top = lua_gettop(_lua); \
-    executeFunctionHelper(1, func, args, list); \
-    type value = (type)checkfunc(_lua, -1); \
-    lua_pop(_lua, -1); \
-    lua_settop(_lua, top); \
-    return value;
-
-template<> void ScriptController::executeFunction<void>(const char* func)
-{
-    int top = lua_gettop(_lua);
-    executeFunctionHelper(0, func, NULL, NULL);
-    lua_settop(_lua, top);
-}
-
-template<> bool ScriptController::executeFunction<bool>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(bool, ScriptUtil::luaCheckBool);
-}
-
-template<> char ScriptController::executeFunction<char>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(char, luaL_checkint);
-}
-
-template<> short ScriptController::executeFunction<short>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(short, luaL_checkint);
-}
-
-template<> int ScriptController::executeFunction<int>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(int, luaL_checkint);
-}
-
-template<> long ScriptController::executeFunction<long>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(long, luaL_checklong);
-}
-
-template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned char, luaL_checkunsigned);
-}
-
-template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned short, luaL_checkunsigned);
-}
-
-template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned int, luaL_checkunsigned);
-}
-
-template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned long, luaL_checkunsigned);
-}
-
-template<> float ScriptController::executeFunction<float>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(float, luaL_checknumber);
-}
-
-template<> double ScriptController::executeFunction<double>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(double, luaL_checknumber);
-}
-
-template<> std::string ScriptController::executeFunction<std::string>(const char* func)
-{
-    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(std::string, luaL_checkstring);
-}
-
-/** Template specialization. */
-template<> void ScriptController::executeFunction<void>(const char* func, const char* args, ...)
-{
-    int top = lua_gettop(_lua);
-    va_list list;
-    va_start(list, args);
-    executeFunctionHelper(0, func, args, &list);
-    va_end(list);
-    lua_settop(_lua, top);
-}
-
-/** Template specialization. */
-template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(bool, ScriptUtil::luaCheckBool);
-}
-
-/** Template specialization. */
-template<> char ScriptController::executeFunction<char>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(char, luaL_checkint);
-}
-
-/** Template specialization. */
-template<> short ScriptController::executeFunction<short>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(short, luaL_checkint);
-}
-
-/** Template specialization. */
-template<> int ScriptController::executeFunction<int>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(int, luaL_checkint);
-}
-
-/** Template specialization. */
-template<> long ScriptController::executeFunction<long>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(long, luaL_checklong);
-}
-
-/** Template specialization. */
-template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned char, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned short, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned int, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned long, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> float ScriptController::executeFunction<float>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(float, luaL_checknumber);
-}
-
-/** Template specialization. */
-template<> double ScriptController::executeFunction<double>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(double, luaL_checknumber);
-}
-
-/** Template specialization. */
-template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, ...)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM(std::string, luaL_checkstring);
-}
-
-/** Template specialization. */
-template<> void ScriptController::executeFunction<void>(const char* func, const char* args, va_list* list)
-{
-    executeFunctionHelper(0, func, args, list);
-}
-
-/** Template specialization. */
-template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(bool, ScriptUtil::luaCheckBool);
-}
-
-/** Template specialization. */
-template<> char ScriptController::executeFunction<char>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(char, luaL_checkint);
-}
-
-/** Template specialization. */
-template<> short ScriptController::executeFunction<short>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(short, luaL_checkint);
-}
-
-/** Template specialization. */
-template<> int ScriptController::executeFunction<int>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(int, luaL_checkint);
-}
-
-/** Template specialization. */
-template<> long ScriptController::executeFunction<long>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(long, luaL_checklong);
-}
-
-/** Template specialization. */
-template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned char, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned short, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned int, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned long, luaL_checkunsigned);
-}
-
-/** Template specialization. */
-template<> float ScriptController::executeFunction<float>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(float, luaL_checknumber);
-}
-
-/** Template specialization. */
-template<> double ScriptController::executeFunction<double>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(double, luaL_checknumber);
-}
-
-/** Template specialization. */
-template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, va_list* list)
-{
-    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(std::string, luaL_checkstring);
-}
-
-}
+#include "Base.h"
+#include "FileSystem.h"
+#include "ScriptController.h"
+
+#ifndef NO_LUA_BINDINGS
+#include "lua/lua_all_bindings.h"
+#endif
+
+#define GENERATE_LUA_GET_POINTER(type, checkFunc) \
+    ScriptController* sc = Game::getInstance()->getScriptController(); \
+    /* Check that the parameter is the correct type. */ \
+    if (!lua_istable(sc->_lua, index)) \
+    { \
+        if (lua_islightuserdata(sc->_lua, index)) \
+            return LuaArray<type>((type*)lua_touserdata(sc->_lua, index)); \
+        lua_pushfstring(sc->_lua, "Expected a " #type " pointer (an array represented as a Lua table), got '%s' instead.", \
+            luaL_typename(sc->_lua, index)); \
+        lua_error(sc->_lua); \
+        return LuaArray<type>((type*)NULL); \
+    } \
+    \
+    /* Get the size of the array. */ \
+    lua_len(sc->_lua, index); \
+    int size = luaL_checkint(sc->_lua, -1); \
+    lua_pop(sc->_lua, 1); \
+    if (size <= 0) \
+        return LuaArray<type>((type*)NULL); \
+    \
+    /* Declare a LuaArray to store the values. */ \
+    LuaArray<type> arr(size); \
+    \
+    /* Push the first key. */ \
+    lua_pushnil(sc->_lua); \
+    int i = 0; \
+    for (; lua_next(sc->_lua, index) != 0 && i < size; i++) \
+    { \
+        arr[i] = (checkFunc(sc->_lua, -1)); \
+        \
+        /* Remove the value we just retrieved, but leave the key for the next iteration. */ \
+        lua_pop(sc->_lua, 1); \
+    } \
+    \
+    return arr
+
+#define PUSH_NESTED_VARIABLE(name, defaultValue) \
+    int top = lua_gettop(_lua); \
+    if (!getNestedVariable(_lua, (name))) \
+    { \
+        lua_settop(_lua, top); \
+        return (defaultValue); \
+    }
+
+#define POP_NESTED_VARIABLE() \
+    lua_settop(_lua, top)
+
+/**
+ * Pushes onto the stack, the value of the global 'name' or the nested table value if 'name' is a '.' separated 
+ * list of tables of the form "A.B.C.D", where A, B and C are tables and D is a variable name in the table C.
+ * 
+ * If 'name' does not contain any '.' then it is assumed to be the name of a global variable.
+ * 
+ * This function will not restore the stack if there is an error.
+ * 
+ * @param lua  The Lua state.
+ * @param name The name of a global variable or a '.' separated list of nested tables ending with a variable name.
+ *             The name value may be in the format "A.B.C.D" where A is a table and B, C are child tables.
+ *             D is any type, which will be accessed by the calling function.
+ * 
+ * @return True if the tables were pushed on the stack or the global variable was pushed. Returns false on error.
+ */
+static bool getNestedVariable(lua_State* lua, const char* name)
+{
+    if (strchr(name, '.') == NULL)
+    {
+        lua_getglobal(lua, name);
+        return true;
+    }
+    static std::string str;
+    // Copy the input string to a std::string so we can modify it because 
+    // some of the Lua functions require NULL terminated c-strings.
+    str.assign(name);
+
+    // Find the first table, which will be a global variable.
+    char* start = const_cast<char*>(str.c_str());
+    char* end = strchr(start, '.');
+    if (end == NULL)
+    {
+        return false;
+    }
+    ++end;
+    *(end - 1) = '\0';
+    lua_getglobal(lua, start);
+    *(end - 1) = '.';
+    if (!lua_istable(lua, -1))
+    {
+        return false;
+    }
+    // Push the nested tables
+    for (;;)
+    {
+        start = end;
+        end = strchr(start, '.');
+        if (end == NULL || *end == '\0')
+        {
+            // push the last variable
+            lua_pushstring(lua, start);
+            lua_gettable(lua, -2);
+            return true;
+        }
+        else
+        {
+            // Push the next table
+            *end = '\0';
+            lua_pushstring(lua, start);
+            *end = '.';
+            lua_gettable(lua, -2);
+            if (!lua_istable(lua, -1))
+            {
+                return false;
+            }
+            ++end;
+            if (*end == '.')
+            {
+                return false;
+            }
+        }
+    }
+    return false;
+}
+
+namespace gameplay
+{
+
+extern void splitURL(const std::string& url, std::string* file, std::string* id);
+
+void ScriptUtil::registerLibrary(const char* name, const luaL_Reg* functions)
+{
+    ScriptController* sc = Game::getInstance()->getScriptController();
+    lua_newtable(sc->_lua);
+
+    // Go through the list of functions and add them to the table.
+    const luaL_Reg* iter = functions;
+    for (; iter && iter->name; iter++)
+    {
+        lua_pushcfunction(sc->_lua, iter->func);
+        lua_setfield(sc->_lua, -2, iter->name);
+    }
+
+    lua_setglobal(sc->_lua, name);
+}
+
+void ScriptUtil::registerConstantBool(const std::string& name, bool value, const std::vector<std::string>& scopePath)
+{
+    ScriptController* sc = Game::getInstance()->getScriptController();
+
+    // If the constant is within a scope, get the correct parent 
+    // table on the stack before setting its value.
+    if (!scopePath.empty())
+    {
+        lua_getglobal(sc->_lua, scopePath[0].c_str());
+        for (unsigned int i = 1; i < scopePath.size(); i++)
+        {
+            lua_pushstring(sc->_lua, scopePath[i].c_str());
+            lua_gettable(sc->_lua, -2);
+        }
+        
+        // Add the constant to the parent table.
+        lua_pushboolean(sc->_lua, value);
+        lua_setfield(sc->_lua, -2, name.c_str());
+
+        // Pop all the parent tables off the stack.
+        int size = (int)scopePath.size();
+        lua_pop(sc->_lua, size);
+    }
+    else
+    {
+        // TODO: Currently unsupported (we don't parse for this yet).
+        // If the constant is global, add it to the global table.
+        lua_pushboolean(sc->_lua, value);
+        lua_pushvalue(sc->_lua, -1);
+        lua_setglobal(sc->_lua, name.c_str());
+    }
+}
+
+void ScriptUtil::registerConstantNumber(const std::string& name, double value, const std::vector<std::string>& scopePath)
+{
+    ScriptController* sc = Game::getInstance()->getScriptController();
+
+    // If the constant is within a scope, get the correct parent 
+    // table on the stack before setting its value.
+    if (!scopePath.empty())
+    {
+        lua_getglobal(sc->_lua, scopePath[0].c_str());
+        for (unsigned int i = 1; i < scopePath.size(); i++)
+        {
+            lua_pushstring(sc->_lua, scopePath[i].c_str());
+            lua_gettable(sc->_lua, -2);
+        }
+        
+        // Add the constant to the parent table.
+        lua_pushnumber(sc->_lua, value);
+        lua_setfield(sc->_lua, -2, name.c_str());
+
+        // Pop all the parent tables off the stack.
+        int size = (int)scopePath.size();
+        lua_pop(sc->_lua, size);
+    }
+    else
+    {
+        // TODO: Currently unsupported (we don't parse for this yet).
+        // If the constant is global, add it to the global table.
+        lua_pushnumber(sc->_lua, value);
+        lua_pushvalue(sc->_lua, -1);
+        lua_setglobal(sc->_lua, name.c_str());
+    }
+}
+
+void ScriptUtil::registerConstantString(const std::string& name, const std::string& value, const std::vector<std::string>& scopePath)
+{
+    ScriptController* sc = Game::getInstance()->getScriptController();
+
+    // If the constant is within a scope, get the correct parent 
+    // table on the stack before setting its value.
+    if (!scopePath.empty())
+    {
+        lua_getglobal(sc->_lua, scopePath[0].c_str());
+        for (unsigned int i = 1; i < scopePath.size(); i++)
+        {
+            lua_pushstring(sc->_lua, scopePath[i].c_str());
+            lua_gettable(sc->_lua, -2);
+        }
+        
+        // Add the constant to the parent table.
+        lua_pushstring(sc->_lua, value.c_str());
+        lua_setfield(sc->_lua, -2, name.c_str());
+
+        // Pop all the parent tables off the stack.
+        int size = (int)scopePath.size();
+        lua_pop(sc->_lua, size);
+    }
+    else
+    {
+        // TODO: Currently unsupported (we don't parse for this yet).
+        // If the constant is global, add it to the global table.
+        lua_pushstring(sc->_lua, value.c_str());
+        lua_pushvalue(sc->_lua, -1);
+        lua_setglobal(sc->_lua, name.c_str());
+    }
+}
+
+void ScriptUtil::registerClass(const char* name, const luaL_Reg* members, lua_CFunction newFunction, 
+    lua_CFunction deleteFunction, const luaL_Reg* statics,  const std::vector<std::string>& scopePath)
+{
+    ScriptController* sc = Game::getInstance()->getScriptController();
+
+    // If the type is an inner type, get the correct parent 
+    // table on the stack before creating the table for the class.
+    if (!scopePath.empty())
+    {
+        std::string tablename = name;
+
+        // Strip off the scope path part of the name.
+        lua_getglobal(sc->_lua, scopePath[0].c_str());
+        std::size_t index = tablename.find(scopePath[0]);
+        if (index != std::string::npos)
+            tablename = tablename.substr(index + scopePath[0].size());
+        
+        for (unsigned int i = 1; i < scopePath.size(); i++)
+        {
+            lua_pushstring(sc->_lua, scopePath[i].c_str());
+            lua_gettable(sc->_lua, -2);
+
+            index = tablename.find(scopePath[i]);
+            if (index != std::string::npos)
+                tablename = tablename.substr(index + scopePath[i].size());
+        }
+
+        lua_pushstring(sc->_lua, tablename.c_str());
+        lua_newtable(sc->_lua);
+    }
+    else
+    {
+        // If the type is not an inner type, set it as a global table.
+        lua_newtable(sc->_lua);
+        lua_pushvalue(sc->_lua, -1);
+        lua_setglobal(sc->_lua, name);
+    }
+    
+    // Create the metatable and populate it with the member functions.
+    lua_pushliteral(sc->_lua, "__metatable");
+    luaL_newmetatable(sc->_lua, name);
+    if (members)
+        luaL_setfuncs(sc->_lua, members, 0);
+    lua_pushstring(sc->_lua, "__index");
+    lua_pushvalue(sc->_lua, -2);
+    lua_settable(sc->_lua, -3);
+
+    // Add the delete function if it was specified.
+    if (deleteFunction)
+    {
+        lua_pushstring(sc->_lua, "__gc");
+        lua_pushcfunction(sc->_lua, deleteFunction);
+        lua_settable(sc->_lua, -3);
+    }
+
+    // Set the metatable on the main table.
+    lua_settable(sc->_lua, -3);
+    
+    // Populate the main table with the static functions.
+    if (statics)
+        luaL_setfuncs(sc->_lua, statics, 0);
+
+    // Set the new function(s) for the class.
+    if (newFunction)
+    {
+        lua_pushliteral(sc->_lua, "new");
+        lua_pushcfunction(sc->_lua, newFunction);
+        lua_settable(sc->_lua, -3);
+    }
+
+    // Set the table we just created within the correct parent table.
+    if (!scopePath.empty())
+    {
+        lua_settable(sc->_lua, -3);
+
+        // Pop all the parent tables off the stack.
+        int size = (int)scopePath.size();
+        lua_pop(sc->_lua, size);
+    }
+    else
+    {
+        // Pop the main table off the stack.
+        lua_pop(sc->_lua, 1);
+    }
+}
+
+void ScriptUtil::registerFunction(const char* luaFunction, lua_CFunction cppFunction)
+{
+    lua_pushcfunction(Game::getInstance()->getScriptController()->_lua, cppFunction);
+    lua_setglobal(Game::getInstance()->getScriptController()->_lua, luaFunction);
+}
+
+void ScriptUtil::setGlobalHierarchyPair(const std::string& base, const std::string& derived)
+{
+    Game::getInstance()->getScriptController()->_hierarchy[base].push_back(derived);
+}
+
+void ScriptUtil::addStringFromEnumConversionFunction(luaStringEnumConversionFunction stringFromEnum)
+{
+    Game::getInstance()->getScriptController()->_stringFromEnum.push_back(stringFromEnum);
+}
+
+ScriptUtil::LuaArray<bool> ScriptUtil::getBoolPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(bool, luaCheckBool);
+}
+
+ScriptUtil::LuaArray<short> ScriptUtil::getShortPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(short, (short)luaL_checkint);
+}
+
+ScriptUtil::LuaArray<int> ScriptUtil::getIntPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(int, (int)luaL_checkint);
+}
+
+ScriptUtil::LuaArray<long> ScriptUtil::getLongPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(long, (long)luaL_checkint);
+}
+
+ScriptUtil::LuaArray<unsigned char> ScriptUtil::getUnsignedCharPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(unsigned char, (unsigned char)luaL_checkunsigned);
+}
+
+ScriptUtil::LuaArray<unsigned short> ScriptUtil::getUnsignedShortPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(unsigned short, (unsigned short)luaL_checkunsigned);
+}
+
+ScriptUtil::LuaArray<unsigned int> ScriptUtil::getUnsignedIntPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(unsigned int, (unsigned int)luaL_checkunsigned);
+}
+
+ScriptUtil::LuaArray<unsigned long> ScriptUtil::getUnsignedLongPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(unsigned long, (unsigned long)luaL_checkunsigned);
+}
+
+ScriptUtil::LuaArray<float> ScriptUtil::getFloatPointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(float, (float)luaL_checknumber);
+}
+
+ScriptUtil::LuaArray<double> ScriptUtil::getDoublePointer(int index)
+{
+    GENERATE_LUA_GET_POINTER(double, (double)luaL_checknumber);
+}
+
+const char* ScriptUtil::getString(int index, bool isStdString)
+{
+    if (lua_type(Game::getInstance()->getScriptController()->_lua, index) == LUA_TSTRING)
+        return luaL_checkstring(Game::getInstance()->getScriptController()->_lua, index);
+    else if (lua_type(Game::getInstance()->getScriptController()->_lua, index) == LUA_TNIL && !isStdString)
+        return NULL;
+    else
+    {
+        GP_ERROR("Invalid string parameter (index = %d).", index);
+        return NULL;
+    }
+}
+
+bool ScriptUtil::luaCheckBool(lua_State* state, int n)
+{
+    if (!lua_isboolean(state, n))
+    {
+        const char* msg = lua_pushfstring(state, "%s expected, got %s", lua_typename(state, LUA_TBOOLEAN), luaL_typename(state, n));
+        luaL_argerror(state, n, msg);
+        return false;
+    }
+    return (lua_toboolean(state, n) != 0);
+}
+
+
+void ScriptController::loadScript(const char* path, bool forceReload)
+{
+    GP_ASSERT(path);
+    std::set<std::string>::iterator iter = _loadedScripts.find(path);
+    if (iter == _loadedScripts.end() || forceReload)
+    {
+        bool success = false;
+        if (iter == _loadedScripts.end())
+            _loadedScripts.insert(path); // insert before loading script to prevent load recursion
+
+#ifdef __ANDROID__
+        const char* scriptContents = FileSystem::readAll(path);
+        if (luaL_dostring(_lua, scriptContents))
+        {
+            GP_WARN("Failed to run Lua script with error: '%s'.", lua_tostring(_lua, -1));
+        }
+        else
+        {
+            success = true;
+        }
+        SAFE_DELETE_ARRAY(scriptContents);
+#else
+        std::string fullPath;
+        if (!FileSystem::isAbsolutePath(path))
+        {
+            fullPath.append(FileSystem::getResourcePath());
+        }
+        fullPath.append(path);
+        if (luaL_dofile(_lua, fullPath.c_str()))
+        {
+            GP_WARN("Failed to run Lua script with error: '%s'.", lua_tostring(_lua, -1));
+        }
+        else
+        {
+            success = true;
+        }
+#endif
+        if (!success && (iter == _loadedScripts.end()))
+        {
+            iter = _loadedScripts.find(path);
+            _loadedScripts.erase(iter);
+        }
+    }
+}
+
+std::string ScriptController::loadUrl(const char* url)
+{
+    std::string file;
+    std::string id;
+    splitURL(url, &file, &id);
+
+    if (id.size() <= 0)
+    {
+        // The url does not reference a script - only a function
+        return file;
+    }
+
+    // Ensure the script is loaded.
+    if (file.size() > 0)
+        Game::getInstance()->getScriptController()->loadScript(file.c_str());
+
+    // Return the function name.
+    return id;
+}
+
+bool ScriptController::getBool(const char* name, bool defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    bool b = lua_isboolean(_lua, -1) ? ScriptUtil::luaCheckBool(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return b;
+}
+
+char ScriptController::getChar(const char* name, char defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    char c = lua_isnumber(_lua, -1) ?  (char)luaL_checkint(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return c;
+}
+
+short ScriptController::getShort(const char* name, short defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    short n = lua_isnumber(_lua, -1) ? (short)luaL_checkint(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+int ScriptController::getInt(const char* name, int defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    int n = lua_isnumber(_lua, -1) ? luaL_checkint(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+long ScriptController::getLong(const char* name, long defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    long n = lua_isnumber(_lua, -1) ? luaL_checklong(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+unsigned char ScriptController::getUnsignedChar(const char* name, unsigned char defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    unsigned char c = lua_isnumber(_lua, -1) ? (unsigned char)luaL_checkunsigned(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return c;
+}
+
+unsigned short ScriptController::getUnsignedShort(const char* name, unsigned short defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    unsigned short n = lua_isnumber(_lua, -1) ? (unsigned short)luaL_checkunsigned(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+unsigned int ScriptController::getUnsignedInt(const char* name, unsigned int defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    unsigned int n = lua_isnumber(_lua, -1) ? (unsigned int)luaL_checkunsigned(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+unsigned long ScriptController::getUnsignedLong(const char* name, unsigned long defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    unsigned long n = lua_isnumber(_lua, -1) ? (unsigned long)luaL_checkunsigned(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+float ScriptController::getFloat(const char* name, float defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    float f = lua_isnumber(_lua, -1) ? (float)luaL_checknumber(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return f;
+}
+
+double ScriptController::getDouble(const char* name, double defaultValue)
+{
+    PUSH_NESTED_VARIABLE(name, defaultValue);
+    double n = lua_isnumber(_lua, -1) ? (double)luaL_checknumber(_lua, -1) : defaultValue;
+    POP_NESTED_VARIABLE();
+    return n;
+}
+
+const char* ScriptController::getString(const char* name)
+{
+    PUSH_NESTED_VARIABLE(name, NULL);
+    const char* s = lua_isstring(_lua, -1) ? luaL_checkstring(_lua, -1) : NULL;
+    POP_NESTED_VARIABLE();
+    return s;
+}
+
+void ScriptController::setBool(const char* name, bool v)
+{
+    lua_pushboolean(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setChar(const char* name, char v)
+{
+    lua_pushinteger(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setShort(const char* name, short v)
+{
+    lua_pushinteger(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setInt(const char* name, int v)
+{
+    lua_pushinteger(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setLong(const char* name, long v)
+{
+    lua_pushinteger(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setUnsignedChar(const char* name, unsigned char v)
+{
+    lua_pushunsigned(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setUnsignedShort(const char* name, unsigned short v)
+{
+    lua_pushunsigned(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setUnsignedInt(const char* name, unsigned int v)
+{
+    lua_pushunsigned(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setUnsignedLong(const char* name, unsigned long v)
+{
+    lua_pushunsigned(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setFloat(const char* name, float v)
+{
+    lua_pushnumber(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setDouble(const char* name, double v)
+{
+    lua_pushnumber(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::setString(const char* name, const char* v)
+{
+    lua_pushstring(_lua, v);
+    lua_setglobal(_lua, name);
+}
+
+void ScriptController::print(const char* str)
+{
+    gameplay::print("%s", str);
+}
+
+void ScriptController::print(const char* str1, const char* str2)
+{
+    gameplay::print("%s%s", str1, str2);
+}
+
+ScriptController::ScriptController() : _lua(NULL)
+{
+}
+
+ScriptController::~ScriptController()
+{
+}
+
+static const char* lua_print_function = 
+    "function print(...)\n"
+    "    ScriptController.print(table.concat({...},\"\\t\"), \"\\n\")\n"
+    "end\n";
+
+static const char* lua_loadfile_function = 
+    "do\n"
+    "    local oldLoadfile = loadfile\n"
+    "    loadfile = function(filename)\n"
+    "        if filename ~= nil and not FileSystem.isAbsolutePath(filename) then\n"
+    "            FileSystem.createFileFromAsset(filename)\n"
+    "            filename = FileSystem.getResourcePath() .. filename\n"
+    "        end\n"
+    "        return oldLoadfile(filename)\n"
+    "    end\n"
+    "end\n";
+
+static const char* lua_dofile_function = 
+    "do\n"
+    "    local oldDofile = dofile\n"
+    "    dofile = function(filename)\n"
+    "        if filename ~= nil and not FileSystem.isAbsolutePath(filename) then\n"
+    "            FileSystem.createFileFromAsset(filename)\n"
+    "            filename = FileSystem.getResourcePath() .. filename\n"
+    "        end\n"
+    "        return oldDofile(filename)\n"
+    "    end\n"
+    "end\n";
+
+/**
+ * @script{ignore}
+ */
+void appendLuaPath(lua_State* state, const char* path)
+{
+    lua_getglobal(state, "package");
+
+    // Get the current path string from top of stack
+    lua_getfield(state, -1, "path");
+    std::string cur_path = lua_tostring(state, -1);
+    lua_pop(state, 1);
+
+    // Append our game resource path to the path
+    cur_path += ';';
+    cur_path += path;
+    cur_path += "?.lua";
+
+    // Push the new path
+    lua_pushstring(state, cur_path.c_str());
+    lua_setfield(state, -2, "path");
+    lua_pop(state, 1);
+}
+
+void ScriptController::initialize()
+{
+    _lua = luaL_newstate();
+    if (!_lua)
+        GP_ERROR("Failed to initialize Lua scripting engine.");
+    luaL_openlibs(_lua);
+
+#ifndef NO_LUA_BINDINGS
+    lua_RegisterAllBindings();
+    ScriptUtil::registerFunction("convert", ScriptController::convert);
+#endif
+
+    // Append to the LUA_PATH to allow scripts to be found in the resource folder on all platforms
+    appendLuaPath(_lua, FileSystem::getResourcePath());
+
+    // Create our own print() function that uses gameplay::print.
+    if (luaL_dostring(_lua, lua_print_function))
+        GP_ERROR("Failed to load custom print() function with error: '%s'.", lua_tostring(_lua, -1));
+
+    // Change the functions that read a file to use FileSystem.getResourcePath as their base path.
+    if (luaL_dostring(_lua, lua_loadfile_function))
+        GP_ERROR("Failed to load custom loadfile() function with error: '%s'.", lua_tostring(_lua, -1));
+    if (luaL_dostring(_lua, lua_dofile_function))
+        GP_ERROR("Failed to load custom dofile() function with error: '%s'.", lua_tostring(_lua, -1));
+
+    // Write game command-line arguments to a global lua "arg" table
+    std::ostringstream args;
+    int argc;
+    char** argv;
+    Game::getInstance()->getArguments(&argc, &argv);
+    args << "arg = { }\n";
+    for (int i = 0; i < argc; ++i)
+    {
+        args << "arg[" << (i) << "] = [[" << argv[i] << "]]\n";
+    }
+    std::string argsStr = args.str();
+    if (argsStr.length() > 0)
+    {
+        if (luaL_dostring(_lua, argsStr.c_str()))
+            GP_ERROR("Failed to pass command-line arguments with error: '%s'.", lua_tostring(_lua, -1));
+    }
+}
+
+void ScriptController::initializeGame()
+{
+    std::vector<std::string>& list = _callbacks[INITIALIZE];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str());
+}
+
+void ScriptController::finalize()
+{
+    if (_lua)
+	{
+        lua_close(_lua);
+		_lua = NULL;
+	}
+}
+
+void ScriptController::finalizeGame()
+{
+    std::vector<std::string> finalizeCallbacks = _callbacks[FINALIZE]; // no & : makes a copy of the vector
+
+	// Remove any registered callbacks so they don't get called after shutdown
+	for (unsigned int i = 0; i < CALLBACK_COUNT; i++)
+        _callbacks[i].clear();
+
+	// Fire script finalize callbacks
+    for (size_t i = 0; i < finalizeCallbacks.size(); ++i)
+        executeFunction<void>(finalizeCallbacks[i].c_str());
+
+    // Perform a full garbage collection cycle.
+	// Note that this does NOT free any global variables declared in scripts, since 
+	// they are stored in the global state and are still referenced. Only after 
+	// closing the state (lua_close) will those variables be released.
+    lua_gc(_lua, LUA_GCCOLLECT, 0);
+}
+
+void ScriptController::update(float elapsedTime)
+{
+    std::vector<std::string>& list = _callbacks[UPDATE];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "f", elapsedTime);
+}
+
+void ScriptController::render(float elapsedTime)
+{
+    std::vector<std::string>& list = _callbacks[RENDER];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "f", elapsedTime);
+}
+
+void ScriptController::resizeEvent(unsigned int width, unsigned int height)
+{
+    std::vector<std::string>& list = _callbacks[RESIZE_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "uiui", width, height);
+}
+
+void ScriptController::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    std::vector<std::string>& list = _callbacks[KEY_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "[Keyboard::KeyEvent][Keyboard::Key]", evt, key);
+}
+
+void ScriptController::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    std::vector<std::string>& list = _callbacks[TOUCH_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "[Touch::TouchEvent]iiui", evt, x, y, contactIndex);
+}
+
+bool ScriptController::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    std::vector<std::string>& list = _callbacks[MOUSE_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+    {
+        if (executeFunction<bool>(list[i].c_str(), "[Mouse::MouseEvent]iii", evt, x, y, wheelDelta))
+            return true;
+    }
+    return false;
+}
+
+void ScriptController::gestureSwipeEvent(int x, int y, int direction)
+{
+    std::vector<std::string>& list = _callbacks[GESTURE_SWIPE_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "iii", x, y, direction);
+}
+
+void ScriptController::gesturePinchEvent(int x, int y, float scale)
+{
+    std::vector<std::string>& list = _callbacks[GESTURE_PINCH_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "iif", x, y, scale);
+}
+
+void ScriptController::gestureTapEvent(int x, int y)
+{
+    std::vector<std::string>& list = _callbacks[GESTURE_TAP_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "ii", x, y);
+}
+
+void ScriptController::gestureLongTapEvent(int x, int y, float duration)
+{
+}
+
+void ScriptController::gestureDragEvent(int x, int y)
+{
+}
+
+void ScriptController::gestureDropEvent(int x, int y)
+{
+}
+
+void ScriptController::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex)
+{
+    std::vector<std::string>& list = _callbacks[GAMEPAD_EVENT];
+    for (size_t i = 0; i < list.size(); ++i)
+        executeFunction<void>(list[i].c_str(), "[Gamepad::GamepadEvent]<Gamepad>", evt, gamepad);
+}
+
+void ScriptController::executeFunctionHelper(int resultCount, const char* func, const char* args, va_list* list)
+{
+	if (!_lua)
+		return; // handles calling this method after script is finalized
+
+    if (func == NULL)
+    {
+        GP_ERROR("Lua function name must be non-null.");
+        return;
+    }
+
+    if (!getNestedVariable(_lua, func))
+    {
+        GP_WARN("Failed to call function '%s'", func);
+        return;
+    }
+
+    const char* sig = args;
+    int argumentCount = 0;
+
+    // Push the arguments to the Lua stack if there are any.
+    if (sig)
+    {
+        while (true)
+        {
+            if (!(*sig))
+                break;
+
+            switch(*sig++)
+            {
+            // Signed integers.
+            case 'c':
+            case 'h':
+            case 'i':
+            case 'l':
+                lua_pushinteger(_lua, va_arg(*list, int));
+                break;
+            // Unsigned integers.
+            case 'u':
+                // Skip past the actual type (long, int, short, char).
+                sig++;
+                lua_pushunsigned(_lua, va_arg(*list, int));
+                break;
+            // Booleans.
+            case 'b':
+                lua_pushboolean(_lua, va_arg(*list, int));
+                break;
+            // Floating point numbers.
+            case 'f':
+            case 'd':
+                lua_pushnumber(_lua, va_arg(*list, double));
+                break;
+            // Strings.
+            case 's':
+                lua_pushstring(_lua, va_arg(*list, char*));
+                break;
+            // Pointers.
+            case 'p':
+                lua_pushlightuserdata(_lua, va_arg(*list, void*));
+                break;
+            // Enums.
+            case '[':
+            {
+                std::string type = sig;
+                type = type.substr(0, type.find("]"));
+
+                // Skip past the closing ']' (the semi-colon here is intentional-do not remove).
+                while (*sig++ != ']');
+
+                unsigned int value = va_arg(*list, int);
+                std::string enumStr = "";
+                for (unsigned int i = 0; enumStr.size() == 0 && i < _stringFromEnum.size(); i++)
+                {
+                    enumStr = (*_stringFromEnum[i])(type, value);
+                }
+
+                lua_pushstring(_lua, enumStr.c_str());
+                break;
+            }
+            // Object references/pointers (Lua userdata).
+            case '<':
+            {
+                std::string type = sig;
+                type = type.substr(0, type.find(">"));
+
+                // Skip past the closing '>' (the semi-colon here is intentional-do not remove).
+                while (*sig++ != '>');
+
+                // Calculate the unique Lua type name.
+                size_t i = type.find("::");
+                while (i != std::string::npos)
+                {
+                    // We use "" as the replacement here-this must match the preprocessor
+                    // define SCOPE_REPLACEMENT from the gameplay-luagen project.
+                    type.replace(i, 2, "");
+                    i = type.find("::");
+                }
+
+                void* ptr = va_arg(*list, void*);
+                if (ptr == NULL)
+                {
+                    lua_pushnil(_lua);
+                }
+                else
+                {
+                    ScriptUtil::LuaObject* object = (ScriptUtil::LuaObject*)lua_newuserdata(_lua, sizeof(ScriptUtil::LuaObject));
+                    object->instance = ptr;
+                    object->owns = false;
+                    luaL_getmetatable(_lua, type.c_str());
+                    lua_setmetatable(_lua, -2);
+                }
+                break;
+            }
+            default:
+                GP_ERROR("Invalid argument type '%d'.", *(sig - 1));
+                break;
+            }
+
+            argumentCount++;
+            luaL_checkstack(_lua, 1, "Too many arguments.");
+        }
+    }
+
+    // Perform the function call.
+    if (lua_pcall(_lua, argumentCount, resultCount, 0) != 0)
+        GP_WARN("Failed to call function '%s' with error '%s'.", func, lua_tostring(_lua, -1));
+}
+
+void ScriptController::registerCallback(const char* callback, const char* function)
+{
+    ScriptCallback scb = toCallback(callback);
+    if (scb < INVALID_CALLBACK)
+    {
+        _callbacks[scb].push_back(function);
+    }
+    else
+    {
+        GP_WARN("Invalid script callback function specified: %s", callback);
+    }
+}
+
+void ScriptController::unregisterCallback(const char* callback, const char* function)
+{
+    ScriptCallback scb = toCallback(callback);
+    if (scb < INVALID_CALLBACK)
+    {
+        std::vector<std::string>& list = _callbacks[scb];
+        std::vector<std::string>::iterator itr = std::find(list.begin(), list.end(), std::string(function));
+        if (itr != list.end())
+            list.erase(itr);
+    }
+    else
+    {
+        GP_WARN("Invalid script callback function specified: %s", callback);
+    }
+}
+
+ScriptController::ScriptCallback ScriptController::toCallback(const char* name)
+{
+    if (strcmp(name, "initialize") == 0)
+        return ScriptController::INITIALIZE;
+    else if (strcmp(name, "update") == 0)
+        return ScriptController::UPDATE;
+    else if (strcmp(name, "render") == 0)
+        return ScriptController::RENDER;
+    else if (strcmp(name, "finalize") == 0)
+        return ScriptController::FINALIZE;
+    else if (strcmp(name, "resizeEvent") == 0)
+        return ScriptController::RESIZE_EVENT;
+    else if (strcmp(name, "keyEvent") == 0)
+        return ScriptController::KEY_EVENT;
+    else if (strcmp(name, "touchEvent") == 0)
+        return ScriptController::TOUCH_EVENT;
+    else if (strcmp(name, "mouseEvent") == 0)
+        return ScriptController::MOUSE_EVENT;
+    else if (strcmp(name, "gestureSwipeEvent") == 0)
+        return ScriptController::GESTURE_SWIPE_EVENT;
+    else if (strcmp(name, "gesturePinchEvent") == 0)
+        return ScriptController::GESTURE_PINCH_EVENT;
+    else if (strcmp(name, "gestureTapEvent") == 0)
+        return ScriptController::GESTURE_TAP_EVENT;
+    else if (strcmp(name, "gamepadEvent") == 0)
+        return ScriptController::GAMEPAD_EVENT;
+    else
+        return ScriptController::INVALID_CALLBACK;
+}
+
+int ScriptController::convert(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 2:
+        {
+            if (lua_type(state, 1) == LUA_TUSERDATA && lua_type(state, 2) == LUA_TSTRING )
+            {
+                // Get parameter 2
+                const char* param2 = ScriptUtil::getString(2, false);
+                if (param2 != NULL)
+                {
+                    luaL_getmetatable(state, param2);
+                    lua_setmetatable(state, -3);
+                }
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_convert - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
+// Helper macros.
+#define SCRIPT_EXECUTE_FUNCTION_NO_PARAM(type, checkfunc) \
+    int top = lua_gettop(_lua); \
+    executeFunctionHelper(1, func, NULL, NULL); \
+    type value = (type)checkfunc(_lua, -1); \
+    lua_pop(_lua, -1); \
+    lua_settop(_lua, top); \
+    return value;
+
+#define SCRIPT_EXECUTE_FUNCTION_PARAM(type, checkfunc) \
+    int top = lua_gettop(_lua); \
+    va_list list; \
+    va_start(list, args); \
+    executeFunctionHelper(1, func, args, &list); \
+    type value = (type)checkfunc(_lua, -1); \
+    lua_pop(_lua, -1); \
+    va_end(list); \
+    lua_settop(_lua, top); \
+    return value;
+
+#define SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(type, checkfunc) \
+    int top = lua_gettop(_lua); \
+    executeFunctionHelper(1, func, args, list); \
+    type value = (type)checkfunc(_lua, -1); \
+    lua_pop(_lua, -1); \
+    lua_settop(_lua, top); \
+    return value;
+
+template<> void ScriptController::executeFunction<void>(const char* func)
+{
+    int top = lua_gettop(_lua);
+    executeFunctionHelper(0, func, NULL, NULL);
+    lua_settop(_lua, top);
+}
+
+template<> bool ScriptController::executeFunction<bool>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(bool, ScriptUtil::luaCheckBool);
+}
+
+template<> char ScriptController::executeFunction<char>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(char, luaL_checkint);
+}
+
+template<> short ScriptController::executeFunction<short>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(short, luaL_checkint);
+}
+
+template<> int ScriptController::executeFunction<int>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(int, luaL_checkint);
+}
+
+template<> long ScriptController::executeFunction<long>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(long, luaL_checklong);
+}
+
+template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned char, luaL_checkunsigned);
+}
+
+template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned short, luaL_checkunsigned);
+}
+
+template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned int, luaL_checkunsigned);
+}
+
+template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(unsigned long, luaL_checkunsigned);
+}
+
+template<> float ScriptController::executeFunction<float>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(float, luaL_checknumber);
+}
+
+template<> double ScriptController::executeFunction<double>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(double, luaL_checknumber);
+}
+
+template<> std::string ScriptController::executeFunction<std::string>(const char* func)
+{
+    SCRIPT_EXECUTE_FUNCTION_NO_PARAM(std::string, luaL_checkstring);
+}
+
+/** Template specialization. */
+template<> void ScriptController::executeFunction<void>(const char* func, const char* args, ...)
+{
+    int top = lua_gettop(_lua);
+    va_list list;
+    va_start(list, args);
+    executeFunctionHelper(0, func, args, &list);
+    va_end(list);
+    lua_settop(_lua, top);
+}
+
+/** Template specialization. */
+template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(bool, ScriptUtil::luaCheckBool);
+}
+
+/** Template specialization. */
+template<> char ScriptController::executeFunction<char>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(char, luaL_checkint);
+}
+
+/** Template specialization. */
+template<> short ScriptController::executeFunction<short>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(short, luaL_checkint);
+}
+
+/** Template specialization. */
+template<> int ScriptController::executeFunction<int>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(int, luaL_checkint);
+}
+
+/** Template specialization. */
+template<> long ScriptController::executeFunction<long>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(long, luaL_checklong);
+}
+
+/** Template specialization. */
+template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned char, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned short, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned int, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(unsigned long, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> float ScriptController::executeFunction<float>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(float, luaL_checknumber);
+}
+
+/** Template specialization. */
+template<> double ScriptController::executeFunction<double>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(double, luaL_checknumber);
+}
+
+/** Template specialization. */
+template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, ...)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM(std::string, luaL_checkstring);
+}
+
+/** Template specialization. */
+template<> void ScriptController::executeFunction<void>(const char* func, const char* args, va_list* list)
+{
+    executeFunctionHelper(0, func, args, list);
+}
+
+/** Template specialization. */
+template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(bool, ScriptUtil::luaCheckBool);
+}
+
+/** Template specialization. */
+template<> char ScriptController::executeFunction<char>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(char, luaL_checkint);
+}
+
+/** Template specialization. */
+template<> short ScriptController::executeFunction<short>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(short, luaL_checkint);
+}
+
+/** Template specialization. */
+template<> int ScriptController::executeFunction<int>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(int, luaL_checkint);
+}
+
+/** Template specialization. */
+template<> long ScriptController::executeFunction<long>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(long, luaL_checklong);
+}
+
+/** Template specialization. */
+template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned char, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned short, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned int, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(unsigned long, luaL_checkunsigned);
+}
+
+/** Template specialization. */
+template<> float ScriptController::executeFunction<float>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(float, luaL_checknumber);
+}
+
+/** Template specialization. */
+template<> double ScriptController::executeFunction<double>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(double, luaL_checknumber);
+}
+
+/** Template specialization. */
+template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, va_list* list)
+{
+    SCRIPT_EXECUTE_FUNCTION_PARAM_LIST(std::string, luaL_checkstring);
+}
+
+}

+ 1115 - 1115
gameplay/src/ScriptController.h

@@ -1,1115 +1,1115 @@
-#ifndef SCRIPTCONTROLLER_H_
-#define SCRIPTCONTROLLER_H_
-
-#include "Base.h"
-#include "Game.h"
-//#include "Gamepad.h"
-#include "Control.h"
-
-namespace gameplay
-{
-
-/** Function pointer typedef for string-from-enum conversion functions. */
-typedef const char* (*luaStringEnumConversionFunction)(std::string&, unsigned int);
-
-/**
- * Functions and structures used by the generated Lua script bindings.
- */
-namespace ScriptUtil
-{
-
-/**
- * Represents a C++ object from within Lua.
- * 
- * @script{ignore}
- */
-struct LuaObject
-{
-    /** The actual object instance. */
-    void* instance;
-    /** Whether object is owned by Lua. */
-    bool owns;
-};
-
-/**
- * Stores a Lua parameter of an array/pointer type that is passed from Lua to C.
- * Handles automatic cleanup of any temporary memory associated with the array.
- * 
- * @script{ignore}
- */
-template <typename T>
-class LuaArray
-{
-public:
-
-    /**
-     * Creates a LuaArray to store a single pointer value.
-     */
-    LuaArray(T* param);
-
-    /**
-     * Allocates a LuaArray to store an array of values.
-     *
-     * Individual items in the array can be set using the 
-     * set(unsigned int, const T&) method.
-     * 
-     * @param count Number of elements to store in the parameter.
-     */
-    LuaArray(int count);
-
-    /**
-     * Copy constructor.
-     */
-    LuaArray(const LuaArray<T>& copy);
-
-    /**
-     * Destructor.
-     */
-    ~LuaArray();
-
-    /**
-     * Assignment operator.
-     */
-    LuaArray<T>& operator = (const LuaArray<T>& p);
-
-    /**
-     * Copies the value of the object pointed to by itemPtr into the specified
-     * index of this LuaArray's array.
-     */
-    void set(unsigned int index, const T* itemPtr);
-
-    /**
-     * Conversion operator from LuaArray to T*.
-     */
-    operator T* () const;
-
-    /**
-     * Overloads [] operator to get/set item value at index.
-     */
-    T& operator[] (int index);
-
-private:
-
-    struct Data
-    {
-        Data() : value(NULL), refCount(0) { }
-        T* value;
-        int refCount;
-    };
-
-    Data* _data;
-};
-
-/**
- * Registers the given library with Lua.
- * 
- * @param name The name of the library from within Lua.
- * @param functions The library function mapping (Lua function names to C++ functions).
- * 
- * @script{ignore}
- */
-void registerLibrary(const char* name, const luaL_Reg* functions);
-
-/**
- * Registers the given boolean constant as valid for the given scope path.
- * 
- * @param name The name of the constant (what the user would use from Lua).
- * @param value The constant's value.
- * @param scopePath The list of containing classes, going inward from the most outer class.
- * 
- * @script{ignore}
- */
-void registerConstantBool(const std::string& name, bool value, const std::vector<std::string>& scopePath);
-
-/**
- * Registers the given number constant as valid for the given scope path.
- * 
- * @param name The name of the constant (what the user would use from Lua).
- * @param value The constant's value.
- * @param scopePath The list of containing classes, going inward from the most outer class.
- * 
- * @script{ignore}
- */
-void registerConstantNumber(const std::string& name, double value, const std::vector<std::string>& scopePath);
-
-/**
- * Registers the given string constant as valid for the given scope path.
- * 
- * @param name The name of the constant (what the user would use from Lua).
- * @param value The constant's value.
- * @param scopePath The list of containing classes, going inward from the most outer class.
- * 
- * @script{ignore}
- */
-void registerConstantString(const std::string& name, const std::string& value, const std::vector<std::string>& scopePath);
-
-/**
- * Registers the given class type with Lua.
- * 
- * @param name The name of the class from within Lua.
- * @param members The library function mapping for all the member functions (Lua function names to C++ functions).
- * @param newFunction The function to call that creates an instance of the class.
- * @param deleteFunction The function to call that destroys an instance of the class.
- * @param statics The library function mapping for all the static functions (Lua function names to C++ functions).
- * @param scopePath For an inner class, this is a list of its containing classes, going inward from the most outer class.
- * 
- * @script{ignore}
- */
-void registerClass(const char* name, const luaL_Reg* members, lua_CFunction newFunction, lua_CFunction deleteFunction, const luaL_Reg* statics,
-    const std::vector<std::string>& scopePath);
-
-/**
- * Register a function with Lua.
- * 
- * @param luaFunction The name of the function from within Lua.
- * @param cppFunction The C++ function pointer.
- * 
- * @script{ignore}
- */
-void registerFunction(const char* luaFunction, lua_CFunction cppFunction);
-
-/**
- * Sets an inheritance pair within the global inheritance hierarchy (base, derived).
- * 
- * @param base The base class of the inheritance pair.
- * @param derived The derived class of the inheritance pair.
- * 
- * @script{ignore}
- */
-void setGlobalHierarchyPair(const std::string& base, const std::string& derived);
-
-/**
- * Adds the given function as a string-from-enumerated value conversion function.
- * 
- * @param stringFromEnum The pointer to the string-from-enum conversion function.
- * 
- * @script{ignore}
- */
-void addStringFromEnumConversionFunction(luaStringEnumConversionFunction stringFromEnum);
-
-/**
- * Gets a pointer to a bool (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<bool> getBoolPointer(int index);
-
-/**
- * Gets a pointer to a short (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<short> getShortPointer(int index);
-
-/**
- * Gets a pointer to an int (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<int> getIntPointer(int index);
-
-/**
- * Gets a pointer to a long (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<long> getLongPointer(int index);
-
-/**
- * Gets a pointer to an unsigned char (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<unsigned char> getUnsignedCharPointer(int index);
-
-/**
- * Gets a pointer to an unsigned short (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<unsigned short> getUnsignedShortPointer(int index);
-
-/**
- * Gets a pointer to an unsigned int (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<unsigned int> getUnsignedIntPointer(int index);
-
-/**
- * Gets a pointer to an unsigned long (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<unsigned long> getUnsignedLongPointer(int index);
-
-/**
- * Gets a pointer to a float (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<float> getFloatPointer(int index);
-
-/**
- * Gets a pointer to a double (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
- * 
- * @param index The stack index.
- * 
- * @return The pointer.
- * 
- * @script{ignore}
- */
-LuaArray<double> getDoublePointer(int index);
-
-/**
- * Gets an object pointer of the given type for the given stack index.
- * 
- * @param type The type of object pointer to retrieve.
- * @param index The stack index.
- * @param nonNull Whether the pointer must be non-null (e.g. if the parameter we 
- *      are retrieving is actually a reference or by-value parameter).
- * @param success An out parameter that is set to true if the Lua parameter was successfully
- *      converted to a valid object, or false if it was unable to perform a valid conversion.
- * 
- * @return The object pointer or <code>NULL</code> if the data at the stack index
- *      is not an object or if the object is not derived from the given type.
- * 
- * @script{ignore}
- */
-template <typename T>
-LuaArray<T> getObjectPointer(int index, const char* type, bool nonNull, bool* success);
-
-/**
- * Gets a string for the given stack index.
- * 
- * @param index The stack index.
- * @param isStdString Whether the string being retrieved is a std::string object or not.
- * 
- * @return The string or <code>NULL</code>.
- * 
- * @script{ignore}
- */
-const char* getString(int index, bool isStdString);
-
-/**
- * Checks that the parameter at the given stack position is a boolean and returns it.
- * 
- * @param state The Lua state.
- * @param n The stack index.
- * 
- * @return The boolean (if successful; otherwise it logs an error).
- * 
- * @script{ignore}
- */
-bool luaCheckBool(lua_State* state, int n);
-
-}
-
-/**
- * Controls and manages all scripts.
- */
-class ScriptController
-{
-    friend class Game;
-    friend class Platform;
-
-public:
-
-    /**
-     * Loads the given script file and executes its global code.
-     * 
-     * @param path The path to the script.
-     * @param forceReload Whether the script should be reloaded if it has already been loaded.
-     */
-    void loadScript(const char* path, bool forceReload = false);
-
-    /**
-     * Given a URL, loads the referenced file and returns the referenced function name.
-     * 
-     * @param url The url to load.
-     * 
-     * @return The function that the URL references.
-     */
-    std::string loadUrl(const char* url);
-
-    /**
-     * Registers the given script callback.
-     *
-     * The 'callback' parameter must be one of the supported global callback
-     * event functions. The following strings are accepted: initialize, finalize,
-     * update, render, resizeEvent, keyEvent, touchEvent, mouseEvent, gamepadEvent.
-     * Signatures for the registered script function must match that of the
-     * corresponding signatures of these events on the Game class.
-     *
-     * @param callback The script callback to register for.
-     * @param function The name of the script function to register.
-     */
-    void registerCallback(const char* callback, const char* function);
-
-    /**
-     * Unregisters the given script callback.
-     *
-     * @param callback The script callback to unregister for.
-     * @param function The name of the script function to unregister.
-     *
-     * @see registerCallback(const char*, const char*)
-     */
-    void unregisterCallback(const char* callback, const char* function);
-
-    /**
-     * Calls the specified no-parameter Lua function.
-     * 
-     * @param func The name of the function to call.
-     * 
-     * @return The return value of the executed Lua function.
-     */
-    template<typename T> T executeFunction(const char* func);
-
-    /**
-     * Calls the specified Lua function using the given parameters.
-     * 
-     * @param func The name of the function to call.
-     * @param args The argument signature of the function. Of the form 'xxx', where each 'x' is a parameter type and must be one of:
-     *      - 'b' - bool
-     *      - 'c' - char
-     *      - 'h' - short
-     *      - 'i' - int
-     *      - 'l' - long
-     *      - 'f' - float
-     *      - 'd' - double
-     *      - 'ui' - unsigned int
-     *      - 'ul' - unsigned long
-     *      - 'uc' - unsigned char
-     *      - 'uh' - unsigned short
-     *      - 's' - string
-     *      - 'p' - pointer
-     *      - '<object-type>' - a <b>pointer</b> to an object of the given type (where the qualified type name is enclosed by angle brackets).
-     *      - '[enum-type]' - an enumerated value of the given type (where the qualified type name is enclosed by square brackets).
-     * 
-     * @return The return value of the executed Lua function.
-     */
-    template<typename T> T executeFunction(const char* func, const char* args, ...);
-
-    /**
-     * Calls the specified Lua function using the given parameters.
-     * 
-     * @param func The name of the function to call.
-     * @param args The argument signature of the function. Of the form 'xxx', where each 'x' is a parameter type and must be one of:
-     *      - 'b' - bool
-     *      - 'c' - char
-     *      - 'h' - short
-     *      - 'i' - int
-     *      - 'l' - long
-     *      - 'f' - float
-     *      - 'd' - double
-     *      - 'ui' - unsigned int
-     *      - 'ul' - unsigned long
-     *      - 'uc' - unsigned char
-     *      - 'uh' - unsigned short
-     *      - 's' - string
-     *      - 'p' - pointer
-     *      - '<object-type>' - a <b>pointer</b> to an object of the given type (where the qualified type name is enclosed by angle brackets).
-     *      - '[enum-type]' - an enumerated value of the given type (where the qualified type name is enclosed by square brackets).
-     * @param list The variable argument list containing the function's parameters.
-     * 
-     * @return The return value of the executed Lua function.
-     */
-    template<typename T> T executeFunction(const char* func, const char* args, va_list* list);
-
-    /**
-     * Gets the global boolean script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a bool.
-     * 
-     * @return The global boolean script variable.
-     * 
-     * @script{ignore}
-     */
-    bool getBool(const char* name, bool defaultValue = false);
-
-    /**
-     * Gets the global char script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global char script variable.
-     * 
-     * @script{ignore}
-     */
-    char getChar(const char* name, char defaultValue = 0);
-
-    /**
-     * Gets the global short script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global short script variable.
-     * 
-     * @script{ignore}
-     */
-    short getShort(const char* name, short defaultValue = 0);
-
-    /**
-     * Gets the global int script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global int script variable.
-     * 
-     * @script{ignore}
-     */
-    int getInt(const char* name, int defaultValue = 0);
-
-    /**
-     * Gets the global long script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global long script variable.
-     * 
-     * @script{ignore}
-     */
-    long getLong(const char* name, long defaultValue = 0);
-
-    /**
-     * Gets the global unsigned char script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global unsigned char script variable.
-     * 
-     * @script{ignore}
-     */
-    unsigned char getUnsignedChar(const char* name, unsigned char defaultValue = 0);
-
-    /**
-     * Gets the global unsigned short script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global unsigned short script variable.
-     * 
-     * @script{ignore}
-     */
-    unsigned short getUnsignedShort(const char* name, unsigned short defaultValue = 0);
-
-    /**
-     * Gets the global unsigned int script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global unsigned int script variable.
-     * 
-     * @script{ignore}
-     */
-    unsigned int getUnsignedInt(const char* name, unsigned int defaultValue = 0);
-
-    /**
-     * Gets the global unsigned long script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global unsigned long script variable.
-     * 
-     * @script{ignore}
-     */
-    unsigned long getUnsignedLong(const char* name, unsigned long defaultValue = 0);
-
-    /**
-     * Gets the global float script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global float script variable.
-     * 
-     * @script{ignore}
-     */
-    float getFloat(const char* name, float defaultValue = 0);
-
-    /**
-     * Gets the global double script variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * @param defaultValue The default value to return if the variable is not a number.
-     * 
-     * @return The global double script variable.
-     * 
-     * @script{ignore}
-     */
-    double getDouble(const char* name, double defaultValue = 0);
-
-    /**
-     * Gets the global string variable with the given name.
-     * 
-     * @param name The name of the variable.
-     * 
-     * @return The string variable or NULL if the variable is not a string.
-     * 
-     * @script{ignore}
-     */
-    const char* getString(const char* name);
-
-    /**
-     * Gets the global pointer script variable of the given type with the given name.
-     * 
-     * @param type The type of the variable in Lua.
-     * @param name The name of the variable.
-     * 
-     * @return The global pointer script variable.
-     * 
-     * @script{ignore}
-     */
-    template<typename T>T* getObjectPointer(const char* type, const char* name);
-
-    /**
-     * Sets the global boolean script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The boolean value.
-     * 
-     * @script{ignore}
-     */
-    void setBool(const char* name, bool v);
-
-    /**
-     * Sets the global char script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The char value.
-     * 
-     * @script{ignore}
-     */
-    void setChar(const char* name, char v);
-
-    /**
-     * Sets the global short script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The short value.
-     * 
-     * @script{ignore}
-     */
-    void setShort(const char* name, short v);
-
-    /**
-     * Sets the global int script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The int value.
-     * 
-     * @script{ignore}
-     */
-    void setInt(const char* name, int v);
-
-    /**
-     * Sets the global long script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The long value.
-     * 
-     * @script{ignore}
-     */
-    void setLong(const char* name, long v);
-
-    /**
-     * Gets the global unsigned char script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The unsigned char value.
-     * 
-     * @script{ignore}
-     */
-    void setUnsignedChar(const char* name, unsigned char v);
-
-    /**
-     * Sets the global unsigned short script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The unsigned short value.
-     * 
-     * @script{ignore}
-     */
-    void setUnsignedShort(const char* name, unsigned short v);
-
-    /**
-     * Sets the global unsigned int script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The unsigned int value.
-     * 
-     * @script{ignore}
-     */
-    void setUnsignedInt(const char* name, unsigned int v);
-
-    /**
-     * Sets the global unsigned long script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The unsigned long value.
-     * 
-     * @script{ignore}
-     */
-    void setUnsignedLong(const char* name, unsigned long v);
-
-    /**
-     * Sets the global float script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The float value.
-     * 
-     * @script{ignore}
-     */
-    void setFloat(const char* name, float v);
-
-    /**
-     * Sets the global double script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The double value.
-     * 
-     * @script{ignore}
-     */
-    void setDouble(const char* name, double v);
-
-    /**
-     * Sets the global string script variable with the given name to the given value.
-     * 
-     * @param name The name of the script variable.
-     * @param v The string value.
-     * 
-     * @script{ignore}
-     */
-    void setString(const char* name, const char* v);
-
-    /**
-     * Sets the global pointer script variable of the given type with the given name to the given value.
-     * 
-     * @param type The type of the script variable.
-     * @param name The name of the variable.
-     * @param v The pointer value.
-     * 
-     * @script{ignore}
-     */
-    template<typename T>void setObjectPointer(const char* type, const char* name, T* v);
-
-    /**
-     * Prints the string to the platform's output stream or log file.
-     * Used for overriding Lua's print function.
-     * 
-     * @param str The string to print.
-     */
-    static void print(const char* str);
-
-    /**
-     * Prints the strings to the platform's output stream or log file.
-     * Used for overriding Lua's print function.
-     * 
-     * @param str1 The first string to print.
-     * @param str2 The second string to print on the same line as str1.
-     */
-    static void print(const char* str1, const char* str2);
-
-private:
-
-    /**
-     * Represents a callback function that can be registered for.
-     */
-    enum ScriptCallback
-    {
-        INITIALIZE = 0,
-        UPDATE,
-        RENDER,
-        FINALIZE,
-        RESIZE_EVENT,
-        KEY_EVENT,
-        MOUSE_EVENT,
-        TOUCH_EVENT,
-        GESTURE_SWIPE_EVENT,
-        GESTURE_PINCH_EVENT,
-        GESTURE_TAP_EVENT,
-        GAMEPAD_EVENT,
-        CALLBACK_COUNT,
-        INVALID_CALLBACK = CALLBACK_COUNT
-    };
-
-    /**
-     * Constructor.
-     */
-    ScriptController();
-
-    /**
-     * Copy constructor.
-     */
-    ScriptController(const ScriptController& copy);
-
-    /**
-     * Destructor.
-     */
-    ~ScriptController();
-
-    /**
-     * Callback for when the controller is initialized.
-     */
-    void initialize();
-
-    /**
-     * Initializes the game using the appropriate callback script (if it was specified).
-     */
-    void initializeGame();
-
-    /*
-     * Callback for when the controller is finalized.
-     */
-    void finalize();
-
-    /**
-     * Finalizes the game using the appropriate callback script (if it was specified).
-     */
-    void finalizeGame();
-    
-    /**
-     * Callback for when the controller receives a frame update event.
-     */
-    void update(float elapsedTime);
-
-    /**
-     * Renders the game using the appropriate callback script (if it was specified).
-     */
-    void render(float elapsedTime);
-
-    /**
-     * Script callback for game resize events.
-     *
-     * @param width The new width of the game window content area.
-     * @param height The new height of the game window content area.
-     */
-    void resizeEvent(unsigned int width, unsigned int height);
-
-    /**
-     * Script keyboard callback on key events.
-     *
-     * @param evt The key event that occurred.
-     * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
-     *            If evt is KEY_CHAR then key is the unicode value of the character.
-     * 
-     * @see Keyboard::KeyEvent
-     * @see Keyboard::Key
-     */
-    void keyEvent(Keyboard::KeyEvent evt, int key);
-
-    /**
-     * Script touch callback on touch events.
-     *
-     * @param evt The touch event that occurred.
-     * @param x The x position of the touch in pixels. Left edge is zero.
-     * @param y The y position of the touch in pixels. Top edge is zero.
-     * @param contactIndex The order of occurrence for multiple touch contacts starting at zero.
-     *
-     * @see Touch::TouchEvent
-     */
-    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
-
-    /**
-     * Script mouse callback on mouse events. If the game does not consume the mouse move event or left mouse click event
-     * then it is interpreted as a touch event instead.
-     *
-     * @param evt The mouse event that occurred.
-     * @param x The x position of the mouse in pixels. Left edge is zero.
-     * @param y The y position of the mouse in pixels. Top edge is zero.
-     * @param wheelDelta The number of mouse wheel ticks. Positive is up (forward), negative is down (backward).
-     *
-     * @return True if the mouse event is consumed or false if it is not consumed.
-     *
-     * @see Mouse::MouseEvent
-     */
-    bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
-
-    /**
-     * Script callback for Gesture::SWIPE events.
-     *
-     * @param x The x-coordinate of the start of the swipe.
-     * @param y The y-coordinate of the start of the swipe.
-     * @param direction The direction of the swipe
-     *
-     * @see Gesture::SWIPE_DIRECTION_UP
-     * @see Gesture::SWIPE_DIRECTION_DOWN
-     * @see Gesture::SWIPE_DIRECTION_LEFT
-     * @see Gesture::SWIPE_DIRECTION_RIGHT
-     */
-    void gestureSwipeEvent(int x, int y, int direction);
-
-    /**
-     * Script callback for Gesture::PINCH events.
-     *
-     * @param x The centroid x-coordinate of the pinch.
-     * @param y The centroid y-coordinate of the pinch.
-     * @param scale The scale of the pinch.
-     */
-    void gesturePinchEvent(int x, int y, float scale);
-
-    /**
-     * Script callback for Gesture::TAP events.
-     *
-     * @param x The x-coordinate of the tap.
-     * @param y The y-coordinate of the tap.
-     */
-    void gestureTapEvent(int x, int y);
-
-	/**
-	 * Gesture callback on Gesture::LONG_TAP events.
-	 *
-	 * @param x The x-coordinate of the long tap.
-	 * @param y The y-coordinate of the long tap.
-	 * @param duration The duration of the long tap in ms.
-	 */
-	void gestureLongTapEvent(int x, int y, float duration);
-
-	/**
-	 * Gesture callback on Gesture::DRAG events.
-	 *
-	 * @param x The x-coordinate of the start of the drag event.
-	 * @param y The y-coordinate of the start of the drag event.
-	 */
-	void gestureDragEvent(int x, int y);
-
-	/**
-	 * Gesture callback on Gesture::DROP events.
-	 *
-	 * @param x The x-coordinate of the drop event.
-	 * @param y The y-coordinate of the drop event.
-	 */
-	void gestureDropEvent(int x, int y);
-
-    /**
-     * Script gamepad callback on gamepad events.
-     *
-     * @param evt The gamepad event that occurred.
-     * @param gamepad the gamepad the event occurred on
-     */
-    void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex = 0);
-
-    /**
-     * Calls the specified Lua function using the given parameters.
-     * 
-     * @param resultCount The expected number of returned values.
-     * @param func The name of the function to call.
-     * @param args The argument signature of the function, as a string of the form
-     *      'xxx', where each 'x' is a parameter type and must be one of:
-     *      - 'b' - bool
-     *      - 'c' - char
-     *      - 'h' - short
-     *      - 'i' - int
-     *      - 'l' - long
-     *      - 'f' - float
-     *      - 'd' - double
-     *      - 'ui' - unsigned int
-     *      - 'ul' - unsigned long
-     *      - 'uc' - unsigned char
-     *      - 'uh' - unsigned short
-     *      - 's' - string
-     *      - 'p' - pointer
-     *      - '<object-type>' - a <b>pointer</b> to an object of the given type (where the qualified type name is enclosed by angle brackets).
-     *      - '[enum-type]' - an enumerated value of the given type (where the qualified type name is enclosed by square brackets).
-     * @param list The variable argument list.
-     */
-    void executeFunctionHelper(int resultCount, const char* func, const char* args, va_list* list);
-
-    /**
-     * Converts the given string to a valid script callback enumeration value
-     * or to ScriptController::INVALID_CALLBACK if there is no valid conversion.
-     * 
-     * @param name The name of the callback.
-     * 
-     * @return The corresponding callback enumeration value.
-     */
-    static ScriptController::ScriptCallback toCallback(const char* name);
-
-    /**
-     * Converts a Gameplay userdata value to the type with the given class name.
-     * This function will change the metatable of the userdata value to the metatable that matches the given string.
-     * 
-     * Example:
-     * <code>
-     * local launchButton = form:getControl("launch")
-     * convert(launchButton, "Button")
-     * print("Button text: " .. launchButton:getText())
-     * </code>
-     * 
-     * <code>
-     * -- The signature of the lua function:
-     * -- param: object    A userdata object that represents a Gameplay object.
-     * -- param: className The name of the class to convert the object to. (Examples: "Button", "PhysicsRigidBody")
-     * function convert(object, className)
-     * </code>
-     * 
-     * @param state The Lua state.
-     * 
-     * @return The number of values being returned by this function.
-     * 
-     * @script{ignore}
-     */
-    static int convert(lua_State* state);
-
-    // Friend functions (used by Lua script bindings).
-    friend void ScriptUtil::registerLibrary(const char* name, const luaL_Reg* functions);
-    friend void ScriptUtil::registerConstantBool(const std::string& name, bool value, const std::vector<std::string>& scopePath);
-    friend void ScriptUtil::registerConstantNumber(const std::string& name, double value, const std::vector<std::string>& scopePath);
-    friend void ScriptUtil::registerConstantString(const std::string& name, const std::string& value, const std::vector<std::string>& scopePath);
-    friend void ScriptUtil::registerClass(const char* name, const luaL_Reg* members, lua_CFunction newFunction,
-        lua_CFunction deleteFunction, const luaL_Reg* statics, const std::vector<std::string>& scopePath);
-    friend void ScriptUtil::registerFunction(const char* luaFunction, lua_CFunction cppFunction);
-    friend void ScriptUtil::setGlobalHierarchyPair(const std::string& base, const std::string& derived);
-    friend void ScriptUtil::addStringFromEnumConversionFunction(luaStringEnumConversionFunction stringFromEnum);
-    friend ScriptUtil::LuaArray<bool> ScriptUtil::getBoolPointer(int index);
-    friend ScriptUtil::LuaArray<short> ScriptUtil::getShortPointer(int index);
-    friend ScriptUtil::LuaArray<int> ScriptUtil::getIntPointer(int index);
-    friend ScriptUtil::LuaArray<long> ScriptUtil::getLongPointer(int index);
-    friend ScriptUtil::LuaArray<unsigned char> ScriptUtil::getUnsignedCharPointer(int index);
-    friend ScriptUtil::LuaArray<unsigned short> ScriptUtil::getUnsignedShortPointer(int index);
-    friend ScriptUtil::LuaArray<unsigned int> ScriptUtil::getUnsignedIntPointer(int index);
-    friend ScriptUtil::LuaArray<unsigned long> ScriptUtil::getUnsignedLongPointer(int index);
-    friend ScriptUtil::LuaArray<float> ScriptUtil::getFloatPointer(int index);
-    friend ScriptUtil::LuaArray<double> ScriptUtil::getDoublePointer(int index);
-    template<typename T> friend ScriptUtil::LuaArray<T> ScriptUtil::getObjectPointer(int index, const char* type, bool nonNull, bool* success);
-    friend const char* ScriptUtil::getString(int index, bool isStdString);
-
-    lua_State* _lua;
-    unsigned int _returnCount;
-    std::map<std::string, std::vector<std::string> > _hierarchy;
-    std::vector<std::string> _callbacks[CALLBACK_COUNT];
-    std::set<std::string> _loadedScripts;
-    std::vector<luaStringEnumConversionFunction> _stringFromEnum;
-};
-
-/** Template specialization. */
-template<> void ScriptController::executeFunction<void>(const char* func);
-/** Template specialization. */
-template<> bool ScriptController::executeFunction<bool>(const char* func);
-/** Template specialization. */
-template<> char ScriptController::executeFunction<char>(const char* func);
-/** Template specialization. */
-template<> short ScriptController::executeFunction<short>(const char* func);
-/** Template specialization. */
-template<> int ScriptController::executeFunction<int>(const char* func);
-/** Template specialization. */
-template<> long ScriptController::executeFunction<long>(const char* func);
-/** Template specialization. */
-template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func);
-/** Template specialization. */
-template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func);
-/** Template specialization. */
-template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func);
-/** Template specialization. */
-template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func);
-/** Template specialization. */
-template<> float ScriptController::executeFunction<float>(const char* func);
-/** Template specialization. */
-template<> double ScriptController::executeFunction<double>(const char* func);
-/** Template specialization. */
-template<> std::string ScriptController::executeFunction<std::string>(const char* func);
-
-/** Template specialization. */
-template<> void ScriptController::executeFunction<void>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> char ScriptController::executeFunction<char>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> short ScriptController::executeFunction<short>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> int ScriptController::executeFunction<int>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> long ScriptController::executeFunction<long>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> float ScriptController::executeFunction<float>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> double ScriptController::executeFunction<double>(const char* func, const char* args, ...);
-/** Template specialization. */
-template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, ...);
-
-/** Template specialization. */
-template<> void ScriptController::executeFunction<void>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> char ScriptController::executeFunction<char>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> short ScriptController::executeFunction<short>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> int ScriptController::executeFunction<int>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> long ScriptController::executeFunction<long>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> float ScriptController::executeFunction<float>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> double ScriptController::executeFunction<double>(const char* func, const char* args, va_list* list);
-/** Template specialization. */
-template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, va_list* list);
-
-}
-
-#include "ScriptController.inl"
-
-#endif
+#ifndef SCRIPTCONTROLLER_H_
+#define SCRIPTCONTROLLER_H_
+
+#include "Base.h"
+#include "Game.h"
+//#include "Gamepad.h"
+#include "Control.h"
+
+namespace gameplay
+{
+
+/** Function pointer typedef for string-from-enum conversion functions. */
+typedef const char* (*luaStringEnumConversionFunction)(std::string&, unsigned int);
+
+/**
+ * Functions and structures used by the generated Lua script bindings.
+ */
+namespace ScriptUtil
+{
+
+/**
+ * Represents a C++ object from within Lua.
+ * 
+ * @script{ignore}
+ */
+struct LuaObject
+{
+    /** The actual object instance. */
+    void* instance;
+    /** Whether object is owned by Lua. */
+    bool owns;
+};
+
+/**
+ * Stores a Lua parameter of an array/pointer type that is passed from Lua to C.
+ * Handles automatic cleanup of any temporary memory associated with the array.
+ * 
+ * @script{ignore}
+ */
+template <typename T>
+class LuaArray
+{
+public:
+
+    /**
+     * Creates a LuaArray to store a single pointer value.
+     */
+    LuaArray(T* param);
+
+    /**
+     * Allocates a LuaArray to store an array of values.
+     *
+     * Individual items in the array can be set using the 
+     * set(unsigned int, const T&) method.
+     * 
+     * @param count Number of elements to store in the parameter.
+     */
+    LuaArray(int count);
+
+    /**
+     * Copy constructor.
+     */
+    LuaArray(const LuaArray<T>& copy);
+
+    /**
+     * Destructor.
+     */
+    ~LuaArray();
+
+    /**
+     * Assignment operator.
+     */
+    LuaArray<T>& operator = (const LuaArray<T>& p);
+
+    /**
+     * Copies the value of the object pointed to by itemPtr into the specified
+     * index of this LuaArray's array.
+     */
+    void set(unsigned int index, const T* itemPtr);
+
+    /**
+     * Conversion operator from LuaArray to T*.
+     */
+    operator T* () const;
+
+    /**
+     * Overloads [] operator to get/set item value at index.
+     */
+    T& operator[] (int index);
+
+private:
+
+    struct Data
+    {
+        Data() : value(NULL), refCount(0) { }
+        T* value;
+        int refCount;
+    };
+
+    Data* _data;
+};
+
+/**
+ * Registers the given library with Lua.
+ * 
+ * @param name The name of the library from within Lua.
+ * @param functions The library function mapping (Lua function names to C++ functions).
+ * 
+ * @script{ignore}
+ */
+void registerLibrary(const char* name, const luaL_Reg* functions);
+
+/**
+ * Registers the given boolean constant as valid for the given scope path.
+ * 
+ * @param name The name of the constant (what the user would use from Lua).
+ * @param value The constant's value.
+ * @param scopePath The list of containing classes, going inward from the most outer class.
+ * 
+ * @script{ignore}
+ */
+void registerConstantBool(const std::string& name, bool value, const std::vector<std::string>& scopePath);
+
+/**
+ * Registers the given number constant as valid for the given scope path.
+ * 
+ * @param name The name of the constant (what the user would use from Lua).
+ * @param value The constant's value.
+ * @param scopePath The list of containing classes, going inward from the most outer class.
+ * 
+ * @script{ignore}
+ */
+void registerConstantNumber(const std::string& name, double value, const std::vector<std::string>& scopePath);
+
+/**
+ * Registers the given string constant as valid for the given scope path.
+ * 
+ * @param name The name of the constant (what the user would use from Lua).
+ * @param value The constant's value.
+ * @param scopePath The list of containing classes, going inward from the most outer class.
+ * 
+ * @script{ignore}
+ */
+void registerConstantString(const std::string& name, const std::string& value, const std::vector<std::string>& scopePath);
+
+/**
+ * Registers the given class type with Lua.
+ * 
+ * @param name The name of the class from within Lua.
+ * @param members The library function mapping for all the member functions (Lua function names to C++ functions).
+ * @param newFunction The function to call that creates an instance of the class.
+ * @param deleteFunction The function to call that destroys an instance of the class.
+ * @param statics The library function mapping for all the static functions (Lua function names to C++ functions).
+ * @param scopePath For an inner class, this is a list of its containing classes, going inward from the most outer class.
+ * 
+ * @script{ignore}
+ */
+void registerClass(const char* name, const luaL_Reg* members, lua_CFunction newFunction, lua_CFunction deleteFunction, const luaL_Reg* statics,
+    const std::vector<std::string>& scopePath);
+
+/**
+ * Register a function with Lua.
+ * 
+ * @param luaFunction The name of the function from within Lua.
+ * @param cppFunction The C++ function pointer.
+ * 
+ * @script{ignore}
+ */
+void registerFunction(const char* luaFunction, lua_CFunction cppFunction);
+
+/**
+ * Sets an inheritance pair within the global inheritance hierarchy (base, derived).
+ * 
+ * @param base The base class of the inheritance pair.
+ * @param derived The derived class of the inheritance pair.
+ * 
+ * @script{ignore}
+ */
+void setGlobalHierarchyPair(const std::string& base, const std::string& derived);
+
+/**
+ * Adds the given function as a string-from-enumerated value conversion function.
+ * 
+ * @param stringFromEnum The pointer to the string-from-enum conversion function.
+ * 
+ * @script{ignore}
+ */
+void addStringFromEnumConversionFunction(luaStringEnumConversionFunction stringFromEnum);
+
+/**
+ * Gets a pointer to a bool (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<bool> getBoolPointer(int index);
+
+/**
+ * Gets a pointer to a short (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<short> getShortPointer(int index);
+
+/**
+ * Gets a pointer to an int (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<int> getIntPointer(int index);
+
+/**
+ * Gets a pointer to a long (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<long> getLongPointer(int index);
+
+/**
+ * Gets a pointer to an unsigned char (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<unsigned char> getUnsignedCharPointer(int index);
+
+/**
+ * Gets a pointer to an unsigned short (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<unsigned short> getUnsignedShortPointer(int index);
+
+/**
+ * Gets a pointer to an unsigned int (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<unsigned int> getUnsignedIntPointer(int index);
+
+/**
+ * Gets a pointer to an unsigned long (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<unsigned long> getUnsignedLongPointer(int index);
+
+/**
+ * Gets a pointer to a float (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<float> getFloatPointer(int index);
+
+/**
+ * Gets a pointer to a double (as an array-use SAFE_DELETE_ARRAY to clean up) for the given stack index.
+ * 
+ * @param index The stack index.
+ * 
+ * @return The pointer.
+ * 
+ * @script{ignore}
+ */
+LuaArray<double> getDoublePointer(int index);
+
+/**
+ * Gets an object pointer of the given type for the given stack index.
+ * 
+ * @param type The type of object pointer to retrieve.
+ * @param index The stack index.
+ * @param nonNull Whether the pointer must be non-null (e.g. if the parameter we 
+ *      are retrieving is actually a reference or by-value parameter).
+ * @param success An out parameter that is set to true if the Lua parameter was successfully
+ *      converted to a valid object, or false if it was unable to perform a valid conversion.
+ * 
+ * @return The object pointer or <code>NULL</code> if the data at the stack index
+ *      is not an object or if the object is not derived from the given type.
+ * 
+ * @script{ignore}
+ */
+template <typename T>
+LuaArray<T> getObjectPointer(int index, const char* type, bool nonNull, bool* success);
+
+/**
+ * Gets a string for the given stack index.
+ * 
+ * @param index The stack index.
+ * @param isStdString Whether the string being retrieved is a std::string object or not.
+ * 
+ * @return The string or <code>NULL</code>.
+ * 
+ * @script{ignore}
+ */
+const char* getString(int index, bool isStdString);
+
+/**
+ * Checks that the parameter at the given stack position is a boolean and returns it.
+ * 
+ * @param state The Lua state.
+ * @param n The stack index.
+ * 
+ * @return The boolean (if successful; otherwise it logs an error).
+ * 
+ * @script{ignore}
+ */
+bool luaCheckBool(lua_State* state, int n);
+
+}
+
+/**
+ * Controls and manages all scripts.
+ */
+class ScriptController
+{
+    friend class Game;
+    friend class Platform;
+
+public:
+
+    /**
+     * Loads the given script file and executes its global code.
+     * 
+     * @param path The path to the script.
+     * @param forceReload Whether the script should be reloaded if it has already been loaded.
+     */
+    void loadScript(const char* path, bool forceReload = false);
+
+    /**
+     * Given a URL, loads the referenced file and returns the referenced function name.
+     * 
+     * @param url The url to load.
+     * 
+     * @return The function that the URL references.
+     */
+    std::string loadUrl(const char* url);
+
+    /**
+     * Registers the given script callback.
+     *
+     * The 'callback' parameter must be one of the supported global callback
+     * event functions. The following strings are accepted: initialize, finalize,
+     * update, render, resizeEvent, keyEvent, touchEvent, mouseEvent, gamepadEvent.
+     * Signatures for the registered script function must match that of the
+     * corresponding signatures of these events on the Game class.
+     *
+     * @param callback The script callback to register for.
+     * @param function The name of the script function to register.
+     */
+    void registerCallback(const char* callback, const char* function);
+
+    /**
+     * Unregisters the given script callback.
+     *
+     * @param callback The script callback to unregister for.
+     * @param function The name of the script function to unregister.
+     *
+     * @see registerCallback(const char*, const char*)
+     */
+    void unregisterCallback(const char* callback, const char* function);
+
+    /**
+     * Calls the specified no-parameter Lua function.
+     * 
+     * @param func The name of the function to call.
+     * 
+     * @return The return value of the executed Lua function.
+     */
+    template<typename T> T executeFunction(const char* func);
+
+    /**
+     * Calls the specified Lua function using the given parameters.
+     * 
+     * @param func The name of the function to call.
+     * @param args The argument signature of the function. Of the form 'xxx', where each 'x' is a parameter type and must be one of:
+     *      - 'b' - bool
+     *      - 'c' - char
+     *      - 'h' - short
+     *      - 'i' - int
+     *      - 'l' - long
+     *      - 'f' - float
+     *      - 'd' - double
+     *      - 'ui' - unsigned int
+     *      - 'ul' - unsigned long
+     *      - 'uc' - unsigned char
+     *      - 'uh' - unsigned short
+     *      - 's' - string
+     *      - 'p' - pointer
+     *      - '<object-type>' - a <b>pointer</b> to an object of the given type (where the qualified type name is enclosed by angle brackets).
+     *      - '[enum-type]' - an enumerated value of the given type (where the qualified type name is enclosed by square brackets).
+     * 
+     * @return The return value of the executed Lua function.
+     */
+    template<typename T> T executeFunction(const char* func, const char* args, ...);
+
+    /**
+     * Calls the specified Lua function using the given parameters.
+     * 
+     * @param func The name of the function to call.
+     * @param args The argument signature of the function. Of the form 'xxx', where each 'x' is a parameter type and must be one of:
+     *      - 'b' - bool
+     *      - 'c' - char
+     *      - 'h' - short
+     *      - 'i' - int
+     *      - 'l' - long
+     *      - 'f' - float
+     *      - 'd' - double
+     *      - 'ui' - unsigned int
+     *      - 'ul' - unsigned long
+     *      - 'uc' - unsigned char
+     *      - 'uh' - unsigned short
+     *      - 's' - string
+     *      - 'p' - pointer
+     *      - '<object-type>' - a <b>pointer</b> to an object of the given type (where the qualified type name is enclosed by angle brackets).
+     *      - '[enum-type]' - an enumerated value of the given type (where the qualified type name is enclosed by square brackets).
+     * @param list The variable argument list containing the function's parameters.
+     * 
+     * @return The return value of the executed Lua function.
+     */
+    template<typename T> T executeFunction(const char* func, const char* args, va_list* list);
+
+    /**
+     * Gets the global boolean script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a bool.
+     * 
+     * @return The global boolean script variable.
+     * 
+     * @script{ignore}
+     */
+    bool getBool(const char* name, bool defaultValue = false);
+
+    /**
+     * Gets the global char script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global char script variable.
+     * 
+     * @script{ignore}
+     */
+    char getChar(const char* name, char defaultValue = 0);
+
+    /**
+     * Gets the global short script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global short script variable.
+     * 
+     * @script{ignore}
+     */
+    short getShort(const char* name, short defaultValue = 0);
+
+    /**
+     * Gets the global int script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global int script variable.
+     * 
+     * @script{ignore}
+     */
+    int getInt(const char* name, int defaultValue = 0);
+
+    /**
+     * Gets the global long script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global long script variable.
+     * 
+     * @script{ignore}
+     */
+    long getLong(const char* name, long defaultValue = 0);
+
+    /**
+     * Gets the global unsigned char script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global unsigned char script variable.
+     * 
+     * @script{ignore}
+     */
+    unsigned char getUnsignedChar(const char* name, unsigned char defaultValue = 0);
+
+    /**
+     * Gets the global unsigned short script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global unsigned short script variable.
+     * 
+     * @script{ignore}
+     */
+    unsigned short getUnsignedShort(const char* name, unsigned short defaultValue = 0);
+
+    /**
+     * Gets the global unsigned int script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global unsigned int script variable.
+     * 
+     * @script{ignore}
+     */
+    unsigned int getUnsignedInt(const char* name, unsigned int defaultValue = 0);
+
+    /**
+     * Gets the global unsigned long script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global unsigned long script variable.
+     * 
+     * @script{ignore}
+     */
+    unsigned long getUnsignedLong(const char* name, unsigned long defaultValue = 0);
+
+    /**
+     * Gets the global float script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global float script variable.
+     * 
+     * @script{ignore}
+     */
+    float getFloat(const char* name, float defaultValue = 0);
+
+    /**
+     * Gets the global double script variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * @param defaultValue The default value to return if the variable is not a number.
+     * 
+     * @return The global double script variable.
+     * 
+     * @script{ignore}
+     */
+    double getDouble(const char* name, double defaultValue = 0);
+
+    /**
+     * Gets the global string variable with the given name.
+     * 
+     * @param name The name of the variable.
+     * 
+     * @return The string variable or NULL if the variable is not a string.
+     * 
+     * @script{ignore}
+     */
+    const char* getString(const char* name);
+
+    /**
+     * Gets the global pointer script variable of the given type with the given name.
+     * 
+     * @param type The type of the variable in Lua.
+     * @param name The name of the variable.
+     * 
+     * @return The global pointer script variable.
+     * 
+     * @script{ignore}
+     */
+    template<typename T>T* getObjectPointer(const char* type, const char* name);
+
+    /**
+     * Sets the global boolean script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The boolean value.
+     * 
+     * @script{ignore}
+     */
+    void setBool(const char* name, bool v);
+
+    /**
+     * Sets the global char script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The char value.
+     * 
+     * @script{ignore}
+     */
+    void setChar(const char* name, char v);
+
+    /**
+     * Sets the global short script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The short value.
+     * 
+     * @script{ignore}
+     */
+    void setShort(const char* name, short v);
+
+    /**
+     * Sets the global int script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The int value.
+     * 
+     * @script{ignore}
+     */
+    void setInt(const char* name, int v);
+
+    /**
+     * Sets the global long script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The long value.
+     * 
+     * @script{ignore}
+     */
+    void setLong(const char* name, long v);
+
+    /**
+     * Gets the global unsigned char script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The unsigned char value.
+     * 
+     * @script{ignore}
+     */
+    void setUnsignedChar(const char* name, unsigned char v);
+
+    /**
+     * Sets the global unsigned short script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The unsigned short value.
+     * 
+     * @script{ignore}
+     */
+    void setUnsignedShort(const char* name, unsigned short v);
+
+    /**
+     * Sets the global unsigned int script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The unsigned int value.
+     * 
+     * @script{ignore}
+     */
+    void setUnsignedInt(const char* name, unsigned int v);
+
+    /**
+     * Sets the global unsigned long script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The unsigned long value.
+     * 
+     * @script{ignore}
+     */
+    void setUnsignedLong(const char* name, unsigned long v);
+
+    /**
+     * Sets the global float script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The float value.
+     * 
+     * @script{ignore}
+     */
+    void setFloat(const char* name, float v);
+
+    /**
+     * Sets the global double script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The double value.
+     * 
+     * @script{ignore}
+     */
+    void setDouble(const char* name, double v);
+
+    /**
+     * Sets the global string script variable with the given name to the given value.
+     * 
+     * @param name The name of the script variable.
+     * @param v The string value.
+     * 
+     * @script{ignore}
+     */
+    void setString(const char* name, const char* v);
+
+    /**
+     * Sets the global pointer script variable of the given type with the given name to the given value.
+     * 
+     * @param type The type of the script variable.
+     * @param name The name of the variable.
+     * @param v The pointer value.
+     * 
+     * @script{ignore}
+     */
+    template<typename T>void setObjectPointer(const char* type, const char* name, T* v);
+
+    /**
+     * Prints the string to the platform's output stream or log file.
+     * Used for overriding Lua's print function.
+     * 
+     * @param str The string to print.
+     */
+    static void print(const char* str);
+
+    /**
+     * Prints the strings to the platform's output stream or log file.
+     * Used for overriding Lua's print function.
+     * 
+     * @param str1 The first string to print.
+     * @param str2 The second string to print on the same line as str1.
+     */
+    static void print(const char* str1, const char* str2);
+
+private:
+
+    /**
+     * Represents a callback function that can be registered for.
+     */
+    enum ScriptCallback
+    {
+        INITIALIZE = 0,
+        UPDATE,
+        RENDER,
+        FINALIZE,
+        RESIZE_EVENT,
+        KEY_EVENT,
+        MOUSE_EVENT,
+        TOUCH_EVENT,
+        GESTURE_SWIPE_EVENT,
+        GESTURE_PINCH_EVENT,
+        GESTURE_TAP_EVENT,
+        GAMEPAD_EVENT,
+        CALLBACK_COUNT,
+        INVALID_CALLBACK = CALLBACK_COUNT
+    };
+
+    /**
+     * Constructor.
+     */
+    ScriptController();
+
+    /**
+     * Copy constructor.
+     */
+    ScriptController(const ScriptController& copy);
+
+    /**
+     * Destructor.
+     */
+    ~ScriptController();
+
+    /**
+     * Callback for when the controller is initialized.
+     */
+    void initialize();
+
+    /**
+     * Initializes the game using the appropriate callback script (if it was specified).
+     */
+    void initializeGame();
+
+    /*
+     * Callback for when the controller is finalized.
+     */
+    void finalize();
+
+    /**
+     * Finalizes the game using the appropriate callback script (if it was specified).
+     */
+    void finalizeGame();
+    
+    /**
+     * Callback for when the controller receives a frame update event.
+     */
+    void update(float elapsedTime);
+
+    /**
+     * Renders the game using the appropriate callback script (if it was specified).
+     */
+    void render(float elapsedTime);
+
+    /**
+     * Script callback for game resize events.
+     *
+     * @param width The new width of the game window content area.
+     * @param height The new height of the game window content area.
+     */
+    void resizeEvent(unsigned int width, unsigned int height);
+
+    /**
+     * Script keyboard callback on key events.
+     *
+     * @param evt The key event that occurred.
+     * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
+     *            If evt is KEY_CHAR then key is the unicode value of the character.
+     * 
+     * @see Keyboard::KeyEvent
+     * @see Keyboard::Key
+     */
+    void keyEvent(Keyboard::KeyEvent evt, int key);
+
+    /**
+     * Script touch callback on touch events.
+     *
+     * @param evt The touch event that occurred.
+     * @param x The x position of the touch in pixels. Left edge is zero.
+     * @param y The y position of the touch in pixels. Top edge is zero.
+     * @param contactIndex The order of occurrence for multiple touch contacts starting at zero.
+     *
+     * @see Touch::TouchEvent
+     */
+    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
+
+    /**
+     * Script mouse callback on mouse events. If the game does not consume the mouse move event or left mouse click event
+     * then it is interpreted as a touch event instead.
+     *
+     * @param evt The mouse event that occurred.
+     * @param x The x position of the mouse in pixels. Left edge is zero.
+     * @param y The y position of the mouse in pixels. Top edge is zero.
+     * @param wheelDelta The number of mouse wheel ticks. Positive is up (forward), negative is down (backward).
+     *
+     * @return True if the mouse event is consumed or false if it is not consumed.
+     *
+     * @see Mouse::MouseEvent
+     */
+    bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
+
+    /**
+     * Script callback for Gesture::SWIPE events.
+     *
+     * @param x The x-coordinate of the start of the swipe.
+     * @param y The y-coordinate of the start of the swipe.
+     * @param direction The direction of the swipe
+     *
+     * @see Gesture::SWIPE_DIRECTION_UP
+     * @see Gesture::SWIPE_DIRECTION_DOWN
+     * @see Gesture::SWIPE_DIRECTION_LEFT
+     * @see Gesture::SWIPE_DIRECTION_RIGHT
+     */
+    void gestureSwipeEvent(int x, int y, int direction);
+
+    /**
+     * Script callback for Gesture::PINCH events.
+     *
+     * @param x The centroid x-coordinate of the pinch.
+     * @param y The centroid y-coordinate of the pinch.
+     * @param scale The scale of the pinch.
+     */
+    void gesturePinchEvent(int x, int y, float scale);
+
+    /**
+     * Script callback for Gesture::TAP events.
+     *
+     * @param x The x-coordinate of the tap.
+     * @param y The y-coordinate of the tap.
+     */
+    void gestureTapEvent(int x, int y);
+
+	/**
+	 * Gesture callback on Gesture::LONG_TAP events.
+	 *
+	 * @param x The x-coordinate of the long tap.
+	 * @param y The y-coordinate of the long tap.
+	 * @param duration The duration of the long tap in ms.
+	 */
+	void gestureLongTapEvent(int x, int y, float duration);
+
+	/**
+	 * Gesture callback on Gesture::DRAG events.
+	 *
+	 * @param x The x-coordinate of the start of the drag event.
+	 * @param y The y-coordinate of the start of the drag event.
+	 */
+	void gestureDragEvent(int x, int y);
+
+	/**
+	 * Gesture callback on Gesture::DROP events.
+	 *
+	 * @param x The x-coordinate of the drop event.
+	 * @param y The y-coordinate of the drop event.
+	 */
+	void gestureDropEvent(int x, int y);
+
+    /**
+     * Script gamepad callback on gamepad events.
+     *
+     * @param evt The gamepad event that occurred.
+     * @param gamepad the gamepad the event occurred on
+     */
+    void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex = 0);
+
+    /**
+     * Calls the specified Lua function using the given parameters.
+     * 
+     * @param resultCount The expected number of returned values.
+     * @param func The name of the function to call.
+     * @param args The argument signature of the function, as a string of the form
+     *      'xxx', where each 'x' is a parameter type and must be one of:
+     *      - 'b' - bool
+     *      - 'c' - char
+     *      - 'h' - short
+     *      - 'i' - int
+     *      - 'l' - long
+     *      - 'f' - float
+     *      - 'd' - double
+     *      - 'ui' - unsigned int
+     *      - 'ul' - unsigned long
+     *      - 'uc' - unsigned char
+     *      - 'uh' - unsigned short
+     *      - 's' - string
+     *      - 'p' - pointer
+     *      - '<object-type>' - a <b>pointer</b> to an object of the given type (where the qualified type name is enclosed by angle brackets).
+     *      - '[enum-type]' - an enumerated value of the given type (where the qualified type name is enclosed by square brackets).
+     * @param list The variable argument list.
+     */
+    void executeFunctionHelper(int resultCount, const char* func, const char* args, va_list* list);
+
+    /**
+     * Converts the given string to a valid script callback enumeration value
+     * or to ScriptController::INVALID_CALLBACK if there is no valid conversion.
+     * 
+     * @param name The name of the callback.
+     * 
+     * @return The corresponding callback enumeration value.
+     */
+    static ScriptController::ScriptCallback toCallback(const char* name);
+
+    /**
+     * Converts a Gameplay userdata value to the type with the given class name.
+     * This function will change the metatable of the userdata value to the metatable that matches the given string.
+     * 
+     * Example:
+     * <code>
+     * local launchButton = form:getControl("launch")
+     * convert(launchButton, "Button")
+     * print("Button text: " .. launchButton:getText())
+     * </code>
+     * 
+     * <code>
+     * -- The signature of the lua function:
+     * -- param: object    A userdata object that represents a Gameplay object.
+     * -- param: className The name of the class to convert the object to. (Examples: "Button", "PhysicsRigidBody")
+     * function convert(object, className)
+     * </code>
+     * 
+     * @param state The Lua state.
+     * 
+     * @return The number of values being returned by this function.
+     * 
+     * @script{ignore}
+     */
+    static int convert(lua_State* state);
+
+    // Friend functions (used by Lua script bindings).
+    friend void ScriptUtil::registerLibrary(const char* name, const luaL_Reg* functions);
+    friend void ScriptUtil::registerConstantBool(const std::string& name, bool value, const std::vector<std::string>& scopePath);
+    friend void ScriptUtil::registerConstantNumber(const std::string& name, double value, const std::vector<std::string>& scopePath);
+    friend void ScriptUtil::registerConstantString(const std::string& name, const std::string& value, const std::vector<std::string>& scopePath);
+    friend void ScriptUtil::registerClass(const char* name, const luaL_Reg* members, lua_CFunction newFunction,
+        lua_CFunction deleteFunction, const luaL_Reg* statics, const std::vector<std::string>& scopePath);
+    friend void ScriptUtil::registerFunction(const char* luaFunction, lua_CFunction cppFunction);
+    friend void ScriptUtil::setGlobalHierarchyPair(const std::string& base, const std::string& derived);
+    friend void ScriptUtil::addStringFromEnumConversionFunction(luaStringEnumConversionFunction stringFromEnum);
+    friend ScriptUtil::LuaArray<bool> ScriptUtil::getBoolPointer(int index);
+    friend ScriptUtil::LuaArray<short> ScriptUtil::getShortPointer(int index);
+    friend ScriptUtil::LuaArray<int> ScriptUtil::getIntPointer(int index);
+    friend ScriptUtil::LuaArray<long> ScriptUtil::getLongPointer(int index);
+    friend ScriptUtil::LuaArray<unsigned char> ScriptUtil::getUnsignedCharPointer(int index);
+    friend ScriptUtil::LuaArray<unsigned short> ScriptUtil::getUnsignedShortPointer(int index);
+    friend ScriptUtil::LuaArray<unsigned int> ScriptUtil::getUnsignedIntPointer(int index);
+    friend ScriptUtil::LuaArray<unsigned long> ScriptUtil::getUnsignedLongPointer(int index);
+    friend ScriptUtil::LuaArray<float> ScriptUtil::getFloatPointer(int index);
+    friend ScriptUtil::LuaArray<double> ScriptUtil::getDoublePointer(int index);
+    template<typename T> friend ScriptUtil::LuaArray<T> ScriptUtil::getObjectPointer(int index, const char* type, bool nonNull, bool* success);
+    friend const char* ScriptUtil::getString(int index, bool isStdString);
+
+    lua_State* _lua;
+    unsigned int _returnCount;
+    std::map<std::string, std::vector<std::string> > _hierarchy;
+    std::vector<std::string> _callbacks[CALLBACK_COUNT];
+    std::set<std::string> _loadedScripts;
+    std::vector<luaStringEnumConversionFunction> _stringFromEnum;
+};
+
+/** Template specialization. */
+template<> void ScriptController::executeFunction<void>(const char* func);
+/** Template specialization. */
+template<> bool ScriptController::executeFunction<bool>(const char* func);
+/** Template specialization. */
+template<> char ScriptController::executeFunction<char>(const char* func);
+/** Template specialization. */
+template<> short ScriptController::executeFunction<short>(const char* func);
+/** Template specialization. */
+template<> int ScriptController::executeFunction<int>(const char* func);
+/** Template specialization. */
+template<> long ScriptController::executeFunction<long>(const char* func);
+/** Template specialization. */
+template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func);
+/** Template specialization. */
+template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func);
+/** Template specialization. */
+template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func);
+/** Template specialization. */
+template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func);
+/** Template specialization. */
+template<> float ScriptController::executeFunction<float>(const char* func);
+/** Template specialization. */
+template<> double ScriptController::executeFunction<double>(const char* func);
+/** Template specialization. */
+template<> std::string ScriptController::executeFunction<std::string>(const char* func);
+
+/** Template specialization. */
+template<> void ScriptController::executeFunction<void>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> char ScriptController::executeFunction<char>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> short ScriptController::executeFunction<short>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> int ScriptController::executeFunction<int>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> long ScriptController::executeFunction<long>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> float ScriptController::executeFunction<float>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> double ScriptController::executeFunction<double>(const char* func, const char* args, ...);
+/** Template specialization. */
+template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, ...);
+
+/** Template specialization. */
+template<> void ScriptController::executeFunction<void>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> bool ScriptController::executeFunction<bool>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> char ScriptController::executeFunction<char>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> short ScriptController::executeFunction<short>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> int ScriptController::executeFunction<int>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> long ScriptController::executeFunction<long>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> unsigned char ScriptController::executeFunction<unsigned char>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> unsigned short ScriptController::executeFunction<unsigned short>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> unsigned int ScriptController::executeFunction<unsigned int>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> unsigned long ScriptController::executeFunction<unsigned long>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> float ScriptController::executeFunction<float>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> double ScriptController::executeFunction<double>(const char* func, const char* args, va_list* list);
+/** Template specialization. */
+template<> std::string ScriptController::executeFunction<std::string>(const char* func, const char* args, va_list* list);
+
+}
+
+#include "ScriptController.inl"
+
+#endif

+ 219 - 219
samples/browser/src/GestureSample.cpp

@@ -1,219 +1,219 @@
-#include "GestureSample.h"
-#include "SamplesGame.h"
-
-#include <sstream>
-
-// Linux and windows don't support gestures right now
-#if defined(__ANDROID__) || defined(__APPLE__) || defined(__QNX__)
-#if defined(ADD_SAMPLE)
-    ADD_SAMPLE("Input", "Gestures", GestureSample, 2);
-#endif
-#endif
-
-GestureSample::GestureSample()
-    : _font(NULL)
-{
-}
-
-void GestureSample::initialize()
-{
-    setMultiTouch(true);
-
-    // Load font
-    _font = Font::create("res/common/arial.gpb");
-    assert(_font);
-
-    bool anySupported = false;
-    if (isGestureSupported(Gesture::GESTURE_TAP))
-    {
-        anySupported = true;
-        registerGesture(Gesture::GESTURE_TAP);
-        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_TAP));
-    }
-    if (isGestureSupported(Gesture::GESTURE_SWIPE))
-    {
-        anySupported = true;
-        registerGesture(Gesture::GESTURE_SWIPE);
-        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_SWIPE));
-    }
-    if (isGestureSupported(Gesture::GESTURE_PINCH))
-    {
-        anySupported = true;
-        registerGesture(Gesture::GESTURE_PINCH);
-        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_PINCH));
-    }
-	if (isGestureSupported(Gesture::GESTURE_LONG_TAP))
-	{
-        anySupported = true;
-        registerGesture(Gesture::GESTURE_LONG_TAP);
-        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_LONG_TAP));
-	}
-	if (isGestureSupported(Gesture::GESTURE_DRAG))
-	{
-        anySupported = true;
-        registerGesture(Gesture::GESTURE_DRAG);
-        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_DRAG));
-	}
-	if (isGestureSupported(Gesture::GESTURE_DROP))
-	{
-        anySupported = true;
-        registerGesture(Gesture::GESTURE_DROP);
-        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_DROP));
-	}
-    GP_ASSERT(anySupported == isGestureSupported(Gesture::GESTURE_ANY_SUPPORTED));
-}
-
-void GestureSample::finalize()
-{
-    SAFE_RELEASE(_font);
-
-    unregisterGesture(Gesture::GESTURE_TAP);
-    unregisterGesture(Gesture::GESTURE_SWIPE);
-    unregisterGesture(Gesture::GESTURE_PINCH);
-	unregisterGesture(Gesture::GESTURE_LONG_TAP);
-	unregisterGesture(Gesture::GESTURE_DRAG);
-	unregisterGesture(Gesture::GESTURE_DROP);
-}
-
-void GestureSample::update(float elapsedTime)
-{
-}
-
-void GestureSample::render(float elapsedTime)
-{
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-
-    // Draw text
-    Vector4 fontColor(1.0f, 1.0f, 1.0f, 1.0f);
-
-    _font->start();
-    int y = 0;
-    size_t count = 0;
-    for (std::list<std::string>::const_iterator it = _eventLog.begin(); it != _eventLog.end(); ++it)
-    {
-        ++count;
-        _font->drawText(it->c_str(), 0, y, fontColor, _font->getSize());
-        y += _font->getSize();
-
-        if (y > (int)getHeight())
-        {
-            _eventLog.resize(count);
-            break;
-        }
-    }
-    
-    int x = getWidth() - 200;
-    y = getHeight() - _font->getSize() * 6;
-
-    if (isGestureSupported(Gesture::GESTURE_TAP))
-    {
-        _font->drawText("Tap supported", x, y, fontColor, _font->getSize());
-        y += _font->getSize();
-    }
-    if (isGestureSupported(Gesture::GESTURE_SWIPE))
-    {
-        _font->drawText("Swipe supported", x, y, fontColor, _font->getSize());
-        y += _font->getSize();
-    }
-    if (isGestureSupported(Gesture::GESTURE_PINCH))
-    {
-        _font->drawText("Pinch supported", x, y, fontColor, _font->getSize());
-        y += _font->getSize();
-    }
-    if (isGestureSupported(Gesture::GESTURE_LONG_TAP))
-    {
-        _font->drawText("Long tap supported", x, y, fontColor, _font->getSize());
-        y += _font->getSize();
-    }
-    if (isGestureSupported(Gesture::GESTURE_DRAG))
-    {
-        _font->drawText("Drag supported", x, y, fontColor, _font->getSize());
-        y += _font->getSize();
-    }
-    if (isGestureSupported(Gesture::GESTURE_DROP))
-    {
-        _font->drawText("Drop supported", x, y, fontColor, _font->getSize());
-        y += _font->getSize();
-    }
-
-    _font->finish();
-}
-
-void GestureSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        if (x < 30 && y < 30)
-        {
-            displayKeyboard(true);
-        }
-        break;
-    case Touch::TOUCH_RELEASE:
-        break;
-    case Touch::TOUCH_MOVE:
-        break;
-    };
-}
-
-void GestureSample::gestureSwipeEvent(int x, int y, int direction)
-{
-    std::ostringstream convert;
-    convert << "Swipe (";
-
-    if (direction & Gesture::SWIPE_DIRECTION_UP)
-    {
-        convert << "U";
-    }
-    if (direction & Gesture::SWIPE_DIRECTION_DOWN)
-    {
-        convert << "D";
-    }
-    if (direction & Gesture::SWIPE_DIRECTION_LEFT)
-    {
-        convert << "L";
-    }
-    if (direction & Gesture::SWIPE_DIRECTION_RIGHT)
-    {
-        convert << "R";
-    }
-    convert << ") " << x << ", " << y;
-    _eventLog.push_front(convert.str());
-}
-   
-void GestureSample::gesturePinchEvent(int x, int y, float scale)
-{
-    std::ostringstream convert;
-    convert << "Pinch " << x << ", " << y << " scale(" << scale << ")";
-    _eventLog.push_front(convert.str());
-}
-
-void GestureSample::gestureTapEvent(int x, int y)
-{
-    std::ostringstream convert;
-    convert << "Tap " << x << ", " << y;
-    _eventLog.push_front(convert.str());
-}
-
-void GestureSample::gestureLongTapEvent(int x, int y, float duration)
-{
-    std::ostringstream convert;
-    convert << "Long tap " << x << ", " << y << " (" << duration << "ms)";
-    _eventLog.push_front(convert.str());
-}
-
-void GestureSample::gestureDragEvent(int x, int y)
-{
-    std::ostringstream convert;
-    convert << "Drag " << x << ", " << y;
-    _eventLog.push_front(convert.str());
-}
-
-void GestureSample::gestureDropEvent(int x, int y)
-{
-    std::ostringstream convert;
-    convert << "Drop " << x << ", " << y;
-    _eventLog.push_front(convert.str());
-}
-
+#include "GestureSample.h"
+#include "SamplesGame.h"
+
+#include <sstream>
+
+// Linux and windows don't support gestures right now
+#if defined(__ANDROID__) || defined(__APPLE__) || defined(__QNX__)
+#if defined(ADD_SAMPLE)
+    ADD_SAMPLE("Input", "Gestures", GestureSample, 2);
+#endif
+#endif
+
+GestureSample::GestureSample()
+    : _font(NULL)
+{
+}
+
+void GestureSample::initialize()
+{
+    setMultiTouch(true);
+
+    // Load font
+    _font = Font::create("res/common/arial.gpb");
+    assert(_font);
+
+    bool anySupported = false;
+    if (isGestureSupported(Gesture::GESTURE_TAP))
+    {
+        anySupported = true;
+        registerGesture(Gesture::GESTURE_TAP);
+        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_TAP));
+    }
+    if (isGestureSupported(Gesture::GESTURE_SWIPE))
+    {
+        anySupported = true;
+        registerGesture(Gesture::GESTURE_SWIPE);
+        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_SWIPE));
+    }
+    if (isGestureSupported(Gesture::GESTURE_PINCH))
+    {
+        anySupported = true;
+        registerGesture(Gesture::GESTURE_PINCH);
+        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_PINCH));
+    }
+	if (isGestureSupported(Gesture::GESTURE_LONG_TAP))
+	{
+        anySupported = true;
+        registerGesture(Gesture::GESTURE_LONG_TAP);
+        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_LONG_TAP));
+	}
+	if (isGestureSupported(Gesture::GESTURE_DRAG))
+	{
+        anySupported = true;
+        registerGesture(Gesture::GESTURE_DRAG);
+        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_DRAG));
+	}
+	if (isGestureSupported(Gesture::GESTURE_DROP))
+	{
+        anySupported = true;
+        registerGesture(Gesture::GESTURE_DROP);
+        GP_ASSERT(isGestureRegistered(Gesture::GESTURE_DROP));
+	}
+    GP_ASSERT(anySupported == isGestureSupported(Gesture::GESTURE_ANY_SUPPORTED));
+}
+
+void GestureSample::finalize()
+{
+    SAFE_RELEASE(_font);
+
+    unregisterGesture(Gesture::GESTURE_TAP);
+    unregisterGesture(Gesture::GESTURE_SWIPE);
+    unregisterGesture(Gesture::GESTURE_PINCH);
+	unregisterGesture(Gesture::GESTURE_LONG_TAP);
+	unregisterGesture(Gesture::GESTURE_DRAG);
+	unregisterGesture(Gesture::GESTURE_DROP);
+}
+
+void GestureSample::update(float elapsedTime)
+{
+}
+
+void GestureSample::render(float elapsedTime)
+{
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+
+    // Draw text
+    Vector4 fontColor(1.0f, 1.0f, 1.0f, 1.0f);
+
+    _font->start();
+    int y = 0;
+    size_t count = 0;
+    for (std::list<std::string>::const_iterator it = _eventLog.begin(); it != _eventLog.end(); ++it)
+    {
+        ++count;
+        _font->drawText(it->c_str(), 0, y, fontColor, _font->getSize());
+        y += _font->getSize();
+
+        if (y > (int)getHeight())
+        {
+            _eventLog.resize(count);
+            break;
+        }
+    }
+    
+    int x = getWidth() - 200;
+    y = getHeight() - _font->getSize() * 6;
+
+    if (isGestureSupported(Gesture::GESTURE_TAP))
+    {
+        _font->drawText("Tap supported", x, y, fontColor, _font->getSize());
+        y += _font->getSize();
+    }
+    if (isGestureSupported(Gesture::GESTURE_SWIPE))
+    {
+        _font->drawText("Swipe supported", x, y, fontColor, _font->getSize());
+        y += _font->getSize();
+    }
+    if (isGestureSupported(Gesture::GESTURE_PINCH))
+    {
+        _font->drawText("Pinch supported", x, y, fontColor, _font->getSize());
+        y += _font->getSize();
+    }
+    if (isGestureSupported(Gesture::GESTURE_LONG_TAP))
+    {
+        _font->drawText("Long tap supported", x, y, fontColor, _font->getSize());
+        y += _font->getSize();
+    }
+    if (isGestureSupported(Gesture::GESTURE_DRAG))
+    {
+        _font->drawText("Drag supported", x, y, fontColor, _font->getSize());
+        y += _font->getSize();
+    }
+    if (isGestureSupported(Gesture::GESTURE_DROP))
+    {
+        _font->drawText("Drop supported", x, y, fontColor, _font->getSize());
+        y += _font->getSize();
+    }
+
+    _font->finish();
+}
+
+void GestureSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        if (x < 30 && y < 30)
+        {
+            displayKeyboard(true);
+        }
+        break;
+    case Touch::TOUCH_RELEASE:
+        break;
+    case Touch::TOUCH_MOVE:
+        break;
+    };
+}
+
+void GestureSample::gestureSwipeEvent(int x, int y, int direction)
+{
+    std::ostringstream convert;
+    convert << "Swipe (";
+
+    if (direction & Gesture::SWIPE_DIRECTION_UP)
+    {
+        convert << "U";
+    }
+    if (direction & Gesture::SWIPE_DIRECTION_DOWN)
+    {
+        convert << "D";
+    }
+    if (direction & Gesture::SWIPE_DIRECTION_LEFT)
+    {
+        convert << "L";
+    }
+    if (direction & Gesture::SWIPE_DIRECTION_RIGHT)
+    {
+        convert << "R";
+    }
+    convert << ") " << x << ", " << y;
+    _eventLog.push_front(convert.str());
+}
+   
+void GestureSample::gesturePinchEvent(int x, int y, float scale)
+{
+    std::ostringstream convert;
+    convert << "Pinch " << x << ", " << y << " scale(" << scale << ")";
+    _eventLog.push_front(convert.str());
+}
+
+void GestureSample::gestureTapEvent(int x, int y)
+{
+    std::ostringstream convert;
+    convert << "Tap " << x << ", " << y;
+    _eventLog.push_front(convert.str());
+}
+
+void GestureSample::gestureLongTapEvent(int x, int y, float duration)
+{
+    std::ostringstream convert;
+    convert << "Long tap " << x << ", " << y << " (" << duration << "ms)";
+    _eventLog.push_front(convert.str());
+}
+
+void GestureSample::gestureDragEvent(int x, int y)
+{
+    std::ostringstream convert;
+    convert << "Drag " << x << ", " << y;
+    _eventLog.push_front(convert.str());
+}
+
+void GestureSample::gestureDropEvent(int x, int y)
+{
+    std::ostringstream convert;
+    convert << "Drop " << x << ", " << y;
+    _eventLog.push_front(convert.str());
+}
+

+ 48 - 48
samples/browser/src/GestureSample.h

@@ -1,48 +1,48 @@
-#ifndef GESTURESAMPLE_H_
-#define GESTURESAMPLE_H_
-
-#include "gameplay.h"
-#include "Sample.h"
-
-using namespace gameplay;
-
-/**
- * Samples gestures.
- */
-class GestureSample : public Sample
-{
-public:
-
-    GestureSample();
-
-    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
-
-    void gestureSwipeEvent(int x, int y, int direction);
-    
-    void gesturePinchEvent(int x, int y, float scale);
-    
-    void gestureTapEvent(int x, int y);
-
-	void gestureLongTapEvent(int x, int y, float duration);
-
-	void gestureDragEvent(int x, int y);
-	
-	void gestureDropEvent(int x, int y);
-
-protected:
-
-    void initialize();
-
-    void finalize();
-
-    void update(float elapsedTime);
-
-    void render(float elapsedTime);
-
-private:
-
-    Font* _font;
-    std::list<std::string> _eventLog;
-};
-
-#endif
+#ifndef GESTURESAMPLE_H_
+#define GESTURESAMPLE_H_
+
+#include "gameplay.h"
+#include "Sample.h"
+
+using namespace gameplay;
+
+/**
+ * Samples gestures.
+ */
+class GestureSample : public Sample
+{
+public:
+
+    GestureSample();
+
+    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
+
+    void gestureSwipeEvent(int x, int y, int direction);
+    
+    void gesturePinchEvent(int x, int y, float scale);
+    
+    void gestureTapEvent(int x, int y);
+
+	void gestureLongTapEvent(int x, int y, float duration);
+
+	void gestureDragEvent(int x, int y);
+	
+	void gestureDropEvent(int x, int y);
+
+protected:
+
+    void initialize();
+
+    void finalize();
+
+    void update(float elapsedTime);
+
+    void render(float elapsedTime);
+
+private:
+
+    Font* _font;
+    std::list<std::string> _eventLog;
+};
+
+#endif

+ 273 - 273
samples/browser/src/Sample.cpp

@@ -1,273 +1,273 @@
-#include "Sample.h"
-#include "SamplesGame.h"
-
-const Game::State& Sample::UNINITIALIZED = Game::UNINITIALIZED;
-const Game::State& Sample::RUNNING = Game::RUNNING;
-const Game::State& Sample::PAUSED = Game::PAUSED;
-
-const Game::ClearFlags& Sample::CLEAR_COLOR = Game::CLEAR_COLOR;
-const Game::ClearFlags& Sample::CLEAR_DEPTH = Game::CLEAR_DEPTH;
-const Game::ClearFlags& Sample::CLEAR_STENCIL = Game::CLEAR_STENCIL;
-const Game::ClearFlags& Sample::CLEAR_COLOR_DEPTH = Game::CLEAR_COLOR_DEPTH;
-const Game::ClearFlags& Sample::CLEAR_COLOR_STENCIL = Game::CLEAR_COLOR_STENCIL;
-const Game::ClearFlags& Sample::CLEAR_DEPTH_STENCIL = Game::CLEAR_DEPTH_STENCIL;
-const Game::ClearFlags& Sample::CLEAR_COLOR_DEPTH_STENCIL = Game::CLEAR_COLOR_DEPTH_STENCIL;
-
-Sample::Sample()
-{
-}
-
-Sample::~Sample()
-{
-	enableScriptCamera(false);
-}
-
-bool Sample::isVsync()
-{
-    return Game::isVsync();
-}
-
-void Sample::setVsync(bool enable)
-{
-    Game::setVsync(enable);
-}
-
-long Sample::getAbsoluteTime()
-{
-    return Game::getAbsoluteTime();
-}
-
-long Sample::getGameTime()
-{
-    return Game::getGameTime();
-}
-
-Game::State Sample::getState() const
-{
-    return Game::getInstance()->getState();
-}
-
-int Sample::run()
-{
-    return Game::getInstance()->run();
-}
-
-void Sample::pause()
-{
-    Game::getInstance()->pause();
-}
-
-void Sample::resume()
-{
-    Game::getInstance()->resume();
-}
-
-void Sample::exit()
-{
-    Game::getInstance()->exit();
-}
-
-void Sample::frame()
-{
-    Game::getInstance()->frame();
-}
-
-unsigned int Sample::getFrameRate() const
-{
-    return Game::getInstance()->getFrameRate();
-}
-
-const Rectangle& Sample::getViewport() const
-{
-    return Game::getInstance()->getViewport();
-}
-
-void Sample::setViewport(const Rectangle& viewport)
-{
-	Game::getInstance()->setViewport(viewport);
-}
-
-unsigned int Sample::getWidth() const
-{
-    return Game::getInstance()->getWidth();
-}
-
-unsigned int Sample::getHeight() const
-{
-    return Game::getInstance()->getHeight();
-}
-
-float Sample::getAspectRatio() const
-{
-    return Game::getInstance()->getAspectRatio();
-}
-
-void Sample::clear(Game::ClearFlags flags, const Vector4& clearColor, float clearDepth, int clearStencil)
-{
-    Game::getInstance()->clear(flags, clearColor, clearDepth, clearStencil);
-}
-
-void Sample::clear(Game::ClearFlags flags, float red, float green, float blue, float alpha, float clearDepth, int clearStencil)
-{
-    Game::getInstance()->clear(flags, red, green, blue, alpha, clearDepth, clearStencil);
-}
-
-AudioController* Sample::getAudioController() const
-{
-    return Game::getInstance()->getAudioController();
-}
-
-AnimationController* Sample::getAnimationController() const
-{
-    return Game::getInstance()->getAnimationController();
-}
-
-PhysicsController* Sample::getPhysicsController() const
-{
-    return Game::getInstance()->getPhysicsController();
-}
-
-ScriptController* Sample::getScriptController() const
-{
-	return Game::getInstance()->getScriptController();
-}
-
-void Sample::displayKeyboard(bool display)
-{
-    Game::getInstance()->displayKeyboard(display);
-}
-
-void Sample::keyEvent(Keyboard::KeyEvent evt, int key)
-{    
-}
-
-void Sample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-}
-
-bool Sample::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
-{
-    return false;
-}
-
-bool Sample::hasMouse()
-{
-    return Game::getInstance()->hasMouse();
-}
-
-bool Sample::isMouseCaptured()
-{
-    return Game::getInstance()->isMouseCaptured();
-}
-
-void Sample::setMouseCaptured(bool captured)
-{
-    Game::getInstance()->setMouseCaptured(captured);
-}
-
-void Sample::setMultiTouch(bool enabled)
-{
-    Game::getInstance()->setMultiTouch(enabled);
-}
-
-bool Sample::isMultiTouch() const
-{
-    return Game::getInstance()->isMultiTouch();
-}
-
-bool Sample::hasAccelerometer() const
-{
-    return Game::getInstance()->hasAccelerometer();
-}
-
-void Sample::getAccelerometerValues(float* pitch, float* roll)
-{
-    Game::getInstance()->getAccelerometerValues(pitch, roll);
-}
-
-void Sample::getSensorValues(float* accelX, float* accelY, float* accelZ, float* gyroX, float* gyroY, float* gyroZ)
-{
-    Game::getInstance()->getSensorValues(accelX, accelY, accelZ, gyroX, gyroY, gyroZ);
-}
-
-void Sample::schedule(long timeOffset, TimeListener* timeListener, void* cookie)
-{
-    Game::getInstance()->schedule(timeOffset, timeListener, cookie);
-}
-
-void Sample::enableScriptCamera(bool enable)
-{
-	Game::getInstance()->getScriptController()->executeFunction<void>("camera_setActive", "b", enable);
-}
-
-void Sample::setScriptCameraSpeed(float normal, float fast)
-{
-    Game::getInstance()->getScriptController()->executeFunction<void>("camera_setSpeed", "ff", normal, fast);
-}
-
-bool Sample::isGestureSupported(Gesture::GestureEvent evt)
-{
-    return Game::getInstance()->isGestureSupported(evt);
-}
-
-void Sample::registerGesture(Gesture::GestureEvent evt)
-{
-    Game::getInstance()->registerGesture(evt);
-}
-
-void Sample::unregisterGesture(Gesture::GestureEvent evt)
-{
-    Game::getInstance()->unregisterGesture(evt);
-}
-
-bool Sample::isGestureRegistered(Gesture::GestureEvent evt)
-{
-    return Game::getInstance()->isGestureRegistered(evt);
-}
-
-void Sample::gestureSwipeEvent(int x, int y, int direction)
-{
-}
-
-void Sample::gesturePinchEvent(int x, int y, float scale)
-{
-}
-
-void Sample::gestureTapEvent(int x, int y)
-{
-}
-
-void Sample::gestureLongTapEvent(int x, int y, float duration)
-{
-}
-
-void Sample::gestureDragEvent(int x, int y)
-{
-}
-
-void Sample::gestureDropEvent(int x, int y)
-{
-}
-
-void Sample::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
-{
-}
-
-unsigned int Sample::getGamepadCount() const
-{
-    return Game::getInstance()->getGamepadCount();
-}
-
-Gamepad* Sample::getGamepad(unsigned int index, bool preferPhysical) const
-{
-    return Game::getInstance()->getGamepad(index, preferPhysical);
-}
-
-void Sample::drawFrameRate(Font* font, const Vector4& color, unsigned int x, unsigned int y, unsigned int fps)
-{
-    char buffer[10];
-    sprintf(buffer, "%u", fps);
-    font->start();
-    font->drawText(buffer, x, y, color, font->getSize());
-    font->finish();
-}
+#include "Sample.h"
+#include "SamplesGame.h"
+
+const Game::State& Sample::UNINITIALIZED = Game::UNINITIALIZED;
+const Game::State& Sample::RUNNING = Game::RUNNING;
+const Game::State& Sample::PAUSED = Game::PAUSED;
+
+const Game::ClearFlags& Sample::CLEAR_COLOR = Game::CLEAR_COLOR;
+const Game::ClearFlags& Sample::CLEAR_DEPTH = Game::CLEAR_DEPTH;
+const Game::ClearFlags& Sample::CLEAR_STENCIL = Game::CLEAR_STENCIL;
+const Game::ClearFlags& Sample::CLEAR_COLOR_DEPTH = Game::CLEAR_COLOR_DEPTH;
+const Game::ClearFlags& Sample::CLEAR_COLOR_STENCIL = Game::CLEAR_COLOR_STENCIL;
+const Game::ClearFlags& Sample::CLEAR_DEPTH_STENCIL = Game::CLEAR_DEPTH_STENCIL;
+const Game::ClearFlags& Sample::CLEAR_COLOR_DEPTH_STENCIL = Game::CLEAR_COLOR_DEPTH_STENCIL;
+
+Sample::Sample()
+{
+}
+
+Sample::~Sample()
+{
+	enableScriptCamera(false);
+}
+
+bool Sample::isVsync()
+{
+    return Game::isVsync();
+}
+
+void Sample::setVsync(bool enable)
+{
+    Game::setVsync(enable);
+}
+
+long Sample::getAbsoluteTime()
+{
+    return Game::getAbsoluteTime();
+}
+
+long Sample::getGameTime()
+{
+    return Game::getGameTime();
+}
+
+Game::State Sample::getState() const
+{
+    return Game::getInstance()->getState();
+}
+
+int Sample::run()
+{
+    return Game::getInstance()->run();
+}
+
+void Sample::pause()
+{
+    Game::getInstance()->pause();
+}
+
+void Sample::resume()
+{
+    Game::getInstance()->resume();
+}
+
+void Sample::exit()
+{
+    Game::getInstance()->exit();
+}
+
+void Sample::frame()
+{
+    Game::getInstance()->frame();
+}
+
+unsigned int Sample::getFrameRate() const
+{
+    return Game::getInstance()->getFrameRate();
+}
+
+const Rectangle& Sample::getViewport() const
+{
+    return Game::getInstance()->getViewport();
+}
+
+void Sample::setViewport(const Rectangle& viewport)
+{
+	Game::getInstance()->setViewport(viewport);
+}
+
+unsigned int Sample::getWidth() const
+{
+    return Game::getInstance()->getWidth();
+}
+
+unsigned int Sample::getHeight() const
+{
+    return Game::getInstance()->getHeight();
+}
+
+float Sample::getAspectRatio() const
+{
+    return Game::getInstance()->getAspectRatio();
+}
+
+void Sample::clear(Game::ClearFlags flags, const Vector4& clearColor, float clearDepth, int clearStencil)
+{
+    Game::getInstance()->clear(flags, clearColor, clearDepth, clearStencil);
+}
+
+void Sample::clear(Game::ClearFlags flags, float red, float green, float blue, float alpha, float clearDepth, int clearStencil)
+{
+    Game::getInstance()->clear(flags, red, green, blue, alpha, clearDepth, clearStencil);
+}
+
+AudioController* Sample::getAudioController() const
+{
+    return Game::getInstance()->getAudioController();
+}
+
+AnimationController* Sample::getAnimationController() const
+{
+    return Game::getInstance()->getAnimationController();
+}
+
+PhysicsController* Sample::getPhysicsController() const
+{
+    return Game::getInstance()->getPhysicsController();
+}
+
+ScriptController* Sample::getScriptController() const
+{
+	return Game::getInstance()->getScriptController();
+}
+
+void Sample::displayKeyboard(bool display)
+{
+    Game::getInstance()->displayKeyboard(display);
+}
+
+void Sample::keyEvent(Keyboard::KeyEvent evt, int key)
+{    
+}
+
+void Sample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+}
+
+bool Sample::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    return false;
+}
+
+bool Sample::hasMouse()
+{
+    return Game::getInstance()->hasMouse();
+}
+
+bool Sample::isMouseCaptured()
+{
+    return Game::getInstance()->isMouseCaptured();
+}
+
+void Sample::setMouseCaptured(bool captured)
+{
+    Game::getInstance()->setMouseCaptured(captured);
+}
+
+void Sample::setMultiTouch(bool enabled)
+{
+    Game::getInstance()->setMultiTouch(enabled);
+}
+
+bool Sample::isMultiTouch() const
+{
+    return Game::getInstance()->isMultiTouch();
+}
+
+bool Sample::hasAccelerometer() const
+{
+    return Game::getInstance()->hasAccelerometer();
+}
+
+void Sample::getAccelerometerValues(float* pitch, float* roll)
+{
+    Game::getInstance()->getAccelerometerValues(pitch, roll);
+}
+
+void Sample::getSensorValues(float* accelX, float* accelY, float* accelZ, float* gyroX, float* gyroY, float* gyroZ)
+{
+    Game::getInstance()->getSensorValues(accelX, accelY, accelZ, gyroX, gyroY, gyroZ);
+}
+
+void Sample::schedule(long timeOffset, TimeListener* timeListener, void* cookie)
+{
+    Game::getInstance()->schedule(timeOffset, timeListener, cookie);
+}
+
+void Sample::enableScriptCamera(bool enable)
+{
+	Game::getInstance()->getScriptController()->executeFunction<void>("camera_setActive", "b", enable);
+}
+
+void Sample::setScriptCameraSpeed(float normal, float fast)
+{
+    Game::getInstance()->getScriptController()->executeFunction<void>("camera_setSpeed", "ff", normal, fast);
+}
+
+bool Sample::isGestureSupported(Gesture::GestureEvent evt)
+{
+    return Game::getInstance()->isGestureSupported(evt);
+}
+
+void Sample::registerGesture(Gesture::GestureEvent evt)
+{
+    Game::getInstance()->registerGesture(evt);
+}
+
+void Sample::unregisterGesture(Gesture::GestureEvent evt)
+{
+    Game::getInstance()->unregisterGesture(evt);
+}
+
+bool Sample::isGestureRegistered(Gesture::GestureEvent evt)
+{
+    return Game::getInstance()->isGestureRegistered(evt);
+}
+
+void Sample::gestureSwipeEvent(int x, int y, int direction)
+{
+}
+
+void Sample::gesturePinchEvent(int x, int y, float scale)
+{
+}
+
+void Sample::gestureTapEvent(int x, int y)
+{
+}
+
+void Sample::gestureLongTapEvent(int x, int y, float duration)
+{
+}
+
+void Sample::gestureDragEvent(int x, int y)
+{
+}
+
+void Sample::gestureDropEvent(int x, int y)
+{
+}
+
+void Sample::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
+{
+}
+
+unsigned int Sample::getGamepadCount() const
+{
+    return Game::getInstance()->getGamepadCount();
+}
+
+Gamepad* Sample::getGamepad(unsigned int index, bool preferPhysical) const
+{
+    return Game::getInstance()->getGamepad(index, preferPhysical);
+}
+
+void Sample::drawFrameRate(Font* font, const Vector4& color, unsigned int x, unsigned int y, unsigned int fps)
+{
+    char buffer[10];
+    sprintf(buffer, "%u", fps);
+    font->start();
+    font->drawText(buffer, x, y, color, font->getSize());
+    font->finish();
+}

+ 98 - 98
samples/browser/src/Sample.h

@@ -1,98 +1,98 @@
-#ifndef SAMPLE_H_
-#define SAMPLE_H_
-
-#include "gameplay.h"
-
-using namespace gameplay;
-
-/**
- * Base class for all of the samples. 
- *
- * The goal is to provide an interface that matches the Game class.
- * This way you can easily copy the code from your sample into a game.
- */
-class Sample
-{
-    friend class SamplesGame;
-
-public:
-
-    static const Game::State& UNINITIALIZED;
-    static const Game::State& RUNNING;
-    static const Game::State& PAUSED;
-    static const Game::ClearFlags& CLEAR_COLOR;
-    static const Game::ClearFlags& CLEAR_DEPTH;
-    static const Game::ClearFlags& CLEAR_STENCIL;
-    static const Game::ClearFlags& CLEAR_COLOR_DEPTH;
-    static const Game::ClearFlags& CLEAR_COLOR_STENCIL;
-    static const Game::ClearFlags& CLEAR_DEPTH_STENCIL;
-    static const Game::ClearFlags& CLEAR_COLOR_DEPTH_STENCIL;
-
-    static bool isVsync();
-    static void setVsync(bool enable);
-    static long getAbsoluteTime();
-    static long getGameTime();
-    Game::State getState() const;
-    int run();
-    void pause();
-    void resume();
-    void exit();
-    void frame();
-    unsigned int getFrameRate() const;
-    const Rectangle& getViewport() const;
-	void setViewport(const Rectangle& viewport);
-    unsigned int getWidth() const;
-    unsigned int getHeight() const;
-    float getAspectRatio() const;
-    void clear(Game::ClearFlags flags, const Vector4& clearColor, float clearDepth, int clearStencil);
-    void clear(Game::ClearFlags flags, float red, float green, float blue, float alpha, float clearDepth, int clearStencil);
-    AudioController* getAudioController() const;
-    AnimationController* getAnimationController() const;
-    PhysicsController* getPhysicsController() const;
-    ScriptController* getScriptController() const;
-    void displayKeyboard(bool display);
-    virtual void keyEvent(Keyboard::KeyEvent evt, int key);
-    virtual void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
-    virtual bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
-    bool hasMouse();
-    bool isMouseCaptured();
-    void setMouseCaptured(bool captured);
-    void setMultiTouch(bool enabled);
-    bool isMultiTouch() const;
-    bool hasAccelerometer() const;
-    void getAccelerometerValues(float* pitch, float* roll);
-    void getSensorValues(float* accelX, float* accelY, float* accelZ, float* gyroX, float* gyroY, float* gyroZ);
-    void schedule(long timeOffset, TimeListener* timeListener, void* cookie = 0);
-	void enableScriptCamera(bool enable);
-    void setScriptCameraSpeed(float normal, float fast);
-    bool isGestureSupported(Gesture::GestureEvent evt);
-    void registerGesture(Gesture::GestureEvent evt);
-    void unregisterGesture(Gesture::GestureEvent evt);
-    bool isGestureRegistered(Gesture::GestureEvent evt);
-    virtual void gestureSwipeEvent(int x, int y, int direction);
-    virtual void gesturePinchEvent(int x, int y, float scale);
-    virtual void gestureTapEvent(int x, int y);
-    virtual void gestureLongTapEvent(int x, int y, float duration);
-    virtual void gestureDragEvent(int x, int y);
-	virtual void gestureDropEvent(int x, int y);
-	virtual void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad);
-    unsigned int getGamepadCount() const;
-    Gamepad* getGamepad(unsigned int index, bool preferPhysical = true) const;
-
-protected:
-
-    Sample();
-    virtual ~Sample();
-    virtual void initialize() = 0;
-    virtual void finalize() = 0;
-    virtual void update(float elapsedTime) = 0;
-    virtual void render(float elapsedTime) = 0;
-    static void drawFrameRate(Font* font, const Vector4& color, unsigned int x, unsigned int y, unsigned int fps);
-
-private:
-
-    Sample(const Sample&); 
-    Sample& operator=(const Sample&);
-};
-
-#endif
+#ifndef SAMPLE_H_
+#define SAMPLE_H_
+
+#include "gameplay.h"
+
+using namespace gameplay;
+
+/**
+ * Base class for all of the samples. 
+ *
+ * The goal is to provide an interface that matches the Game class.
+ * This way you can easily copy the code from your sample into a game.
+ */
+class Sample
+{
+    friend class SamplesGame;
+
+public:
+
+    static const Game::State& UNINITIALIZED;
+    static const Game::State& RUNNING;
+    static const Game::State& PAUSED;
+    static const Game::ClearFlags& CLEAR_COLOR;
+    static const Game::ClearFlags& CLEAR_DEPTH;
+    static const Game::ClearFlags& CLEAR_STENCIL;
+    static const Game::ClearFlags& CLEAR_COLOR_DEPTH;
+    static const Game::ClearFlags& CLEAR_COLOR_STENCIL;
+    static const Game::ClearFlags& CLEAR_DEPTH_STENCIL;
+    static const Game::ClearFlags& CLEAR_COLOR_DEPTH_STENCIL;
+
+    static bool isVsync();
+    static void setVsync(bool enable);
+    static long getAbsoluteTime();
+    static long getGameTime();
+    Game::State getState() const;
+    int run();
+    void pause();
+    void resume();
+    void exit();
+    void frame();
+    unsigned int getFrameRate() const;
+    const Rectangle& getViewport() const;
+	void setViewport(const Rectangle& viewport);
+    unsigned int getWidth() const;
+    unsigned int getHeight() const;
+    float getAspectRatio() const;
+    void clear(Game::ClearFlags flags, const Vector4& clearColor, float clearDepth, int clearStencil);
+    void clear(Game::ClearFlags flags, float red, float green, float blue, float alpha, float clearDepth, int clearStencil);
+    AudioController* getAudioController() const;
+    AnimationController* getAnimationController() const;
+    PhysicsController* getPhysicsController() const;
+    ScriptController* getScriptController() const;
+    void displayKeyboard(bool display);
+    virtual void keyEvent(Keyboard::KeyEvent evt, int key);
+    virtual void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
+    virtual bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
+    bool hasMouse();
+    bool isMouseCaptured();
+    void setMouseCaptured(bool captured);
+    void setMultiTouch(bool enabled);
+    bool isMultiTouch() const;
+    bool hasAccelerometer() const;
+    void getAccelerometerValues(float* pitch, float* roll);
+    void getSensorValues(float* accelX, float* accelY, float* accelZ, float* gyroX, float* gyroY, float* gyroZ);
+    void schedule(long timeOffset, TimeListener* timeListener, void* cookie = 0);
+	void enableScriptCamera(bool enable);
+    void setScriptCameraSpeed(float normal, float fast);
+    bool isGestureSupported(Gesture::GestureEvent evt);
+    void registerGesture(Gesture::GestureEvent evt);
+    void unregisterGesture(Gesture::GestureEvent evt);
+    bool isGestureRegistered(Gesture::GestureEvent evt);
+    virtual void gestureSwipeEvent(int x, int y, int direction);
+    virtual void gesturePinchEvent(int x, int y, float scale);
+    virtual void gestureTapEvent(int x, int y);
+    virtual void gestureLongTapEvent(int x, int y, float duration);
+    virtual void gestureDragEvent(int x, int y);
+	virtual void gestureDropEvent(int x, int y);
+	virtual void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad);
+    unsigned int getGamepadCount() const;
+    Gamepad* getGamepad(unsigned int index, bool preferPhysical = true) const;
+
+protected:
+
+    Sample();
+    virtual ~Sample();
+    virtual void initialize() = 0;
+    virtual void finalize() = 0;
+    virtual void update(float elapsedTime) = 0;
+    virtual void render(float elapsedTime) = 0;
+    static void drawFrameRate(Font* font, const Vector4& color, unsigned int x, unsigned int y, unsigned int fps);
+
+private:
+
+    Sample(const Sample&); 
+    Sample& operator=(const Sample&);
+};
+
+#endif

+ 327 - 327
samples/browser/src/SamplesGame.cpp

@@ -1,327 +1,327 @@
-#include "SamplesGame.h"
-
-using std::string;
-using std::pair;
-
-std::vector<std::string>* SamplesGame::_categories = NULL;
-std::vector<SamplesGame::SampleRecordList>* SamplesGame::_samples = NULL;
-
-// Declare our game instance
-SamplesGame game;
-
-SamplesGame::SamplesGame()
-    : _activeSample(NULL), _font(NULL),  _sampleSelectForm(NULL)
-{
-}
-
-void SamplesGame::initialize()
-{
-    _font = Font::create("res/common/arial.gpb");
-
-    for (size_t i = 0; i < _categories->size(); ++i)
-    {
-        std::sort((*_samples)[i].begin(), (*_samples)[i].end());
-    }
-
-    // Load camera script
-    getScriptController()->loadScript("res/common/camera.lua");
-
-    // Construct a form for selecting which sample to run.
-    Theme* theme = Theme::create("res/common/default.theme");
-    Theme::Style* formStyle = theme->getStyle("basicContainer");
-    Theme::Style* buttonStyle = theme->getStyle("buttonStyle");
-    Theme::Style* titleStyle = theme->getStyle("title");
-
-    // Note: this calls addRef() on formStyle's Theme, which we created above.
-    _sampleSelectForm = Form::create("sampleSelect", formStyle, Layout::LAYOUT_VERTICAL);
-    theme->release();   // So we can release it once we're done creating forms with it.
-
-    _sampleSelectForm->setAutoHeight(true);
-    _sampleSelectForm->setWidth(200.0f);
-    _sampleSelectForm->setScroll(Container::SCROLL_VERTICAL);
-    _sampleSelectForm->setConsumeInputEvents(true);
-
-    const size_t size = _samples->size();
-    for (size_t i = 0; i < size; ++i)
-    {
-        Label* categoryLabel = Label::create((*_categories)[i].c_str(), titleStyle);
-        categoryLabel->setAutoWidth(true);
-        categoryLabel->setTextAlignment(Font::ALIGN_BOTTOM_LEFT);
-        categoryLabel->setHeight(40);
-        categoryLabel->setText((*_categories)[i].c_str());
-        categoryLabel->setConsumeInputEvents(false);
-        _sampleSelectForm->addControl(categoryLabel);
-        categoryLabel->release();
-
-        SampleRecordList list = (*_samples)[i];
-        const size_t listSize = list.size();
-        for (size_t j = 0; j < listSize; ++j)
-        {
-            SampleRecord sampleRecord = list[j];
-            Button* sampleButton = Button::create(sampleRecord.title.c_str(), buttonStyle);
-            sampleButton->setText(sampleRecord.title.c_str());
-            sampleButton->setAutoWidth(true);
-            sampleButton->setHeight(60);      // Tall enough to touch easily on a BB10 device.
-            sampleButton->addListener(this, Control::Listener::CLICK);
-            _sampleSelectForm->addControl(sampleButton);
-            sampleButton->release();
-        }
-    }
-    _sampleSelectForm->setFocus();
-
-    // Disable virtual gamepads.
-    unsigned int gamepadCount = getGamepadCount();
-
-    for (unsigned int i = 0; i < gamepadCount; i++)
-    {
-        Gamepad* gamepad = getGamepad(i, false);
-        if (gamepad->isVirtual())
-        {
-            gamepad->getForm()->setEnabled(false);
-        }
-    }
-}
-
-void SamplesGame::finalize()
-{
-    SAFE_RELEASE(_font);
-    if (_activeSample)
-        _activeSample->finalize();
-    SAFE_DELETE(_activeSample);
-    SAFE_DELETE(_categories);
-    SAFE_DELETE(_samples);
-    SAFE_RELEASE(_sampleSelectForm);
-}
-
-void SamplesGame::update(float elapsedTime)
-{
-    if (_activeSample)
-    {
-        Gamepad* gamepad = getGamepad(0);
-        if (gamepad && gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
-        {
-            exitActiveSample();
-            return;
-        }
-
-        getScriptController()->executeFunction<void>("camera_update", "f", elapsedTime);
-        _activeSample->update(elapsedTime);
-        return;
-    }
-
-    _sampleSelectForm->update(elapsedTime);
-}
-
-void SamplesGame::render(float elapsedTime)
-{
-    if (_activeSample)
-    {
-        _activeSample->render(elapsedTime);
-        
-        // Draw back arrow
-        _font->start();
-        _font->drawText("<<", getWidth() - 40, 20, Vector4::one(), 28);
-        _font->finish();
-        return;
-    }
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-    _sampleSelectForm->draw();
-}
-
-void SamplesGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    if (_activeSample)
-    {
-        if (evt == Touch::TOUCH_PRESS && x >= ((int)getWidth() - 80) && y <= 80)
-        {
-            exitActiveSample();
-        }
-        else
-        {
-            getScriptController()->executeFunction<void>("camera_touchEvent", "[Touch::TouchEvent]iiui", evt, x, y, contactIndex);
-            _activeSample->touchEvent(evt, x, y, contactIndex);
-        }
-        return;
-    }
-}
-
-void SamplesGame::keyEvent(Keyboard::KeyEvent evt, int key)
-{
-    if (_activeSample)
-    {
-        if (key == Keyboard::KEY_MENU || (evt == Keyboard::KEY_PRESS && (key == Keyboard::KEY_ESCAPE)))
-        {
-            // Pressing escape exits the active sample
-            exitActiveSample();
-        }
-        else
-        {
-            getScriptController()->executeFunction<void>("camera_keyEvent", "[Keyboard::KeyEvent][Keyboard::Key]", evt, key);
-            _activeSample->keyEvent(evt, key);
-        }
-        return;
-    }
-    if (evt == Keyboard::KEY_PRESS)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_ESCAPE:
-            exit();
-            break;
-        }
-    }
-}
-
-bool SamplesGame::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
-{
-    if (_activeSample)
-    {
-        return _activeSample->mouseEvent(evt, x, y, wheelDelta);
-    }
-    return false;
-}
-
-void SamplesGame::menuEvent()
-{
-    exitActiveSample();
-}
-
-void SamplesGame::gestureSwipeEvent(int x, int y, int direction)
-{
-    if (_activeSample)
-        _activeSample->gestureSwipeEvent(x, y, direction);
-}
-
-void SamplesGame::gesturePinchEvent(int x, int y, float scale)
-{
-    if (_activeSample)
-        _activeSample->gesturePinchEvent(x, y, scale);
-}
-    
-void SamplesGame::gestureTapEvent(int x, int y)
-{
-    if (_activeSample)
-        _activeSample->gestureTapEvent(x, y);
-}
-
-void SamplesGame::gestureLongTapEvent(int x, int y, float duration)
-{
-	if (_activeSample)
-		_activeSample->gestureLongTapEvent(x, y, duration);
-}
-
-void SamplesGame::gestureDragEvent(int x, int y)
-{
-	if (_activeSample)
-		_activeSample->gestureDragEvent(x, y);
-}
-
-void SamplesGame::gestureDropEvent(int x, int y)
-{
-	if (_activeSample)
-		_activeSample->gestureDropEvent(x, y);
-}
-
-void SamplesGame::controlEvent(Control* control, EventType evt)
-{
-    const size_t size = _samples->size();
-    for (size_t i = 0; i < size; ++i)
-    {
-        SampleRecordList list = (*_samples)[i];
-        const size_t listSize = list.size();
-        for (size_t j = 0; j < listSize; ++j)
-        {
-            SampleRecord sampleRecord = list[j];
-            if (sampleRecord.title.compare(control->getId()) == 0)
-            {
-                _sampleSelectForm->setEnabled(false);
-                runSample(sampleRecord.funcPtr);
-                return;
-            }
-        }
-    }
-}
-
-void SamplesGame::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex)
-{
-    if (_activeSample)
-        _activeSample->gamepadEvent(evt, gamepad);
-}
-
-void SamplesGame::runSample(void* func)
-{
-    exitActiveSample();
-    
-    SampleGameCreatePtr p = (SampleGameCreatePtr)func;
-
-    _activeSample = reinterpret_cast<Sample*>(p());
-    _activeSample->initialize();
-    resume();
-}
-
-void SamplesGame::exitActiveSample()
-{
-    Gamepad* virtualGamepad = getGamepad(0, false);
-    if (virtualGamepad && virtualGamepad->isVirtual())
-    {
-        virtualGamepad->getForm()->setEnabled(false);
-    }
-
-    if (_activeSample)
-    {
-        _activeSample->finalize();
-        SAFE_DELETE(_activeSample);
-
-        _sampleSelectForm->setEnabled(true);
-        _sampleSelectForm->setFocus();
-    }
-
-    // Reset some game options
-    setMultiTouch(false);
-}
-
-void SamplesGame::addSample(const char* category, const char* title, void* func, unsigned int order)
-{
-    if (_samples == NULL)
-        _samples = new std::vector<SampleRecordList>();
-    if (_categories == NULL)
-    {
-        _categories = new std::vector<std::string>();
-        _categories->push_back("Graphics");
-        _categories->push_back("Scene");
-        _categories->push_back("Input");
-        _categories->push_back("Physics");
-        _categories->push_back("Audio");
-        _samples->resize(_categories->size());
-    }
-
-    string categoryString(category);
-    string titleString(title);
-    
-    int index = -1;
-    const int size = (int)_categories->size();
-    for (int i = 0; i < size; ++i)
-    {
-        if ((*_categories)[i].compare(categoryString) == 0)
-        {
-            index = i;
-        }
-    }
-    if (index < 0)
-    {
-        _categories->push_back(categoryString);
-        index = (int)_categories->size() - 1;
-    }
-
-    if (index <= (int)_samples->size())
-    {
-        _samples->resize(_categories->size());
-    }
-    (*_samples)[index].push_back(SampleRecord(titleString, func, order));
-}
-
-SamplesGame* SamplesGame::getInstance()
-{
-    return &game;
-}
+#include "SamplesGame.h"
+
+using std::string;
+using std::pair;
+
+std::vector<std::string>* SamplesGame::_categories = NULL;
+std::vector<SamplesGame::SampleRecordList>* SamplesGame::_samples = NULL;
+
+// Declare our game instance
+SamplesGame game;
+
+SamplesGame::SamplesGame()
+    : _activeSample(NULL), _font(NULL),  _sampleSelectForm(NULL)
+{
+}
+
+void SamplesGame::initialize()
+{
+    _font = Font::create("res/common/arial.gpb");
+
+    for (size_t i = 0; i < _categories->size(); ++i)
+    {
+        std::sort((*_samples)[i].begin(), (*_samples)[i].end());
+    }
+
+    // Load camera script
+    getScriptController()->loadScript("res/common/camera.lua");
+
+    // Construct a form for selecting which sample to run.
+    Theme* theme = Theme::create("res/common/default.theme");
+    Theme::Style* formStyle = theme->getStyle("basicContainer");
+    Theme::Style* buttonStyle = theme->getStyle("buttonStyle");
+    Theme::Style* titleStyle = theme->getStyle("title");
+
+    // Note: this calls addRef() on formStyle's Theme, which we created above.
+    _sampleSelectForm = Form::create("sampleSelect", formStyle, Layout::LAYOUT_VERTICAL);
+    theme->release();   // So we can release it once we're done creating forms with it.
+
+    _sampleSelectForm->setAutoHeight(true);
+    _sampleSelectForm->setWidth(200.0f);
+    _sampleSelectForm->setScroll(Container::SCROLL_VERTICAL);
+    _sampleSelectForm->setConsumeInputEvents(true);
+
+    const size_t size = _samples->size();
+    for (size_t i = 0; i < size; ++i)
+    {
+        Label* categoryLabel = Label::create((*_categories)[i].c_str(), titleStyle);
+        categoryLabel->setAutoWidth(true);
+        categoryLabel->setTextAlignment(Font::ALIGN_BOTTOM_LEFT);
+        categoryLabel->setHeight(40);
+        categoryLabel->setText((*_categories)[i].c_str());
+        categoryLabel->setConsumeInputEvents(false);
+        _sampleSelectForm->addControl(categoryLabel);
+        categoryLabel->release();
+
+        SampleRecordList list = (*_samples)[i];
+        const size_t listSize = list.size();
+        for (size_t j = 0; j < listSize; ++j)
+        {
+            SampleRecord sampleRecord = list[j];
+            Button* sampleButton = Button::create(sampleRecord.title.c_str(), buttonStyle);
+            sampleButton->setText(sampleRecord.title.c_str());
+            sampleButton->setAutoWidth(true);
+            sampleButton->setHeight(60);      // Tall enough to touch easily on a BB10 device.
+            sampleButton->addListener(this, Control::Listener::CLICK);
+            _sampleSelectForm->addControl(sampleButton);
+            sampleButton->release();
+        }
+    }
+    _sampleSelectForm->setFocus();
+
+    // Disable virtual gamepads.
+    unsigned int gamepadCount = getGamepadCount();
+
+    for (unsigned int i = 0; i < gamepadCount; i++)
+    {
+        Gamepad* gamepad = getGamepad(i, false);
+        if (gamepad->isVirtual())
+        {
+            gamepad->getForm()->setEnabled(false);
+        }
+    }
+}
+
+void SamplesGame::finalize()
+{
+    SAFE_RELEASE(_font);
+    if (_activeSample)
+        _activeSample->finalize();
+    SAFE_DELETE(_activeSample);
+    SAFE_DELETE(_categories);
+    SAFE_DELETE(_samples);
+    SAFE_RELEASE(_sampleSelectForm);
+}
+
+void SamplesGame::update(float elapsedTime)
+{
+    if (_activeSample)
+    {
+        Gamepad* gamepad = getGamepad(0);
+        if (gamepad && gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
+        {
+            exitActiveSample();
+            return;
+        }
+
+        getScriptController()->executeFunction<void>("camera_update", "f", elapsedTime);
+        _activeSample->update(elapsedTime);
+        return;
+    }
+
+    _sampleSelectForm->update(elapsedTime);
+}
+
+void SamplesGame::render(float elapsedTime)
+{
+    if (_activeSample)
+    {
+        _activeSample->render(elapsedTime);
+        
+        // Draw back arrow
+        _font->start();
+        _font->drawText("<<", getWidth() - 40, 20, Vector4::one(), 28);
+        _font->finish();
+        return;
+    }
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+    _sampleSelectForm->draw();
+}
+
+void SamplesGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    if (_activeSample)
+    {
+        if (evt == Touch::TOUCH_PRESS && x >= ((int)getWidth() - 80) && y <= 80)
+        {
+            exitActiveSample();
+        }
+        else
+        {
+            getScriptController()->executeFunction<void>("camera_touchEvent", "[Touch::TouchEvent]iiui", evt, x, y, contactIndex);
+            _activeSample->touchEvent(evt, x, y, contactIndex);
+        }
+        return;
+    }
+}
+
+void SamplesGame::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    if (_activeSample)
+    {
+        if (key == Keyboard::KEY_MENU || (evt == Keyboard::KEY_PRESS && (key == Keyboard::KEY_ESCAPE)))
+        {
+            // Pressing escape exits the active sample
+            exitActiveSample();
+        }
+        else
+        {
+            getScriptController()->executeFunction<void>("camera_keyEvent", "[Keyboard::KeyEvent][Keyboard::Key]", evt, key);
+            _activeSample->keyEvent(evt, key);
+        }
+        return;
+    }
+    if (evt == Keyboard::KEY_PRESS)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_ESCAPE:
+            exit();
+            break;
+        }
+    }
+}
+
+bool SamplesGame::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    if (_activeSample)
+    {
+        return _activeSample->mouseEvent(evt, x, y, wheelDelta);
+    }
+    return false;
+}
+
+void SamplesGame::menuEvent()
+{
+    exitActiveSample();
+}
+
+void SamplesGame::gestureSwipeEvent(int x, int y, int direction)
+{
+    if (_activeSample)
+        _activeSample->gestureSwipeEvent(x, y, direction);
+}
+
+void SamplesGame::gesturePinchEvent(int x, int y, float scale)
+{
+    if (_activeSample)
+        _activeSample->gesturePinchEvent(x, y, scale);
+}
+    
+void SamplesGame::gestureTapEvent(int x, int y)
+{
+    if (_activeSample)
+        _activeSample->gestureTapEvent(x, y);
+}
+
+void SamplesGame::gestureLongTapEvent(int x, int y, float duration)
+{
+	if (_activeSample)
+		_activeSample->gestureLongTapEvent(x, y, duration);
+}
+
+void SamplesGame::gestureDragEvent(int x, int y)
+{
+	if (_activeSample)
+		_activeSample->gestureDragEvent(x, y);
+}
+
+void SamplesGame::gestureDropEvent(int x, int y)
+{
+	if (_activeSample)
+		_activeSample->gestureDropEvent(x, y);
+}
+
+void SamplesGame::controlEvent(Control* control, EventType evt)
+{
+    const size_t size = _samples->size();
+    for (size_t i = 0; i < size; ++i)
+    {
+        SampleRecordList list = (*_samples)[i];
+        const size_t listSize = list.size();
+        for (size_t j = 0; j < listSize; ++j)
+        {
+            SampleRecord sampleRecord = list[j];
+            if (sampleRecord.title.compare(control->getId()) == 0)
+            {
+                _sampleSelectForm->setEnabled(false);
+                runSample(sampleRecord.funcPtr);
+                return;
+            }
+        }
+    }
+}
+
+void SamplesGame::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex)
+{
+    if (_activeSample)
+        _activeSample->gamepadEvent(evt, gamepad);
+}
+
+void SamplesGame::runSample(void* func)
+{
+    exitActiveSample();
+    
+    SampleGameCreatePtr p = (SampleGameCreatePtr)func;
+
+    _activeSample = reinterpret_cast<Sample*>(p());
+    _activeSample->initialize();
+    resume();
+}
+
+void SamplesGame::exitActiveSample()
+{
+    Gamepad* virtualGamepad = getGamepad(0, false);
+    if (virtualGamepad && virtualGamepad->isVirtual())
+    {
+        virtualGamepad->getForm()->setEnabled(false);
+    }
+
+    if (_activeSample)
+    {
+        _activeSample->finalize();
+        SAFE_DELETE(_activeSample);
+
+        _sampleSelectForm->setEnabled(true);
+        _sampleSelectForm->setFocus();
+    }
+
+    // Reset some game options
+    setMultiTouch(false);
+}
+
+void SamplesGame::addSample(const char* category, const char* title, void* func, unsigned int order)
+{
+    if (_samples == NULL)
+        _samples = new std::vector<SampleRecordList>();
+    if (_categories == NULL)
+    {
+        _categories = new std::vector<std::string>();
+        _categories->push_back("Graphics");
+        _categories->push_back("Scene");
+        _categories->push_back("Input");
+        _categories->push_back("Physics");
+        _categories->push_back("Audio");
+        _samples->resize(_categories->size());
+    }
+
+    string categoryString(category);
+    string titleString(title);
+    
+    int index = -1;
+    const int size = (int)_categories->size();
+    for (int i = 0; i < size; ++i)
+    {
+        if ((*_categories)[i].compare(categoryString) == 0)
+        {
+            index = i;
+        }
+    }
+    if (index < 0)
+    {
+        _categories->push_back(categoryString);
+        index = (int)_categories->size() - 1;
+    }
+
+    if (index <= (int)_samples->size())
+    {
+        _samples->resize(_categories->size());
+    }
+    (*_samples)[index].push_back(SampleRecord(titleString, func, order));
+}
+
+SamplesGame* SamplesGame::getInstance()
+{
+    return &game;
+}

+ 174 - 174
samples/browser/src/SamplesGame.h

@@ -1,174 +1,174 @@
-#ifndef SAMPLESGAME_H_
-#define SAMPLESGAME_H_
-
-#include "gameplay.h"
-#include "Sample.h"
-
-using namespace gameplay;
-
-/**
- * Macro for adding a sample. The purpose is to put the code that adds the sample in the class's cpp file.
- */
-#define ADD_SAMPLE(cateogry, title, className, order) \
-    static className* _createSample() \
-    { \
-        return new className(); \
-    } \
-    struct _foo ## className \
-    { \
-        _foo ## className() \
-        { \
-            SamplesGame::addSample((cateogry), (title), (void*)&_createSample, order); \
-        } \
-    }; \
-    static _foo ## className _f;
-
-/**
- * Main game class.
- */
-class SamplesGame : public Game, Control::Listener
-{
-public:
-
-    /**
-     * Constructor.
-     */
-    SamplesGame();
-
-	void keyEvent(Keyboard::KeyEvent evt, int key);
-
-    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
-
-    bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
-
-    void menuEvent();
-
-    void gestureSwipeEvent(int x, int y, int direction);
-    
-    void gesturePinchEvent(int x, int y, float scale);
-    
-    void gestureTapEvent(int x, int y);
-
-	void gestureLongTapEvent(int x, int y, float duration);
-
-	void gestureDragEvent(int x, int y);
-
-	void gestureDropEvent(int x, int y);
-
-	void controlEvent(Control* control, EventType evt);
-
-    void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex = 0);
-
-    /**
-     * Adds a sample.
-     * 
-     * @param category The cateogry title to group the sample in.
-     * @param title The title string of the sample.
-     * @param func The function pointer that is used to create the sample.
-     * @param order The order of the sample. Samples are sorted lowest order to highest.
-     */
-    static void addSample(const char* category, const char* title, void* func, unsigned int order);
-
-    static SamplesGame* getInstance();
-    
-protected:
-
-    /**
-     * @see Game::initialize
-     */
-    void initialize();
-
-    /**
-     * @see Game::finalize
-     */
-    void finalize();
-
-    /**
-     * @see Game::update
-     */
-    void update(float elapsedTime);
-
-    /**
-     * @see Game::render
-     */
-    void render(float elapsedTime);
-
-private:
-
-    /**
-     * Function pointer type that is used to create a SampleGame.
-     */
-    typedef void*(*SampleGameCreatePtr)();
-
-    /**
-     * Run the given sample.
-     * 
-     * @param func The function pointer that creates the SampleGame.
-     */
-    void runSample(void* func);
-
-    /**
-     * Handles the activate when the user touches or clicks on a part of the screen.
-     * 
-     * @param x The x-coordinate in screen space where the user clicked.
-     * @param y The y-coordinate in screen space where the user clicked.
-     */
-    void activate(int x, int y);
-
-    /**
-     * Exits the active sample and returns to the main menu.
-     */
-    void exitActiveSample();
-    
-    /**
-     * Draws the main menu, which is a list of all the available samples.
-     */
-    void drawTextMenu();
-
-private:
-
-    struct SampleRecord
-    {
-        std::string title;
-        void* funcPtr;
-        unsigned int order;
-
-        SampleRecord() : funcPtr(NULL), order(0) { }
-        SampleRecord(std::string title, void* funcPtr, unsigned int order) : title(title), funcPtr(funcPtr), order(order) { }
-
-        SampleRecord& operator = (const SampleRecord& copy)
-        {
-            title = copy.title;
-            funcPtr = copy.funcPtr;
-            order = copy.order;
-            return *this;
-        }
-
-        bool operator<(const SampleRecord& v) const
-        {
-            return order < v.order;
-        }
-    };
-
-
-    /**
-     * The list of category title strings.
-     */
-    static std::vector<std::string>* _categories;
-
-    /**
-     * The collection of sample titles and the function pointers that create the samples.
-     * The pair represents the string title of the sample and the function pointer that is used to create the sample.
-     * The inner vector is a list of those pairs in the order that they were added.
-     * The outer vector represents the list of categories that contain the list of samples in the category.
-     * The index of _categories maps to the index of the outer vector. (Therefore their size should always be the same).
-     */
-    typedef std::vector<SampleRecord> SampleRecordList;
-    static std::vector<SampleRecordList>* _samples;
-
-    Sample* _activeSample;
-    Font* _font;
-    Form* _sampleSelectForm;
-};
-
-#endif
+#ifndef SAMPLESGAME_H_
+#define SAMPLESGAME_H_
+
+#include "gameplay.h"
+#include "Sample.h"
+
+using namespace gameplay;
+
+/**
+ * Macro for adding a sample. The purpose is to put the code that adds the sample in the class's cpp file.
+ */
+#define ADD_SAMPLE(cateogry, title, className, order) \
+    static className* _createSample() \
+    { \
+        return new className(); \
+    } \
+    struct _foo ## className \
+    { \
+        _foo ## className() \
+        { \
+            SamplesGame::addSample((cateogry), (title), (void*)&_createSample, order); \
+        } \
+    }; \
+    static _foo ## className _f;
+
+/**
+ * Main game class.
+ */
+class SamplesGame : public Game, Control::Listener
+{
+public:
+
+    /**
+     * Constructor.
+     */
+    SamplesGame();
+
+	void keyEvent(Keyboard::KeyEvent evt, int key);
+
+    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
+
+    bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
+
+    void menuEvent();
+
+    void gestureSwipeEvent(int x, int y, int direction);
+    
+    void gesturePinchEvent(int x, int y, float scale);
+    
+    void gestureTapEvent(int x, int y);
+
+	void gestureLongTapEvent(int x, int y, float duration);
+
+	void gestureDragEvent(int x, int y);
+
+	void gestureDropEvent(int x, int y);
+
+	void controlEvent(Control* control, EventType evt);
+
+    void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex = 0);
+
+    /**
+     * Adds a sample.
+     * 
+     * @param category The cateogry title to group the sample in.
+     * @param title The title string of the sample.
+     * @param func The function pointer that is used to create the sample.
+     * @param order The order of the sample. Samples are sorted lowest order to highest.
+     */
+    static void addSample(const char* category, const char* title, void* func, unsigned int order);
+
+    static SamplesGame* getInstance();
+    
+protected:
+
+    /**
+     * @see Game::initialize
+     */
+    void initialize();
+
+    /**
+     * @see Game::finalize
+     */
+    void finalize();
+
+    /**
+     * @see Game::update
+     */
+    void update(float elapsedTime);
+
+    /**
+     * @see Game::render
+     */
+    void render(float elapsedTime);
+
+private:
+
+    /**
+     * Function pointer type that is used to create a SampleGame.
+     */
+    typedef void*(*SampleGameCreatePtr)();
+
+    /**
+     * Run the given sample.
+     * 
+     * @param func The function pointer that creates the SampleGame.
+     */
+    void runSample(void* func);
+
+    /**
+     * Handles the activate when the user touches or clicks on a part of the screen.
+     * 
+     * @param x The x-coordinate in screen space where the user clicked.
+     * @param y The y-coordinate in screen space where the user clicked.
+     */
+    void activate(int x, int y);
+
+    /**
+     * Exits the active sample and returns to the main menu.
+     */
+    void exitActiveSample();
+    
+    /**
+     * Draws the main menu, which is a list of all the available samples.
+     */
+    void drawTextMenu();
+
+private:
+
+    struct SampleRecord
+    {
+        std::string title;
+        void* funcPtr;
+        unsigned int order;
+
+        SampleRecord() : funcPtr(NULL), order(0) { }
+        SampleRecord(std::string title, void* funcPtr, unsigned int order) : title(title), funcPtr(funcPtr), order(order) { }
+
+        SampleRecord& operator = (const SampleRecord& copy)
+        {
+            title = copy.title;
+            funcPtr = copy.funcPtr;
+            order = copy.order;
+            return *this;
+        }
+
+        bool operator<(const SampleRecord& v) const
+        {
+            return order < v.order;
+        }
+    };
+
+
+    /**
+     * The list of category title strings.
+     */
+    static std::vector<std::string>* _categories;
+
+    /**
+     * The collection of sample titles and the function pointers that create the samples.
+     * The pair represents the string title of the sample and the function pointer that is used to create the sample.
+     * The inner vector is a list of those pairs in the order that they were added.
+     * The outer vector represents the list of categories that contain the list of samples in the category.
+     * The index of _categories maps to the index of the outer vector. (Therefore their size should always be the same).
+     */
+    typedef std::vector<SampleRecord> SampleRecordList;
+    static std::vector<SampleRecordList>* _samples;
+
+    Sample* _activeSample;
+    Font* _font;
+    Form* _sampleSelectForm;
+};
+
+#endif

+ 3 - 3
samples/particles/src/ParticlesGame.cpp

@@ -319,7 +319,7 @@ std::string ParticlesGame::toString(ParticleEmitter::TextureBlending blending)
 void ParticlesGame::saveFile()
 {
     std::string filename;
-    filename = FileSystem::displayFileDialog(FileSystem::SAVE, "Save Particle File", "Particle Files", "particle");
+    filename = FileSystem::displayFileDialog(FileSystem::SAVE, "Save Particle File", "Particle Files", "particle", "res");
 
     if (filename.length() == 0)
         return;
@@ -737,7 +737,7 @@ void ParticlesGame::controlEvent(Control* control, EventType evt)
         else if (control == _load)
         {
             Game::getInstance()->pause();
-            std::string filename = FileSystem::displayFileDialog(FileSystem::OPEN, "Select Particle File", "Particle Files", "particle");
+            std::string filename = FileSystem::displayFileDialog(FileSystem::OPEN, "Select Particle File", "Particle Files", "particle", "res");
             if (filename.length() > 0)
             {
                 _url = filename;
@@ -1144,7 +1144,7 @@ void ParticlesGame::resizeEvent(unsigned int width, unsigned int height)
 
 void ParticlesGame::updateTexture()
 {
-    std::string file = FileSystem::displayFileDialog(FileSystem::OPEN, "Select Texture", "PNG Files", "png");
+    std::string file = FileSystem::displayFileDialog(FileSystem::OPEN, "Select Texture", "Texture Files", "png", "res");
     if (file.length() > 0)
     {
         // Set new sprite on our emitter