Browse Source

super overhaul

seanpaultaylor 4 years ago
parent
commit
7e9f541ea3
100 changed files with 1839 additions and 16708 deletions
  1. 87 0
      .clang-format
  2. 7 0
      .editorconfig
  3. 5 0
      .flake8
  4. 2 47
      .gitattributes
  5. 34 142
      .gitignore
  6. 0 23
      .travis.yml
  7. 8 0
      .vscode/extensions.json
  8. 69 0
      .vscode/launch.json
  9. 147 0
      .vscode/settings.json
  10. 38 0
      .vscode/tasks.json
  11. 2 289
      CHANGES.md
  12. 0 30
      CMakeLists.txt
  13. 356 0
      CODING.md
  14. 7 14
      README.md
  15. 0 3
      api/README.md
  16. 0 34
      api/header.html
  17. 3 0
      build.bat
  18. 97 0
      build.py
  19. 4 0
      build.sh
  20. 32 0
      config/app.config.toml
  21. 941 0
      config/gamecontrollerdb.txt
  22. 0 1783
      gameplay.doxyfile
  23. 0 69
      gameplay.sln
  24. 0 19
      gameplay.xcworkspace/contents.xcworkspacedata
  25. 0 8
      gameplay.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  26. 0 185
      gameplay/.cproject
  27. 0 83
      gameplay/.project
  28. 0 591
      gameplay/CMakeLists.txt
  29. 0 13
      gameplay/android/.classpath
  30. 0 57
      gameplay/android/.cproject
  31. 0 104
      gameplay/android/.project
  32. 0 9
      gameplay/android/AndroidManifest.xml
  33. 0 40
      gameplay/android/build.xml
  34. 0 270
      gameplay/android/jni/Android.mk
  35. 0 7
      gameplay/android/jni/Application.mk
  36. 0 3
      gameplay/android/project.properties
  37. BIN
      gameplay/android/res/drawable/icon.png
  38. 0 565
      gameplay/gameplay.pro
  39. 0 680
      gameplay/gameplay.vcxproj
  40. 0 1638
      gameplay/gameplay.vcxproj.filters
  41. 0 2479
      gameplay/gameplay.xcodeproj/project.pbxproj
  42. 0 68
      gameplay/gameplay.xcodeproj/xcshareddata/xcschemes/gameplay-ios.xcscheme
  43. 0 68
      gameplay/gameplay.xcodeproj/xcshareddata/xcschemes/gameplay-macosx.xcscheme
  44. BIN
      gameplay/res/design/arial.ttf
  45. BIN
      gameplay/res/design/default-theme.psd
  46. BIN
      gameplay/res/design/icon_128.ico
  47. BIN
      gameplay/res/design/icon_16.ico
  48. BIN
      gameplay/res/design/icon_32.ico
  49. BIN
      gameplay/res/design/icon_64.ico
  50. 0 27
      gameplay/res/design/logo.ai
  51. BIN
      gameplay/res/icon.png
  52. BIN
      gameplay/res/icon_tray.png
  53. BIN
      gameplay/res/logo_black.png
  54. BIN
      gameplay/res/logo_powered_black.png
  55. BIN
      gameplay/res/logo_powered_white.png
  56. BIN
      gameplay/res/logo_white.png
  57. 0 41
      gameplay/res/materials/terrain.material
  58. 0 144
      gameplay/res/shaders/colored.frag
  59. 0 149
      gameplay/res/shaders/colored.vert
  60. 0 40
      gameplay/res/shaders/font.frag
  61. 0 22
      gameplay/res/shaders/font.vert
  62. 0 92
      gameplay/res/shaders/lighting.frag
  63. 0 67
      gameplay/res/shaders/lighting.vert
  64. 0 25
      gameplay/res/shaders/skinning-none.vert
  65. 0 84
      gameplay/res/shaders/skinning.vert
  66. 0 22
      gameplay/res/shaders/sprite.frag
  67. 0 22
      gameplay/res/shaders/sprite.vert
  68. 0 152
      gameplay/res/shaders/terrain.frag
  69. 0 114
      gameplay/res/shaders/terrain.vert
  70. 0 155
      gameplay/res/shaders/textured.frag
  71. 0 180
      gameplay/res/shaders/textured.vert
  72. BIN
      gameplay/res/ui/arial.gpb
  73. BIN
      gameplay/res/ui/default-theme.png
  74. 0 474
      gameplay/res/ui/default.theme
  75. 0 98
      gameplay/src/AIAgent.cpp
  76. 0 174
      gameplay/src/AIAgent.h
  77. 0 188
      gameplay/src/AIController.cpp
  78. 0 107
      gameplay/src/AIController.h
  79. 0 204
      gameplay/src/AIMessage.cpp
  80. 0 283
      gameplay/src/AIMessage.h
  81. 0 82
      gameplay/src/AIState.cpp
  82. 0 136
      gameplay/src/AIState.h
  83. 0 143
      gameplay/src/AIStateMachine.cpp
  84. 0 161
      gameplay/src/AIStateMachine.h
  85. 0 44
      gameplay/src/AbsoluteLayout.cpp
  86. 0 67
      gameplay/src/AbsoluteLayout.h
  87. 0 478
      gameplay/src/Animation.cpp
  88. 0 241
      gameplay/src/Animation.h
  89. 0 692
      gameplay/src/AnimationClip.cpp
  90. 0 414
      gameplay/src/AnimationClip.h
  91. 0 136
      gameplay/src/AnimationController.cpp
  92. 0 106
      gameplay/src/AnimationController.h
  93. 0 561
      gameplay/src/AnimationTarget.cpp
  94. 0 248
      gameplay/src/AnimationTarget.h
  95. 0 73
      gameplay/src/AnimationValue.cpp
  96. 0 88
      gameplay/src/AnimationValue.h
  97. 0 516
      gameplay/src/AudioBuffer.cpp
  98. 0 84
      gameplay/src/AudioBuffer.h
  99. 0 177
      gameplay/src/AudioController.cpp
  100. 0 76
      gameplay/src/AudioController.h

+ 87 - 0
.clang-format

@@ -0,0 +1,87 @@
+AccessModifierOffset: -4
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignTrailingComments: false
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortFunctionsOnASingleLine: false
+AllowShortIfStatementsOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine : false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: false
+AlwaysBreakBeforeMultilineStrings: true
+AlwaysBreakTemplateDeclarations: true
+BinPackArguments: true
+BinPackParameters: false
+BreakBeforeBinaryOperators: false
+BreakBeforeBraces: Custom
+BraceWrapping:
+  AfterCaseLabel: true
+  AfterClass: true
+  AfterControlStatement: true
+  AfterEnum: true
+  AfterFunction: true
+  AfterNamespace: true
+  AfterObjCDeclaration: true
+  AfterStruct: true
+  AfterUnion: true
+  AfterExternBlock: true
+  BeforeCatch: true
+  BeforeElse: true
+  IndentBraces: false
+  SplitEmptyFunction: true
+  SplitEmptyRecord: true
+  SplitEmptyNamespace : true
+BreakBeforeTernaryOperators: false
+BreakConstructorInitializersBeforeComma: false
+BreakStringLiterals: false
+ColumnLimit: 120
+CommentPragmas: ''
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: false
+DerivePointerBinding: false
+FixNamespaceComments: true
+IndentCaseLabels: false
+IndentPPDirectives: AfterHash
+IndentFunctionDeclarationAfterType: false
+IndentWidth: 4
+SortIncludes: false
+IncludeCategories:
+  - Regex:           '[<"](.*\/)?Defines.h[>"]'
+    Priority:        1
+  - Regex:           '<gameplay\/.+>'
+    Priority:        3
+  - Regex:           '<[[:alnum:]_.]+>'
+    Priority:        5
+  - Regex:           '<[[:alnum:]_.\/]+>'
+    Priority:        4
+  - Regex:           '".*"'
+    Priority:        2
+IncludeBlocks: Regroup
+Language: Cpp
+MaxEmptyLinesToKeep: 2
+NamespaceIndentation: None
+ObjCSpaceAfterProperty: true
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 0
+PenaltyBreakComment: 1
+PenaltyBreakFirstLessLess: 0
+PenaltyBreakString: 1
+PenaltyExcessCharacter: 10
+PenaltyReturnTypeOnItsOwnLine: 1000
+PointerAlignment: Left
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles: false
+SpacesInCStyleCastParentheses: false
+SpacesInContainerLiterals: false
+SpacesInParentheses: false
+Standard: Cpp11
+ReflowComments: true
+TabWidth: 4
+UseTab: Never

+ 7 - 0
.editorconfig

@@ -0,0 +1,7 @@
+[*]
+indent_style = space
+indent_size = 4
+charset = utf-8
+trim_trailing_whitespace = true
+max_line_length = 120
+insert_final_newline = true

+ 5 - 0
.flake8

@@ -0,0 +1,5 @@
+[flake8]
+ignore=E402,E501,W503
+max-line-length = 120
+max-complexity = 18
+exclude=_*,.vscode,.git

+ 2 - 47
.gitattributes

@@ -1,49 +1,4 @@
-# Set default behaviour, in case users don't have core.autocrlf set.
 * text=auto
 * text=auto
-
-# Explicitly declare text files we want to always be normalized and converted to native line endings on checkout.
-*.cpp text
-*.c text
-*.mm text
-*.m text
-*.h text
-*.inl text
-*.lua text
-*.vert text
-*.frag text
-*.material text
-*.form text
-*.theme text
-*.particle text
-*.animation text
-*.audio text
-*.terrain text
-*.config text
-*.txt text
-*.xml text
-*.md text
-*.sh text
-*.project text
-*.cproject text
-
-# Declare windows files that will always have CRLF line endings on checkout.
-*.sln text eol=crlf
-*.vcxproj text eol=crlf
-*.vcxproj.filters text eol=crlf
-.vsxproj.user text eol=crlf
 *.bat text eol=crlf
 *.bat text eol=crlf
-
-# Denote all files that are truly binary and should not be modified.
-*.png binary
-*.jpg binary
-*.psd binary
-*.dds binary
-*.pvr binary
-*.r16 binary
-*.fbx binary
-*.mb binary
-*.ogg binary
-*.wav binary
-*.raw binary
-*.ttf binary
-*.gpb binary
+*.cmd text eol=crlf
+*.sh text eol=lf

+ 34 - 142
.gitignore

@@ -1,143 +1,35 @@
+_*/
+/.vs
+.DS_Store
+.cache
+.vscode/ipch
+
+*.py[cod]
+*.swp
 *.suo
 *.suo
-*.sdf
-*.opensdf
-*.layout
-*.depend
-*.pro.user
-.DS_Store*
-ehthumbs.db
-Icon?
-Thumbs.db
-.metadata
-.settings
-/ipch
-/build
-/cmake
-/Debug
-/Release
-/api/xml
-/bin
-/external-deps
-/api/html
-Makefile
-Makefile.Debug
-Makefile.Release
-gameplay.xcworkspace/xcshareddata/gameplay.xccheckout
-
-/gameplay/Debug
-/gameplay/DebugMem
-/gameplay/Release
-/gameplay/android/NUL
-/gameplay/android/proguard.cfg
-/gameplay/android/proguard-project.txt
-/gameplay/android/local.properties
-/gameplay/android/bin
-/gameplay/android/gen
-/gameplay/android/libs
-/gameplay/android/obj
-/gameplay.xcworkspace/xcuserdata
-/gameplay/gameplay.xcodeproj/xcuserdata
-/gameplay/gameplay.vcxproj.user
-
-/tools/encoder
-/tools/encoder/Debug
-/tools/encoder/Release
-/tools/encoder/gameplay-encoder.xcodeproj/xcuserdata
-/tools/encoder/gameplay-encoder.xcodeproj/project.xcworkspace/
-/tools/encoder/gameplay-encoder.vcxproj.user
-
-/tools/luagen
-/tools/luagen/Release
-/tools/luagen/Debug
-/tools/luagen/gameplay-luagen.xcodeproj/xcuserdata
-/tools/luagen/gameplay-luagen.xcodeproj/project.xcworkspace/
-/tools/luagen/doxygen_entrydb_680.tmp
-/tools/luagen/doxygen_objdb_680.tmp
-/tools/luagen/xml
-
-/tools/editor
-/tools/editor/src
-/tools/editor/Debug
-/tools/editor/Release
-
-/samples/browser/Debug
-/samples/browser/DebugMem
-/samples/browser/Release
-/samples/browser/res/shaders
-/samples/browser/res/ui
-/samples/browser/res/logo_powered_white.png
-/samples/browser/src/org
-/samples/browser/android/src
-/samples/browser/android/assets
-/samples/browser/android/bin
-/samples/browser/android/gen
-/samples/browser/android/libs
-/samples/browser/android/obj
-/samples/browser/android/NUL
-/samples/browser/android/local.properties
-/samples/browser/android/proguard-project.txt
-/samples/browser/sample-browser.xcodeproj/xcuserdata
-/samples/browser/sample-browser.vcxproj.user
-
-/samples/character/Debug
-/samples/character/DebugMem
-/samples/character/Release
-/samples/character/res/shaders
-/samples/character/res/ui
-/samples/character/res/logo_powered_white.png
-/samples/character/src/org
-/samples/character/android/src
-/samples/character/android/assets
-/samples/character/android/bin
-/samples/character/android/gen
-/samples/character/android/libs
-/samples/character/android/obj
-/samples/character/android/NUL
-/samples/character/android/local.properties
-/samples/character/android/proguard-project.txt
-/samples/character/android/proguard.cfg
-/samples/character/res/gamepad.xcf
-/samples/character/sample-character.xcodeproj/xcuserdata
-/samples/character/sample-character.vcxproj.user
-/samples/character/game.config
-
-/samples/racer/Debug
-/samples/racer/DebugMem
-/samples/racer/Release
-/samples/racer/res/shaders
-/samples/racer/res/ui
-/samples/racer/res/logo_powered_white.png
-/samples/racer/src/org
-/samples/racer/android/src
-/samples/racer/android/assets
-/samples/racer/android/bin
-/samples/racer/android/gen
-/samples/racer/android/libs
-/samples/racer/android/obj
-/samples/racer/android/NUL
-/samples/racer/android/local.properties
-/samples/racer/android/proguard-project.txt
-/samples/racer/android/proguard.cfg
-/samples/racer/sample-racer.xcodeproj/xcuserdata
-/samples/racer/sample-racer.vcxproj.user
-/samples/racer/game.config
-
-/samples/spaceship/Debug
-/samples/spaceship/DebugMem
-/samples/spaceship/Release
-/samples/spaceship/res/shaders
-/samples/spaceship/res/ui
-/samples/spaceship/res/logo_powered_white.png
-/samples/spaceship/src/org
-/samples/spaceship/android/src
-/samples/spaceship/android/assets
-/samples/spaceship/android/bin
-/samples/spaceship/android/gen
-/samples/spaceship/android/libs
-/samples/spaceship/android/obj
-/samples/spaceship/android/NUL
-/samples/spaceship/android/local.properties
-/samples/spaceship/android/proguard.cfg
-/samples/spaceship/android/proguard-project.txt
-/samples/spaceship/sample-spaceship.xcodeproj/xcuserdata
-/samples/spaceship/sample-spaceship.vcxproj.user
+*.diff
+*.patch
+*.ico
+*.bmp
+*.png
+*.gif
+*.jpg
+*.jpeg
+*.tga
+*.psd
+*.raw
+*.exr
+*.hdr
+*.dds
+*.ktx
+*.spv
+*.dxbc
+*.dxil
+*.gltf
+*.glb
+*.fbx
+*.usd
+*.usda
+*.usdz
+*.obj
+*.mat

+ 0 - 23
.travis.yml

@@ -1,23 +0,0 @@
-language: cpp
-before_script:
-  - ./install.sh
-  - mkdir build
-  - cd build
-  - cmake ..
-script: make
-compiler:
-  - gcc
-addons:
-  apt:
-    sources:
-    - ubuntu-toolchain-r-test
-    packages:
-    - libglu1-mesa-dev
-    - libogg-dev
-    - libopenal-dev
-    - lib32z1-dev
-    - libgtk2.0-dev
-notifications:
-  email: false
-sudo: required
-dist: trusty

+ 8 - 0
.vscode/extensions.json

@@ -0,0 +1,8 @@
+{
+	// See http://go.microsoft.com/fwlink/?LinkId=827846
+	// for the documentation about the extensions.json format
+	"recommendations": [
+		"ms-vscode.cpptools",
+		"ms-python.python",
+	]
+}

+ 69 - 0
.vscode/launch.json

@@ -0,0 +1,69 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "gameplay.editor (windows-x86_64-debug)",
+            "type": "cppvsdbg",
+            "request": "launch",
+            "program": "${workspaceFolder}/_build/windows-x86_64/debug/gameplay.editor.exe",
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": false,
+            "internalConsoleOptions": "openOnSessionStart"
+        },
+        {
+            "name": "gameplay.editor (windows-x86_64-release)",
+            "type": "cppvsdbg",
+            "request": "launch",
+            "program": "${workspaceFolder}/_build/windows-x86_64/release/gameplay.editor.exe",
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": false,
+            "internalConsoleOptions": "openOnSessionStart"
+        },
+        {
+            "name": "gameplay.editor (linux-x86_64-debug)",
+            "type": "cppdbg",
+            "request": "launch",
+            "program": "${workspaceRoot}/_build/linux-x86_64/debug/gameplay.editor",
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": false,
+            "MIMode": "gdb",
+            "showDisplayString": true,
+            "setupCommands": [
+                {
+                    "description": "Enable pretty-printing for gdb",
+                    "text": "-enable-pretty-printing",
+                    "ignoreFailures": true
+                }
+            ],
+            "sourceFileMap": {
+                "/build/glibc-OTsEL5/glibc-2.27": "/usr/src/glibc/glibc-2.27",
+                "/opt/rh/devtoolset-7/root": "/"
+            },
+        },
+        {
+            "name": "gameplay.editor (linux-x86_64-release)",
+            "type": "cppdbg",
+            "request": "launch",
+            "program": "${workspaceRoot}/_build/linux-x86_64/release/gameplay.editor",
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": false,
+            "MIMode": "gdb",
+            "showDisplayString": true
+        },
+    ]
+}

+ 147 - 0
.vscode/settings.json

@@ -0,0 +1,147 @@
+{
+    "files.associations": {
+        "array": "cpp",
+        "atomic": "cpp",
+        "*.tcc": "cpp",
+        "bitset": "cpp",
+        "cctype": "cpp",
+        "cfenv": "cpp",
+        "chrono": "cpp",
+        "cinttypes": "cpp",
+        "clocale": "cpp",
+        "cmath": "cpp",
+        "complex": "cpp",
+        "condition_variable": "cpp",
+        "csetjmp": "cpp",
+        "csignal": "cpp",
+        "cstdarg": "cpp",
+        "cstddef": "cpp",
+        "cstdint": "cpp",
+        "cstdio": "cpp",
+        "cstdlib": "cpp",
+        "cstring": "cpp",
+        "ctime": "cpp",
+        "cwchar": "cpp",
+        "cwctype": "cpp",
+        "deque": "cpp",
+        "forward_list": "cpp",
+        "list": "cpp",
+        "unordered_map": "cpp",
+        "unordered_set": "cpp",
+        "vector": "cpp",
+        "exception": "cpp",
+        "optional": "cpp",
+        "string_view": "cpp",
+        "rope": "cpp",
+        "slist": "cpp",
+        "fstream": "cpp",
+        "functional": "cpp",
+        "future": "cpp",
+        "initializer_list": "cpp",
+        "iomanip": "cpp",
+        "iosfwd": "cpp",
+        "iostream": "cpp",
+        "istream": "cpp",
+        "limits": "cpp",
+        "mutex": "cpp",
+        "new": "cpp",
+        "ostream": "cpp",
+        "numeric": "cpp",
+        "ratio": "cpp",
+        "scoped_allocator": "cpp",
+        "shared_mutex": "cpp",
+        "sstream": "cpp",
+        "stdexcept": "cpp",
+        "streambuf": "cpp",
+        "system_error": "cpp",
+        "thread": "cpp",
+        "regex": "cpp",
+        "tuple": "cpp",
+        "type_traits": "cpp",
+        "utility": "cpp",
+        "typeindex": "cpp",
+        "typeinfo": "cpp",
+        "valarray": "cpp",
+        "memory": "cpp",
+        "map": "cpp",
+        "*.idl": "cpp",
+        "algorithm": "cpp",
+        "codecvt": "cpp",
+        "concepts": "cpp",
+        "filesystem": "cpp",
+        "ios": "cpp",
+        "iterator": "cpp",
+        "locale": "cpp",
+        "memory_resource": "cpp",
+        "queue": "cpp",
+        "random": "cpp",
+        "set": "cpp",
+        "stack": "cpp",
+        "string": "cpp",
+        "variant": "cpp",
+        "xfacet": "cpp",
+        "xhash": "cpp",
+        "xiosbase": "cpp",
+        "xlocale": "cpp",
+        "xlocbuf": "cpp",
+        "xlocinfo": "cpp",
+        "xlocmes": "cpp",
+        "xlocmon": "cpp",
+        "xlocnum": "cpp",
+        "xloctime": "cpp",
+        "xmemory": "cpp",
+        "xstddef": "cpp",
+        "xstring": "cpp",
+        "xtr1common": "cpp",
+        "xtree": "cpp",
+        "xutility": "cpp",
+        "resumable": "cpp",
+        "xthread": "cpp",
+        "xmemory0": "cpp",
+        "hash_map": "cpp",
+        "hash_set": "cpp",
+        "climits": "cpp"
+    },
+    "editor.rulers": [120],
+    "files.watcherExclude": {
+        "**/.git/objects/**": true,
+        "**/.git/subtree-cache/**": true,
+        "**/node_modules/**": true,
+        "**/_build/**": true,
+        "**/_compiler/**": true
+    },
+    "typescript.tsc.autoDetect": "off",
+    "grunt.autoDetect": "off",
+    "jake.autoDetect": "off",
+    "gulp.autoDetect": "off",
+    "npm.autoDetect": "off",
+    "spellright.language": [
+        "en"
+    ],
+    "spellright.documentTypes": [
+        "markdown",
+        "latex",
+        "plaintext",
+        "cpp",
+        "asciidoc"
+    ],
+
+    
+    // For intellisense to work you need python 3.6 available on your system:
+    "python.pythonPath": "${workspaceFolder}/_build/host-deps/python", 
+
+    // This enables python language server. Seems to work slightly better than jedi:
+    "python.jediEnabled": false, 
+
+    // Python env file is generated buring build step. It points python to binary bindings files for intellisense to work.
+    // If you are building only release configuration you can switch this to "python_release.env":
+    "python.envFile": "${workspaceFolder}/_build/python_debug.env",
+
+    // We use "black" as a formatter:
+    "python.formatting.provider": "black",
+    "python.formatting.blackArgs": ["--line-length", "120"],
+
+    // Use flake8 for linting
+    "python.linting.pylintEnabled": false,
+    "python.linting.flake8Enabled": true,
+}

+ 38 - 0
.vscode/tasks.json

@@ -0,0 +1,38 @@
+{
+    // See https://go.microsoft.com/fwlink/?LinkId=733558
+    // for the documentation about the tasks.json format
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build",
+            "type": "shell",
+            "command": "./build.sh ",
+            "windows": {
+                "command": ".\\build.bat"
+            },
+            "problemMatcher": {
+                "owner": "cpp",
+                "fileLocation": [
+                    "relative",
+                    "${workspaceRoot}/_compiler/vs2019"
+                ],
+                "pattern": {
+                    "regexp": "^(.*):(\\d+): \\s+(warning|error):\\s+(.*)$",
+                    "file": 1,
+                    "line": 2,
+                    "severity": 3,
+                    "message": 4
+                }
+            },
+            "group": {
+                "kind": "build",
+                "isDefault": true
+            },
+            "presentation": {
+                "reveal": "always",
+                "panel": "dedicated",
+                "clear": true
+            }
+        },
+    ]
+}

+ 2 - 289
CHANGES.md

@@ -1,290 +1,3 @@
-## v3.0.0
-
-- Adds support for Visual Studio 2015.
-- Adds support for FBX SDK 2016.1.2
-- Adds support for 2D Sprite, TileSet and Text.
-- Adds support for node instance scripts.
-- Adds support for C++11.
-- Adds support for MacOSX 64-bit.
-- Adds support for iOS 8+.
-- Adds support for XCode 6+.
-- Adds support for QTCreator for Linux and MacOSX.
-- Adds support for Eclipse for Linux.
-- Adds support for Eclipse for Android.
-- Adds support for Bullet Physics 2.82
-- Adds support for cubemap textures.
-- Adds support for font kerning.
-- Adds support for Android x86.
-- Adds support for CMake on MacOSX.
-- Adds support for gamepads on Android.
-- Adds supoprt for Android extensions through custom native activity.
-- Adds water sample to browser.
-- Adds audio player sample to browser. 
-- Adds GamePlay-deps repository for cross-platform Cmake dependency builds.
-- Adds map/unmap buffer for Mesh and MeshPart.
-- Fixes to Scene Graph for merging Drawables on Node.
-- Fixes from setUserPointer to setUserObject(Ref*)
-- Fixes for virtual gamepad scaling.
-- Fixes Image to support grayscale PNGs.
-- Fixes Android to build with arm instead of thumb.
-- Fixes Android crash when gamepads disconnected.
-- Fixes for lua script bindings.
-
-## v2.0.0
-
-- Adds support for Visual Studio 2013.
-- Adds support for iOS 7, MacOS X 10.9 and XCode 5.
-- Adds support for BlackBerry NDK 10.2.
-- Adds support for CollisionObject group mask filtering.
-- Adds support in shaders for multiple lights using shader defines.
-- Adds various improvements to Material binding support.
-- Adds support for array MaterialParameter's.
-- Adds support for encoding distance field based fonts.
-- Adds support for multiple sizes of fonts encoded into single bundle.
-- Adds improvements for simplified layout for forms and theming.
-- Adds ControlFactory to instantiate core controls and support users registering custom controls.
-- Adds support for percentage based layout definitions for controls in forms.
-- Adds password mode on Textbox controls.
-- Adds improvements to Textbox key repeat and cursor jump modifiers.
-- Adds FileSystem::displayFileDialog on all desktop platforms.
-- Adds Terrain support for material definition for user customization.
-- Adds support to RenderState FrontFace.
-- Adds Node::setActive, getActive and getActiveInHierachy.
-- Adds ETC compressed texture support.
-- Adds gameplay::strcmpnocase as a platform-independent case-insensitive string compare function.
-- Adds new gestures for Long Tap, Drag and Drop.
-- Adds support for Android pinch gestures.
-- Adds version number to encoder output files.
-- Adds support for variables like ${my_variable} in any Properties file formats.
-- Fixes to specular and bumped shader for spot lights.
-- Fixes to UI rendering quality from FrameBuffer usage which is no longer used.
-- Fixes to Texbox focus related issues.
-- Fixes to Label clipping and Labels to automatically re-size around their text.
-- Fixes in Camera related to invalid project() and setActiveCamera() issues.
-- Fixes for Linux VSYNC and mouse capture and mouse wheel values.
-- Fixes various logging and warning problems and annoyances.
-- Fixes bitmap font rendering quality in gameplay-encoder and Font class.
-- Fixes Mesh CollisionShape's.
-- Fixes for destroying CollisionObject that does not notify CollisionListener.
-- Fixes to PhysicsVehicle where wheels detach and may collide with body.
-- Fixes to encoder spotlight for properly extracting inner and outer angle from FBX.
-- Fixes encoder computed Light falloff attenuation values.
-- Fixes to invalid assertion in AnimationClip.
-- Fixes for FrameBuffer width/height goeing out of date.
-- Fixes for incorrect RenderState Type specifier.
-- Fixes to FileSystem for Windows file paths.
-- Fixes to improve speed of installation of binaries via install.sh/.bat scripts.
-- Fixes related to disable and non-visible controls not receiving input.
-- Fixes to Bundle, Font, Properties and SceneLoader to use GP_WARN and improve locations of errors.
-- Fixes to encoder related to Material generation.
-
-## v1.7.0
-
-- Adds -m parameter to encoder to support exporting Material from FBX scenes.
-- Adds encoder animation grouping arguments for auto grouping and disabling grouping via -g:auto and -g:off
-- Adds UI ImageControl
-- Adds UI control events for enter and leave.
-- Adds UI and theme support for focus state on controls.
-- Adds Gamepad support in UI.
-- Adds smooth interial mouse scrolling.
-- Adds keyboard event handling code that was missed on some UI containers and controls.
-- Adds Game accelerometer and gyro improvements.
-- Adds XBox 360 controller support to MacOS X.
-- Adds RenderState enum for supporting cull side definition for front, back and front-back culling.
-- Adds a lua function "convert(object, className)" that will convert a gameplay userdata object to another class type by changing the metatable. (For example: This lets you convert Control to Button in lua)
-- Adds gesture events to script.
-- Adds script friendly verions of Camera:project(..)
-- Adds support for defining lights in .scene file.
-- Adds MaterialParameter setter that are script friendly.
-- Adds methods to FrameBuffer for querying render target info.
-- Adds FileSystem::getDirectoryName()
-- Adds support so that Properties can be loaded relative to .property files.
-- Adds methods on ScriptController for registering and unregisering global script callback functions.
-- Adds Game::resizeEvent(..)
-- Adds Game::getArguments()
-- Adds Scene::load() so it can load from ".gpb" files.
-- Adds some additional operators overloads for Vector classes.
-- Adds RenderState::clearParameter method to allow existing material parameter values/bindings to be cleared.
-- Adds loopBlendTime property for animation clips to support interpolating between the end points of an animation clip when looping.
-- Fixes Xcode support to be up to date to version 6.1
-- Fixes Form::projectPoint for forms that are scaled.
-- Fixes Bullet NEON build problems.
-- Fixes problem with static rigid bodies attached to nodes.
-- Fixes problems with ghost objects and kinimatic rigid bodies.
-- Fixes userData pointer that was not cloned properly when cloning a node.
-- Fixes bug in createChannel with keyCount = 1.
-- Fixes encoder to ignore 1 frame animations caused by FBX export on Blender.
-- Fixes buggy tab order in UI.
-- Fixes touch event problems not propagating up on mobile touch platforms.
-- Fixes parent relationship on cloned Technique and Pass.
-- Fixes Node to include light contribution for bounding volume computations.
-- Fixed issue where multiple samplers pointing to the same texture would share the same state instead of using sampler-specific filter and wrap state.
-- Fixes calculation of the transform matrix in FBX encoder for lights properly considering vectors like pre and post rotation scenarios.
-- Fixes blurry borders on UI forms by using proper texture filtering.
-- Fixes lua dofile on Windows.
-- Fixes in colored shader when using spot ligts.
-- Fixes issue in encoder which was converting point lights into ambient lights when they had no decay.
-- Fixes to CMake projects on different platforms.
-- Cleans up Platform by moving commong platform code to Platform.cpp
-- Cleans up and changes Gamepad APIs.
-- Cleans repo directory restructure dropping gameplay- prefix on many folders and files.
-- Removes bin and external-deps folder/contents to external server with new install scripts that are now required to be run after cloning the repo.
-- Removes pre-compiled api/html docs to reduce repository bloat.
-- Removes support for COLLADA DAE and now support FBX.
-- Removes middle mouse button simulated desktop accelerometer.
-
-## v1.6.0
-
-- Adds file Stream interface for reading/writing files instead of using fread/fwrite. 
-- Adds Terrain class to support for heightmap based terrains featuring LOD, multiple surface layers, loading from PNG, RAW8/16, full transform, physics, patch culling and verticle skirt for cracks.
-- Adds object-space normal map generation to gameplay-encoder for terrain normal map generation.
-- Adds scene support for loading .terrain files in .scene files.
-- Adds scene support for inline cameras to .scene files.
-- Adds suppoft for defining .scene files without 'path' to gpb. New node can not be create in .scene file.
-- Adds static Scene::getScene(const char*) to query currently active scenes in a game, helpful for script access.
-- Adds support for multiple translate, rotate and scale commands in a single node entity within .scene files, processed in-order they are defined.
-- Adds scene support for material auto binding scene ambient color, light color and light direction.
-- Adds support for setting the depth compare function on materials.
-- Adds support for texture/sampler arrays being passed to materials.
-- Adds support for loading uncompressed DDS textures for the following formats: R8G8B8, A8R8G8B8, A8B8G8R8, X8R8G8B8, X8B8G8R8
-- Adds improvments to prefer higher quality mipmap generation.
-- Adds improved Gamepad API support for button enumeration, triggers and some mobile Gamepad support on BlackBerry.
-- Adds additional gameplay-tests for billboards, forms, gamepads and lights.
-- Adds support for launching the browser via launchURL(const char*).
-- Adds physics support for setLinearFactor and setAngularFactor  on rigid bodies.
-- Adds methods to PhysicsCollisionObject to allow conversion to subclass types (i.e. PhysicsRigidBody, PhysicsCharacter, etc) from script.
-- Adds option for fullscreen without width/height config to use native desktop resolution.
-- Adds Linux support for OpenAL PulseAudio back-end.
-- Adds support for latest Bullet Physics 2.81 with NEON optimizations for mobile targets.
-- Adds support for preprocessor directive NO_LUA_BINDINGS in the gameplay project to omit inclusion of generated lua bindings in compilation for developer mode value. 
-- Adds optimizations to Lua generator to only write generated files if they differ from existing files, reducing both build times and committing of unchanged script binding files.
-- Adds changes to Slider for setValueTextVisible, setValueTextAlignment, setValueTextPrecision and getters.
-- Adds Microsoft Windows 7 64-bit support.
-- Adds Apple iOS 6 support.
-- Fixes to external-deps to reduce the size of the libraries on Windows.
-- Fixes for Android to no longer need to copy files to the SD card before reading them. None of the Android samples require an SD card.
-- Fixes for animation of opacity on UI and fonts.
-- Fixes in UI for removing controls and also setVisible(bool).
-- Fixes for UI controls missing on MacOSX.
-- Fixes for setting UI alignment programmatically.
-- Fixes for lighting shaders.
-- Fixes to the texture minification mode from GL_LINEAR_MIPMAP_LINEAR to GL_NEAREST_MIPMAP_LINEAR for newly created textures with mipmaps.
-- Fixes minor memory leaks and possible access violations when calling Game::exit() from script.
-- Fixes physics debug drawing for large scenes causing the internal MeshBatch to grow to an enormous size.
-
-## v1.5.0
-
-- Linux support. (tested on Ubuntu 12)
-- CMake support for makefile generation for Linux.
-- Gamepad API support for desktops.
-- Touch gesture support for tap, swipe and pinch.
-- Vehicle physics support via new PhysicsVehicle and PhysicsVehicleWheel classes.
-- Adds new racer sample (sample06-racer).
-- Adds gameplay-tests project as a test app for various basic engine features with some initial tests.
-- Adds support for Scene files for wildcard identifiers.
-- Adds Visual Studio Plug-in support for BlackBerry PlayBook and BlackBerry 10.
-- Adds configurable multi-sampling anti-aliasing support. 
-- Adds updates to latest FBX SDK 2013.3.
-- Adds file formats documentation for game.config .scene, .material, .animation, .physics, .particle
-- Adds Game/Platform::canExit for testing device capabilities to quit. (only ios)
-- Web community forums at http://www.gameplay3d.org/forums.
-- Changed keyTimes from unsigned long[]  to unsigned int[]. (breaks compat. in AnimationTarget and Animation::Channel)
-- Fixes inconsistencies from Bundle::getObjectID() to Bundle::getObjectId() (breaks compat. in Bundle)
-- Fixes the texture coordinates of Mesh::createQuad(float x, float y, float width, float height).
-- Fixes line-wise distortion when loading RGB png's into textures that are non-power of two.
-- Fixes inconsistencies in createXXXX methods.  (breaks compat. in Scene)
-- Fixes Rectangle::contains.
-- Fixes Lua print logging.
-- Fixes Lua errors to be treated as runtime warnings.
-- Fixes setVertexData to pointers instead of constant data.
-- Fixes AudioSource so that it doesn't loop by default.
-- Fixes minor UI scrolling issues.
-
-## v1.4.0
-
-- Lua script bindings for all gameplay interfaces.
-- Lua script binding generator tool (gameplay-luagen) for generating gameplay Lua bindings from doxygen xml output.
-- AIController, AIAgent, AIStateMachine, AIState and AIMessage classes for scripted AI support.
-- Sample for sample05-lua to demonstrate basic Lua with AI scripting.
-- Gamepad class with virtual gamepad support.
-- Pre-built versions gameplay-encoder added to bin folder with TTF, DAE and FBX support built-in.
-- Improved modular shaders with support for #include in shaders. (breaks compat. for shaders)
-- LightMap support into colored-unlit.frag and textured-unlit.frag shaders.
-- Adds cloning and wireframing features to sample03-character.
-- Adds kick the ball on the sample03-character to demonstrate 2 buttons and more physics.
-- Fixes missing mouse events on UI controls.
-- Fixes to gameplay-encoder to prompt user for font size if not specified.
-- Fixes to add "-g" as short form argument for grouping animations.
-- Fixes node cloning.
-- Fixes to gameplay-encoder for output file path when encoding fonts.
-- Fixes to FrameBuffer, RenderTarget and DepthStencilTarget.
-- Fixes user switching in MacOSX to other applications with Apple-Tab.
-- Fixes measureText with empty string to be proper size.
-- Fixes for aliased text by applying linear filtering by default on Fonts.
-- Fixes RenderState::StateBlock::bindNoRestore() issue where blend function was not restored to the proper defaults.
-- Fixes some inconsistencies in Game event method names for menuEvent. (breaks compat. in Game)
-- Fixes some inconsistencies with AnimationClip::getID() to be same as Node::getId() and other classes. (breaks compat. in AnimationClip)
-- Fixes to gameplay-encoder and PhysicsRigidBody for heightmaps which adds height precision into generated heightmap png's.
-
-## v1.3.0
-
-- Portrait mode games on mobile platforms.
-- Fullscreen and configurable game resolutions on desktop platforms.
-- User Interface support for scrolling with scrollbars on Container.
-- PVRTC, ATC and DXT texture compression support.
-- Performance improvements in user interface forms and text.
-- Performance improvements in animations on transforms.
-- Performance improvements using NEON math for BlackBerry and iOS.
-- Fixes for improvements in error handling throughout all systems.
-- Fixes supporting built-in Maya COLLADA exporter via DAE_FBX export.
-- Fixes for latest FBX SDK 2013 support.
-- Fixes for loading from some WAV files that were crashing.
-- Fixes for From/By animations.
-- Fixes allowing all inline properties loaded within .scene files. (breaks compat. for .scene)
-- Fixes in .scene files for collisionObject definitions (breaks compat. for .scene)
-- Fixes for depth/z-ordering of controls.
-
-## v1.2.0
-
-- BlackBerry 10 support.
-- iOS 5.1 support.
-- Android 2.3+ support.
-- User interface system with declarative forms and themes.
-- Bluetooth keyboard/mouse support on BlackBerry platform.
-- Developer guide.
-- Sample/tutorial for sample03-character.
-- Sample for sample04-particles to demonstrate particle emitters.
-- Fixes for loading properties from URL.
-- Fixes on Win32/MacOSX for when mouse pointer leaves the window and returns.
-- Fixes to accelerometer for Android.
-- Fixes in animation blending.
-- Fixes to GPB for loading from single node and parent node. (breaks compat. for .gpb)
-
-## v1.1.0
-
-- FBX support in gameplay-encoder.
-- MacOSX platform support using XCode.
-- Off-screen rendering functionality using FrameBuffer.
-- Loading 3D scenes using declarative  .scene files.
-- Loading audio from .ogg files using vorbis.
-- Loading AudioSources from .audio files.
-- Loading Animations from .animation files.
-- AnimationClip support for cross fading.
-- Physics support using Bullet Physics.
-- Cross-platform new project generator.
-- Overloaded operators in Math classes.
-- Font improvements for justify, clip, wrap and scaling.
-- Fixes for Font::drawText to use point size and not float scalar.
-- Fixes for memory leaks in and fixes to AnimationTarget.
-- Fixes for bumped and parallax shaders.
-- Fixes to simplify folders for resources in samples.
-- Fixes to the material/shader system.
-- Fixes to the ParticleEmitter.
-
-## v1.0.0
-
-- Initial release.
-
-
-
+## v4.0.0 (super)
 
 
+- New framework acrhitecture

+ 0 - 30
CMakeLists.txt

@@ -1,30 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-project(GamePlay)
-
-set(GAMEPLAY_VERSION 3.0.0)
-set(CMAKE_C_COMPILER_INIT g++)
-
-# debug
-message( "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" )
-if ( "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG" )
-    add_definitions(-D_DEBUG)
-endif()
-
-# architecture
-if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-set(ARCH_DIR "x64")
-else()
-set(ARCH_DIR "x86")
-endif()
-
-# gameplay library
-add_subdirectory(gameplay)
-
-# gameplay samples
-add_subdirectory(samples)
-
-# gameplay encoder
-# A pre-compiled executable can be found in 'gameplay/bin'. Uncomment to build yourself.
-#add_subdirectory(tools/encoder)
-#add_subdirectory(tools/luagen)

+ 356 - 0
CODING.md

@@ -0,0 +1,356 @@
+# C++ Coding Guidelines
+
+This covers the basic coding guidline for all c++ code that is submitted to the project. 
+
+## Files
+Files should be named according to their class names:
+
+Ex. 
+class **Terrain** = **Terrain**.h + **Terrain**.cpp
+
+## Naming
+| Behaviour | Convention |
+| --- | --- |
+| Classes, Structs, Enum Classes and Typedefs | PascalCase |
+| Functions | camelCase |
+| Private + Protected member variables | _camelCase |
+| Public member variables | camelCase |
+| Local variables | camelCase |
+| Constants | UNDER_CASE |
+| Enum class values | UNDER_CASE |
+
+
+## Class Layout
+```cpp
+#pragma once
+
+#include <memory>
+
+namespace gameplay
+{
+namespace example
+{
+
+class Bar;
+
+class Foo
+{
+public:
+
+    Foo();
+    
+    ~Foo();
+    
+    Bar* getBar() const;
+    
+    void setBar(Bar* bar);
+
+private:
+    std::unique_ptr<Bar> _bar;
+};
+
+}
+}
+```
+
+## Classes
+- Each access modifier appears no more than once in a class, in the order:
+**public**, **protected**, **private**.
+- All **public** member variables live at start of the class.
+- All **private** member variables live at the end of the class.
+- Use **protected** member variables judiciously.
+- Constructors and destructors are the first methods in a class after **public** member variables.
+- The method implementations in cpp should appears in the order which they are declared in the class.
+- Avoid **inline** implementations unless absolutely needed and are trivial and short.
+
+## Enums
+- Should be declared in classes directly after constructor and destructors.
+- Keep the naming simple and short-and-sweet.
+```cpp
+namespace gameplay
+{
+namespace scene
+{
+class Camera
+{
+public:
+
+    Camera();
+ 
+    ~Camera();
+
+    enum class Mode
+    {
+        PERSPECTIVE,
+        ORTHOGRAPHIC
+    };
+
+    Camera::Mode getMode() const;
+```
+
+## Flags (bitwise)
+- We do not use enums for flags. They are instead 
+```cpp
+namespace gameplay
+{
+namespace graphics
+{
+
+typedef uint32_t DeviceFlags;
+constexpr DeviceFlags DEVICE_FLAG_NONE = 0;
+constexpr DeviceFlags DEVICE_FLAG_VALIDATION = 1 << 0;
+constexpr DeviceFlags DEVICE_FLAG_RAYTRACING = 1 << 1;
+constexpr DeviceFlags DEVICE_FLAG_SHARED_RESOURCE = 1 << 2;
+
+}
+}
+
+```
+
+## Smart Pointers vs Pointers
+- Use **std::unique_ptr<Foo>** for pointers whenever possible especially for public api pointers.
+- Any **delete** function call appearing in the code is a red flag and needs a good reason.
+- Use **std::shared_ptr<Foo>** only when sharing is required.
+- Use **std::vector** if you need an array and use **std::vector::data()** to get a raw pointer to the beginning of a vector.
+
+## Auto
+- Use **auto** sparingly and when needed to abstract a complex type.
+- Great for use on **std::** stl containers and smart pointers.
+- Be careful about accidental _copy-by-value_ when you meant _copy-by-reference_.
+- Understand the difference between **auto** and **auto&**.
+
+## Lambdas
+- Lambdas are acceptable where they make sense.
+- Focus use around anonymity.
+- Avoid over use, but for std algorithms Ex. **std::sort**, etc) they are great.
+
+## Range-based loops
+- They're great, use them.
+- They don't have to be combined with **auto**.
+- They are often more readable to not use auto for simple types:
+```cpp
+// More obvious that the iterator is a device index.
+for (int device : devices)
+```
+**vs.**
+```cpp
+// Suggests dev might be of type Device.
+for (const auto& device : devices) 
+```
+
+## Friend
+- Avoid using **friend** unless it is needed to restrict access to inter-class interop only.
+- It easily leads to _difficult-to-untangle_ interdependencies that are hard to maintain.
+- We will continue to remove where possible in existing code.
+
+## size_t
+- Use **size_t** for all size counts and accessing **std::size()** results.
+
+## int
+- We use **int** for all dimensions and lengths.
+
+## uint32_t
+- Use **uint32_t** instead of **unsigned int** recommended only for bitwise flags, masks, data, etc.
+
+## uint16_t
+- Use **uint16_t** instead of **unsigned short** recommended only for data.
+
+## uint8_t
+- Use **uint8_t** instead of **unsigned char**.
+
+## float
+- The **float** type is the primary precision for all data in the 2D and 3D world.
+- Used for low precision time intervals.
+- Use **double** is _only_ used when absolutely necessary for higher precision.
+
+## nullptr
+- Use **nullptr** instead of _0_ or _NULL_.
+
+## Errors and Logging
+- Use **GP_ERROR** macro for all errors that will stop the program in release and debug modes.
+```cpp
+GP_ERROR("Invalid json base64 string for propertyName: %s", propertyName);
+```
+- Use **GP_LOG_INFO** for one time logging events such as initialization or unexpected singularities.
+- Avoid excessive logging which can impact game engine performance, such as logging every frame.
+
+## GP_ Macros and Global Definitions
+- Use existing **GP_XXX** for various compile time change functionality.
+- Use **GP_XXX** as a prefix for all gameplay scoped macros and global constants.
+
+## Assertions
+- Use **GP_ASSERT** for quick danger checks in start of impl that is checked in debug mode.
+```cpp
+size_t MyReader::readXxxx(const char* propertyName, float** data)
+{
+    GP_ASSERT(propertyName);
+    GP_ASSERT(_type == Foo::Type::XYZ);
+```
+
+## Public member variable access
+- Use **this->** when accessing public variables in implementation code.
+```cpp
+void Sphere::set(const gameplay::Float3& center, float radius)
+{
+    this->center = center;
+    this->radius = radius;
+    ...
+```
+
+## Public member variable initialization
+- Initialize public member variables directly in .h file for awareness.
+```cpp
+class Rectangle
+{
+public:
+    float x = 0.0f;
+    float y = 0.0f;
+    float width = 0.0f;
+    float height = 0.0f;
+```
+
+## Protected + private member variable initialization
+- Initialize all **protected** and **private** member variables in constructor in cpp to obscure.
+- Initialize all **protected** and **private** member variables in the order they are declared.
+```cpp
+MyClass::MyClass() :
+    _fooX(0),
+    _fooY(0)
+     ...
+```
+
+## Commenting Headers
+- Avoid spelling and grammatical errors.
+- Header comments use _doxygen_ format. We are not too sticky on _doxygen_ formatting policy.
+- All public functions and variables must be documented.
+- The level of detail for the comment is based on the complexity for the api.
+- Most important is that comments are simple and have clarity on how to use the api.
+- **@brief** is not required and automatic assumed on first line of code. Easier to read too.
+- **@details** is not dropped and automatic assumed proceeding the summary line.
+- **@param** and **@return** are followed with a space after summary brief or details.
+
+```cpp
+    /**
+     * Tests whether this cube intersects the specified cube.
+     *
+     * You would add any specific details that may be needed here. This is
+     * only necessary if there is complexity to the user of the function.
+     *
+     * @param cube The cube to test intersection with.
+     * @return true if the specified cube intersects this cube;
+     *     false otherwise.
+     */
+    bool intersects(const Cube& cube) const;
+```
+
+## Commenting Implementation
+- Clean simple code is the best form of commenting.
+- Do not add comments above function definitions in .cpp they are already in header.
+- Used to comment necessary non-obvious implementation details not the api.
+- Only use // line comments on the line above the code you plan to comment.
+- Avoid /* */  block comments. Preventing others from easily doing their own block comments when testing, debugging, etc.
+- Avoid explicitly referring to identifiers in comments, since that's an easy way to make your comment outdated when an identifier is renamed.
+
+## Formatting
+- You should set your ide or editor to follow the formatting guidelines.
+- Keep all code less than **120** characters per line.
+
+## Include
+- **#pragma** once is first line of the .h class header.
+- **#include "Base.h"** is the first line of the .cpp class implementation.
+- Include the corresponding class header to the second line just after including "Base.h".
+- All the other headers, sorted by **local** to **distant** directories. (Ex. std headers come last)
+
+## Tabs
+- Insert **4** spaces for tabs to avoid avoid tab wars.
+- Change your ide or editor to replace tabs for spaces.
+
+## Line Spacing
+- One line between gameplay namespace.
+- One line of space between functions declarations in source and header.
+- One line after each class scope section in header.
+- Function call spacing:
+  - No space before bracket.
+  - No space just inside brackets.
+  - One space after each comma separating parameters.
+```cpp
+foo->doThis(x, y, z);
+```
+- Conditional statement spacing:
+  - One space after conditional keywords.
+  - No space just inside the brackets.
+  - One space separating commas, colons and condition comparison operators.
+```cpp
+    if (lightType.compare("gameplay::scene::Light::Type") == 0)
+    {
+        switch (static_cast<gameplay::scene::Light::Type>(value))
+        {
+            case gameplay::scene::Light::Type::DIRECTIONAL:
+                return "DIRECTIONAL";
+            ...
+```
+- **Do not** align blocks of member variables to match spacing causing unnecessary line changes when new variables are introduced.
+```cpp
+private:
+    int          foo;
+    Bar          bar;
+    Ray          noonoo;
+    unsigned int dirtyBits;
+```
+
+- Align indentation space for parameters when wrapping lines to match the initial bracket.
+
+**Example:**
+```cpp
+Matrix::Matrix(float m11, float m12, float m13, float m14,
+               float m21, float m22, float m23, float m24,
+               float m31, float m32, float m33, float m34,
+               float m41, float m42, float m43, float m44)
+```
+
+**Example:**
+```cpp
+return sqrt((point.x - sphere.center.x) * (point.x - sphere.center.x) +
+            (point.y - sphere.center.y) * (point.y - sphere.center.x) +
+            (point.z - sphere.center.z) * (point.z - sphere.center.x));
+```
+
+- Use a line of space within .cpp implementation function to help organize blocks of code.
+
+```cpp
+// Lookup device surface extensions
+ ...
+ ...
+
+// Create the platform surface connection
+ ...
+ ...
+ ...
+```
+
+## Indentation
+- Indent next line after all braces { }.
+- Braces should
+- Move code after braces { } to the next line.
+- Always indent the next line of any condition statement line.
+
+**Example**
+```cpp
+if (box.isEmpty())
+    return;
+```
+
+**Example**
+```cpp
+for (size_t i = 0; i < count; ++i)
+{
+    if (distance(sphere, points[i]) > sphere.radius)
+    {
+        return false;
+    }
+}
+```
+- Never leave conditional code statements on same line as condition test:
+```cpp
+if (box.isEmpty()) return;
+```

+ 7 - 14
README.md

@@ -1,28 +1,21 @@
 <img src="https://raw.githubusercontent.com/gameplay3d/GamePlay/master/gameplay/res/icon.png" width=100/>
 <img src="https://raw.githubusercontent.com/gameplay3d/GamePlay/master/gameplay/res/icon.png" width=100/>
 
 
-## GamePlay v3.0.0
+## gameplay v4.0.0 (super)
 
 
-GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games.
+gameplay is an open-source, cross-platform, c++ game framework/engine for creating 2d/3d applications.
 
 
 - [Website](http://www.gameplay3d.io/)
 - [Website](http://www.gameplay3d.io/)
-- [Wiki](https://github.com/gameplay3d/GamePlay/wiki)
-- [API](http://gameplay3d.github.io/GamePlay/api/index.html)
-- [Development Guide](https://github.com/gameplay3d/GamePlay/wiki#wiki-Development_Guide)
-- [Community Group](https://groups.google.com/d/forum/gameplay3d-developers)
 
 
 ## Supported Platforms
 ## Supported Platforms
-- [Windows](https://github.com/gameplay3d/GamePlay/wiki/Visual-Studio-Setup)
-- [MacOSX](https://github.com/gameplay3d/GamePlay/wiki/Xcode-Setup)
-- [Linux](https://github.com/gameplay3d/GamePlay/wiki/CMake-Linux-Setup)
-- [iOS](https://github.com/gameplay3d/GamePlay/wiki/Xcode-Setup)
-- [Android](https://github.com/gameplay3d/GamePlay/wiki/Android-NDK-Setup)
+- Windows
+- Linux
+- MacOS
+- iOS
+- Android
 
 
 ## License
 ## License
 Open-source under [Apache 2.0 license](http://www.tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29).
 Open-source under [Apache 2.0 license](http://www.tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29).
 
 
-## Bug Reporting
-Please log bugs under [Issues](https://github.com/gameplay3d/GamePlay/issues) on github.
-
 ## Disclaimer
 ## Disclaimer
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 

+ 0 - 3
api/README.md

@@ -1,3 +0,0 @@
-This folder is used to generate the doxygen api docs.
-
-

+ 0 - 34
api/header.html

@@ -1,34 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<title>gameplay: Main Page</title>
-
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="custom.css" rel="stylesheet" type="text/css" />
-
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<script type="text/javascript">
-  $(document).ready(function() { searchBox.OnSelectItem(0); });
-</script>
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-<table class="header" border="0">
-<tbody>
-<tr>
-<td id="logo"><a href="http://gameplay3d.org/"><img src="images/logo.png" alt="gameplay" border="0" height="64px"/></a></td>
-<td width="100%"/>
-<td><a href="http://gameplay3d.org/"><span class="button">overview</span></a></td><td width="12px"/>
-<td><a href="https://github.com/gameplay3d/GamePlay/wiki"><span class="button">wiki</span></a></td><td width="12px"/>
-<td><a href="http://gameplay3d.github.com/GamePlay/api/index.html"><span class="button">api&nbsp;reference</span></a></td><td width="12px"/>
-<td><a href="http://www.gameplay3d.org/forums"><span class="button">forums</span></a></td>
-<td><a href="https://github.com/gameplay3d/GamePlay"><span class="button">download</span></a></td>
-</tr>
-</tbody>
-</table>

+ 3 - 0
build.bat

@@ -0,0 +1,3 @@
+@echo off
+py build.py
+pause

+ 97 - 0
build.py

@@ -0,0 +1,97 @@
+##############################################################################
+# Packaging script for building and packaging gameplay-deps-<platform>.zip 
+##############################################################################
+import os
+import glob
+import platform
+import subprocess
+import shutil
+import sys
+import time
+import zipfile
+from pathlib import Path
+from distutils.dir_util import copy_tree
+
+# constants
+##############################################################################
+
+TOOLS_FOLDER = "_tools"
+COMPILER_FOLDER = "_compiler"
+BUILD_FOLDER = "_build"
+
+# platform-architecture
+##############################################################################
+platform_arch = ""
+if sys.platform == "win32":
+    platform_arch = "windows-x86_64"
+elif sys.platform == "darwin":
+    platform_arch = "macos-x86_64"
+else:
+    platform_arch = "linux-x86_64"
+
+
+# function utils
+##############################################################################
+
+def clear_dir(dir_path):
+    if os.path.exists(dir_path):
+        shutil.rmtree(dir_path, ignore_errors=True)
+    path = Path(dir_path)
+    path.mkdir(parents=True)
+
+def copy_files(src_dir, dst_dir, match_exp):
+    clear_dir(dst_dir)
+    for filename in glob.glob(os.path.join(src_dir, match_exp)):
+        shutil.copy(filename, dst_dir)
+
+def remove_files(src_dir, match_exp):
+    for filename in glob.glob(os.path.join(src_dir, match_exp)):
+        os.remove(filename)
+
+def init_vsvars():
+    vswhere_path = r"%ProgramFiles(x86)%/Microsoft Visual Studio/Installer/vswhere.exe"
+    vswhere_path = os.path.expandvars(vswhere_path)
+    if not os.path.exists(vswhere_path):
+        raise EnvironmentError("vswhere.exe not found at: %s", vswhere_path)
+    vs_path = os.popen('"{}" -latest -property installationPath'.format(vswhere_path)).read().rstrip()
+    vsvars_path = os.path.join(vs_path, "VC\\Auxiliary\\Build\\vcvars64.bat")
+    output = os.popen('"{}" && set'.format(vsvars_path)).read()
+    for line in output.splitlines():
+        pair = line.split("=", 1)
+        if(len(pair) >= 2):
+            os.environ[pair[0]] = pair[1]
+
+# building
+##############################################################################
+
+# arguments
+argc = len(sys.argv)
+generate_only = False
+arg0 = ""
+if argc > 1:
+    arg0 = sys.argv[1]
+    if arg0 == "-g":
+        generate_only = True
+
+# generate/premake
+current_dir = os.getcwd()
+compiler_args = ""
+if sys.platform == "win32":
+    compiler_args = "vs2019"
+tools_dir = os.path.join(current_dir, TOOLS_FOLDER)
+premake_proc = subprocess.Popen(f"{tools_dir}/premake/premake5 --file=premake5.lua {compiler_args}", cwd=current_dir)
+premake_proc.wait()
+
+# compile/link
+if not generate_only:
+    compiler_dir =  os.path.join(current_dir, COMPILER_FOLDER)
+    if sys.platform == "win32":
+        compiler_dir = os.path.join(compiler_dir, "vs2019")
+        init_vsvars()
+        os.chdir(compiler_dir)
+        build_cmd = f"msbuild gameplay.sln /property:Configuration=Debug"
+        subprocess.run(build_cmd)
+        build_cmd = f"msbuild gameplay.sln /property:Configuration=Release"
+        subprocess.run(build_cmd)
+    else:
+        pass

+ 4 - 0
build.sh

@@ -0,0 +1,4 @@
+#!/bin/bash
+set -e
+exec /usr/bin/python build.py
+read  -n 1 -p "Press any key to continue . . ." mainmenuinput

+ 32 - 0
config/app.config.toml

@@ -0,0 +1,32 @@
+[window]
+title = "gameplay - editor"
+width = 1920
+height = 1080
+fullscreen = false
+hints = "NONE"
+
+[logging]
+level = "INFO"
+file = "gameplay.log"
+
+[[resource.alias]]
+name = "data"
+path = "@app.dir/../../../data"
+[[resource.alias]]
+name = "fonts"
+path = "@data/fonts"
+[[resource.alias]]
+name = "icons"
+path = "@data/icons"
+[[resource.alias]]
+name = "images"
+path = "@data/images"
+[[resource.alias]]
+name = "shaders"
+path = "@data/shaders"
+[[resource.alias]]
+name = "scenes"
+path = "@data/scenes"
+
+[input]
+gamepad_mappings_db = "@app.dir/../../../config/gamecontrollerdb.txt"

+ 941 - 0
config/gamecontrollerdb.txt

@@ -0,0 +1,941 @@
+# Game Controller DB for SDL in 2.0.9 format
+# Source: https://github.com/gabomdq/SDL_GameControllerDB
+
+# Windows
+03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,
+03000000c82d00002038000000000000,8bitdo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d000011ab000000000000,8BitDo F30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00005106000000000000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00000190000000000000,8BitDo N30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00001590000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00006528000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00015900000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00065280000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000022000000090000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000203800000900000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000060000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000061000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d000021ab000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00003028000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000030000000000000,8BitDo SN30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000351000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00001290000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d000020ab000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00004028000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00006228000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000260000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000261000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000031000000000000,8BitDo Wireless Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
+030000008f0e00001200000000000000,Acme GA-02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
+03000000fa190000f0ff000000000000,Acteck AGJ-3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000006f0e00001413000000000000,Afterglow,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001401000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d62000001d57000000000000,Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000869800002400000000007801,Astro C40 TR,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000d6200000e557000000000000,Batarang,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows,
+030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000bc2000000055000000000000,Betop BFM Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000bc2000006321000000000000,BETOP CONTROLLER,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
+0300000066f700000500000000000000,BrutalLegendTest,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series ,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,
+03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000a102000000000000,Controller (Xbox 360 Wireless Receiver for Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000ff02000000000000,Controller (Xbox One For Windows) - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000ea02000000000000,Controller (Xbox One For Windows) - Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows,
+03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000007d0400000840000000000000,Destroyer Tiltpad,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows,
+03000000791d00000103000000000000,Dual Box WII,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000bd12000002e0000000000000,Dual USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
+030000008f0e00000910000000000000,DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
+030000006f0e00003001000000000000,EA SPORTS PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
+03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
+03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
+03000000341a00000108000000000000,EXEQ RF USB Gamepad 8206,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000006f0e00008401000000000000,Faceoff Deluxe+ Audio Wired Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00008001000000000000,Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000852100000201000000000000,FF-GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
+030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,
+03000000790000002201000000000000,Game Controller for PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,
+03000000260900002625000000000000,Gamecube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows,
+03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+030000008f0e00000d31000000000000,GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000280400000140000000000000,GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000ac0500003d03000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000ac0500004d04000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000102000000007801,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000009b2800003200000000000000,GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+030000009b2800006000000000000000,GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
+03000000300f00000b01000000000000,GGE909 Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c283000000000000,Gioteck,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c383000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000007d0400000540000000000000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000001008000001e1000000000000,Havit HV-G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows,
+03000000d81400000862000000000000,HitBox Edition Cthulhu+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+03000000632500002605000000000000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005f00000000000000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005e00000000000000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00004000000000000000,Hori Fighting Stick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00001600000000007803,HORI Real Arcade Pro EX-SE (Xbox 360),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005500000000000000,Horipad 4 FPS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000ee00000000000000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000250900000017000000000000,HRAP2 on PS/SS/N64 Joypad to USB BOX,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,
+030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows,
+03000000d81d00000f00000000000000,iBUFFALO BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000d81d00001000000000000000,iBUFFALO BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000830500006020000000000000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Windows,
+03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+030000006f0e00002401000000000000,INJUSTICE FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000ac0500002c02000000000000,IPEGA,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000491900000204000000000000,Ipega PG-9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000491900000304000000000000,Ipega PG-9087 - Bluetooth Gamepad,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
+030000006e0500000a20000000000000,JC-DUX60 ELECOM MMO Gamepad,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
+030000006e0500000520000000000000,JC-P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000320000000000000,JC-U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000720000000000000,JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
+030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
+030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
+030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
+030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
+03000000bd12000003c0000000000000,JY-P70UR,a:b1,b:b0,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b4,x:b3,y:b2,platform:Windows,
+03000000242f00002d00000000000000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000242f00008a00000000000000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
+03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows,
+030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d04000018c2000000000000,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d0400001ac2000000000000,Logitech Precision Gamepad,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows,
+03000000380700006652000000000000,Mad Catz C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005032000000000000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005082000000000000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008433000000000000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008483000000000000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008134000000000000,Mad Catz FightStick TE2+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008184000000000000,Mad Catz FightStick TE2+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700006252000000000000,Mad Catz Micro C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008532000000000000,Madcatz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700003888000000000000,Madcatz Arcade Fightstick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700001888000000000000,MadCatz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000380700008081000000000000,MADCATZ SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
+03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows,
+03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,back:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b4,leftstick:b0,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
+0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000008f0e00001030000000000000,Mayflash USB Adapter for original Sega Saturn controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows,
+0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
+03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000002418000000000000,Mega Drive,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows,
+03000000380700006382000000000000,MLG GamePad PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000c62400002a89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c62400002b89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c62400001a89000000000000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c62400001b89000000000000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000efbe0000edfe000000000000,Monect Virtual Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+030000006b140000010c000000000000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Windows,
+03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000bd12000015d0000000000000,Nintendo Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
+030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows,
+03000000550900001472000000000000,NVIDIA Controller v01.04,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,
+030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,
+03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows,
+03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
+03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,
+03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000901000000000000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
+03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000632500002306000000000000,PS Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
+03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000666600006706000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows,
+030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
+030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows,
+03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
+030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000003807000056a8000000000000,PS3 RF pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000100000008200000000000000,PS360+ v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00000011000000000000,QanBa Arcade JoyStick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows,
+03000000300f00001611000000000000,QanBa Arcade JoyStick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
+03000000222c00000020000000000000,QANBA DRONE ARCADE JOYSTICK,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001210000000000000,QanBa Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
+03000000341a00000104000000000000,QanBa Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows,
+03000000222c00000223000000000000,Qanba Obsidian Arcade Joystick PS3 Mode,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000222c00000023000000000000,Qanba Obsidian Arcade Joystick PS4 Mode,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000321500000204000000000000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000104000000000000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000321500000011000000000000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00001100000000000000,REAL ARCADE PRO.3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00007000000000000000,REAL ARCADE PRO.4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00002200000000000000,REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005b00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00005c00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000001100000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
+03000000bd12000013d0000000000000,Retrolink USB SEGA Saturn Classic,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows,
+0300000000f000000300000000000000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
+0300000000f00000f100000000000000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
+030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006b140000020d000000000000,Revolution Pro Controller 2(1/2),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006b140000130d000000000000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000003d0000000000000,run'n'drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows,
+03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows,
+03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
+03000000a30600002106000000000000,Saitek PS1000,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000a306000020f6000000000000,Saitek PS2700,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001101000000000000,Saitek Rumble Pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
+0300000000050000289b000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+030000005e0400008e02000000007801,ShanWan PS3/PC Wired GamePad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
+03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
+03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000381000001214000000000000,SteelSeries Free,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
+03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows,
+03000000790000001c18000000000000,STK-7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,platform:Windows,
+03000000d620000011a7000000000000,Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000457500002211000000000000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000007d0000000000000,T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000004f0400000ab1000000000000,T.16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows,
+03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+030000004f04000023b3000000000000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f0400000ed0000000000000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows,
+030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+03000000666600000488000000000000,TigerGame PS/PS2 Game Controller Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows,
+03000000d90400000200000000000000,TwinShock PS2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+030000006e0500001320000000000000,U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000300f00000701000000000000,USB 4-Axis 12-Button Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000341a00002308000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+030000005509000000b4000000000000,USB gamepad,a:b10,b:b11,back:b5,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,guide:b14,leftshoulder:b8,leftstick:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b4,x:b12,y:b13,platform:Windows,
+030000006b1400000203000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000790000000a00000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c183000000000000,USB gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000ff1100004133000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000632500002305000000000000,USB Vibration Joystick (BM),a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000302000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000702000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:+a3,righty:+a4,start:b4,x:b2,y:b3,platform:Windows,
+030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000ff02000000007801,Xbox One Elite Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000ac0500005b05000000000000,Xiaoji Gamesir-G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000790000004f18000000000000,ZD-T Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000120c0000101e000000000000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+
+# Mac OS X
+030000008f0e00000300000009010000,2In1 USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c82d00005106000000010000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+030000003512000012ab000001000000,8BitDo NES30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000190000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00001290000001000000,8BitDo SN30 Gamepad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000260000001000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000031000001000000,8BitDo Wireless Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
+03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X,
+03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X,
+03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
+03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006f0e00000102000000000000,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000007d0400000540000001010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005f00000000010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005e00000000010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005f00000000000000,HORI Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00005e00000000000000,HORI Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00006e00000000010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00006600000000010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f0000ee00000000010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000008f0e00001330000011010000,HuiJia SNES Controller,a:b4,b:b2,back:b16,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b12,rightshoulder:b14,start:b18,x:b6,y:b0,platform:Mac OS X,
+03000000830500006020000000010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
+03000000830500006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
+030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X,
+03000000242f00002d00000007010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000006d04000018c2000000010000,Logitech RumblePad 2 USB,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700005032000000010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700008433000000010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700008483000000010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X,
+0300000079000000d218000026010000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000d620000010a7000003010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X,
+03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
+03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000005e0400002700000001010000,Microsoft SideWinder Plug & Play Game Pad,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,leftx:a0,lefty:a1,righttrigger:b5,x:b2,y:b3,platform:Mac OS X,
+03000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
+03000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c62400002b89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000632500007505000000020000,NEOGEO mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X,
+030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000d620000011a7000000020000,Nintendo Switch Core (Plus) Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
+030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
+03000000550900001472000025050000,NVIDIA Controller v01.04,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,
+030000006f0e00000901000002010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000004c050000da0c000000010000,Playstation Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
+030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
+030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000321500000204000000010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000104000000010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000321500000011000000010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
+030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
+0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000c6240000fefa000000000000,Rock Candy Gamepad for PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000730700000401000000010000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Mac OS X,
+03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X,
+03000000b40400000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X,
+030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X,
+30000004c050000e60c0000000100000,Sony DualSense,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
+030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Mac OS X,
+03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,
+03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,
+03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
+03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
+03000000457500002211000000010000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X,
+030000004f0400000ed0000000020000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X,
+03000000bd12000015d0000000000000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000bd12000015d0000000010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X,
+030000006f0e00000302000025040000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006f0e00000702000003060000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000791d00000103000009010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X,
+050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,
+030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000050b000003090000,Xbox Elite Wireless Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000e002000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
+030000005e040000e002000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
+030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000120c0000101e000000010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+
+# Linux
+03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00001038000000010000,8Bitdo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux,
+03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000310000011010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux,
+05000000c82d00008010000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux,
+03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00000061000000010000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+030000003512000012ab000010010000,8Bitdo SFC30 GamePad,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux,
+05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00001290000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00006228000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000260000011010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000202800000900000000010000,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+030000005e0400008e02000020010000,8BitDo Wireless Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c82d00000031000011010000,8BitDo Wireless Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00001890000011010000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
+05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
+030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00003901000013020000,Afterglow Prismatic Wired Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000007c1800000006000010010000,Alienware Dual Compatible Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+05000000491900000204000021000000,Amazon Fire Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
+05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
+03000000120c00000500000010010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,
+03000000c62400001b89000011010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000c21100000791000011010000,Be1 GC101 Controller 1.03 mode,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000c31100000791000011010000,Be1 GC101 GAMEPAD 1.03 mode,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e0400008e02000003030000,Be1 GC101 Xbox 360 Controller mode,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000666600006706000000010000,boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux,
+03000000ffff0000ffff000000010000,Chinese-made Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,
+03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,
+03000000a306000022f6000011010000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000b40400000a01000000010000,CYPRESS USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,
+03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
+030000004f04000004b3000010010000,Dual Power 2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
+030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000008f0e00000800000010010000,Gasia Co. Ltd PS(R) Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000007d0400000540000000010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000008f0e00000610000000010000,GreenAsia Electronics 4Axes 12Keys GamePad ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,
+030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
+0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+06000000adde0000efbe000002010000,Hidromancer Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,
+03000000c9110000f055000011010000,HJC Game GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000632500002605000010010000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000000d0f00000d00000000010000,hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftx:b4,lefty:b5,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux,
+030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f0000c100000011010000,HORI CO. LTD. HORIPAD S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006a00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006b00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00008500000010010000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00008600000002010000,Hori Fighting Commander,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f0000aa00000011010000,HORI Real Arcade Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000000d0f0000d800000072056800,HORI Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+030000000d0f00001600000000010000,Hori Real Arcade Pro.EX-SE (Xbox 360),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
+030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f0000ee00000011010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00006700000001010000,HORIPAD ONE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux,
+03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000830500006020000010010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
+050000006964726f69643a636f6e0000,idroid:con,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000b50700001503000010010000,impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
+03000000d80400008200000003000000,IMS PCU#0 Gamepad Interface,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,
+03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux,
+0500000049190000020400001b010000,Ipega PG-9069 - Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000632500007505000011010000,Ipega PG-9099 - Bluetooth Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
+03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
+03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,
+050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,
+030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
+050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
+03000000242f00002d00000011010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000242f00008a00000011010000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,
+030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d0400001ec2000019200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d0400000ac2000010010000,Logitech Inc. WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux,
+030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux,
+05000000380700006652000025010000,Mad Catz C.T.R.L.R ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700005032000011010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700005082000011010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux,
+03000000380700008034000011010000,Mad Catz fightstick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008084000011010000,Mad Catz fightstick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008433000011010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008483000011010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller (SFIV),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000380700001888000010010000,MadCatz PC USB Wired Stick 8818,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700003888000010010000,MadCatz PC USB Wired Stick 8838,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
+03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+03000000790000004318000010010000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+03000000242f00007300000011010000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,
+0300000079000000d218000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000d620000010a7000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+0300000025090000e803000001010000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
+03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,
+030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000062230000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000050b000003090000,Microsoft X-Box One Elite 2 pad,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e040000e302000003020000,Microsoft X-Box One Elite pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000001010000,Microsoft X-Box One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000dd02000003020000,Microsoft X-Box One pad (Firmware 2015),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000003020000,Microsoft X-Box One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+030000005e040000000b000008040000,Microsoft Xbox One Elite 2 pad - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000ea02000008040000,Microsoft Xbox One S pad - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c62400001a53000000010000,Mini PE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
+05000000d6200000e589000001000000,Moga 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+05000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+03000000c62400002b89000011010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000c62400001a89000000010000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000250900006688000000010000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
+030000006b140000010c000010010000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Linux,
+060000007e0500000820000000000000,Nintendo Combined Joy-Cons (joycond),a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
+030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux,
+03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b0,y:b3,platform:Linux,
+050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+050000007e0500000920000001800000,Nintendo Switch Pro Controller (joycond),a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
+030000007e0500000920000011810000,Nintendo Switch Pro Controller Wired (joycond),a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
+050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
+05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+030000000d0500000308000010010000,Nostromo n45 Dual Analog Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
+03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
+05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
+03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+19000000010000000100000001010000,odroidgo2_joypad,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux,
+19000000010000000200000011000000,odroidgo2_joypad_v11,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux,
+030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
+05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
+03000000830500005020000010010000,Padix Co. Ltd. Rockfire PSX/USB Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux,
+03000000790000001c18000011010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e0000b802000001010000,PDP AFTERGLOW Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e0000b802000013020000,PDP AFTERGLOW Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00008001000011010000,PDP CO. LTD. Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00008701000011010000,PDP Rock Candy Wired Controller for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e00000901000011010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e0000a802000023020000,PDP Wired Controller for Xbox One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+030000006f0e00008501000011010000,PDP Wired Fight Pad Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+05000000491900000204000000000000,PG-9118,x:b76,a:b73,b:b74,y:b77,back:b83,start:b84,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b79,lefttrigger:b81,rightshoulder:b80,righttrigger:b82,leftstick:b86,rightstick:b87,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux,
+0500000049190000030400001b010000,PG-9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000004c050000da0c000011010000,Playstation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000c62400001a58000001010000,PowerA Xbox One Cabled,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
+030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
+030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
+050000004c0500006802000000800000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
+060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
+030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+03000000c01100000140000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+050000004c050000c405000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux,
+030000009b2800003200000001010000,Raphnet Technologies GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
+030000009b2800006000000001010000,Raphnet Technologies GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
+030000009b2800000300000001010000,raphnet.net 4nes4snes v1.5,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,
+030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000008916000000fd000024010000,Razer Onza Tournament Edition,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000321500000204000011010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000104000011010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000810000011010000,Razer Panthera Evo Arcade Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000010000011010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000321500000011000011010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000790000001100000010010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
+0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux,
+0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,
+030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000006b140000130d000011010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux,
+03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux,
+03000000a30600000cff000010010000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux,
+03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux,
+03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
+03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,
+03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,
+03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a306000020f6000011010000,Saitek PS2700 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux,
+03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,a:b12,b:b10,back:b4,dpdown:b2,dpleft:b3,dpright:b1,dpup:b0,leftshoulder:b9,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b8,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b5,x:b13,y:b11,platform:Linux,
+03000000f025000021c1000010010000,ShanWan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000632500007505000010010000,SHANWAN PS3/PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000bc2000000055000010010000,ShanWan PS3/PC Wired GamePad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000632500002305000010010000,ShanWan USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000341a00000908000010010000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
+030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
+03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
+03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,
+03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
+03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,
+03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
+05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
+05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
+03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000381000003014000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000381000003114000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+05000000110100001914000009010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000ad1b000038f0000090040000,Street Fighter IV FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000003b07000004a1000000010000,Suncom SFX Plus for USB,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux,
+03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
+0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,
+03000000457500002211000010010000,SZMY-POWER CO. LTD. GAMEPAD,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000008f0e00000d31000010010000,SZMY-POWER CO. LTD. GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000008f0e00001431000010010000,SZMY-POWER CO.,LTD. PS3 gamepad,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
+030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
+030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
+030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f0400000ed0000011010000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux,
+030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux,
+030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux,
+030000004f04000026b3000002040000,Thrustmaster Gamepad GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c6240000025b000002020000,Thrustmaster GPX Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000007d0000000010000,Thrustmaster T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000012b3000010010000,Thrustmaster vibrating gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
+03000000bd12000015d0000010010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
+030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
+03000000790000001100000000010000,USB Gamepad1,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux,
+030000006f0e00000302000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00000702000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+05000000ac0500003232000001000000,VR-BOX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
+03000000791d00000103000010010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+050000000d0f0000f600000001000000,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
+030000005e040000a102000014010000,Xbox 360 Wireless Receiver (XBOX),a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e040000ea02000000000000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e040000ea02000001030000,Xbox One Wireless Controller (Model 1708),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e0400008e02000000010000,xbox360 Wireless EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000450c00002043000010010000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000ac0500005b05000010010000,Xiaoji Gamesir-G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,
+03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,
+xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c0000101e000011010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+
+# Android
+05000000c82d000006500000ffff3f00,8BitDo M30 Gamepad,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000051060000ffff3f00,8BitDo M30 Gamepad,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000015900000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000065280000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+050000000220000000900000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+050000002038000009000000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000000600000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000000610000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000012900000ffff3f00,8BitDo SN30 Gamepad,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000062280000ffff3f00,8BitDo SN30 Gamepad,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000001600000ffff3f00,8BitDo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000002600000ffff0f00,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+050000002028000009000000ffff3f00,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+050000003512000020ab000000780f00,8BitDo SNES30 Gamepad,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android,
+05000000c82d000018900000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000030320000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
+0500000031366332860c44aadfff0f00,GS Gamepad,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b1,b:b0,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b3,y:b2,platform:Android,
+64633436313965656664373634323364,Microsoft X-Box 360 pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Android,
+050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android,
+37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005509000003720000cf7f3f00,NVIDIA Controller v01.01,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005509000010720000ffff3f00,NVIDIA Controller v01.03,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005509000014720000df7f3f00,NVIDIA Controller v01.04,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
+050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+030000004c050000cc09000000006800,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000004c050000cc090000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+62653861643333663663383332396665,Razer Kishi,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+32633532643734376632656664383733,Sony DualSense,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
+61303162353165316365336436343139,Sony DualSense,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
+05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
+05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
+050000004f0400000ed00000fffe3f00,ThrustMaster eSwap PRO Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+5477696e20555342204a6f7973746963,Twin USB Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android,
+30306539356238653637313730656134,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
+050000005e040000fd020000ff7f3f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005e040000e00200000ffe3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android,
+050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+65633038363832353634653836396239,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005e04000091020000ff073f00,Xbox Wireless Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
+34356136633366613530316338376136,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,
+050000001727000044310000ffff3f00,XiaoMi Game Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
+
+# iOS
+05000000ac0500000100000000006d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS,
+05000000ac050000010000004f066d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS,
+05000000ac05000001000000cf076d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS,
+05000000ac05000001000000df076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
+05000000ac05000001000000ff076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS,
+05000000ac050000020000004f066d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS,
+4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS,
+4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS,
+050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
+050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+050000004c050000cc090000ff870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS,
+05000000ac0500000300000000006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS,
+05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS,
+05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
+05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
+050000005e040000050b0000ff070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+050000005e040000e0020000df070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
+050000005e040000e0020000ff070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,

+ 0 - 1783
gameplay.doxyfile

@@ -1,1783 +0,0 @@
-# Doxyfile 1.7.6.1
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file 
-# that follow. The default is UTF-8 which is also the encoding used for all 
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
-# iconv built into libc) for the transcoding. See 
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or sequence of words) that should 
-# identify the project. Note that if you do not use Doxywizard you need 
-# to put quotes around the project name if it contains spaces.
-
-PROJECT_NAME           = gameplay
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = 3.0.0
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description 
-# for a project that appears at the top of each page and should give viewer 
-# a quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          = 
-
-# With the PROJECT_LOGO tag one can specify an logo or icon that is 
-# included in the documentation. The maximum height of the logo should not 
-# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
-# Doxygen will copy the logo to the output directory.
-
-PROJECT_LOGO           = 
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ./api
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
-# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
-# path to strip.
-
-STRIP_FROM_PATH        = 
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful if your file system 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like regular Qt-style comments 
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
-# interpret the first line (until the first dot) of a Qt-style 
-# comment as the brief description. If set to NO, the comments 
-# will behave just like regular Qt-style comments (thus requiring 
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = "script{1} = \xmlonly <xmlonly>\1</xmlonly> \endxmlonly"
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only). 
-# A mapping has the form "name=value". For example adding 
-# "class=itcl::class" will allow you to use the command class in the 
-# itcl::class meaning.
-
-TCL_SUBST              = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Java. For instance, namespaces will be presented as packages, qualified 
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
-# sources. Doxygen will then generate output that is tailored for 
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it 
-# parses. With this tag you can assign which parser to use for a given extension. 
-# Doxygen has a built-in mapping, but you can override or extend it using this 
-# tag. The format is ext=language, where ext is a file extension, and language 
-# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
-# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
-# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
-# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
-
-EXTENSION_MAPPING      = 
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
-# to include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also makes the inheritance and collaboration 
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to 
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
-# Doxygen will parse them like normal C++ but will assume all classes use public 
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter 
-# and setter methods for a property. Setting this option to YES (the default) 
-# will make doxygen replace the get and set methods by a property in the 
-# documentation. This will only work if the methods are indeed getting or 
-# setting a simple type. If this is not the case, or you want to show the 
-# methods anyway, you should set this option to NO.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
-# unions are shown inside the group in which they are included (e.g. using 
-# @ingroup) instead of on a separate page (for HTML and Man pages) or 
-# section (for LaTeX and RTF).
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
-# unions with only public data fields will be shown inline in the documentation 
-# of the scope in which they are defined (i.e. file, namespace, or group 
-# documentation), provided this scope is documented. If set to NO (the default), 
-# structs, classes, and unions are shown on a separate page (for HTML and Man 
-# pages) or section (for LaTeX and RTF).
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
-# is documented as struct, union, or enum with the name of the typedef. So 
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
-# with name TypeT. When disabled the typedef will appear as a member of a file, 
-# namespace, or class. And the struct will be named TypeS. This can typically 
-# be useful for C code in case the coding convention dictates that all compound 
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
-# determine which symbols to keep in memory and which to flush to disk. 
-# When the cache is full, less often used symbols will be written to disk. 
-# For small to medium size projects (<1000 input files) the default value is 
-# probably good enough. For larger projects a too small cache size can cause 
-# doxygen to be busy swapping symbols to and from disk most of the time 
-# causing a significant performance penalty. 
-# If the system has enough physical memory increasing the cache will improve the 
-# performance by keeping more symbols in memory. Note that the value works on 
-# a logarithmic scale so increasing the size by one will roughly double the 
-# memory usage. The cache size is given by this formula: 
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be 
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given 
-# their name and scope. Since this can be an expensive process and often the 
-# same symbol appear multiple times in the code, doxygen keeps a cache of 
-# pre-resolved symbols. If the cache is too small doxygen will become slower. 
-# If the cache is too large, memory is wasted. The cache size is given by this 
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = NO
-
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be 
-# extracted and appear in the documentation as a namespace called 
-# 'anonymous_namespace{file}', where file will be replaced with the base 
-# name of the file that contains the anonymous namespace. By default 
-# anonymous namespaces are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = YES
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
-# will list include files with double quotes in the documentation 
-# rather than with sharp brackets.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
-# declaration order.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
-# will sort the (brief and detailed) documentation of class members so that 
-# constructors and destructors are listed first. If set to NO (the default) 
-# the constructors will appear in the respective orders defined by 
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
-# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
-# hierarchy of group names into alphabetical order. If set to NO (the default) 
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
-# Note: This option applies only to the class list, not to the 
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
-# do proper type resolution of all parameters of a function it will reject a 
-# match between the prototype and the implementation of a member function even 
-# if there is only one candidate or it is obvious which candidate to choose 
-# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
-# will still accept a match between prototype and implementation in such cases.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or macro consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and macros in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = NO
-
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
-# This will remove the Files entry from the Quick Index and from the 
-# Folder Tree View (if specified). The default is YES.
-
-SHOW_FILES             = NO
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
-# and from the Folder Tree View (if specified). The default is YES.
-
-SHOW_NAMESPACES        = NO
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from 
-# the version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    = 
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
-# by doxygen. The layout file controls the global structure of the generated 
-# output files in an output format independent way. The create the layout file 
-# that represents doxygen's defaults, run doxygen with the -l option. 
-# You can optionally specify a file name after the option, if omitted 
-# DoxygenLayout.xml will be used as the name of the layout file.
-
-LAYOUT_FILE            = 
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files 
-# containing the references data. This must be a list of .bib files. The 
-# .bib extension is automatically appended if omitted. Using this command 
-# requires the bibtex tool to be installed. See also 
-# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
-# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this 
-# feature you need bibtex and perl available in the search path.
-
-CITE_BIB_FILES         = 
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  = ./gameplay/src
-
-# This tag can be used to specify the character encoding of the source files 
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
-# also the default input encoding. Doxygen uses libiconv (or the iconv built 
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
-# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
-# *.f90 *.f *.for *.vhd *.vhdl
-
-FILE_PATTERNS          = *.h \
-                         *.dox
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag. 
-# Note that relative paths are relative to the directory from which doxygen is 
-# run.
-
-EXCLUDE                = 
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
-# directories that are symbolic links (a Unix file system feature) are excluded 
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       = 
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
-# (namespaces, classes, functions, etc.) that should be excluded from the 
-# output. The symbol name can be a fully qualified name, a word, or if the 
-# wildcard * is used, a substring. Examples: ANamespace, AClass, 
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        = 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
-# ignored.
-
-INPUT_FILTER           = 
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis.  Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match.  The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty or if 
-# non of the patterns match the file name, INPUT_FILTER is applied.
-
-FILTER_PATTERNS        = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
-# and it is also possible to disable source filtering for a specific pattern 
-# using *.ext= (so without naming a filter). This option only has effect when 
-# FILTER_SOURCE_FILES is enabled.
-
-FILTER_SOURCE_PATTERNS = 
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
-# link to the source code.  Otherwise they will link to the documentation.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header. Note that when using a custom header you are responsible  
-# for the proper inclusion of any scripts and style sheets that doxygen 
-# needs, which is dependent on the configuration options used. 
-# It is advised to generate a default header using "doxygen -w html 
-# header.html footer.html stylesheet.css YourConfigFile" and then modify 
-# that header. Note that the header is subject to change so you typically 
-# have to redo this when upgrading to a newer version of doxygen or when 
-# changing the value of configuration settings such as GENERATE_TREEVIEW!
-
-HTML_HEADER            = api/header.html
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            = 
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
-# style sheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        = 
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
-# other source files which should be copied to the HTML output directory. Note 
-# that these files will be copied to the base HTML output directory. Use the 
-# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
-# the files will be copied as-is; there are no commands or markers available.
-
-HTML_EXTRA_FILES       = 
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
-# Doxygen will adjust the colors in the style sheet and background images 
-# according to this color. Hue is specified as an angle on a colorwheel, 
-# see http://en.wikipedia.org/wiki/Hue for more information. 
-# For instance the value 0 represents red, 60 is yellow, 120 is green, 
-# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
-# The allowed range is 0 to 359.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
-# the colors in the HTML output. For a value of 0 the output will use 
-# grayscales only. A value of 255 will produce the most vivid colors.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
-# the luminance component of the colors in the HTML output. Values below 
-# 100 gradually make the output lighter, whereas values above 100 make 
-# the output darker. The value divided by 100 is the actual gamma applied, 
-# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
-# and 100 does not change the gamma.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
-# page will contain the date and time when the page was generated. Setting 
-# this to NO can help when comparing the output of multiple runs.
-
-HTML_TIMESTAMP         = YES
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
-# documentation will contain sections that can be hidden and shown after the 
-# page has loaded. For this to work a browser that supports 
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files 
-# will be generated that can be used as input for Apple's Xcode 3 
-# integrated development environment, introduced with OSX 10.5 (Leopard). 
-# To create a documentation set, doxygen will generate a Makefile in the 
-# HTML output directory. Running make will produce the docset in that 
-# directory and running "make install" will install the docset in 
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
-# it at startup. 
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
-# for more information.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
-# feed. A documentation feed provides an umbrella under which multiple 
-# documentation sets from a single provider (such as a company or product suite) 
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
-# should uniquely identify the documentation set bundle. This should be a 
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
-# the documentation publisher. This should be a reverse domain-name style 
-# string, e.g. com.mycompany.MyDocSet.documentation.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output directory.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
-# content.
-
-CHM_INDEX_ENCODING     = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
-# that can be used as input for Qt's qhelpgenerator to generate a 
-# Qt Compressed Help (.qch) of the generated HTML documentation.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
-# be used to specify the file name of the resulting .qch file. 
-# The path specified is relative to the HTML output folder.
-
-QCH_FILE               = 
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#namespace
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
-# add. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
-
-QHP_CUST_FILTER_NAME   = 
-
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
-# custom filter to add. For more information please see 
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
-# Qt Help Project / Custom Filters</a>.
-
-QHP_CUST_FILTER_ATTRS  = 
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
-# project's 
-# filter section matches. 
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
-# Qt Help Project / Filter Attributes</a>.
-
-QHP_SECT_FILTER_ATTRS  = 
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
-# be used to specify the location of Qt's qhelpgenerator. 
-# If non-empty doxygen will try to run qhelpgenerator on the generated 
-# .qhp file.
-
-QHG_LOCATION           = 
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
-# will be generated, which together with the HTML files, form an Eclipse help 
-# plugin. To install this plugin and make it available under the help contents 
-# menu in Eclipse, the contents of the directory containing the HTML and XML 
-# files needs to be copied into the plugins directory of eclipse. The name of 
-# the directory within the plugins directory should be the same as 
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
-# the help appears.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the eclipse help plugin. When installing the plugin 
-# the directory name containing the HTML and XML files should also have 
-# this name.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 
-# at top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it. Since the tabs have the same information as the 
-# navigation tree you can set this option to NO if you already set 
-# GENERATE_TREEVIEW to YES.
-
-DISABLE_INDEX          = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
-# structure should be generated to display hierarchical information. 
-# If the tag value is set to YES, a side panel will be generated 
-# containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
-# Windows users are probably better off using the HTML help feature. 
-# Since the tree basically has the same information as the tab index you 
-# could consider to set DISABLE_INDEX to NO when enabling this option.
-
-GENERATE_TREEVIEW      = NO
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
-# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
-# documentation. Note that a value of 0 will completely suppress the enum 
-# values from appearing in the overview section.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
-# and Class Hierarchy pages using a tree view instead of an ordered list.
-
-USE_INLINE_TREES       = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
-# links to external symbols imported via tag files in a separate window.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of Latex formulas included 
-# as images in the HTML documentation. The default is 10. Note that 
-# when you change the font size after a successful doxygen run you need 
-# to manually remove any form_*.png images from the HTML output directory 
-# to force them to be regenerated.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
-# generated for formulas are transparent PNGs. Transparent PNGs are 
-# not supported properly for IE 6.0, but are supported on all modern browsers. 
-# Note that when changing this option you need to delete any form_*.png files 
-# in the HTML output before the changes have effect.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
-# (see http://www.mathjax.org) which uses client side Javascript for the 
-# rendering instead of using prerendered bitmaps. Use this if you do not 
-# have LaTeX installed or if you want to formulas look prettier in the HTML 
-# output. When enabled you also need to install MathJax separately and 
-# configure the path to it using the MATHJAX_RELPATH option.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you need to specify the location relative to the 
-# HTML output directory using the MATHJAX_RELPATH option. The destination 
-# directory should contain the MathJax.js script. For instance, if the mathjax 
-# directory is located at the same level as the HTML output directory, then 
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the 
-# mathjax.org site, so you can quickly see the result without installing 
-# MathJax, but it is strongly recommended to install a local copy of MathJax 
-# before deployment.
-
-MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
-# names that should be enabled during MathJax rendering.
-
-MATHJAX_EXTENSIONS     = 
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
-# for the HTML output. The underlying search engine uses javascript 
-# and DHTML and should work on any modern browser. Note that when using 
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
-# (GENERATE_DOCSET) there is already a search function so this one should 
-# typically be disabled. For large projects the javascript based search engine 
-# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
-# implemented using a PHP enabled web server instead of at the web client 
-# using Javascript. Doxygen will generate the search PHP script and index 
-# file to put on the web server. The advantage of the server 
-# based approach is that it scales better to large projects and allows 
-# full text search. The disadvantages are that it is more difficult to setup 
-# and does not have live searching capabilities.
-
-SERVER_BASED_SEARCH    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name. 
-# Note that when enabling USE_PDFLATEX this option is only used for 
-# generating bitmaps for formulas in the HTML output, but not in the 
-# Makefile that is written to the output directory.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = 
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
-# the generated latex document. The footer should contain everything after 
-# the last chapter. If it is left blank doxygen will generate a 
-# standard footer. Notice: only use this tag if you know what you are doing!
-
-LATEX_FOOTER           = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
-# source code with syntax highlighting in the LaTeX output. 
-# Note that which sources are shown also depends on other settings 
-# such as SOURCE_BROWSER.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
-# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
-# http://en.wikipedia.org/wiki/BibTeX for more info.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load style sheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = NO
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# pointed to by INCLUDE_PATH will be searched when a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH           = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
-# instead of the = operator.
-
-PREDEFINED             = 
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition that 
-# overrules the definition found in the source code.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all references to function-like macros 
-# that are alone on a line, have an all uppercase name, and do not end with a 
-# semicolon, because these will confuse the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links. 
-# Note that each tag file must have a unique name 
-# (where the name does NOT include the path) 
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option also works with HAVE_DOT disabled, but it is recommended to 
-# install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc 
-# command. Doxygen will then run the mscgen tool (see 
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
-# the mscgen tool resides. If left empty the tool is assumed to be found in the 
-# default search path.
-
-MSCGEN_PATH            = 
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
-# allowed to run in parallel. When set to 0 (the default) doxygen will 
-# base this on the number of processors available in the system. You can set it 
-# explicitly to a value larger than 0 to get control over the balance 
-# between CPU load and processing speed.
-
-DOT_NUM_THREADS        = 0
-
-# By default doxygen will use the Helvetica font for all dot files that 
-# doxygen generates. When you want a differently looking font you can specify 
-# the font name using DOT_FONTNAME. You need to make sure dot is able to find 
-# the font, which can be done by putting it in a standard location or by setting 
-# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
-# directory containing the font.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
-# The default size is 10pt.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the Helvetica font. 
-# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
-# set the path where dot can find it.
-
-DOT_FONTPATH           = 
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
-# doxygen will generate a call dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable call graphs 
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
-# doxygen will generate a caller dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable caller 
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
-# in a graphical way. The dependency relations are determined by the #include 
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are svg, png, jpg, or gif. 
-# If left blank png will be used. If you choose svg you need to set 
-# HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
-# visible in IE 9+ (other browsers do not have this requirement).
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
-# enable generation of interactive SVG images that allow zooming and panning. 
-# Note that this requires a modern browser other than Internet Explorer. 
-# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
-# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
-# visible. Older versions of IE do not have SVG support.
-
-INTERACTIVE_SVG        = NO
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               = 
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that 
-# contain msc files that are included in the documentation (see the 
-# \mscfile command).
-
-MSCFILE_DIRS           = 
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
-# nodes that will be shown in the graph. If the number of nodes in a graph 
-# becomes larger than this value, doxygen will truncate the graph, which is 
-# visualized by representing a node as a red box. Note that doxygen if the 
-# number of direct children of the root node in a graph is already larger than 
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that the size of a graph can be further restricted by 
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, because dot on Windows does not 
-# seem to support this out of the box. Warning: Depending on the platform used, 
-# enabling this option may lead to badly anti-aliased labels on the edges of 
-# a graph (i.e. they become hard to read).
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP            = YES

+ 0 - 69
gameplay.sln

@@ -1,69 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Express 2013 for Windows Desktop
-VisualStudioVersion = 12.0.21005.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gameplay", "gameplay\gameplay.vcxproj", "{1032BA4B-57EB-4348-9E03-29DD63E80E4A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample-browser", "samples\browser\sample-browser.vcxproj", "{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}"
-	ProjectSection(ProjectDependencies) = postProject
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A} = {1032BA4B-57EB-4348-9E03-29DD63E80E4A}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample-spaceship", "samples\spaceship\sample-spaceship.vcxproj", "{CC37B8E9-6402-4841-8D6A-5D908A5909B3}"
-	ProjectSection(ProjectDependencies) = postProject
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A} = {1032BA4B-57EB-4348-9E03-29DD63E80E4A}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample-character", "samples\character\sample-character.vcxproj", "{87388E8B-F3CF-428F-BC2C-C1886248C111}"
-	ProjectSection(ProjectDependencies) = postProject
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A} = {1032BA4B-57EB-4348-9E03-29DD63E80E4A}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample-racer", "samples\racer\sample-racer.vcxproj", "{82522888-E09A-ED48-AD7D-247237B37B3A}"
-	ProjectSection(ProjectDependencies) = postProject
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A} = {1032BA4B-57EB-4348-9E03-29DD63E80E4A}
-	EndProjectSection
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|x64 = Debug|x64
-		DebugMem|x64 = DebugMem|x64
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A}.Debug|x64.ActiveCfg = Debug|x64
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A}.Debug|x64.Build.0 = Debug|x64
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A}.DebugMem|x64.ActiveCfg = DebugMem|x64
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A}.DebugMem|x64.Build.0 = DebugMem|x64
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A}.Release|x64.ActiveCfg = Release|x64
-		{1032BA4B-57EB-4348-9E03-29DD63E80E4A}.Release|x64.Build.0 = Release|x64
-		{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}.Debug|x64.ActiveCfg = Debug|x64
-		{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}.Debug|x64.Build.0 = Debug|x64
-		{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}.DebugMem|x64.ActiveCfg = DebugMem|x64
-		{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}.DebugMem|x64.Build.0 = DebugMem|x64
-		{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}.Release|x64.ActiveCfg = Release|x64
-		{0F27C8C4-58B2-E367-8D1F-01B714FDBF1B}.Release|x64.Build.0 = Release|x64
-		{CC37B8E9-6402-4841-8D6A-5D908A5909B3}.Debug|x64.ActiveCfg = Debug|x64
-		{CC37B8E9-6402-4841-8D6A-5D908A5909B3}.Debug|x64.Build.0 = Debug|x64
-		{CC37B8E9-6402-4841-8D6A-5D908A5909B3}.DebugMem|x64.ActiveCfg = DebugMem|x64
-		{CC37B8E9-6402-4841-8D6A-5D908A5909B3}.DebugMem|x64.Build.0 = DebugMem|x64
-		{CC37B8E9-6402-4841-8D6A-5D908A5909B3}.Release|x64.ActiveCfg = Release|x64
-		{CC37B8E9-6402-4841-8D6A-5D908A5909B3}.Release|x64.Build.0 = Release|x64
-		{87388E8B-F3CF-428F-BC2C-C1886248C111}.Debug|x64.ActiveCfg = Debug|x64
-		{87388E8B-F3CF-428F-BC2C-C1886248C111}.Debug|x64.Build.0 = Debug|x64
-		{87388E8B-F3CF-428F-BC2C-C1886248C111}.DebugMem|x64.ActiveCfg = DebugMem|x64
-		{87388E8B-F3CF-428F-BC2C-C1886248C111}.DebugMem|x64.Build.0 = DebugMem|x64
-		{87388E8B-F3CF-428F-BC2C-C1886248C111}.Release|x64.ActiveCfg = Release|x64
-		{87388E8B-F3CF-428F-BC2C-C1886248C111}.Release|x64.Build.0 = Release|x64
-		{82522888-E09A-ED48-AD7D-247237B37B3A}.Debug|x64.ActiveCfg = Debug|x64
-		{82522888-E09A-ED48-AD7D-247237B37B3A}.Debug|x64.Build.0 = Debug|x64
-		{82522888-E09A-ED48-AD7D-247237B37B3A}.DebugMem|x64.ActiveCfg = DebugMem|x64
-		{82522888-E09A-ED48-AD7D-247237B37B3A}.DebugMem|x64.Build.0 = DebugMem|x64
-		{82522888-E09A-ED48-AD7D-247237B37B3A}.Release|x64.ActiveCfg = Release|x64
-		{82522888-E09A-ED48-AD7D-247237B37B3A}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal

+ 0 - 19
gameplay.xcworkspace/contents.xcworkspacedata

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "group:gameplay/gameplay.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:samples/browser/sample-browser.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:samples/character/sample-character.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:samples/racer/sample-racer.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:samples/spaceship/sample-spaceship.xcodeproj">
-   </FileRef>
-</Workspace>

+ 0 - 8
gameplay.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
-	<true/>
-</dict>
-</plist>

+ 0 - 185
gameplay/.cproject

@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?>
-
-<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="cdt.managedbuild.config.gnu.lib.debug.1678352131">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.lib.debug.1678352131" moduleId="org.eclipse.cdt.core.settings" name="Debug">
-				<externalSettings>
-					<externalSetting>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/gameplay"/>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/gameplay/Debug"/>
-						<entry flags="RESOLVED" kind="libraryFile" name="gameplay" srcPrefixMapping="" srcRootPath=""/>
-					</externalSetting>
-				</externalSettings>
-				<extensions>
-					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-				</extensions>
-			</storageModule>
-			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.lib.debug.1678352131" name="Debug" parent="cdt.managedbuild.config.gnu.lib.debug">
-					<folderInfo id="cdt.managedbuild.config.gnu.lib.debug.1678352131." name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.lib.debug.1261019646" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.lib.debug">
-							<targetPlatform id="cdt.managedbuild.target.gnu.platform.lib.debug.890249609" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.lib.debug"/>
-							<builder buildPath="${workspace_loc:/gameplay/Debug}" id="cdt.managedbuild.target.gnu.builder.lib.debug.895962601" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.lib.debug"/>
-							<tool command="ar" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.archiver.lib.debug.708167895" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.lib.debug"/>
-							<tool command="g++" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cpp.compiler.lib.debug.777535448" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.lib.debug">
-								<option id="gnu.cpp.compiler.lib.debug.option.optimization.level.1229794772" name="Optimization Level" superClass="gnu.cpp.compiler.lib.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.lib.debug.option.debugging.level.1539213802" name="Debug Level" superClass="gnu.cpp.compiler.lib.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.option.preprocessor.def.1310031438" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
-									<listOptionValue builtIn="false" value="__linux__"/>
-									<listOptionValue builtIn="false" value="GP_USE_GAMEPAD"/>
-								</option>
-								<option id="gnu.cpp.compiler.option.include.paths.800094241" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/lua}&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;../../external-deps/include&quot;"/>
-									<listOptionValue builtIn="false" value="/usr/include/gtk-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/lib/x86_64-linux-gnu/gtk-2.0/include"/>
-									<listOptionValue builtIn="false" value="/usr/include/atk-1.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/cairo"/>
-									<listOptionValue builtIn="false" value="/usr/include/gdk-pixbuf-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/pango-1.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/gio-unix-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/freetype2"/>
-									<listOptionValue builtIn="false" value="/usr/include/glib-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/lib/x86_64-linux-gnu/glib-2.0/include"/>
-									<listOptionValue builtIn="false" value="/usr/include/pixman-1"/>
-									<listOptionValue builtIn="false" value="/usr/include/libpng12"/>
-									<listOptionValue builtIn="false" value="/usr/include/harfbuzz"/>
-								</option>
-								<option id="gnu.cpp.compiler.option.other.pic.224962351" name="Position Independent Code (-fPIC)" superClass="gnu.cpp.compiler.option.other.pic" value="false" valueType="boolean"/>
-								<option id="gnu.cpp.compiler.option.other.other.400565331" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++11 -lstdc++ -pthread&#9;" valueType="string"/>
-								<option id="gnu.cpp.compiler.option.warnings.wconversion.860278291" name="Implicit conversion warnings (-Wconversion)" superClass="gnu.cpp.compiler.option.warnings.wconversion" value="false" valueType="boolean"/>
-								<option id="gnu.cpp.compiler.option.warnings.allwarn.124718788" name="All warnings (-Wall)" superClass="gnu.cpp.compiler.option.warnings.allwarn" value="false" valueType="boolean"/>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.760206134" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
-							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.lib.debug.544132463" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.lib.debug">
-								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.lib.debug.option.optimization.level.932372982" name="Optimization Level" superClass="gnu.c.compiler.lib.debug.option.optimization.level" valueType="enumerated"/>
-								<option id="gnu.c.compiler.lib.debug.option.debugging.level.1396320451" name="Debug Level" superClass="gnu.c.compiler.lib.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.828880230" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.base.53199152" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1704479578" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.lib.debug.466993033" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.lib.debug">
-								<option id="gnu.both.asm.option.include.paths.1220313575" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths"/>
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.135160384" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-							</tool>
-						</toolChain>
-					</folderInfo>
-				</configuration>
-			</storageModule>
-			<storageModule moduleId="org.eclipse.cdt.core.externalSettings">
-				<externalSettings containerId="org.eclipse.cdt.managedbuilder.pkgconfig.extSettings" factoryId="org.eclipse.cdt.core.extension.container.factory">
-					<externalSetting contentTypes="org.eclipse.cdt.core.cSource:org.eclipse.cdt.core.cxxSource"/>
-					<externalSetting contentTypes="org.eclipse.cdt.managedbuilder.core.compiledObjectFile"/>
-				</externalSettings>
-			</storageModule>
-			<storageModule moduleId="packages"/>
-		</cconfiguration>
-		<cconfiguration id="cdt.managedbuild.config.gnu.lib.release.405865560">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.lib.release.405865560" moduleId="org.eclipse.cdt.core.settings" name="Release">
-				<externalSettings>
-					<externalSetting>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/gameplay"/>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/gameplay/Release"/>
-						<entry flags="RESOLVED" kind="libraryFile" name="gameplay" srcPrefixMapping="" srcRootPath=""/>
-					</externalSetting>
-				</externalSettings>
-				<extensions>
-					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-				</extensions>
-			</storageModule>
-			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.lib.release.405865560" name="Release" parent="cdt.managedbuild.config.gnu.lib.release">
-					<folderInfo id="cdt.managedbuild.config.gnu.lib.release.405865560." name="/" resourcePath="">
-						<toolChain id="cdt.managedbuild.toolchain.gnu.lib.release.1240021764" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.lib.release">
-							<targetPlatform id="cdt.managedbuild.target.gnu.platform.lib.release.124670092" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.lib.release"/>
-							<builder buildPath="${workspace_loc:/gameplay/Release}" id="cdt.managedbuild.target.gnu.builder.lib.release.1993392626" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.lib.release"/>
-							<tool id="cdt.managedbuild.tool.gnu.archiver.lib.release.954619908" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.lib.release"/>
-							<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.lib.release.1098041763" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.lib.release">
-								<option id="gnu.cpp.compiler.lib.release.option.optimization.level.965385539" name="Optimization Level" superClass="gnu.cpp.compiler.lib.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.lib.release.option.debugging.level.1041543613" name="Debug Level" superClass="gnu.cpp.compiler.lib.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
-								<option id="gnu.cpp.compiler.option.preprocessor.def.458473463" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
-									<listOptionValue builtIn="false" value="__linux__"/>
-									<listOptionValue builtIn="false" value="GP_USE_GAMEPAD"/>
-								</option>
-								<option id="gnu.cpp.compiler.option.include.paths.1112278724" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/lua}&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;../../external-deps/include&quot;"/>
-									<listOptionValue builtIn="false" value="/usr/include/gtk-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/lib/x86_64-linux-gnu/gtk-2.0/include"/>
-									<listOptionValue builtIn="false" value="/usr/include/atk-1.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/cairo"/>
-									<listOptionValue builtIn="false" value="/usr/include/gdk-pixbuf-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/pango-1.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/gio-unix-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/include/freetype2"/>
-									<listOptionValue builtIn="false" value="/usr/include/glib-2.0"/>
-									<listOptionValue builtIn="false" value="/usr/lib/x86_64-linux-gnu/glib-2.0/include"/>
-									<listOptionValue builtIn="false" value="/usr/include/pixman-1"/>
-									<listOptionValue builtIn="false" value="/usr/include/libpng12"/>
-									<listOptionValue builtIn="false" value="/usr/include/harfbuzz"/>
-								</option>
-								<option id="gnu.cpp.compiler.option.other.pic.63956772" name="Position Independent Code (-fPIC)" superClass="gnu.cpp.compiler.option.other.pic" value="false" valueType="boolean"/>
-								<option id="gnu.cpp.compiler.option.other.other.1866787375" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" value="-c -fmessage-length=0 -std=c++11 -lstdc++ -pthread" valueType="string"/>
-								<option id="gnu.cpp.compiler.option.warnings.wconversion.1384263317" name="Implicit conversion warnings (-Wconversion)" superClass="gnu.cpp.compiler.option.warnings.wconversion" value="false" valueType="boolean"/>
-								<option id="gnu.cpp.compiler.option.warnings.allwarn.80993715" name="All warnings (-Wall)" superClass="gnu.cpp.compiler.option.warnings.allwarn" value="false" valueType="boolean"/>
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1821410876" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
-							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.compiler.lib.release.1485072111" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.lib.release">
-								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.lib.release.option.optimization.level.1195664601" name="Optimization Level" superClass="gnu.c.compiler.lib.release.option.optimization.level" valueType="enumerated"/>
-								<option id="gnu.c.compiler.lib.release.option.debugging.level.268531470" name="Debug Level" superClass="gnu.c.compiler.lib.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1440092387" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-							</tool>
-							<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1816796144" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.883556826" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
-							<tool id="cdt.managedbuild.tool.gnu.assembler.lib.release.1951181920" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.lib.release">
-								<option id="gnu.both.asm.option.include.paths.755753468" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths"/>
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.618314481" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-							</tool>
-						</toolChain>
-					</folderInfo>
-				</configuration>
-			</storageModule>
-			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-		</cconfiguration>
-	</storageModule>
-	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="gameplay.cdt.managedbuild.target.gnu.lib.1260324719" name="Static Library" projectType="cdt.managedbuild.target.gnu.lib"/>
-	</storageModule>
-	<storageModule moduleId="scannerConfiguration">
-		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.lib.release.405865560;cdt.managedbuild.config.gnu.lib.release.405865560.;cdt.managedbuild.tool.gnu.cpp.compiler.lib.release.1098041763;cdt.managedbuild.tool.gnu.cpp.compiler.input.1821410876">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
-		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.lib.debug.1678352131;cdt.managedbuild.config.gnu.lib.debug.1678352131.;cdt.managedbuild.tool.gnu.cpp.compiler.lib.debug.777535448;cdt.managedbuild.tool.gnu.cpp.compiler.input.760206134">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
-		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.lib.release.405865560;cdt.managedbuild.config.gnu.lib.release.405865560.;cdt.managedbuild.tool.gnu.c.compiler.lib.release.1485072111;cdt.managedbuild.tool.gnu.c.compiler.input.1440092387">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
-		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.lib.debug.1678352131;cdt.managedbuild.config.gnu.lib.debug.1678352131.;cdt.managedbuild.tool.gnu.c.compiler.lib.debug.544132463;cdt.managedbuild.tool.gnu.c.compiler.input.828880230">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
-		</scannerConfigBuildInfo>
-	</storageModule>
-	<storageModule moduleId="refreshScope" versionNumber="2">
-		<configuration configurationName="Release">
-			<resource resourceType="PROJECT" workspacePath="/gameplay"/>
-		</configuration>
-		<configuration configurationName="Debug">
-			<resource resourceType="PROJECT" workspacePath="/gameplay"/>
-		</configuration>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
-	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
-</cproject>

+ 0 - 83
gameplay/.project

@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>gameplay</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>?name?</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildArguments</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildCommand</key>
-					<value>make</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildLocation</key>
-					<value>${workspace_loc:/gameplay/Debug}</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
-					<value>clean</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.contents</key>
-					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.core.ccnature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
-	</natures>
-</projectDescription>

+ 0 - 591
gameplay/CMakeLists.txt

@@ -1,591 +0,0 @@
-IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-    set(GAMEPLAY_PLATFORM_SRC
-            src/PlatformMacOSX.mm
-            src/gameplay-main-macosx.mm
-            )
-else(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-    set(GAMEPLAY_PLATFORM_SRC )
-endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-
-set(GAMEPLAY_SRC
-    src/AbsoluteLayout.cpp
-    src/AbsoluteLayout.h
-    src/AIAgent.cpp
-    src/AIAgent.h
-    src/AIController.cpp
-    src/AIController.h
-    src/AIMessage.cpp
-    src/AIMessage.h
-    src/AIState.cpp
-    src/AIState.h
-    src/AIStateMachine.cpp
-    src/AIStateMachine.h
-    src/Animation.cpp
-    src/Animation.h
-    src/AnimationClip.cpp
-    src/AnimationClip.h
-    src/AnimationController.cpp
-    src/AnimationController.h
-    src/AnimationTarget.cpp
-    src/AnimationTarget.h
-    src/AnimationValue.cpp
-    src/AnimationValue.h
-    src/AudioBuffer.cpp
-    src/AudioBuffer.h
-    src/AudioController.cpp
-    src/AudioController.h
-    src/AudioListener.cpp
-    src/AudioListener.h
-    src/AudioSource.cpp
-    src/AudioSource.h
-    src/Base.h
-    src/BoundingBox.cpp
-    src/BoundingBox.h
-    src/BoundingBox.inl
-    src/BoundingSphere.cpp
-    src/BoundingSphere.h
-    src/BoundingSphere.inl
-    src/Bundle.cpp
-    src/Bundle.h
-    src/Button.cpp
-    src/Button.h
-    src/Camera.cpp
-    src/Camera.h
-    src/CheckBox.cpp
-    src/CheckBox.h
-    src/Container.cpp
-    src/Container.h
-    src/Control.cpp
-    src/Control.h
-    src/ControlFactory.h
-    src/ControlFactory.cpp
-    src/Curve.cpp
-    src/Curve.h
-    src/DebugNew.cpp
-    src/DebugNew.h
-    src/DepthStencilTarget.cpp
-    src/DepthStencilTarget.h
-    src/Drawable.cpp
-    src/Drawable.h
-    src/Effect.cpp
-    src/Effect.h
-    src/FileSystem.cpp
-    src/FileSystem.h
-    src/FlowLayout.cpp
-    src/FlowLayout.h
-    src/Font.cpp
-    src/Font.h
-    src/Form.cpp
-    src/Form.h
-    src/FrameBuffer.cpp
-    src/FrameBuffer.h
-    src/Frustum.cpp
-    src/Frustum.h
-    src/Game.cpp
-    src/Game.h
-    src/Game.inl
-    src/Gamepad.cpp
-    src/Gamepad.h
-    src/gameplay-main-android.cpp
-    src/gameplay-main-linux.cpp
-    src/gameplay-main-windows.cpp
-    src/Gesture.h
-    src/HeightField.cpp
-    src/HeightField.h
-    src/Image.cpp
-    src/Image.h
-    src/Image.inl
-    src/ImageControl.cpp
-    src/ImageControl.h
-    src/Joint.cpp
-    src/Joint.h
-    src/JoystickControl.cpp
-    src/JoystickControl.h
-    src/Label.cpp
-    src/Label.h
-    src/Layout.cpp
-    src/Layout.h
-    src/Light.cpp
-    src/Light.h
-    src/Logger.cpp
-    src/Logger.h
-    src/Material.cpp
-    src/Material.h
-    src/MaterialParameter.cpp
-    src/MaterialParameter.h
-    src/MathUtil.cpp
-    src/MathUtil.h
-    src/MathUtil.inl
-    src/MathUtilNeon.inl
-    src/Matrix.cpp
-    src/Matrix.h
-    src/Matrix.inl
-    src/Mesh.cpp
-    src/Mesh.h
-    src/MeshBatch.cpp
-    src/MeshBatch.h
-    src/MeshBatch.inl
-    src/MeshPart.cpp
-    src/MeshPart.h
-    src/MeshSkin.cpp
-    src/MeshSkin.h
-    src/Model.cpp
-    src/Model.h
-    src/Node.cpp
-    src/Node.h
-    src/ParticleEmitter.cpp
-    src/ParticleEmitter.h
-    src/Pass.cpp
-    src/Pass.h
-    src/PhysicsCharacter.cpp
-    src/PhysicsCharacter.h
-    src/PhysicsCollisionObject.cpp
-    src/PhysicsCollisionObject.h
-    src/PhysicsCollisionShape.cpp
-    src/PhysicsCollisionShape.h
-    src/PhysicsConstraint.cpp
-    src/PhysicsConstraint.h
-    src/PhysicsController.cpp
-    src/PhysicsController.h
-    src/PhysicsFixedConstraint.cpp
-    src/PhysicsFixedConstraint.h
-    src/PhysicsGenericConstraint.cpp
-    src/PhysicsGenericConstraint.h
-    src/PhysicsGhostObject.cpp
-    src/PhysicsGhostObject.h
-    src/PhysicsHingeConstraint.cpp
-    src/PhysicsHingeConstraint.h
-    src/PhysicsRigidBody.cpp
-    src/PhysicsRigidBody.h
-    src/PhysicsSocketConstraint.cpp
-    src/PhysicsSocketConstraint.h
-    src/PhysicsSpringConstraint.cpp
-    src/PhysicsSpringConstraint.h
-    src/PhysicsVehicle.cpp
-    src/PhysicsVehicle.h
-    src/PhysicsVehicleWheel.cpp
-    src/PhysicsVehicle.h
-    src/Plane.cpp
-    src/Plane.h
-    src/Plane.inl
-    src/Platform.h
-    src/Platform.cpp
-    src/PlatformAndroid.cpp
-    src/PlatformLinux.cpp
-    src/PlatformWindows.cpp
-    ${GAMEPLAY_PLATFORM_SRC}
-    src/Properties.cpp
-    src/Properties.h
-    src/Quaternion.cpp
-    src/Quaternion.h
-    src/Quaternion.inl
-    src/RadioButton.cpp
-    src/RadioButton.h
-    src/Ray.cpp
-    src/Ray.h
-    src/Ray.inl
-    src/Rectangle.cpp
-    src/Rectangle.h
-    src/Ref.cpp
-    src/Ref.h
-    src/RenderState.cpp
-    src/RenderState.h
-    src/RenderTarget.cpp
-    src/RenderTarget.h
-    src/Scene.cpp
-    src/Scene.h
-    src/SceneLoader.cpp
-    src/SceneLoader.h
-    src/ScreenDisplayer.cpp
-    src/ScreenDisplayer.h
-    src/Script.cpp
-    src/Script.h
-    src/ScriptController.cpp
-    src/ScriptController.h
-    src/ScriptController.inl
-    src/ScriptTarget.cpp
-    src/ScriptTarget.h
-    src/Slider.cpp
-    src/Slider.h
-    src/Sprite.cpp
-    src/Sprite.h
-    src/SpriteBatch.cpp
-    src/SpriteBatch.h
-    src/Technique.cpp
-    src/Technique.h
-    src/Terrain.cpp
-    src/Terrain.h
-    src/TerrainPatch.cpp
-    src/TerrainPatch.h
-    src/Text.cpp
-    src/Text.h
-    src/TextBox.cpp
-    src/TextBox.h
-    src/Texture.cpp
-    src/Texture.h
-    src/Theme.cpp
-    src/Theme.h
-    src/ThemeStyle.cpp
-    src/ThemeStyle.h
-    src/TileSet.cpp
-    src/TileSet.h
-    src/Transform.cpp
-    src/Transform.h
-    src/Vector2.cpp
-    src/Vector2.h
-    src/Vector2.inl
-    src/Vector3.cpp
-    src/Vector3.h
-    src/Vector3.inl
-    src/Vector4.cpp
-    src/Vector4.h
-    src/Vector4.inl
-    src/VertexAttributeBinding.cpp
-    src/VertexAttributeBinding.h
-    src/VertexFormat.cpp
-    src/VertexFormat.h
-    src/VerticalLayout.cpp
-    src/VerticalLayout.h
-)
-
-set(GAMEPLAY_LUA
-    src/lua/lua_all_bindings.cpp
-    src/lua/lua_all_bindings.h
-    src/lua/lua_AbsoluteLayout.cpp
-    src/lua/lua_AbsoluteLayout.h
-    src/lua/lua_AIAgent.cpp
-    src/lua/lua_AIAgent.h
-    src/lua/lua_AIAgentListener.cpp
-    src/lua/lua_AIAgentListener.h
-    src/lua/lua_AIController.cpp
-    src/lua/lua_AIController.h
-    src/lua/lua_AIMessage.cpp
-    src/lua/lua_AIMessage.h
-    src/lua/lua_AIState.cpp
-    src/lua/lua_AIState.h
-    src/lua/lua_AIStateListener.cpp
-    src/lua/lua_AIStateListener.h
-    src/lua/lua_AIStateMachine.cpp
-    src/lua/lua_AIStateMachine.h
-    src/lua/lua_Animation.cpp
-    src/lua/lua_Animation.h
-    src/lua/lua_AnimationClip.cpp
-    src/lua/lua_AnimationClip.h
-    src/lua/lua_AnimationClipListener.cpp
-    src/lua/lua_AnimationClipListener.h
-    src/lua/lua_AnimationController.cpp
-    src/lua/lua_AnimationController.h
-    src/lua/lua_AnimationTarget.cpp
-    src/lua/lua_AnimationTarget.h
-    src/lua/lua_AnimationValue.cpp
-    src/lua/lua_AnimationValue.h
-    src/lua/lua_AudioBuffer.cpp
-    src/lua/lua_AudioBuffer.h
-    src/lua/lua_AudioController.cpp
-    src/lua/lua_AudioController.h
-    src/lua/lua_AudioListener.cpp
-    src/lua/lua_AudioListener.h
-    src/lua/lua_AudioSource.cpp
-    src/lua/lua_AudioSource.h
-    src/lua/lua_BoundingBox.cpp
-    src/lua/lua_BoundingBox.h
-    src/lua/lua_BoundingSphere.cpp
-    src/lua/lua_BoundingSphere.h
-    src/lua/lua_Bundle.cpp
-    src/lua/lua_Bundle.h
-    src/lua/lua_Button.cpp
-    src/lua/lua_Button.h
-    src/lua/lua_Camera.cpp
-    src/lua/lua_Camera.h
-    src/lua/lua_CameraListener.h
-    src/lua/lua_CameraListener.cpp
-    src/lua/lua_CheckBox.cpp
-    src/lua/lua_CheckBox.h
-    src/lua/lua_Container.cpp
-    src/lua/lua_Container.h
-    src/lua/lua_Control.cpp
-    src/lua/lua_Control.h
-    src/lua/lua_ControlListener.cpp
-    src/lua/lua_ControlListener.h
-    src/lua/lua_Curve.cpp
-    src/lua/lua_Curve.h
-    src/lua/lua_DepthStencilTarget.cpp
-    src/lua/lua_DepthStencilTarget.h
-    src/lua/lua_Drawable.cpp
-    src/lua/lua_Drawable.h
-    src/lua/lua_Effect.cpp
-    src/lua/lua_Effect.h
-    src/lua/lua_FileSystem.cpp
-    src/lua/lua_FileSystem.h
-    src/lua/lua_FlowLayout.cpp
-    src/lua/lua_FlowLayout.h
-    src/lua/lua_Font.cpp
-    src/lua/lua_Font.h
-    src/lua/lua_Form.cpp
-    src/lua/lua_Form.h
-    src/lua/lua_FrameBuffer.cpp
-    src/lua/lua_FrameBuffer.h
-    src/lua/lua_Frustum.cpp
-    src/lua/lua_Frustum.h
-    src/lua/lua_Game.cpp
-    src/lua/lua_Game.h
-    src/lua/lua_Gamepad.cpp
-    src/lua/lua_Gamepad.h
-    src/lua/lua_Gesture.cpp
-    src/lua/lua_Gesture.h
-    src/lua/lua_Global.cpp
-    src/lua/lua_Global.h
-    src/lua/lua_HeightField.cpp
-    src/lua/lua_HeightField.h
-    src/lua/lua_Image.cpp
-    src/lua/lua_Image.h
-    src/lua/lua_ImageControl.cpp
-    src/lua/lua_ImageControl.h
-    src/lua/lua_Joint.cpp
-    src/lua/lua_Joint.h
-    src/lua/lua_JoystickControl.cpp
-    src/lua/lua_JoystickControl.h
-    src/lua/lua_Keyboard.cpp
-    src/lua/lua_Keyboard.h
-    src/lua/lua_Label.cpp
-    src/lua/lua_Label.h
-    src/lua/lua_Layout.cpp
-    src/lua/lua_Layout.h
-    src/lua/lua_Light.cpp
-    src/lua/lua_Light.h
-    src/lua/lua_Logger.cpp
-    src/lua/lua_Logger.h
-    src/lua/lua_Material.cpp
-    src/lua/lua_Material.h
-    src/lua/lua_MaterialParameter.cpp
-    src/lua/lua_MaterialParameter.h
-    src/lua/lua_MathUtil.cpp
-    src/lua/lua_MathUtil.h
-    src/lua/lua_Matrix.cpp
-    src/lua/lua_Matrix.h
-    src/lua/lua_Mesh.cpp
-    src/lua/lua_Mesh.h
-    src/lua/lua_MeshBatch.cpp
-    src/lua/lua_MeshBatch.h
-    src/lua/lua_MeshPart.cpp
-    src/lua/lua_MeshPart.h
-    src/lua/lua_MeshSkin.cpp
-    src/lua/lua_MeshSkin.h
-    src/lua/lua_Model.cpp
-    src/lua/lua_Model.h
-    src/lua/lua_Mouse.cpp
-    src/lua/lua_Mouse.h
-    src/lua/lua_Node.cpp
-    src/lua/lua_Node.h
-    src/lua/lua_NodeCloneContext.cpp
-    src/lua/lua_NodeCloneContext.h
-    src/lua/lua_ParticleEmitter.cpp
-    src/lua/lua_ParticleEmitter.h
-    src/lua/lua_Pass.cpp
-    src/lua/lua_Pass.h
-    src/lua/lua_PhysicsCharacter.cpp
-    src/lua/lua_PhysicsCharacter.h
-    src/lua/lua_PhysicsCollisionObject.cpp
-    src/lua/lua_PhysicsCollisionObject.h
-    src/lua/lua_PhysicsCollisionObjectCollisionListener.cpp
-    src/lua/lua_PhysicsCollisionObjectCollisionListener.h
-    src/lua/lua_PhysicsCollisionObjectCollisionPair.cpp
-    src/lua/lua_PhysicsCollisionObjectCollisionPair.h
-    src/lua/lua_PhysicsCollisionShape.cpp
-    src/lua/lua_PhysicsCollisionShape.h
-    src/lua/lua_PhysicsCollisionShapeDefinition.cpp
-    src/lua/lua_PhysicsCollisionShapeDefinition.h
-    src/lua/lua_PhysicsConstraint.cpp
-    src/lua/lua_PhysicsConstraint.h
-    src/lua/lua_PhysicsController.cpp
-    src/lua/lua_PhysicsController.h
-    src/lua/lua_PhysicsControllerHitFilter.cpp
-    src/lua/lua_PhysicsControllerHitFilter.h
-    src/lua/lua_PhysicsControllerHitResult.cpp
-    src/lua/lua_PhysicsControllerHitResult.h
-    src/lua/lua_PhysicsControllerListener.cpp
-    src/lua/lua_PhysicsControllerListener.h
-    src/lua/lua_PhysicsFixedConstraint.cpp
-    src/lua/lua_PhysicsFixedConstraint.h
-    src/lua/lua_PhysicsGenericConstraint.cpp
-    src/lua/lua_PhysicsGenericConstraint.h
-    src/lua/lua_PhysicsGhostObject.cpp
-    src/lua/lua_PhysicsGhostObject.h
-    src/lua/lua_PhysicsHingeConstraint.cpp
-    src/lua/lua_PhysicsHingeConstraint.h
-    src/lua/lua_PhysicsRigidBody.cpp
-    src/lua/lua_PhysicsRigidBody.h
-    src/lua/lua_PhysicsRigidBodyParameters.cpp
-    src/lua/lua_PhysicsRigidBodyParameters.h
-    src/lua/lua_PhysicsSocketConstraint.cpp
-    src/lua/lua_PhysicsSocketConstraint.h
-    src/lua/lua_PhysicsSpringConstraint.cpp
-    src/lua/lua_PhysicsSpringConstraint.h
-    src/lua/lua_PhysicsVehicle.cpp
-    src/lua/lua_PhysicsVehicle.h
-    src/lua/lua_PhysicsVehicleWheel.cpp
-    src/lua/lua_PhysicsVehicleWheel.h
-    src/lua/lua_Plane.cpp
-    src/lua/lua_Plane.h
-    src/lua/lua_Platform.cpp
-    src/lua/lua_Platform.h
-    src/lua/lua_Properties.cpp
-    src/lua/lua_Properties.h
-    src/lua/lua_Quaternion.cpp
-    src/lua/lua_Quaternion.h
-    src/lua/lua_RadioButton.cpp
-    src/lua/lua_RadioButton.h
-    src/lua/lua_Ray.cpp
-    src/lua/lua_Ray.h
-    src/lua/lua_Rectangle.cpp
-    src/lua/lua_Rectangle.h
-    src/lua/lua_Ref.cpp
-    src/lua/lua_Ref.h
-    src/lua/lua_RenderState.cpp
-    src/lua/lua_RenderState.h
-    src/lua/lua_RenderStateStateBlock.cpp
-    src/lua/lua_RenderStateStateBlock.h
-    src/lua/lua_RenderTarget.cpp
-    src/lua/lua_RenderTarget.h
-    src/lua/lua_Scene.cpp
-    src/lua/lua_Scene.h
-    src/lua/lua_ScreenDisplayer.cpp
-    src/lua/lua_ScreenDisplayer.h
-    src/lua/lua_Script.cpp
-    src/lua/lua_Script.h
-    src/lua/lua_ScriptController.cpp
-    src/lua/lua_ScriptController.h
-    src/lua/lua_ScriptTarget.cpp
-    src/lua/lua_ScriptTarget.h
-    src/lua/lua_ScriptTargetEvent.cpp
-    src/lua/lua_ScriptTargetEvent.h
-    src/lua/lua_ScriptTargetEventRegistry.cpp
-    src/lua/lua_ScriptTargetEventRegistry.h
-    src/lua/lua_Slider.cpp
-    src/lua/lua_Slider.h
-    src/lua/lua_Sprite.cpp
-    src/lua/lua_Sprite.h
-    src/lua/lua_SpriteBatch.cpp
-    src/lua/lua_SpriteBatch.h
-    src/lua/lua_SpriteBatchSpriteVertex.cpp
-    src/lua/lua_SpriteBatchSpriteVertex.h
-    src/lua/lua_Technique.cpp
-    src/lua/lua_Technique.h
-    src/lua/lua_Terrain.cpp
-    src/lua/lua_Terrain.h
-    src/lua/lua_TerrainPatch.cpp
-    src/lua/lua_TerrainPatch.h
-    src/lua/lua_Text.cpp
-    src/lua/lua_Text.h
-    src/lua/lua_TextBox.cpp
-    src/lua/lua_TextBox.h
-    src/lua/lua_Texture.cpp
-    src/lua/lua_Texture.h
-    src/lua/lua_TextureSampler.cpp
-    src/lua/lua_TextureSampler.h
-    src/lua/lua_Theme.cpp
-    src/lua/lua_Theme.h
-    src/lua/lua_ThemeSideRegions.cpp
-    src/lua/lua_ThemeSideRegions.h
-    src/lua/lua_ThemeStyle.cpp
-    src/lua/lua_ThemeStyle.h
-    src/lua/lua_ThemeThemeImage.cpp
-    src/lua/lua_ThemeThemeImage.h
-    src/lua/lua_ThemeUVs.cpp
-    src/lua/lua_ThemeUVs.h
-    src/lua/lua_TileSet.cpp
-    src/lua/lua_TileSet.h
-    src/lua/lua_Touch.cpp
-    src/lua/lua_Touch.h
-    src/lua/lua_Transform.cpp
-    src/lua/lua_Transform.h
-    src/lua/lua_TransformListener.cpp
-    src/lua/lua_TransformListener.h
-    src/lua/lua_Uniform.cpp
-    src/lua/lua_Uniform.h
-    src/lua/lua_Vector2.cpp
-    src/lua/lua_Vector2.h
-    src/lua/lua_Vector3.cpp
-    src/lua/lua_Vector3.h
-    src/lua/lua_Vector4.cpp
-    src/lua/lua_Vector4.h
-    src/lua/lua_VertexAttributeBinding.cpp
-    src/lua/lua_VertexAttributeBinding.h
-    src/lua/lua_VertexFormat.cpp
-    src/lua/lua_VertexFormat.h
-    src/lua/lua_VertexFormatElement.cpp
-    src/lua/lua_VertexFormatElement.h
-    src/lua/lua_VerticalLayout.cpp
-    src/lua/lua_VerticalLayout.h
-)
-
-set(GAMEPLAY_RES
-    res/logo_black.png
-    res/logo_powered_black.png
-    res/logo_powered_white.png
-    res/logo_white.png
-)
-
-set(GAMEPLAY_RES_SHADERS
-    res/shaders/colored.frag
-    res/shaders/colored.vert
-    res/shaders/font.frag
-    res/shaders/font.vert
-    res/shaders/form.frag
-    res/shaders/form.vert
-    res/shaders/lighting.frag
-    res/shaders/lighting.vert
-    res/shaders/skinning.vert
-    res/shaders/skinning-none.vert
-    res/shaders/sprite.frag
-    res/shaders/sprite.vert
-    res/shaders/terrain.frag
-    res/shaders/terrain.vert
-    res/shaders/textured.frag
-    res/shaders/textured.vert
-)
-
-set(GAMEPLAY_RES_SHADERS
-    res/ui/arial.gpb
-    res/ui/default.png
-    res/ui/default.theme
-)
-
-include_directories(
-    src
-    ../external-deps/include
-)
-
-IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(GTK2 REQUIRED gtk+-2.0)
-include_directories(${GTK2_INCLUDE_DIRS})
-add_definitions(${GTK2_CFLAGS_OTHER})
-add_definitions(-D__linux__)
-ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
-
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
-    # using Clang
-    add_definitions(-std=c++11 -stdlib=libc++)
-else()
-    add_definitions(-std=c++11)
-    add_definitions(-lstdc++)
-endif()
-
-add_library(gameplay STATIC
-    ${GAMEPLAY_SRC}
-    ${GAMEPLAY_LUA}
-)
-
-set_target_properties(gameplay PROPERTIES
-    OUTPUT_NAME "gameplay"
-    CLEAN_DIRECT_OUTPUT 1
-    VERSION ${GAMEPLAY_VERSION}
-)
-
-source_group(lua FILES ${GAMEPLAY_LUA})
-source_group(res FILES ${GAMEPLAY_RES} ${GAMEPLAY_RES} ${GAMEPLAY_RES_SHADERS} ${GAMEPLAY_RES_UI})
-source_group(src FILES ${GAMEPLAY_SRC})
-
-
-

+ 0 - 13
gameplay/android/.classpath

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="gen"/>
-	<classpathentry kind="src" path="src">
-		<attributes>
-			<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="gameplay/src"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
-	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
-	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
-	<classpathentry kind="output" path="bin/classes"/>
-</classpath>

+ 0 - 57
gameplay/android/.cproject

@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<cconfiguration id="com.android.toolchain.gcc.1762611861">
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.android.toolchain.gcc.1762611861" moduleId="org.eclipse.cdt.core.settings" name="Default">
-				<externalSettings/>
-				<extensions>
-					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-				</extensions>
-			</storageModule>
-			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.android.toolchain.gcc.1762611861" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
-					<folderInfo id="com.android.toolchain.gcc.1762611861.1006586964" name="/" resourcePath="">
-						<toolChain id="com.android.toolchain.gcc.104843543" name="com.android.toolchain.gcc" superClass="com.android.toolchain.gcc">
-							<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.android.targetPlatform.849260442" isAbstract="false" superClass="com.android.targetPlatform"/>
-							<builder arguments="NDK_DEBUG=1 -j4" command="ndk-build" id="com.android.builder.584998984" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Android Builder" superClass="com.android.builder">
-								<outputEntries>
-									<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="obj"/>
-									<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="libs"/>
-								</outputEntries>
-							</builder>
-							<tool id="com.android.gcc.compiler.1357063072" name="Android GCC Compiler" superClass="com.android.gcc.compiler">
-								<inputType id="com.android.gcc.inputType.871576572" superClass="com.android.gcc.inputType"/>
-							</tool>
-						</toolChain>
-					</folderInfo>
-					<sourceEntries>
-						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="jni"/>
-					</sourceEntries>
-				</configuration>
-			</storageModule>
-			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-		</cconfiguration>
-	</storageModule>
-	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-		<project id="gameplay.null.1788907050" name="gameplay"/>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
-	<storageModule moduleId="scannerConfiguration">
-		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-		<scannerConfigBuildInfo instanceId="com.android.toolchain.gcc.1762611861;com.android.toolchain.gcc.1762611861.1006586964;com.android.gcc.compiler.1357063072;com.android.gcc.inputType.871576572">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.android.AndroidPerProjectProfile"/>
-		</scannerConfigBuildInfo>
-	</storageModule>
-	<storageModule moduleId="refreshScope" versionNumber="2">
-		<configuration configurationName="Default">
-			<resource resourceType="PROJECT" workspacePath="/gameplay"/>
-		</configuration>
-	</storageModule>
-</cproject>

+ 0 - 104
gameplay/android/.project

@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>gameplay</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>?children?</key>
-					<value>?name?=outputEntries\|?children?=?name?=entry\\\\\\\|\\\|?name?=entry\\\\\\\|\\\|\||</value>
-				</dictionary>
-				<dictionary>
-					<key>?name?</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildArguments</key>
-					<value>NDK_DEBUG=1 -j4</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildCommand</key>
-					<value>ndk-build</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
-					<value>clean</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.contents</key>
-					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>false</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.core.ccnature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
-	</natures>
-	<linkedResources>
-		<link>
-			<name>src</name>
-			<type>2</type>
-			<locationURI>$%7BPARENT-2-PROJECT_LOC%7D/gameplay/src</locationURI>
-		</link>
-	</linkedResources>
-</projectDescription>

+ 0 - 9
gameplay/android/AndroidManifest.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
-	package="org.gameplay3d" 
-	android:versionCode="1" 
-	android:versionName="1.0">
-
-    <uses-sdk android:minSdkVersion="16" />
-
-</manifest>

+ 0 - 40
gameplay/android/build.xml

@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="gameplay" default="help">
-
-    <property file="local.properties" />
-    <property file="ant.properties" />
-   
-    <loadproperties srcFile="project.properties" />
-    
-    <fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project -t 1 -p . -s'" unless="sdk.dir" />
-    <fail message="OS not supported. Supported platforms: Windows, MacOS X or Linux.">
-        <condition>
-            <not>
-                <or>
-                    <os family="unix"/>
-                    <os family="windows"/>
-                </or>
-            </not>
-        </condition>
-    </fail>
-    <macrodef name="build-native">
-        <attribute name="location"/>
-        <sequential>
-            <exec osfamily="unix" dir="@{location}/android" executable="ndk-build">
-                <arg value="-j4"/>
-            </exec>
-            <exec osfamily="windows" dir="@{location}/android" executable="cmd">
-                <arg value="/c"/>
-                <arg value="ndk-build -j4"/>
-            </exec> 
-        </sequential>
-    </macrodef>
-    
-    <target name="-pre-build">
-        <build-native location=".."/>
-    </target>
-    
-    <!-- version-tag: 1 -->
-    <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>

+ 0 - 270
gameplay/android/jni/Android.mk

@@ -1,270 +0,0 @@
-GAMEPLAY_PATH := $(call my-dir)/../../src
-
-# external-deps
-GAMEPLAY_DEPS := ../../external-deps/lib/android/$(TARGET_ARCH_ABI)
-
-# libgameplay-deps
-LOCAL_PATH := $(GAMEPLAY_DEPS)
-include $(CLEAR_VARS)
-LOCAL_MODULE    := libgameplay-deps 
-LOCAL_SRC_FILES := libgameplay-deps.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-# libgameplay
-include $(CLEAR_VARS)
-LOCAL_PATH := $(GAMEPLAY_PATH)
-LOCAL_MODULE    := libgameplay
-LOCAL_SRC_FILES := \
-    AbsoluteLayout.cpp \
-    AIAgent.cpp \
-    AIController.cpp \
-    AIMessage.cpp \
-    AIState.cpp \
-    AIStateMachine.cpp \
-    Animation.cpp \
-    AnimationClip.cpp \
-    AnimationController.cpp \
-    AnimationTarget.cpp \
-    AnimationValue.cpp \
-    AudioBuffer.cpp \
-    AudioController.cpp \
-    AudioListener.cpp \
-    AudioSource.cpp \
-    BoundingBox.cpp \
-    BoundingSphere.cpp \
-    Bundle.cpp \
-    Button.cpp \
-    Camera.cpp \
-    CheckBox.cpp \
-    Container.cpp \
-    Control.cpp \
-    ControlFactory.cpp \
-    Curve.cpp \
-    DebugNew.cpp \
-    DepthStencilTarget.cpp \
-    Drawable.cpp \
-    Effect.cpp \
-    FileSystem.cpp \
-    FlowLayout.cpp \
-    Font.cpp \
-    Form.cpp \
-    FrameBuffer.cpp \
-    Frustum.cpp \
-    Game.cpp \
-    Gamepad.cpp \
-    HeightField.cpp \
-    Image.cpp \
-    ImageControl.cpp \
-    Joint.cpp \
-    JoystickControl.cpp \
-    Label.cpp \
-    Layout.cpp \
-    Light.cpp \
-    Logger.cpp \
-    Material.cpp \
-    MaterialParameter.cpp \
-    MathUtil.cpp \
-    Matrix.cpp \
-    Mesh.cpp \
-    MeshBatch.cpp \
-    MeshPart.cpp \
-    MeshSkin.cpp \
-    Model.cpp \
-    Node.cpp \
-    ParticleEmitter.cpp \
-    Pass.cpp \
-    PhysicsCharacter.cpp \
-    PhysicsCollisionObject.cpp \
-    PhysicsCollisionShape.cpp \
-    PhysicsConstraint.cpp \
-    PhysicsController.cpp \
-    PhysicsFixedConstraint.cpp \
-    PhysicsGenericConstraint.cpp \
-    PhysicsGhostObject.cpp \
-    PhysicsHingeConstraint.cpp \
-    PhysicsRigidBody.cpp \
-    PhysicsSocketConstraint.cpp \
-    PhysicsSpringConstraint.cpp \
-    PhysicsVehicle.cpp \
-    PhysicsVehicleWheel.cpp \
-    Plane.cpp \
-    Platform.cpp \
-    PlatformAndroid.cpp \
-    Properties.cpp \
-    Quaternion.cpp \
-    RadioButton.cpp \
-    Ray.cpp \
-    Rectangle.cpp \
-    Ref.cpp \
-    RenderState.cpp \
-    RenderTarget.cpp \
-    Scene.cpp \
-    SceneLoader.cpp \
-    ScreenDisplayer.cpp \
-    Script.cpp \
-    ScriptController.cpp \
-    ScriptTarget.cpp \
-    Slider.cpp \
-    Sprite.cpp \
-    SpriteBatch.cpp \
-    Technique.cpp \
-    Terrain.cpp \
-    TerrainPatch.cpp \
-    Text.cpp \
-    TextBox.cpp \
-    Texture.cpp \
-    Theme.cpp \
-    ThemeStyle.cpp \
-    TileSet.cpp \
-    Transform.cpp \
-    Vector2.cpp \
-    Vector3.cpp \
-    Vector4.cpp \
-    VertexAttributeBinding.cpp \
-    VertexFormat.cpp \
-    VerticalLayout.cpp \
-    lua/lua_AbsoluteLayout.cpp \
-    lua/lua_AIAgent.cpp \
-    lua/lua_AIAgentListener.cpp \
-    lua/lua_AIController.cpp \
-    lua/lua_AIMessage.cpp \
-    lua/lua_AIState.cpp \
-    lua/lua_AIStateListener.cpp \
-    lua/lua_AIStateMachine.cpp \
-    lua/lua_all_bindings.cpp \
-    lua/lua_Animation.cpp \
-    lua/lua_AnimationClip.cpp \
-    lua/lua_AnimationClipListener.cpp \
-    lua/lua_AnimationController.cpp \
-    lua/lua_AnimationTarget.cpp \
-    lua/lua_AnimationValue.cpp \
-    lua/lua_AudioBuffer.cpp \
-    lua/lua_AudioController.cpp \
-    lua/lua_AudioListener.cpp \
-    lua/lua_AudioSource.cpp \
-    lua/lua_BoundingBox.cpp \
-    lua/lua_BoundingSphere.cpp \
-    lua/lua_Bundle.cpp \
-    lua/lua_Button.cpp \
-    lua/lua_Camera.cpp \
-    lua/lua_CameraListener.cpp \
-    lua/lua_CheckBox.cpp \
-    lua/lua_Container.cpp \
-    lua/lua_Control.cpp \
-    lua/lua_ControlListener.cpp \
-    lua/lua_Curve.cpp \
-    lua/lua_DepthStencilTarget.cpp \
-    lua/lua_Drawable.cpp \
-    lua/lua_Effect.cpp \
-    lua/lua_FileSystem.cpp \
-    lua/lua_FlowLayout.cpp \
-    lua/lua_Font.cpp \
-    lua/lua_Form.cpp \
-    lua/lua_FrameBuffer.cpp \
-    lua/lua_Frustum.cpp \
-    lua/lua_Game.cpp \
-    lua/lua_Gamepad.cpp \
-    lua/lua_Gesture.cpp \
-    lua/lua_Global.cpp \
-    lua/lua_HeightField.cpp \
-    lua/lua_Image.cpp \
-    lua/lua_ImageControl.cpp \
-    lua/lua_Joint.cpp \
-    lua/lua_JoystickControl.cpp \
-    lua/lua_Keyboard.cpp \
-    lua/lua_Label.cpp \
-    lua/lua_Layout.cpp \
-    lua/lua_Light.cpp \
-    lua/lua_Logger.cpp \
-    lua/lua_Material.cpp \
-    lua/lua_MaterialParameter.cpp \
-    lua/lua_MathUtil.cpp \
-    lua/lua_Matrix.cpp \
-    lua/lua_Mesh.cpp \
-    lua/lua_MeshBatch.cpp \
-    lua/lua_MeshPart.cpp \
-    lua/lua_MeshSkin.cpp \
-    lua/lua_Model.cpp \
-    lua/lua_Mouse.cpp \
-    lua/lua_Node.cpp \
-    lua/lua_NodeCloneContext.cpp \
-    lua/lua_ParticleEmitter.cpp \
-    lua/lua_Pass.cpp \
-    lua/lua_PhysicsCharacter.cpp \
-    lua/lua_PhysicsCollisionObject.cpp \
-    lua/lua_PhysicsCollisionObjectCollisionListener.cpp \
-    lua/lua_PhysicsCollisionObjectCollisionPair.cpp \
-    lua/lua_PhysicsCollisionShape.cpp \
-    lua/lua_PhysicsCollisionShapeDefinition.cpp \
-    lua/lua_PhysicsConstraint.cpp \
-    lua/lua_PhysicsController.cpp \
-    lua/lua_PhysicsControllerHitFilter.cpp \
-    lua/lua_PhysicsControllerHitResult.cpp \
-    lua/lua_PhysicsControllerListener.cpp \
-    lua/lua_PhysicsFixedConstraint.cpp \
-    lua/lua_PhysicsGenericConstraint.cpp \
-    lua/lua_PhysicsGhostObject.cpp \
-    lua/lua_PhysicsHingeConstraint.cpp \
-    lua/lua_PhysicsRigidBody.cpp \
-    lua/lua_PhysicsRigidBodyParameters.cpp \
-    lua/lua_PhysicsSocketConstraint.cpp \
-    lua/lua_PhysicsSpringConstraint.cpp \
-    lua/lua_PhysicsVehicle.cpp \
-    lua/lua_PhysicsVehicleWheel.cpp \
-    lua/lua_Plane.cpp \
-    lua/lua_Platform.cpp \
-    lua/lua_Properties.cpp \
-    lua/lua_Quaternion.cpp \
-    lua/lua_RadioButton.cpp \
-    lua/lua_Ray.cpp \
-    lua/lua_Rectangle.cpp \
-    lua/lua_Ref.cpp \
-    lua/lua_RenderState.cpp \
-    lua/lua_RenderStateStateBlock.cpp \
-    lua/lua_RenderTarget.cpp \
-    lua/lua_Scene.cpp \
-    lua/lua_ScreenDisplayer.cpp \
-    lua/lua_Script.cpp \
-    lua/lua_ScriptController.cpp \
-    lua/lua_ScriptTarget.cpp \
-    lua/lua_ScriptTargetEvent.cpp \
-    lua/lua_ScriptTargetEventRegistry.cpp \
-    lua/lua_Slider.cpp \
-    lua/lua_Sprite.cpp \
-    lua/lua_SpriteBatch.cpp \
-    lua/lua_SpriteBatchSpriteVertex.cpp \
-    lua/lua_Technique.cpp \
-    lua/lua_Terrain.cpp \
-    lua/lua_TerrainPatch.cpp \
-    lua/lua_Text.cpp \
-    lua/lua_TextBox.cpp \
-    lua/lua_Texture.cpp \
-    lua/lua_TextureSampler.cpp \
-    lua/lua_Theme.cpp \
-    lua/lua_ThemeSideRegions.cpp \
-    lua/lua_ThemeStyle.cpp \
-    lua/lua_ThemeThemeImage.cpp \
-    lua/lua_ThemeUVs.cpp \
-    lua/lua_TileSet.cpp \
-    lua/lua_Touch.cpp \
-    lua/lua_Transform.cpp \
-    lua/lua_TransformListener.cpp \
-    lua/lua_Uniform.cpp \
-    lua/lua_Vector2.cpp \
-    lua/lua_Vector3.cpp \
-    lua/lua_Vector4.cpp \
-    lua/lua_VertexAttributeBinding.cpp \
-    lua/lua_VertexFormat.cpp \
-    lua/lua_VertexFormatElement.cpp \
-    lua/lua_VerticalLayout.cpp
-
-LOCAL_CPPFLAGS += -std=c++11 -frtti -Wno-switch-enum -Wno-switch
-LOCAL_ARM_MODE := arm
-LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv2 -lOpenSLES
-LOCAL_CFLAGS := -D__ANDROID__ -I"../../external-deps/include"
-LOCAL_ADDITIONAL_DEPENDENCIES := gameplay
-LOCAL_STATIC_LIBRARIES := android_native_app_glue libgameplay-deps
-include $(BUILD_SHARED_LIBRARY)
-
-$(call import-module,android/native_app_glue)
-

+ 0 - 7
gameplay/android/jni/Application.mk

@@ -1,7 +0,0 @@
-NDK_TOOLCHAIN_VERSION := 4.8
-APP_CPPFLAGS += -std=c++11
-APP_STL      := gnustl_static
-APP_MODULES  := libgameplay
-APP_ABI      := armeabi-v7a x86
-APP_PLATFORM := android-16
-

+ 0 - 3
gameplay/android/project.properties

@@ -1,3 +0,0 @@
-target=android-16
-android.library=true
-source.dir=../src

BIN
gameplay/android/res/drawable/icon.png


+ 0 - 565
gameplay/gameplay.pro

@@ -1,565 +0,0 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator
-#
-#-------------------------------------------------
-QT -= core gui
-TARGET = gameplay
-TEMPLATE = lib
-CONFIG += staticlib
-CONFIG += c++11
-CONFIG -= qt
-CONFIG(debug, debug|release): DEFINES += _DEBUG
-
-SOURCES += src/AbsoluteLayout.cpp \
-    src/AIAgent.cpp \
-    src/AIController.cpp \
-    src/AIMessage.cpp \
-    src/AIState.cpp \
-    src/AIStateMachine.cpp \
-    src/Animation.cpp \
-    src/AnimationClip.cpp \
-    src/AnimationController.cpp \
-    src/AnimationTarget.cpp \
-    src/AnimationValue.cpp \
-    src/AudioBuffer.cpp \
-    src/AudioController.cpp \
-    src/AudioListener.cpp \
-    src/AudioSource.cpp \
-    src/BoundingBox.cpp \
-    src/BoundingBox.inl \
-    src/BoundingSphere.cpp \
-    src/BoundingSphere.inl \
-    src/Bundle.cpp \
-    src/Button.cpp \
-    src/Camera.cpp \
-    src/CheckBox.cpp \
-    src/Container.cpp \
-    src/Control.cpp \
-    src/ControlFactory.cpp \
-    src/Curve.cpp \
-    src/DepthStencilTarget.cpp \
-    src/Drawable.cpp \
-    src/Effect.cpp \
-    src/FileSystem.cpp \
-    src/FlowLayout.cpp \
-    src/Font.cpp \
-    src/Form.cpp \
-    src/FrameBuffer.cpp \
-    src/Frustum.cpp \
-    src/Game.cpp \
-    src/Game.inl \
-    src/Gamepad.cpp \
-    src/HeightField.cpp \
-    src/Image.cpp \
-    src/Image.inl \
-    src/ImageControl.cpp \
-    src/Joint.cpp \
-    src/JoystickControl.cpp \
-    src/Label.cpp \
-    src/Layout.cpp \
-    src/Light.cpp \
-    src/Logger.cpp \
-    src/Material.cpp \
-    src/MaterialParameter.cpp \
-    src/MathUtil.cpp \
-    src/MathUtil.inl \
-    src/MathUtilNeon.inl \
-    src/Matrix.cpp \
-    src/Matrix.inl \
-    src/Mesh.cpp \
-    src/MeshBatch.cpp \
-    src/MeshBatch.inl \
-    src/MeshPart.cpp \
-    src/MeshSkin.cpp \
-    src/Model.cpp \
-    src/Node.cpp \
-    src/ParticleEmitter.cpp \
-    src/Pass.cpp \
-    src/PhysicsCharacter.cpp \
-    src/PhysicsCollisionObject.cpp \
-    src/PhysicsCollisionShape.cpp \
-    src/PhysicsConstraint.cpp \
-    src/PhysicsConstraint.inl \
-    src/PhysicsController.cpp \
-    src/PhysicsFixedConstraint.cpp \
-    src/PhysicsFixedConstraint.inl \
-    src/PhysicsGenericConstraint.cpp \
-    src/PhysicsGenericConstraint.inl \
-    src/PhysicsGhostObject.cpp \
-    src/PhysicsHingeConstraint.cpp \
-    src/PhysicsRigidBody.cpp \
-    src/PhysicsRigidBody.inl \
-    src/PhysicsSocketConstraint.cpp \
-    src/PhysicsSpringConstraint.cpp \
-    src/PhysicsSpringConstraint.inl \
-    src/PhysicsVehicle.cpp \
-    src/PhysicsVehicleWheel.cpp \
-    src/Plane.cpp \
-    src/Plane.inl \
-    src/Platform.cpp \
-    src/Properties.cpp \
-    src/Quaternion.cpp \
-    src/Quaternion.inl \
-    src/RadioButton.cpp \
-    src/Ray.cpp \
-    src/Ray.inl \
-    src/Rectangle.cpp \
-    src/Ref.cpp \
-    src/RenderState.cpp \
-    src/RenderTarget.cpp \
-    src/Scene.cpp \
-    src/SceneLoader.cpp \
-    src/ScreenDisplayer.cpp \
-    src/Script.cpp \
-    src/ScriptController.cpp \
-    src/ScriptController.inl \
-    src/ScriptTarget.cpp \
-    src/Slider.cpp \
-    src/Sprite.cpp \
-    src/SpriteBatch.cpp \
-    src/Technique.cpp \
-    src/Terrain.cpp \
-    src/TerrainPatch.cpp \
-    src/Text.cpp \
-    src/TextBox.cpp \
-    src/Texture.cpp \
-    src/Theme.cpp \
-    src/ThemeStyle.cpp \
-    src/TileSet.cpp \
-    src/Transform.cpp \
-    src/Vector2.cpp \
-    src/Vector2.inl \
-    src/Vector3.cpp \
-    src/Vector3.inl \
-    src/Vector4.cpp \
-    src/Vector4.inl \
-    src/VertexAttributeBinding.cpp \
-    src/VertexFormat.cpp \
-    src/VerticalLayout.cpp \
-    src/lua/lua_all_bindings.cpp \
-    src/lua/lua_AbsoluteLayout.cpp \
-    src/lua/lua_AIAgent.cpp \
-    src/lua/lua_AIAgentListener.cpp \
-    src/lua/lua_AIController.cpp \
-    src/lua/lua_AIMessage.cpp \
-    src/lua/lua_AIState.cpp \
-    src/lua/lua_AIStateListener.cpp \
-    src/lua/lua_AIStateMachine.cpp \
-    src/lua/lua_Animation.cpp \
-    src/lua/lua_AnimationClip.cpp \
-    src/lua/lua_AnimationClipListener.cpp \
-    src/lua/lua_AnimationController.cpp \
-    src/lua/lua_AnimationTarget.cpp \
-    src/lua/lua_AnimationValue.cpp \
-    src/lua/lua_AudioBuffer.cpp \
-    src/lua/lua_AudioController.cpp \
-    src/lua/lua_AudioListener.cpp \
-    src/lua/lua_AudioSource.cpp \
-    src/lua/lua_BoundingBox.cpp \
-    src/lua/lua_BoundingSphere.cpp \
-    src/lua/lua_Bundle.cpp \
-    src/lua/lua_Button.cpp \
-    src/lua/lua_Camera.cpp \
-    src/lua/lua_CameraListener.cpp \
-    src/lua/lua_CheckBox.cpp \
-    src/lua/lua_Container.cpp \
-    src/lua/lua_Control.cpp \
-    src/lua/lua_ControlListener.cpp \
-    src/lua/lua_Curve.cpp \
-    src/lua/lua_DepthStencilTarget.cpp \
-    src/lua/lua_Drawable.cpp \
-    src/lua/lua_Effect.cpp \
-    src/lua/lua_FileSystem.cpp \
-    src/lua/lua_FlowLayout.cpp \
-    src/lua/lua_Font.cpp \
-    src/lua/lua_Form.cpp \
-    src/lua/lua_FrameBuffer.cpp \
-    src/lua/lua_Frustum.cpp \
-    src/lua/lua_Game.cpp \
-    src/lua/lua_Gamepad.cpp \
-    src/lua/lua_Gesture.cpp \
-    src/lua/lua_Global.cpp \
-    src/lua/lua_HeightField.cpp \
-    src/lua/lua_Image.cpp \
-    src/lua/lua_ImageControl.cpp \
-    src/lua/lua_Joint.cpp \
-    src/lua/lua_JoystickControl.cpp \
-    src/lua/lua_Keyboard.cpp \
-    src/lua/lua_Label.cpp \
-    src/lua/lua_Layout.cpp \
-    src/lua/lua_Light.cpp \
-    src/lua/lua_Logger.cpp \
-    src/lua/lua_Material.cpp \
-    src/lua/lua_MaterialParameter.cpp \
-    src/lua/lua_MathUtil.cpp \
-    src/lua/lua_Matrix.cpp \
-    src/lua/lua_Mesh.cpp \
-    src/lua/lua_MeshBatch.cpp \
-    src/lua/lua_MeshPart.cpp \
-    src/lua/lua_MeshSkin.cpp \
-    src/lua/lua_Model.cpp \
-    src/lua/lua_Mouse.cpp \
-    src/lua/lua_Node.cpp \
-    src/lua/lua_NodeCloneContext.cpp \
-    src/lua/lua_ParticleEmitter.cpp \
-    src/lua/lua_Pass.cpp \
-    src/lua/lua_PhysicsCharacter.cpp \
-    src/lua/lua_PhysicsCollisionObject.cpp \
-    src/lua/lua_PhysicsCollisionObjectCollisionListener.cpp \
-    src/lua/lua_PhysicsCollisionObjectCollisionPair.cpp \
-    src/lua/lua_PhysicsCollisionShape.cpp \
-    src/lua/lua_PhysicsCollisionShapeDefinition.cpp \
-    src/lua/lua_PhysicsConstraint.cpp \
-    src/lua/lua_PhysicsController.cpp \
-    src/lua/lua_PhysicsControllerHitFilter.cpp \
-    src/lua/lua_PhysicsControllerHitResult.cpp \
-    src/lua/lua_PhysicsControllerListener.cpp \
-    src/lua/lua_PhysicsFixedConstraint.cpp \
-    src/lua/lua_PhysicsGenericConstraint.cpp \
-    src/lua/lua_PhysicsGhostObject.cpp \
-    src/lua/lua_PhysicsHingeConstraint.cpp \
-    src/lua/lua_PhysicsRigidBody.cpp \
-    src/lua/lua_PhysicsRigidBodyParameters.cpp \
-    src/lua/lua_PhysicsSocketConstraint.cpp \
-    src/lua/lua_PhysicsSpringConstraint.cpp \
-    src/lua/lua_PhysicsVehicle.cpp \
-    src/lua/lua_PhysicsVehicleWheel.cpp \
-    src/lua/lua_Plane.cpp \
-    src/lua/lua_Platform.cpp \
-    src/lua/lua_Properties.cpp \
-    src/lua/lua_Quaternion.cpp \
-    src/lua/lua_RadioButton.cpp \
-    src/lua/lua_Ray.cpp \
-    src/lua/lua_Rectangle.cpp \
-    src/lua/lua_Ref.cpp \
-    src/lua/lua_RenderState.cpp \
-    src/lua/lua_RenderStateStateBlock.cpp \
-    src/lua/lua_RenderTarget.cpp \
-    src/lua/lua_Scene.cpp \
-    src/lua/lua_ScreenDisplayer.cpp \
-    src/lua/lua_Script.cpp \
-    src/lua/lua_ScriptController.cpp \
-    src/lua/lua_ScriptTarget.cpp \
-    src/lua/lua_ScriptTargetEvent.cpp \
-    src/lua/lua_ScriptTargetEventRegistry.cpp \
-    src/lua/lua_Slider.cpp \
-    src/lua/lua_Sprite.cpp \
-    src/lua/lua_SpriteBatch.cpp \
-    src/lua/lua_SpriteBatchSpriteVertex.cpp \
-    src/lua/lua_Technique.cpp \
-    src/lua/lua_Terrain.cpp \
-    src/lua/lua_TerrainPatch.cpp \
-    src/lua/lua_Text.cpp \
-    src/lua/lua_TextBox.cpp \
-    src/lua/lua_Texture.cpp \
-    src/lua/lua_TextureSampler.cpp \
-    src/lua/lua_Theme.cpp \
-    src/lua/lua_ThemeSideRegions.cpp \
-    src/lua/lua_ThemeStyle.cpp \
-    src/lua/lua_ThemeThemeImage.cpp \
-    src/lua/lua_ThemeUVs.cpp \
-    src/lua/lua_TileSet.cpp \
-    src/lua/lua_Touch.cpp \
-    src/lua/lua_Transform.cpp \
-    src/lua/lua_TransformListener.cpp \
-    src/lua/lua_Uniform.cpp \
-    src/lua/lua_Vector2.cpp \
-    src/lua/lua_Vector3.cpp \
-    src/lua/lua_Vector4.cpp \
-    src/lua/lua_VertexAttributeBinding.cpp \
-    src/lua/lua_VertexFormat.cpp \
-    src/lua/lua_VertexFormatElement.cpp \
-    src/lua/lua_VerticalLayout.cpp
-
-HEADERS += src/AbsoluteLayout.h \
-    src/AIAgent.h \
-    src/AIController.h \
-    src/AIMessage.h \
-    src/AIState.h \
-    src/AIStateMachine.h \
-    src/Animation.h \
-    src/AnimationClip.h \
-    src/AnimationController.h \
-    src/AnimationTarget.h \
-    src/AnimationValue.h \
-    src/AudioBuffer.h \
-    src/AudioController.h \
-    src/AudioListener.h \
-    src/AudioSource.h \
-    src/Base.h \
-    src/BoundingBox.h \
-    src/BoundingSphere.h \
-    src/Bundle.h \
-    src/Button.h \
-    src/Camera.h \
-    src/CheckBox.h \
-    src/Container.h \
-    src/Control.h \
-    src/ControlFactory.h \
-    src/Curve.h \
-    src/DepthStencilTarget.h \
-    src/Drawable.h \
-    src/Effect.h \
-    src/FileSystem.h \
-    src/FlowLayout.h \
-    src/Font.h \
-    src/Form.h \
-    src/FrameBuffer.h \
-    src/Frustum.h \
-    src/Game.h \
-    src/Gamepad.h \
-    src/gameplay.h \
-    src/Gesture.h \
-    src/HeightField.h \
-    src/Image.h \
-    src/ImageControl.h \
-    src/Joint.h \
-    src/JoystickControl.h \
-    src/Keyboard.h \
-    src/Label.h \
-    src/Layout.h \
-    src/Light.h \
-    src/Logger.h \
-    src/Material.h \
-    src/MaterialParameter.h \
-    src/MathUtil.h \
-    src/Matrix.h \
-    src/Mesh.h \
-    src/MeshBatch.h \
-    src/MeshPart.h \
-    src/MeshSkin.h \
-    src/Model.h \
-    src/Mouse.h \
-    src/Node.h \
-    src/ParticleEmitter.h \
-    src/Pass.h \
-    src/PhysicsCharacter.h \
-    src/PhysicsCollisionObject.h \
-    src/PhysicsCollisionShape.h \
-    src/PhysicsConstraint.h \
-    src/PhysicsController.h \
-    src/PhysicsFixedConstraint.h \
-    src/PhysicsGenericConstraint.h \
-    src/PhysicsGhostObject.h \
-    src/PhysicsHingeConstraint.h \
-    src/PhysicsRigidBody.h \
-    src/PhysicsSocketConstraint.h \
-    src/PhysicsSpringConstraint.h \
-    src/PhysicsVehicle.h \
-    src/PhysicsVehicleWheel.h \
-    src/Plane.h \
-    src/Platform.h \
-    src/Properties.h \
-    src/Quaternion.h \
-    src/RadioButton.h \
-    src/Ray.h \
-    src/Rectangle.h \
-    src/Ref.h \
-    src/RenderState.h \
-    src/RenderTarget.h \
-    src/Scene.h \
-    src/SceneLoader.h \
-    src/ScreenDisplayer.h \
-    src/Script.h \
-    src/ScriptController.h \
-    src/ScriptTarget.h \
-    src/Slider.h \
-    src/Sprite.h \
-    src/SpriteBatch.h \
-    src/Stream.h \
-    src/Technique.h \
-    src/Terrain.h \
-    src/TerrainPatch.h \
-    src/Text.h \
-    src/TextBox.h \
-    src/Texture.h \
-    src/Theme.h \
-    src/ThemeStyle.h \
-    src/TileSet.h \
-    src/TimeListener.h \
-    src/Touch.h \
-    src/Transform.h \
-    src/Vector2.h \
-    src/Vector3.h \
-    src/Vector4.h \
-    src/VertexAttributeBinding.h \
-    src/VertexFormat.h \
-    src/VerticalLayout.h \
-    src/lua/lua_AbsoluteLayout.h \
-    src/lua/lua_AIAgent.h \
-    src/lua/lua_AIAgentListener.h \
-    src/lua/lua_AIController.h \
-    src/lua/lua_AIMessage.h \
-    src/lua/lua_AIState.h \
-    src/lua/lua_AIStateListener.h \
-    src/lua/lua_AIStateMachine.h \
-    src/lua/lua_all_bindings.h \
-    src/lua/lua_Animation.h \
-    src/lua/lua_AnimationClip.h \
-    src/lua/lua_AnimationClipListener.h \
-    src/lua/lua_AnimationController.h \
-    src/lua/lua_AnimationTarget.h \
-    src/lua/lua_AnimationValue.h \
-    src/lua/lua_AudioBuffer.h \
-    src/lua/lua_AudioController.h \
-    src/lua/lua_AudioListener.h \
-    src/lua/lua_AudioSource.h \
-    src/lua/lua_BoundingBox.h \
-    src/lua/lua_BoundingSphere.h \
-    src/lua/lua_Bundle.h \
-    src/lua/lua_Button.h \
-    src/lua/lua_Camera.h \
-    src/lua/lua_CameraListener.h \
-    src/lua/lua_CheckBox.h \
-    src/lua/lua_Container.h \
-    src/lua/lua_Control.h \
-    src/lua/lua_ControlListener.h \
-    src/lua/lua_Curve.h \
-    src/lua/lua_DepthStencilTarget.h \
-    src/lua/lua_Drawable.h \
-    src/lua/lua_Effect.h \
-    src/lua/lua_FileSystem.h \
-    src/lua/lua_FlowLayout.h \
-    src/lua/lua_Font.h \
-    src/lua/lua_Form.h \
-    src/lua/lua_FrameBuffer.h \
-    src/lua/lua_Frustum.h \
-    src/lua/lua_Game.h \
-    src/lua/lua_Gamepad.h \
-    src/lua/lua_Gesture.h \
-    src/lua/lua_Global.h \
-    src/lua/lua_HeightField.h \
-    src/lua/lua_Image.h \
-    src/lua/lua_ImageControl.h \
-    src/lua/lua_ImageFormat.h \
-    src/lua/lua_Joint.h \
-    src/lua/lua_JoystickControl.h \
-    src/lua/lua_Keyboard.h \
-    src/lua/lua_Label.h \
-    src/lua/lua_Layout.h \
-    src/lua/lua_Light.h \
-    src/lua/lua_Logger.h \
-    src/lua/lua_Material.h \
-    src/lua/lua_MaterialParameter.h \
-    src/lua/lua_MathUtil.h \
-    src/lua/lua_Matrix.h \
-    src/lua/lua_Mesh.h \
-    src/lua/lua_MeshBatch.h \
-    src/lua/lua_MeshPart.h \
-    src/lua/lua_MeshSkin.h \
-    src/lua/lua_Model.h \
-    src/lua/lua_Mouse.h \
-    src/lua/lua_Node.h \
-    src/lua/lua_NodeCloneContext.h \
-    src/lua/lua_ParticleEmitter.h \
-    src/lua/lua_Pass.h \
-    src/lua/lua_PhysicsCharacter.h \
-    src/lua/lua_PhysicsCollisionObject.h \
-    src/lua/lua_PhysicsCollisionObjectCollisionListener.h \
-    src/lua/lua_PhysicsCollisionObjectCollisionPair.h \
-    src/lua/lua_PhysicsCollisionObjectType.h \
-    src/lua/lua_PhysicsCollisionShape.h \
-    src/lua/lua_PhysicsCollisionShapeDefinition.h \
-    src/lua/lua_PhysicsConstraint.h \
-    src/lua/lua_PhysicsController.h \
-    src/lua/lua_PhysicsControllerHitFilter.h \
-    src/lua/lua_PhysicsControllerHitResult.h \
-    src/lua/lua_PhysicsControllerListener.h \
-    src/lua/lua_PhysicsFixedConstraint.h \
-    src/lua/lua_PhysicsGenericConstraint.h \
-    src/lua/lua_PhysicsGhostObject.h \
-    src/lua/lua_PhysicsHingeConstraint.h \
-    src/lua/lua_PhysicsRigidBody.h \
-    src/lua/lua_PhysicsRigidBodyParameters.h \
-    src/lua/lua_PhysicsSocketConstraint.h \
-    src/lua/lua_PhysicsSpringConstraint.h \
-    src/lua/lua_PhysicsVehicle.h \
-    src/lua/lua_PhysicsVehicleWheel.h \
-    src/lua/lua_Plane.h \
-    src/lua/lua_Platform.h \
-    src/lua/lua_Properties.h \
-    src/lua/lua_Quaternion.h \
-    src/lua/lua_RadioButton.h \
-    src/lua/lua_Ray.h \
-    src/lua/lua_Rectangle.h \
-    src/lua/lua_Ref.h \
-    src/lua/lua_RenderState.h \
-    src/lua/lua_RenderTarget.h \
-    src/lua/lua_Scene.h \
-    src/lua/lua_ScreenDisplayer.h \
-    src/lua/lua_Script.h \
-    src/lua/lua_ScriptController.h \
-    src/lua/lua_ScriptTarget.h \
-    src/lua/lua_ScriptTargetEvent.h \
-    src/lua/lua_ScriptTargetEventRegistry.h \
-    src/lua/lua_Slider.h \
-    src/lua/lua_Sprite.h \
-    src/lua/lua_SpriteBatch.h \
-    src/lua/lua_SpriteBatchSpriteVertex.h \
-    src/lua/lua_Technique.h \
-    src/lua/lua_Terrain.h \
-    src/lua/lua_TerrainPatch.h \
-    src/lua/lua_Text.h \
-    src/lua/lua_TextBox.h \
-    src/lua/lua_Texture.h \
-    src/lua/lua_TextureSampler.h \
-    src/lua/lua_Theme.h \
-    src/lua/lua_ThemeSideRegions.h \
-    src/lua/lua_ThemeStyle.h \
-    src/lua/lua_ThemeThemeImage.h \
-    src/lua/lua_ThemeUVs.h \
-    src/lua/lua_TileSet.h \
-    src/lua/lua_Touch.h \
-    src/lua/lua_TouchTouchEvent.h \
-    src/lua/lua_Transform.h \
-    src/lua/lua_TransformListener.h \
-    src/lua/lua_Uniform.h \
-    src/lua/lua_Vector2.h \
-    src/lua/lua_Vector3.h \
-    src/lua/lua_Vector4.h \
-    src/lua/lua_VertexAttributeBinding.h \
-    src/lua/lua_VertexFormat.h \
-    src/lua/lua_VertexFormatElement.h \
-    src/lua/lua_VerticalLayout.h
-
-INCLUDEPATH += $$PWD/../gameplay/src
-INCLUDEPATH += $$PWD/../external-deps/include
-DEFINES += GP_USE_GAMEPAD
-
-linux: SOURCES += src/PlatformLinux.cpp
-linux: SOURCES += src/gameplay-main-linux.cpp
-linux: QMAKE_CXXFLAGS += -lstdc++ -pthread -w
-linux: DEFINES += __linux__
-linux: INCLUDEPATH += /usr/include/gtk-2.0
-linux: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
-linux: INCLUDEPATH += /usr/include/atk-1.0
-linux: INCLUDEPATH += /usr/include/cairo
-linux: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
-linux: INCLUDEPATH += /usr/include/pango-1.0
-linux: INCLUDEPATH += /usr/include/gio-unix-2.0
-linux: INCLUDEPATH += /usr/include/freetype2
-linux: INCLUDEPATH += /usr/include/glib-2.0
-linux: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
-linux: INCLUDEPATH += /usr/include/pixman-1
-linux: INCLUDEPATH += /usr/include/libpng12
-linux: INCLUDEPATH += /usr/include/harfbuzz
-
-macx: OBJECTIVE_SOURCES += src/PlatformMacOSX.mm
-macx: OBJECTIVE_SOURCES += src/gameplay-main-macosx.mm
-macx: QMAKE_CXXFLAGS += -x c++ -x objective-c++ -stdlib=libc++ -w -arch x86_64
-macx: LIBS += -F/System/Library/Frameworks -framework GameKit
-macx: LIBS += -F/System/Library/Frameworks -framework IOKit
-macx: LIBS += -F/System/Library/Frameworks -framework QuartzCore
-macx: LIBS += -F/System/Library/Frameworks -framework OpenAL
-macx: LIBS += -F/System/Library/Frameworks -framework OpenGL
-macx: LIBS += -F/System/Library/Frameworks -framework Cocoa
-macx: LIBS += -F/System/Library/Frameworks -framework Foundation
-
-win32: SOURCES += src/PlatformWindows.cpp
-win32: SOURCES += src/gameplay-main-windows.cpp
-win32: DEFINES += WIN32 _UNICODE UNICODE
-win32: INCLUDEPATH += $$(DXSDK_DIR)/Include
-win32: QMAKE_CXXFLAGS_WARN_ON -= -w34100
-win32: QMAKE_CXXFLAGS_WARN_ON -= -w34189
-win32: QMAKE_CXXFLAGS_WARN_ON -= -w4302

+ 0 - 680
gameplay/gameplay.vcxproj

@@ -1,680 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DebugMem|x64">
-      <Configuration>DebugMem</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</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\Drawable.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-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\JoystickControl.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_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_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_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_CheckBox.cpp" />
-    <ClCompile Include="src\lua\lua_Container.cpp" />
-    <ClCompile Include="src\lua\lua_Control.cpp" />
-    <ClCompile Include="src\lua\lua_ControlListener.cpp" />
-    <ClCompile Include="src\lua\lua_Curve.cpp" />
-    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp" />
-    <ClCompile Include="src\lua\lua_Drawable.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_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_Gamepad.cpp" />
-    <ClCompile Include="src\lua\lua_Gesture.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_Joint.cpp" />
-    <ClCompile Include="src\lua\lua_JoystickControl.cpp" />
-    <ClCompile Include="src\lua\lua_Keyboard.cpp" />
-    <ClCompile Include="src\lua\lua_Label.cpp" />
-    <ClCompile Include="src\lua\lua_Layout.cpp" />
-    <ClCompile Include="src\lua\lua_Light.cpp" />
-    <ClCompile Include="src\lua\lua_Logger.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_MeshPart.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_Node.cpp" />
-    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp" />
-    <ClCompile Include="src\lua\lua_ParticleEmitter.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_PhysicsCollisionObjectCollisionPair.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.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_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_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_RenderStateStateBlock.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_Script.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptController.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptTarget.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptTargetEvent.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptTargetEventRegistry.cpp" />
-    <ClCompile Include="src\lua\lua_Slider.cpp" />
-    <ClCompile Include="src\lua\lua_Sprite.cpp" />
-    <ClCompile Include="src\lua\lua_SpriteBatch.cpp" />
-    <ClCompile Include="src\lua\lua_SpriteBatchSpriteVertex.cpp" />
-    <ClCompile Include="src\lua\lua_Technique.cpp" />
-    <ClCompile Include="src\lua\lua_Terrain.cpp" />
-    <ClCompile Include="src\lua\lua_TerrainPatch.cpp" />
-    <ClCompile Include="src\lua\lua_Text.cpp" />
-    <ClCompile Include="src\lua\lua_TextBox.cpp" />
-    <ClCompile Include="src\lua\lua_Texture.cpp" />
-    <ClCompile Include="src\lua\lua_TextureSampler.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_TileSet.cpp" />
-    <ClCompile Include="src\lua\lua_Touch.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_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\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\Script.cpp" />
-    <ClCompile Include="src\ScriptController.cpp" />
-    <ClCompile Include="src\ScriptTarget.cpp" />
-    <ClCompile Include="src\Slider.cpp" />
-    <ClCompile Include="src\Sprite.cpp" />
-    <ClCompile Include="src\SpriteBatch.cpp" />
-    <ClCompile Include="src\Technique.cpp" />
-    <ClCompile Include="src\Terrain.cpp" />
-    <ClCompile Include="src\TerrainPatch.cpp" />
-    <ClCompile Include="src\Text.cpp" />
-    <ClCompile Include="src\TextBox.cpp" />
-    <ClCompile Include="src\Texture.cpp" />
-    <ClCompile Include="src\Theme.cpp" />
-    <ClCompile Include="src\ThemeStyle.cpp" />
-    <ClCompile Include="src\TileSet.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\Drawable.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\JoystickControl.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_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_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_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_CheckBox.h" />
-    <ClInclude Include="src\lua\lua_Container.h" />
-    <ClInclude Include="src\lua\lua_Control.h" />
-    <ClInclude Include="src\lua\lua_ControlListener.h" />
-    <ClInclude Include="src\lua\lua_Curve.h" />
-    <ClInclude Include="src\lua\lua_DepthStencilTarget.h" />
-    <ClInclude Include="src\lua\lua_Drawable.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_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_Gamepad.h" />
-    <ClInclude Include="src\lua\lua_Gesture.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_Joint.h" />
-    <ClInclude Include="src\lua\lua_JoystickControl.h" />
-    <ClInclude Include="src\lua\lua_Keyboard.h" />
-    <ClInclude Include="src\lua\lua_Label.h" />
-    <ClInclude Include="src\lua\lua_Layout.h" />
-    <ClInclude Include="src\lua\lua_Light.h" />
-    <ClInclude Include="src\lua\lua_Logger.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_MeshPart.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_Node.h" />
-    <ClInclude Include="src\lua\lua_NodeCloneContext.h" />
-    <ClInclude Include="src\lua\lua_ParticleEmitter.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_PhysicsCollisionObjectCollisionPair.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.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_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_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_RenderStateStateBlock.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_Script.h" />
-    <ClInclude Include="src\lua\lua_ScriptController.h" />
-    <ClInclude Include="src\lua\lua_ScriptTarget.h" />
-    <ClInclude Include="src\lua\lua_ScriptTargetEvent.h" />
-    <ClInclude Include="src\lua\lua_ScriptTargetEventRegistry.h" />
-    <ClInclude Include="src\lua\lua_Slider.h" />
-    <ClInclude Include="src\lua\lua_Sprite.h" />
-    <ClInclude Include="src\lua\lua_SpriteBatch.h" />
-    <ClInclude Include="src\lua\lua_SpriteBatchSpriteVertex.h" />
-    <ClInclude Include="src\lua\lua_Technique.h" />
-    <ClInclude Include="src\lua\lua_Terrain.h" />
-    <ClInclude Include="src\lua\lua_TerrainPatch.h" />
-    <ClInclude Include="src\lua\lua_Text.h" />
-    <ClInclude Include="src\lua\lua_TextBox.h" />
-    <ClInclude Include="src\lua\lua_Texture.h" />
-    <ClInclude Include="src\lua\lua_TextureSampler.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_TileSet.h" />
-    <ClInclude Include="src\lua\lua_Touch.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_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\Script.h" />
-    <ClInclude Include="src\ScriptController.h" />
-    <ClInclude Include="src\ScriptTarget.h" />
-    <ClInclude Include="src\Slider.h" />
-    <ClInclude Include="src\Sprite.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\Text.h" />
-    <ClInclude Include="src\TextBox.h" />
-    <ClInclude Include="src\Texture.h" />
-    <ClInclude Include="src\Theme.h" />
-    <ClInclude Include="src\ThemeStyle.h" />
-    <ClInclude Include="src\TileSet.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\materials\terrain.material" />
-    <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="res\ui\default.theme" />
-    <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\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>
-  <ItemGroup>
-    <Image Include="res\ui\default-theme.png" />
-  </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|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>false</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </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|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)'=='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|x64'">
-    <OutDir>Debug</OutDir>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <OutDir>$(Configuration)\</OutDir>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <IntDir>$(Configuration)\</IntDir>
-    <OutDir>$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;GP_USE_GAMEPAD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\include;$(DXSDK_DIR)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>
-      </RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-      <MinimalRebuild>false</MinimalRebuild>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;GP_USE_GAMEPAD;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\include;$(MSBuildProgramFiles32)\Microsoft DirectX SDK (June 2010)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-      <MinimalRebuild>false</MinimalRebuild>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <Verbose>
-      </Verbose>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>Full</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>false</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;GP_USE_GAMEPAD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\include;$(MSBuildProgramFiles32)\Microsoft DirectX SDK (June 2010)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-    </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>

+ 0 - 1638
gameplay/gameplay.vcxproj.filters

@@ -1,1638 +0,0 @@
-<?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>
-    <Filter Include="res\materials">
-      <UniqueIdentifier>{b5f23c37-1023-4796-ba7b-b45aa30d67b6}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\ui">
-      <UniqueIdentifier>{eb377577-593a-469f-9361-b6950a99e431}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\Plane.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-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\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\JoystickControl.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Script.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Sprite.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Text.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TileSet.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Drawable.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_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_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_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_CameraListener.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_Control.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Curve.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Drawable.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_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_Gamepad.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Gesture.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_Joint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_JoystickControl.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Keyboard.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_Light.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Logger.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_MeshPart.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_Node.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ParticleEmitter.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_PhysicsCollisionObjectCollisionPair.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_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_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_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_RenderStateStateBlock.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_Script.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_ScriptTargetEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScriptTargetEventRegistry.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Slider.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Sprite.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SpriteBatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SpriteBatchSpriteVertex.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_TerrainPatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Text.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Texture.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureSampler.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_TileSet.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Touch.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_VerticalLayout.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\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\JoystickControl.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Script.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Sprite.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Text.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TileSet.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Drawable.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_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_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_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_CameraListener.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_Control.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Curve.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_DepthStencilTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Drawable.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_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_Gamepad.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Gesture.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_Joint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_JoystickControl.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Keyboard.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_Light.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Logger.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_MeshPart.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_Node.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_NodeCloneContext.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ParticleEmitter.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_PhysicsCollisionObjectCollisionPair.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_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_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_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_RenderStateStateBlock.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_Script.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_ScriptTargetEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScriptTargetEventRegistry.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Slider.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Sprite.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SpriteBatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SpriteBatchSpriteVertex.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_TerrainPatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Text.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Texture.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureSampler.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_TileSet.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Touch.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_VerticalLayout.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\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>
-    <None Include="res\materials\terrain.material">
-      <Filter>res\materials</Filter>
-    </None>
-    <None Include="res\ui\default.theme">
-      <Filter>res\ui</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>
-  <ItemGroup>
-    <Image Include="res\ui\default-theme.png">
-      <Filter>res\ui</Filter>
-    </Image>
-  </ItemGroup>
-</Project>

+ 0 - 2479
gameplay/gameplay.xcodeproj/project.pbxproj

@@ -1,2479 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		4204EC411A2EB8310074FCE9 /* TileSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4204EC3F1A2EB8310074FCE9 /* TileSet.cpp */; };
-		4204EC421A2EB8310074FCE9 /* TileSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4204EC3F1A2EB8310074FCE9 /* TileSet.cpp */; };
-		4204EC451A2F878C0074FCE9 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4204EC441A2F878C0074FCE9 /* Sprite.cpp */; };
-		4204EC461A2F878C0074FCE9 /* Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4204EC441A2F878C0074FCE9 /* Sprite.cpp */; };
-		420BBC0E1817416F00C7B720 /* ControlFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 420BBAA21817416D00C7B720 /* ControlFactory.cpp */; };
-		420BBC0F1817416F00C7B720 /* ControlFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 420BBAA21817416D00C7B720 /* ControlFactory.cpp */; };
-		4234D99E14686C52003031B3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4234D99D14686C52003031B3 /* Cocoa.framework */; };
-		424F33001A60C28600395438 /* lua_AbsoluteLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31F41A60C28600395438 /* lua_AbsoluteLayout.cpp */; };
-		424F33011A60C28600395438 /* lua_AbsoluteLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31F41A60C28600395438 /* lua_AbsoluteLayout.cpp */; };
-		424F33021A60C28600395438 /* lua_AIAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31F61A60C28600395438 /* lua_AIAgent.cpp */; };
-		424F33031A60C28600395438 /* lua_AIAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31F61A60C28600395438 /* lua_AIAgent.cpp */; };
-		424F33041A60C28600395438 /* lua_AIAgentListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31F81A60C28600395438 /* lua_AIAgentListener.cpp */; };
-		424F33051A60C28600395438 /* lua_AIAgentListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31F81A60C28600395438 /* lua_AIAgentListener.cpp */; };
-		424F33061A60C28600395438 /* lua_AIController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31FA1A60C28600395438 /* lua_AIController.cpp */; };
-		424F33071A60C28600395438 /* lua_AIController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31FA1A60C28600395438 /* lua_AIController.cpp */; };
-		424F33081A60C28600395438 /* lua_AIMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31FC1A60C28600395438 /* lua_AIMessage.cpp */; };
-		424F33091A60C28600395438 /* lua_AIMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31FC1A60C28600395438 /* lua_AIMessage.cpp */; };
-		424F330A1A60C28600395438 /* lua_AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31FE1A60C28600395438 /* lua_AIState.cpp */; };
-		424F330B1A60C28600395438 /* lua_AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F31FE1A60C28600395438 /* lua_AIState.cpp */; };
-		424F330C1A60C28600395438 /* lua_AIStateListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32001A60C28600395438 /* lua_AIStateListener.cpp */; };
-		424F330D1A60C28600395438 /* lua_AIStateListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32001A60C28600395438 /* lua_AIStateListener.cpp */; };
-		424F330E1A60C28600395438 /* lua_AIStateMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32021A60C28600395438 /* lua_AIStateMachine.cpp */; };
-		424F330F1A60C28600395438 /* lua_AIStateMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32021A60C28600395438 /* lua_AIStateMachine.cpp */; };
-		424F33101A60C28600395438 /* lua_all_bindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32041A60C28600395438 /* lua_all_bindings.cpp */; };
-		424F33111A60C28600395438 /* lua_all_bindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32041A60C28600395438 /* lua_all_bindings.cpp */; };
-		424F33121A60C28600395438 /* lua_Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32061A60C28600395438 /* lua_Animation.cpp */; };
-		424F33131A60C28600395438 /* lua_Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32061A60C28600395438 /* lua_Animation.cpp */; };
-		424F33141A60C28600395438 /* lua_AnimationClip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32081A60C28600395438 /* lua_AnimationClip.cpp */; };
-		424F33151A60C28600395438 /* lua_AnimationClip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32081A60C28600395438 /* lua_AnimationClip.cpp */; };
-		424F33161A60C28600395438 /* lua_AnimationClipListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F320A1A60C28600395438 /* lua_AnimationClipListener.cpp */; };
-		424F33171A60C28600395438 /* lua_AnimationClipListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F320A1A60C28600395438 /* lua_AnimationClipListener.cpp */; };
-		424F33181A60C28600395438 /* lua_AnimationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F320C1A60C28600395438 /* lua_AnimationController.cpp */; };
-		424F33191A60C28600395438 /* lua_AnimationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F320C1A60C28600395438 /* lua_AnimationController.cpp */; };
-		424F331A1A60C28600395438 /* lua_AnimationTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F320E1A60C28600395438 /* lua_AnimationTarget.cpp */; };
-		424F331B1A60C28600395438 /* lua_AnimationTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F320E1A60C28600395438 /* lua_AnimationTarget.cpp */; };
-		424F331C1A60C28600395438 /* lua_AnimationValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32101A60C28600395438 /* lua_AnimationValue.cpp */; };
-		424F331D1A60C28600395438 /* lua_AnimationValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32101A60C28600395438 /* lua_AnimationValue.cpp */; };
-		424F331E1A60C28600395438 /* lua_AudioBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32121A60C28600395438 /* lua_AudioBuffer.cpp */; };
-		424F331F1A60C28600395438 /* lua_AudioBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32121A60C28600395438 /* lua_AudioBuffer.cpp */; };
-		424F33201A60C28600395438 /* lua_AudioController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32141A60C28600395438 /* lua_AudioController.cpp */; };
-		424F33211A60C28600395438 /* lua_AudioController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32141A60C28600395438 /* lua_AudioController.cpp */; };
-		424F33221A60C28600395438 /* lua_AudioListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32161A60C28600395438 /* lua_AudioListener.cpp */; };
-		424F33231A60C28600395438 /* lua_AudioListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32161A60C28600395438 /* lua_AudioListener.cpp */; };
-		424F33241A60C28600395438 /* lua_AudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32181A60C28600395438 /* lua_AudioSource.cpp */; };
-		424F33251A60C28600395438 /* lua_AudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32181A60C28600395438 /* lua_AudioSource.cpp */; };
-		424F33261A60C28600395438 /* lua_BoundingBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F321A1A60C28600395438 /* lua_BoundingBox.cpp */; };
-		424F33271A60C28600395438 /* lua_BoundingBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F321A1A60C28600395438 /* lua_BoundingBox.cpp */; };
-		424F33281A60C28600395438 /* lua_BoundingSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F321C1A60C28600395438 /* lua_BoundingSphere.cpp */; };
-		424F33291A60C28600395438 /* lua_BoundingSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F321C1A60C28600395438 /* lua_BoundingSphere.cpp */; };
-		424F332A1A60C28600395438 /* lua_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F321E1A60C28600395438 /* lua_Bundle.cpp */; };
-		424F332B1A60C28600395438 /* lua_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F321E1A60C28600395438 /* lua_Bundle.cpp */; };
-		424F332C1A60C28600395438 /* lua_Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32201A60C28600395438 /* lua_Button.cpp */; };
-		424F332D1A60C28600395438 /* lua_Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32201A60C28600395438 /* lua_Button.cpp */; };
-		424F332E1A60C28600395438 /* lua_Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32221A60C28600395438 /* lua_Camera.cpp */; };
-		424F332F1A60C28600395438 /* lua_Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32221A60C28600395438 /* lua_Camera.cpp */; };
-		424F33301A60C28600395438 /* lua_CameraListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32241A60C28600395438 /* lua_CameraListener.cpp */; };
-		424F33311A60C28600395438 /* lua_CameraListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32241A60C28600395438 /* lua_CameraListener.cpp */; };
-		424F33321A60C28600395438 /* lua_CheckBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32261A60C28600395438 /* lua_CheckBox.cpp */; };
-		424F33331A60C28600395438 /* lua_CheckBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32261A60C28600395438 /* lua_CheckBox.cpp */; };
-		424F33341A60C28600395438 /* lua_Container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32281A60C28600395438 /* lua_Container.cpp */; };
-		424F33351A60C28600395438 /* lua_Container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32281A60C28600395438 /* lua_Container.cpp */; };
-		424F33361A60C28600395438 /* lua_Control.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F322A1A60C28600395438 /* lua_Control.cpp */; };
-		424F33371A60C28600395438 /* lua_Control.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F322A1A60C28600395438 /* lua_Control.cpp */; };
-		424F33381A60C28600395438 /* lua_ControlListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F322C1A60C28600395438 /* lua_ControlListener.cpp */; };
-		424F33391A60C28600395438 /* lua_ControlListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F322C1A60C28600395438 /* lua_ControlListener.cpp */; };
-		424F333A1A60C28600395438 /* lua_Curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F322E1A60C28600395438 /* lua_Curve.cpp */; };
-		424F333B1A60C28600395438 /* lua_Curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F322E1A60C28600395438 /* lua_Curve.cpp */; };
-		424F333C1A60C28600395438 /* lua_DepthStencilTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32301A60C28600395438 /* lua_DepthStencilTarget.cpp */; };
-		424F333D1A60C28600395438 /* lua_DepthStencilTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32301A60C28600395438 /* lua_DepthStencilTarget.cpp */; };
-		424F333E1A60C28600395438 /* lua_Drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32321A60C28600395438 /* lua_Drawable.cpp */; };
-		424F333F1A60C28600395438 /* lua_Drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32321A60C28600395438 /* lua_Drawable.cpp */; };
-		424F33401A60C28600395438 /* lua_Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32341A60C28600395438 /* lua_Effect.cpp */; };
-		424F33411A60C28600395438 /* lua_Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32341A60C28600395438 /* lua_Effect.cpp */; };
-		424F33421A60C28600395438 /* lua_FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32361A60C28600395438 /* lua_FileSystem.cpp */; };
-		424F33431A60C28600395438 /* lua_FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32361A60C28600395438 /* lua_FileSystem.cpp */; };
-		424F33441A60C28600395438 /* lua_FlowLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32381A60C28600395438 /* lua_FlowLayout.cpp */; };
-		424F33451A60C28600395438 /* lua_FlowLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32381A60C28600395438 /* lua_FlowLayout.cpp */; };
-		424F33461A60C28600395438 /* lua_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F323A1A60C28600395438 /* lua_Font.cpp */; };
-		424F33471A60C28600395438 /* lua_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F323A1A60C28600395438 /* lua_Font.cpp */; };
-		424F33481A60C28600395438 /* lua_Form.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F323C1A60C28600395438 /* lua_Form.cpp */; };
-		424F33491A60C28600395438 /* lua_Form.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F323C1A60C28600395438 /* lua_Form.cpp */; };
-		424F334A1A60C28600395438 /* lua_FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F323E1A60C28600395438 /* lua_FrameBuffer.cpp */; };
-		424F334B1A60C28600395438 /* lua_FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F323E1A60C28600395438 /* lua_FrameBuffer.cpp */; };
-		424F334C1A60C28600395438 /* lua_Frustum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32401A60C28600395438 /* lua_Frustum.cpp */; };
-		424F334D1A60C28600395438 /* lua_Frustum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32401A60C28600395438 /* lua_Frustum.cpp */; };
-		424F334E1A60C28600395438 /* lua_Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32421A60C28600395438 /* lua_Game.cpp */; };
-		424F334F1A60C28600395438 /* lua_Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32421A60C28600395438 /* lua_Game.cpp */; };
-		424F33501A60C28600395438 /* lua_Gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32441A60C28600395438 /* lua_Gamepad.cpp */; };
-		424F33511A60C28600395438 /* lua_Gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32441A60C28600395438 /* lua_Gamepad.cpp */; };
-		424F33521A60C28600395438 /* lua_Gesture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32461A60C28600395438 /* lua_Gesture.cpp */; };
-		424F33531A60C28600395438 /* lua_Gesture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32461A60C28600395438 /* lua_Gesture.cpp */; };
-		424F33541A60C28600395438 /* lua_Global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32481A60C28600395438 /* lua_Global.cpp */; };
-		424F33551A60C28600395438 /* lua_Global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32481A60C28600395438 /* lua_Global.cpp */; };
-		424F33561A60C28600395438 /* lua_HeightField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F324A1A60C28600395438 /* lua_HeightField.cpp */; };
-		424F33571A60C28600395438 /* lua_HeightField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F324A1A60C28600395438 /* lua_HeightField.cpp */; };
-		424F33581A60C28600395438 /* lua_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F324C1A60C28600395438 /* lua_Image.cpp */; };
-		424F33591A60C28600395438 /* lua_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F324C1A60C28600395438 /* lua_Image.cpp */; };
-		424F335A1A60C28600395438 /* lua_ImageControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F324E1A60C28600395438 /* lua_ImageControl.cpp */; };
-		424F335B1A60C28600395438 /* lua_ImageControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F324E1A60C28600395438 /* lua_ImageControl.cpp */; };
-		424F335C1A60C28600395438 /* lua_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32501A60C28600395438 /* lua_Joint.cpp */; };
-		424F335D1A60C28600395438 /* lua_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32501A60C28600395438 /* lua_Joint.cpp */; };
-		424F335E1A60C28600395438 /* lua_JoystickControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32521A60C28600395438 /* lua_JoystickControl.cpp */; };
-		424F335F1A60C28600395438 /* lua_JoystickControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32521A60C28600395438 /* lua_JoystickControl.cpp */; };
-		424F33601A60C28600395438 /* lua_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32541A60C28600395438 /* lua_Keyboard.cpp */; };
-		424F33611A60C28600395438 /* lua_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32541A60C28600395438 /* lua_Keyboard.cpp */; };
-		424F33621A60C28600395438 /* lua_Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32561A60C28600395438 /* lua_Label.cpp */; };
-		424F33631A60C28600395438 /* lua_Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32561A60C28600395438 /* lua_Label.cpp */; };
-		424F33641A60C28600395438 /* lua_Layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32581A60C28600395438 /* lua_Layout.cpp */; };
-		424F33651A60C28600395438 /* lua_Layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32581A60C28600395438 /* lua_Layout.cpp */; };
-		424F33661A60C28600395438 /* lua_Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F325A1A60C28600395438 /* lua_Light.cpp */; };
-		424F33671A60C28600395438 /* lua_Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F325A1A60C28600395438 /* lua_Light.cpp */; };
-		424F33681A60C28600395438 /* lua_Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F325C1A60C28600395438 /* lua_Logger.cpp */; };
-		424F33691A60C28600395438 /* lua_Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F325C1A60C28600395438 /* lua_Logger.cpp */; };
-		424F336A1A60C28600395438 /* lua_Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F325E1A60C28600395438 /* lua_Material.cpp */; };
-		424F336B1A60C28600395438 /* lua_Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F325E1A60C28600395438 /* lua_Material.cpp */; };
-		424F336C1A60C28600395438 /* lua_MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32601A60C28600395438 /* lua_MaterialParameter.cpp */; };
-		424F336D1A60C28600395438 /* lua_MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32601A60C28600395438 /* lua_MaterialParameter.cpp */; };
-		424F336E1A60C28600395438 /* lua_MathUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32621A60C28600395438 /* lua_MathUtil.cpp */; };
-		424F336F1A60C28600395438 /* lua_MathUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32621A60C28600395438 /* lua_MathUtil.cpp */; };
-		424F33701A60C28600395438 /* lua_Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32641A60C28600395438 /* lua_Matrix.cpp */; };
-		424F33711A60C28600395438 /* lua_Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32641A60C28600395438 /* lua_Matrix.cpp */; };
-		424F33721A60C28600395438 /* lua_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32661A60C28600395438 /* lua_Mesh.cpp */; };
-		424F33731A60C28600395438 /* lua_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32661A60C28600395438 /* lua_Mesh.cpp */; };
-		424F33741A60C28600395438 /* lua_MeshBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32681A60C28600395438 /* lua_MeshBatch.cpp */; };
-		424F33751A60C28600395438 /* lua_MeshBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32681A60C28600395438 /* lua_MeshBatch.cpp */; };
-		424F33761A60C28600395438 /* lua_MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F326A1A60C28600395438 /* lua_MeshPart.cpp */; };
-		424F33771A60C28600395438 /* lua_MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F326A1A60C28600395438 /* lua_MeshPart.cpp */; };
-		424F33781A60C28600395438 /* lua_MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F326C1A60C28600395438 /* lua_MeshSkin.cpp */; };
-		424F33791A60C28600395438 /* lua_MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F326C1A60C28600395438 /* lua_MeshSkin.cpp */; };
-		424F337A1A60C28600395438 /* lua_Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F326E1A60C28600395438 /* lua_Model.cpp */; };
-		424F337B1A60C28600395438 /* lua_Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F326E1A60C28600395438 /* lua_Model.cpp */; };
-		424F337C1A60C28600395438 /* lua_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32701A60C28600395438 /* lua_Mouse.cpp */; };
-		424F337D1A60C28600395438 /* lua_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32701A60C28600395438 /* lua_Mouse.cpp */; };
-		424F337E1A60C28600395438 /* lua_Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32721A60C28600395438 /* lua_Node.cpp */; };
-		424F337F1A60C28600395438 /* lua_Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32721A60C28600395438 /* lua_Node.cpp */; };
-		424F33801A60C28600395438 /* lua_NodeCloneContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32741A60C28600395438 /* lua_NodeCloneContext.cpp */; };
-		424F33811A60C28600395438 /* lua_NodeCloneContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32741A60C28600395438 /* lua_NodeCloneContext.cpp */; };
-		424F33821A60C28600395438 /* lua_ParticleEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32761A60C28600395438 /* lua_ParticleEmitter.cpp */; };
-		424F33831A60C28600395438 /* lua_ParticleEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32761A60C28600395438 /* lua_ParticleEmitter.cpp */; };
-		424F33841A60C28600395438 /* lua_Pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32781A60C28600395438 /* lua_Pass.cpp */; };
-		424F33851A60C28600395438 /* lua_Pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32781A60C28600395438 /* lua_Pass.cpp */; };
-		424F33861A60C28600395438 /* lua_PhysicsCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F327A1A60C28600395438 /* lua_PhysicsCharacter.cpp */; };
-		424F33871A60C28600395438 /* lua_PhysicsCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F327A1A60C28600395438 /* lua_PhysicsCharacter.cpp */; };
-		424F33881A60C28600395438 /* lua_PhysicsCollisionObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F327C1A60C28600395438 /* lua_PhysicsCollisionObject.cpp */; };
-		424F33891A60C28600395438 /* lua_PhysicsCollisionObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F327C1A60C28600395438 /* lua_PhysicsCollisionObject.cpp */; };
-		424F338A1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F327E1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp */; };
-		424F338B1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F327E1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp */; };
-		424F338C1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32801A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp */; };
-		424F338D1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32801A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp */; };
-		424F338E1A60C28600395438 /* lua_PhysicsCollisionShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32821A60C28600395438 /* lua_PhysicsCollisionShape.cpp */; };
-		424F338F1A60C28600395438 /* lua_PhysicsCollisionShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32821A60C28600395438 /* lua_PhysicsCollisionShape.cpp */; };
-		424F33901A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32841A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp */; };
-		424F33911A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32841A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp */; };
-		424F33921A60C28600395438 /* lua_PhysicsConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32861A60C28600395438 /* lua_PhysicsConstraint.cpp */; };
-		424F33931A60C28600395438 /* lua_PhysicsConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32861A60C28600395438 /* lua_PhysicsConstraint.cpp */; };
-		424F33941A60C28600395438 /* lua_PhysicsController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32881A60C28600395438 /* lua_PhysicsController.cpp */; };
-		424F33951A60C28600395438 /* lua_PhysicsController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32881A60C28600395438 /* lua_PhysicsController.cpp */; };
-		424F33961A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F328A1A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp */; };
-		424F33971A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F328A1A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp */; };
-		424F33981A60C28600395438 /* lua_PhysicsControllerHitResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F328C1A60C28600395438 /* lua_PhysicsControllerHitResult.cpp */; };
-		424F33991A60C28600395438 /* lua_PhysicsControllerHitResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F328C1A60C28600395438 /* lua_PhysicsControllerHitResult.cpp */; };
-		424F339A1A60C28600395438 /* lua_PhysicsControllerListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F328E1A60C28600395438 /* lua_PhysicsControllerListener.cpp */; };
-		424F339B1A60C28600395438 /* lua_PhysicsControllerListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F328E1A60C28600395438 /* lua_PhysicsControllerListener.cpp */; };
-		424F339C1A60C28600395438 /* lua_PhysicsFixedConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32901A60C28600395438 /* lua_PhysicsFixedConstraint.cpp */; };
-		424F339D1A60C28600395438 /* lua_PhysicsFixedConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32901A60C28600395438 /* lua_PhysicsFixedConstraint.cpp */; };
-		424F339E1A60C28600395438 /* lua_PhysicsGenericConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32921A60C28600395438 /* lua_PhysicsGenericConstraint.cpp */; };
-		424F339F1A60C28600395438 /* lua_PhysicsGenericConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32921A60C28600395438 /* lua_PhysicsGenericConstraint.cpp */; };
-		424F33A01A60C28600395438 /* lua_PhysicsGhostObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32941A60C28600395438 /* lua_PhysicsGhostObject.cpp */; };
-		424F33A11A60C28600395438 /* lua_PhysicsGhostObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32941A60C28600395438 /* lua_PhysicsGhostObject.cpp */; };
-		424F33A21A60C28600395438 /* lua_PhysicsHingeConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32961A60C28600395438 /* lua_PhysicsHingeConstraint.cpp */; };
-		424F33A31A60C28600395438 /* lua_PhysicsHingeConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32961A60C28600395438 /* lua_PhysicsHingeConstraint.cpp */; };
-		424F33A41A60C28600395438 /* lua_PhysicsRigidBody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32981A60C28600395438 /* lua_PhysicsRigidBody.cpp */; };
-		424F33A51A60C28600395438 /* lua_PhysicsRigidBody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32981A60C28600395438 /* lua_PhysicsRigidBody.cpp */; };
-		424F33A61A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F329A1A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp */; };
-		424F33A71A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F329A1A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp */; };
-		424F33A81A60C28600395438 /* lua_PhysicsSocketConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F329C1A60C28600395438 /* lua_PhysicsSocketConstraint.cpp */; };
-		424F33A91A60C28600395438 /* lua_PhysicsSocketConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F329C1A60C28600395438 /* lua_PhysicsSocketConstraint.cpp */; };
-		424F33AA1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F329E1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp */; };
-		424F33AB1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F329E1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp */; };
-		424F33AC1A60C28600395438 /* lua_PhysicsVehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A01A60C28600395438 /* lua_PhysicsVehicle.cpp */; };
-		424F33AD1A60C28600395438 /* lua_PhysicsVehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A01A60C28600395438 /* lua_PhysicsVehicle.cpp */; };
-		424F33AE1A60C28600395438 /* lua_PhysicsVehicleWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A21A60C28600395438 /* lua_PhysicsVehicleWheel.cpp */; };
-		424F33AF1A60C28600395438 /* lua_PhysicsVehicleWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A21A60C28600395438 /* lua_PhysicsVehicleWheel.cpp */; };
-		424F33B01A60C28600395438 /* lua_Plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A41A60C28600395438 /* lua_Plane.cpp */; };
-		424F33B11A60C28600395438 /* lua_Plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A41A60C28600395438 /* lua_Plane.cpp */; };
-		424F33B21A60C28600395438 /* lua_Platform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A61A60C28600395438 /* lua_Platform.cpp */; };
-		424F33B31A60C28600395438 /* lua_Platform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A61A60C28600395438 /* lua_Platform.cpp */; };
-		424F33B41A60C28600395438 /* lua_Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A81A60C28600395438 /* lua_Properties.cpp */; };
-		424F33B51A60C28600395438 /* lua_Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32A81A60C28600395438 /* lua_Properties.cpp */; };
-		424F33B61A60C28600395438 /* lua_Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32AA1A60C28600395438 /* lua_Quaternion.cpp */; };
-		424F33B71A60C28600395438 /* lua_Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32AA1A60C28600395438 /* lua_Quaternion.cpp */; };
-		424F33B81A60C28600395438 /* lua_RadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32AC1A60C28600395438 /* lua_RadioButton.cpp */; };
-		424F33B91A60C28600395438 /* lua_RadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32AC1A60C28600395438 /* lua_RadioButton.cpp */; };
-		424F33BA1A60C28600395438 /* lua_Ray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32AE1A60C28600395438 /* lua_Ray.cpp */; };
-		424F33BB1A60C28600395438 /* lua_Ray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32AE1A60C28600395438 /* lua_Ray.cpp */; };
-		424F33BC1A60C28600395438 /* lua_Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B01A60C28600395438 /* lua_Rectangle.cpp */; };
-		424F33BD1A60C28600395438 /* lua_Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B01A60C28600395438 /* lua_Rectangle.cpp */; };
-		424F33BE1A60C28600395438 /* lua_Ref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B21A60C28600395438 /* lua_Ref.cpp */; };
-		424F33BF1A60C28600395438 /* lua_Ref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B21A60C28600395438 /* lua_Ref.cpp */; };
-		424F33C01A60C28600395438 /* lua_RenderState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B41A60C28600395438 /* lua_RenderState.cpp */; };
-		424F33C11A60C28600395438 /* lua_RenderState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B41A60C28600395438 /* lua_RenderState.cpp */; };
-		424F33C21A60C28600395438 /* lua_RenderStateStateBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B61A60C28600395438 /* lua_RenderStateStateBlock.cpp */; };
-		424F33C31A60C28600395438 /* lua_RenderStateStateBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B61A60C28600395438 /* lua_RenderStateStateBlock.cpp */; };
-		424F33C41A60C28600395438 /* lua_RenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B81A60C28600395438 /* lua_RenderTarget.cpp */; };
-		424F33C51A60C28600395438 /* lua_RenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32B81A60C28600395438 /* lua_RenderTarget.cpp */; };
-		424F33C61A60C28600395438 /* lua_Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32BA1A60C28600395438 /* lua_Scene.cpp */; };
-		424F33C71A60C28600395438 /* lua_Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32BA1A60C28600395438 /* lua_Scene.cpp */; };
-		424F33C81A60C28600395438 /* lua_ScreenDisplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32BC1A60C28600395438 /* lua_ScreenDisplayer.cpp */; };
-		424F33C91A60C28600395438 /* lua_ScreenDisplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32BC1A60C28600395438 /* lua_ScreenDisplayer.cpp */; };
-		424F33CA1A60C28600395438 /* lua_Script.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32BE1A60C28600395438 /* lua_Script.cpp */; };
-		424F33CB1A60C28600395438 /* lua_Script.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32BE1A60C28600395438 /* lua_Script.cpp */; };
-		424F33CC1A60C28600395438 /* lua_ScriptController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C01A60C28600395438 /* lua_ScriptController.cpp */; };
-		424F33CD1A60C28600395438 /* lua_ScriptController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C01A60C28600395438 /* lua_ScriptController.cpp */; };
-		424F33CE1A60C28600395438 /* lua_ScriptTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C21A60C28600395438 /* lua_ScriptTarget.cpp */; };
-		424F33CF1A60C28600395438 /* lua_ScriptTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C21A60C28600395438 /* lua_ScriptTarget.cpp */; };
-		424F33D01A60C28600395438 /* lua_ScriptTargetEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C41A60C28600395438 /* lua_ScriptTargetEvent.cpp */; };
-		424F33D11A60C28600395438 /* lua_ScriptTargetEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C41A60C28600395438 /* lua_ScriptTargetEvent.cpp */; };
-		424F33D21A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C61A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp */; };
-		424F33D31A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C61A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp */; };
-		424F33D41A60C28600395438 /* lua_Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C81A60C28600395438 /* lua_Slider.cpp */; };
-		424F33D51A60C28600395438 /* lua_Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32C81A60C28600395438 /* lua_Slider.cpp */; };
-		424F33D61A60C28600395438 /* lua_Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32CA1A60C28600395438 /* lua_Sprite.cpp */; };
-		424F33D71A60C28600395438 /* lua_Sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32CA1A60C28600395438 /* lua_Sprite.cpp */; };
-		424F33D81A60C28600395438 /* lua_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32CC1A60C28600395438 /* lua_SpriteBatch.cpp */; };
-		424F33D91A60C28600395438 /* lua_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32CC1A60C28600395438 /* lua_SpriteBatch.cpp */; };
-		424F33DA1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32CE1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp */; };
-		424F33DB1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32CE1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp */; };
-		424F33DC1A60C28600395438 /* lua_Technique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D01A60C28600395438 /* lua_Technique.cpp */; };
-		424F33DD1A60C28600395438 /* lua_Technique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D01A60C28600395438 /* lua_Technique.cpp */; };
-		424F33DE1A60C28600395438 /* lua_Terrain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D21A60C28600395438 /* lua_Terrain.cpp */; };
-		424F33DF1A60C28600395438 /* lua_Terrain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D21A60C28600395438 /* lua_Terrain.cpp */; };
-		424F33E01A60C28600395438 /* lua_TerrainPatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D41A60C28600395438 /* lua_TerrainPatch.cpp */; };
-		424F33E11A60C28600395438 /* lua_TerrainPatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D41A60C28600395438 /* lua_TerrainPatch.cpp */; };
-		424F33E21A60C28600395438 /* lua_Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D61A60C28600395438 /* lua_Text.cpp */; };
-		424F33E31A60C28600395438 /* lua_Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D61A60C28600395438 /* lua_Text.cpp */; };
-		424F33E41A60C28600395438 /* lua_TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D81A60C28600395438 /* lua_TextBox.cpp */; };
-		424F33E51A60C28600395438 /* lua_TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32D81A60C28600395438 /* lua_TextBox.cpp */; };
-		424F33E61A60C28600395438 /* lua_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32DA1A60C28600395438 /* lua_Texture.cpp */; };
-		424F33E71A60C28600395438 /* lua_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32DA1A60C28600395438 /* lua_Texture.cpp */; };
-		424F33E81A60C28600395438 /* lua_TextureSampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32DC1A60C28600395438 /* lua_TextureSampler.cpp */; };
-		424F33E91A60C28600395438 /* lua_TextureSampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32DC1A60C28600395438 /* lua_TextureSampler.cpp */; };
-		424F33EA1A60C28600395438 /* lua_Theme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32DE1A60C28600395438 /* lua_Theme.cpp */; };
-		424F33EB1A60C28600395438 /* lua_Theme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32DE1A60C28600395438 /* lua_Theme.cpp */; };
-		424F33EC1A60C28600395438 /* lua_ThemeSideRegions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E01A60C28600395438 /* lua_ThemeSideRegions.cpp */; };
-		424F33ED1A60C28600395438 /* lua_ThemeSideRegions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E01A60C28600395438 /* lua_ThemeSideRegions.cpp */; };
-		424F33EE1A60C28600395438 /* lua_ThemeStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E21A60C28600395438 /* lua_ThemeStyle.cpp */; };
-		424F33EF1A60C28600395438 /* lua_ThemeStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E21A60C28600395438 /* lua_ThemeStyle.cpp */; };
-		424F33F01A60C28600395438 /* lua_ThemeThemeImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E41A60C28600395438 /* lua_ThemeThemeImage.cpp */; };
-		424F33F11A60C28600395438 /* lua_ThemeThemeImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E41A60C28600395438 /* lua_ThemeThemeImage.cpp */; };
-		424F33F21A60C28600395438 /* lua_ThemeUVs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E61A60C28600395438 /* lua_ThemeUVs.cpp */; };
-		424F33F31A60C28600395438 /* lua_ThemeUVs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E61A60C28600395438 /* lua_ThemeUVs.cpp */; };
-		424F33F41A60C28600395438 /* lua_TileSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E81A60C28600395438 /* lua_TileSet.cpp */; };
-		424F33F51A60C28600395438 /* lua_TileSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32E81A60C28600395438 /* lua_TileSet.cpp */; };
-		424F33F61A60C28600395438 /* lua_Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32EA1A60C28600395438 /* lua_Touch.cpp */; };
-		424F33F71A60C28600395438 /* lua_Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32EA1A60C28600395438 /* lua_Touch.cpp */; };
-		424F33F81A60C28600395438 /* lua_Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32EC1A60C28600395438 /* lua_Transform.cpp */; };
-		424F33F91A60C28600395438 /* lua_Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32EC1A60C28600395438 /* lua_Transform.cpp */; };
-		424F33FA1A60C28600395438 /* lua_TransformListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32EE1A60C28600395438 /* lua_TransformListener.cpp */; };
-		424F33FB1A60C28600395438 /* lua_TransformListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32EE1A60C28600395438 /* lua_TransformListener.cpp */; };
-		424F33FC1A60C28600395438 /* lua_Uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F01A60C28600395438 /* lua_Uniform.cpp */; };
-		424F33FD1A60C28600395438 /* lua_Uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F01A60C28600395438 /* lua_Uniform.cpp */; };
-		424F33FE1A60C28600395438 /* lua_Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F21A60C28600395438 /* lua_Vector2.cpp */; };
-		424F33FF1A60C28600395438 /* lua_Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F21A60C28600395438 /* lua_Vector2.cpp */; };
-		424F34001A60C28600395438 /* lua_Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F41A60C28600395438 /* lua_Vector3.cpp */; };
-		424F34011A60C28600395438 /* lua_Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F41A60C28600395438 /* lua_Vector3.cpp */; };
-		424F34021A60C28600395438 /* lua_Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F61A60C28600395438 /* lua_Vector4.cpp */; };
-		424F34031A60C28600395438 /* lua_Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F61A60C28600395438 /* lua_Vector4.cpp */; };
-		424F34041A60C28600395438 /* lua_VertexAttributeBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F81A60C28600395438 /* lua_VertexAttributeBinding.cpp */; };
-		424F34051A60C28600395438 /* lua_VertexAttributeBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32F81A60C28600395438 /* lua_VertexAttributeBinding.cpp */; };
-		424F34061A60C28600395438 /* lua_VertexFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32FA1A60C28600395438 /* lua_VertexFormat.cpp */; };
-		424F34071A60C28600395438 /* lua_VertexFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32FA1A60C28600395438 /* lua_VertexFormat.cpp */; };
-		424F34081A60C28600395438 /* lua_VertexFormatElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32FC1A60C28600395438 /* lua_VertexFormatElement.cpp */; };
-		424F34091A60C28600395438 /* lua_VertexFormatElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32FC1A60C28600395438 /* lua_VertexFormatElement.cpp */; };
-		424F340A1A60C28600395438 /* lua_VerticalLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32FE1A60C28600395438 /* lua_VerticalLayout.cpp */; };
-		424F340B1A60C28600395438 /* lua_VerticalLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 424F32FE1A60C28600395438 /* lua_VerticalLayout.cpp */; };
-		426F8317187F72A700640CBA /* JoystickControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 426F8315187F72A700640CBA /* JoystickControl.cpp */; };
-		426F8318187F72A700640CBA /* JoystickControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 426F8315187F72A700640CBA /* JoystickControl.cpp */; };
-		42CC556C1809A4EF00AAD8AD /* AbsoluteLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52F71809A4EB00AAD8AD /* AbsoluteLayout.cpp */; };
-		42CC556D1809A4EF00AAD8AD /* AbsoluteLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52F71809A4EB00AAD8AD /* AbsoluteLayout.cpp */; };
-		42CC55701809A4EF00AAD8AD /* AIAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52F91809A4EB00AAD8AD /* AIAgent.cpp */; };
-		42CC55711809A4EF00AAD8AD /* AIAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52F91809A4EB00AAD8AD /* AIAgent.cpp */; };
-		42CC55741809A4EF00AAD8AD /* AIController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52FB1809A4EB00AAD8AD /* AIController.cpp */; };
-		42CC55751809A4EF00AAD8AD /* AIController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52FB1809A4EB00AAD8AD /* AIController.cpp */; };
-		42CC55781809A4EF00AAD8AD /* AIMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52FD1809A4EB00AAD8AD /* AIMessage.cpp */; };
-		42CC55791809A4EF00AAD8AD /* AIMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52FD1809A4EB00AAD8AD /* AIMessage.cpp */; };
-		42CC557C1809A4EF00AAD8AD /* AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52FF1809A4EB00AAD8AD /* AIState.cpp */; };
-		42CC557D1809A4EF00AAD8AD /* AIState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC52FF1809A4EB00AAD8AD /* AIState.cpp */; };
-		42CC55801809A4EF00AAD8AD /* AIStateMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53011809A4EB00AAD8AD /* AIStateMachine.cpp */; };
-		42CC55811809A4EF00AAD8AD /* AIStateMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53011809A4EB00AAD8AD /* AIStateMachine.cpp */; };
-		42CC55841809A4EF00AAD8AD /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53031809A4EB00AAD8AD /* Animation.cpp */; };
-		42CC55851809A4EF00AAD8AD /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53031809A4EB00AAD8AD /* Animation.cpp */; };
-		42CC55881809A4EF00AAD8AD /* AnimationClip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53051809A4EB00AAD8AD /* AnimationClip.cpp */; };
-		42CC55891809A4EF00AAD8AD /* AnimationClip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53051809A4EB00AAD8AD /* AnimationClip.cpp */; };
-		42CC558C1809A4EF00AAD8AD /* AnimationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53071809A4EB00AAD8AD /* AnimationController.cpp */; };
-		42CC558D1809A4EF00AAD8AD /* AnimationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53071809A4EB00AAD8AD /* AnimationController.cpp */; };
-		42CC55901809A4EF00AAD8AD /* AnimationTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53091809A4EB00AAD8AD /* AnimationTarget.cpp */; };
-		42CC55911809A4EF00AAD8AD /* AnimationTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53091809A4EB00AAD8AD /* AnimationTarget.cpp */; };
-		42CC55941809A4EF00AAD8AD /* AnimationValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC530B1809A4EB00AAD8AD /* AnimationValue.cpp */; };
-		42CC55951809A4EF00AAD8AD /* AnimationValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC530B1809A4EB00AAD8AD /* AnimationValue.cpp */; };
-		42CC55981809A4EF00AAD8AD /* AudioBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC530D1809A4EB00AAD8AD /* AudioBuffer.cpp */; };
-		42CC55991809A4EF00AAD8AD /* AudioBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC530D1809A4EB00AAD8AD /* AudioBuffer.cpp */; };
-		42CC559C1809A4EF00AAD8AD /* AudioController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC530F1809A4EB00AAD8AD /* AudioController.cpp */; };
-		42CC559D1809A4EF00AAD8AD /* AudioController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC530F1809A4EB00AAD8AD /* AudioController.cpp */; };
-		42CC55A01809A4EF00AAD8AD /* AudioListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53111809A4EB00AAD8AD /* AudioListener.cpp */; };
-		42CC55A11809A4EF00AAD8AD /* AudioListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53111809A4EB00AAD8AD /* AudioListener.cpp */; };
-		42CC55A41809A4EF00AAD8AD /* AudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53131809A4EB00AAD8AD /* AudioSource.cpp */; };
-		42CC55A51809A4EF00AAD8AD /* AudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53131809A4EB00AAD8AD /* AudioSource.cpp */; };
-		42CC55AA1809A4EF00AAD8AD /* BoundingBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53161809A4EB00AAD8AD /* BoundingBox.cpp */; };
-		42CC55AB1809A4EF00AAD8AD /* BoundingBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53161809A4EB00AAD8AD /* BoundingBox.cpp */; };
-		42CC55AE1809A4EF00AAD8AD /* BoundingSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53191809A4EB00AAD8AD /* BoundingSphere.cpp */; };
-		42CC55AF1809A4EF00AAD8AD /* BoundingSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53191809A4EB00AAD8AD /* BoundingSphere.cpp */; };
-		42CC55B21809A4EF00AAD8AD /* Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC531C1809A4EB00AAD8AD /* Bundle.cpp */; };
-		42CC55B31809A4EF00AAD8AD /* Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC531C1809A4EB00AAD8AD /* Bundle.cpp */; };
-		42CC55B61809A4EF00AAD8AD /* Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC531E1809A4EB00AAD8AD /* Button.cpp */; };
-		42CC55B71809A4EF00AAD8AD /* Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC531E1809A4EB00AAD8AD /* Button.cpp */; };
-		42CC55BA1809A4EF00AAD8AD /* Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53201809A4EB00AAD8AD /* Camera.cpp */; };
-		42CC55BB1809A4EF00AAD8AD /* Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53201809A4EB00AAD8AD /* Camera.cpp */; };
-		42CC55BE1809A4EF00AAD8AD /* CheckBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53221809A4EB00AAD8AD /* CheckBox.cpp */; };
-		42CC55BF1809A4EF00AAD8AD /* CheckBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53221809A4EB00AAD8AD /* CheckBox.cpp */; };
-		42CC55C21809A4EF00AAD8AD /* Container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53241809A4EB00AAD8AD /* Container.cpp */; };
-		42CC55C31809A4EF00AAD8AD /* Container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53241809A4EB00AAD8AD /* Container.cpp */; };
-		42CC55C61809A4EF00AAD8AD /* Control.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53261809A4EB00AAD8AD /* Control.cpp */; };
-		42CC55C71809A4EF00AAD8AD /* Control.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53261809A4EB00AAD8AD /* Control.cpp */; };
-		42CC55CA1809A4EF00AAD8AD /* Curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53281809A4EB00AAD8AD /* Curve.cpp */; };
-		42CC55CB1809A4EF00AAD8AD /* Curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53281809A4EB00AAD8AD /* Curve.cpp */; };
-		42CC55CE1809A4EF00AAD8AD /* DebugNew.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC532A1809A4EB00AAD8AD /* DebugNew.cpp */; };
-		42CC55CF1809A4EF00AAD8AD /* DebugNew.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC532A1809A4EB00AAD8AD /* DebugNew.cpp */; };
-		42CC55D21809A4EF00AAD8AD /* DepthStencilTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC532C1809A4EB00AAD8AD /* DepthStencilTarget.cpp */; };
-		42CC55D31809A4EF00AAD8AD /* DepthStencilTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC532C1809A4EB00AAD8AD /* DepthStencilTarget.cpp */; };
-		42CC55D61809A4EF00AAD8AD /* Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC532E1809A4EB00AAD8AD /* Effect.cpp */; };
-		42CC55D71809A4EF00AAD8AD /* Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC532E1809A4EB00AAD8AD /* Effect.cpp */; };
-		42CC55DA1809A4EF00AAD8AD /* FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53301809A4EB00AAD8AD /* FileSystem.cpp */; };
-		42CC55DB1809A4EF00AAD8AD /* FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53301809A4EB00AAD8AD /* FileSystem.cpp */; };
-		42CC55DE1809A4EF00AAD8AD /* FlowLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53321809A4EB00AAD8AD /* FlowLayout.cpp */; };
-		42CC55DF1809A4EF00AAD8AD /* FlowLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53321809A4EB00AAD8AD /* FlowLayout.cpp */; };
-		42CC55E21809A4EF00AAD8AD /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53341809A4EB00AAD8AD /* Font.cpp */; };
-		42CC55E31809A4EF00AAD8AD /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53341809A4EB00AAD8AD /* Font.cpp */; };
-		42CC55E61809A4EF00AAD8AD /* Form.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53361809A4EB00AAD8AD /* Form.cpp */; };
-		42CC55E71809A4EF00AAD8AD /* Form.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53361809A4EB00AAD8AD /* Form.cpp */; };
-		42CC55EA1809A4EF00AAD8AD /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53381809A4EB00AAD8AD /* FrameBuffer.cpp */; };
-		42CC55EB1809A4EF00AAD8AD /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53381809A4EB00AAD8AD /* FrameBuffer.cpp */; };
-		42CC55EE1809A4EF00AAD8AD /* Frustum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC533A1809A4EB00AAD8AD /* Frustum.cpp */; };
-		42CC55EF1809A4EF00AAD8AD /* Frustum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC533A1809A4EB00AAD8AD /* Frustum.cpp */; };
-		42CC55F21809A4EF00AAD8AD /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC533C1809A4EB00AAD8AD /* Game.cpp */; };
-		42CC55F31809A4EF00AAD8AD /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC533C1809A4EB00AAD8AD /* Game.cpp */; };
-		42CC55F61809A4EF00AAD8AD /* Gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC533F1809A4EB00AAD8AD /* Gamepad.cpp */; };
-		42CC55F71809A4EF00AAD8AD /* Gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC533F1809A4EB00AAD8AD /* Gamepad.cpp */; };
-		42CC55FA1809A4EF00AAD8AD /* gameplay-main-android.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53411809A4EB00AAD8AD /* gameplay-main-android.cpp */; };
-		42CC55FB1809A4EF00AAD8AD /* gameplay-main-android.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53411809A4EB00AAD8AD /* gameplay-main-android.cpp */; };
-		42CC55FF1809A4EF00AAD8AD /* gameplay-main-ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53431809A4EB00AAD8AD /* gameplay-main-ios.mm */; };
-		42CC56001809A4EF00AAD8AD /* gameplay-main-linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53441809A4EB00AAD8AD /* gameplay-main-linux.cpp */; };
-		42CC56011809A4EF00AAD8AD /* gameplay-main-linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53441809A4EB00AAD8AD /* gameplay-main-linux.cpp */; };
-		42CC56021809A4EF00AAD8AD /* gameplay-main-macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53451809A4EB00AAD8AD /* gameplay-main-macosx.mm */; };
-		42CC56041809A4EF00AAD8AD /* gameplay-main-windows.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53461809A4EB00AAD8AD /* gameplay-main-windows.cpp */; };
-		42CC56051809A4EF00AAD8AD /* gameplay-main-windows.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53461809A4EB00AAD8AD /* gameplay-main-windows.cpp */; };
-		42CC560A1809A4EF00AAD8AD /* HeightField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53491809A4EB00AAD8AD /* HeightField.cpp */; };
-		42CC560B1809A4EF00AAD8AD /* HeightField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53491809A4EB00AAD8AD /* HeightField.cpp */; };
-		42CC560E1809A4EF00AAD8AD /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC534B1809A4EB00AAD8AD /* Image.cpp */; };
-		42CC560F1809A4EF00AAD8AD /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC534B1809A4EB00AAD8AD /* Image.cpp */; };
-		42CC56121809A4EF00AAD8AD /* ImageControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC534E1809A4EC00AAD8AD /* ImageControl.cpp */; };
-		42CC56131809A4EF00AAD8AD /* ImageControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC534E1809A4EC00AAD8AD /* ImageControl.cpp */; };
-		42CC56161809A4EF00AAD8AD /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53501809A4EC00AAD8AD /* Joint.cpp */; };
-		42CC56171809A4EF00AAD8AD /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53501809A4EC00AAD8AD /* Joint.cpp */; };
-		42CC56201809A4EF00AAD8AD /* Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53561809A4EC00AAD8AD /* Label.cpp */; };
-		42CC56211809A4EF00AAD8AD /* Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53561809A4EC00AAD8AD /* Label.cpp */; };
-		42CC56241809A4EF00AAD8AD /* Layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53581809A4EC00AAD8AD /* Layout.cpp */; };
-		42CC56251809A4EF00AAD8AD /* Layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC53581809A4EC00AAD8AD /* Layout.cpp */; };
-		42CC56281809A4EF00AAD8AD /* Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC535A1809A4EC00AAD8AD /* Light.cpp */; };
-		42CC56291809A4EF00AAD8AD /* Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC535A1809A4EC00AAD8AD /* Light.cpp */; };
-		42CC562C1809A4EF00AAD8AD /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC535C1809A4EC00AAD8AD /* Logger.cpp */; };
-		42CC562D1809A4EF00AAD8AD /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC535C1809A4EC00AAD8AD /* Logger.cpp */; };
-		42CC59001809A4EF00AAD8AD /* Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54C71809A4ED00AAD8AD /* Material.cpp */; };
-		42CC59011809A4EF00AAD8AD /* Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54C71809A4ED00AAD8AD /* Material.cpp */; };
-		42CC59041809A4EF00AAD8AD /* MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54C91809A4ED00AAD8AD /* MaterialParameter.cpp */; };
-		42CC59051809A4EF00AAD8AD /* MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54C91809A4ED00AAD8AD /* MaterialParameter.cpp */; };
-		42CC59081809A4EF00AAD8AD /* MathUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54CB1809A4ED00AAD8AD /* MathUtil.cpp */; };
-		42CC59091809A4EF00AAD8AD /* MathUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54CB1809A4ED00AAD8AD /* MathUtil.cpp */; };
-		42CC590C1809A4EF00AAD8AD /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54CF1809A4ED00AAD8AD /* Matrix.cpp */; };
-		42CC590D1809A4EF00AAD8AD /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54CF1809A4ED00AAD8AD /* Matrix.cpp */; };
-		42CC59101809A4EF00AAD8AD /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D21809A4ED00AAD8AD /* Mesh.cpp */; };
-		42CC59111809A4EF00AAD8AD /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D21809A4ED00AAD8AD /* Mesh.cpp */; };
-		42CC59141809A4EF00AAD8AD /* MeshBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D41809A4ED00AAD8AD /* MeshBatch.cpp */; };
-		42CC59151809A4EF00AAD8AD /* MeshBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D41809A4ED00AAD8AD /* MeshBatch.cpp */; };
-		42CC59181809A4EF00AAD8AD /* MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D71809A4ED00AAD8AD /* MeshPart.cpp */; };
-		42CC59191809A4EF00AAD8AD /* MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D71809A4ED00AAD8AD /* MeshPart.cpp */; };
-		42CC591C1809A4EF00AAD8AD /* MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D91809A4ED00AAD8AD /* MeshSkin.cpp */; };
-		42CC591D1809A4EF00AAD8AD /* MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54D91809A4ED00AAD8AD /* MeshSkin.cpp */; };
-		42CC59201809A4EF00AAD8AD /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54DB1809A4ED00AAD8AD /* Model.cpp */; };
-		42CC59211809A4EF00AAD8AD /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54DB1809A4ED00AAD8AD /* Model.cpp */; };
-		42CC59261809A4EF00AAD8AD /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54DE1809A4ED00AAD8AD /* Node.cpp */; };
-		42CC59271809A4EF00AAD8AD /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54DE1809A4ED00AAD8AD /* Node.cpp */; };
-		42CC592A1809A4EF00AAD8AD /* ParticleEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E01809A4ED00AAD8AD /* ParticleEmitter.cpp */; };
-		42CC592B1809A4EF00AAD8AD /* ParticleEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E01809A4ED00AAD8AD /* ParticleEmitter.cpp */; };
-		42CC592E1809A4EF00AAD8AD /* Pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E21809A4ED00AAD8AD /* Pass.cpp */; };
-		42CC592F1809A4EF00AAD8AD /* Pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E21809A4ED00AAD8AD /* Pass.cpp */; };
-		42CC59321809A4EF00AAD8AD /* PhysicsCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E41809A4ED00AAD8AD /* PhysicsCharacter.cpp */; };
-		42CC59331809A4EF00AAD8AD /* PhysicsCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E41809A4ED00AAD8AD /* PhysicsCharacter.cpp */; };
-		42CC59361809A4EF00AAD8AD /* PhysicsCollisionObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E61809A4ED00AAD8AD /* PhysicsCollisionObject.cpp */; };
-		42CC59371809A4EF00AAD8AD /* PhysicsCollisionObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E61809A4ED00AAD8AD /* PhysicsCollisionObject.cpp */; };
-		42CC593A1809A4EF00AAD8AD /* PhysicsCollisionShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E81809A4ED00AAD8AD /* PhysicsCollisionShape.cpp */; };
-		42CC593B1809A4EF00AAD8AD /* PhysicsCollisionShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54E81809A4ED00AAD8AD /* PhysicsCollisionShape.cpp */; };
-		42CC593E1809A4EF00AAD8AD /* PhysicsConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54EA1809A4ED00AAD8AD /* PhysicsConstraint.cpp */; };
-		42CC593F1809A4EF00AAD8AD /* PhysicsConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54EA1809A4ED00AAD8AD /* PhysicsConstraint.cpp */; };
-		42CC59421809A4EF00AAD8AD /* PhysicsController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54ED1809A4ED00AAD8AD /* PhysicsController.cpp */; };
-		42CC59431809A4EF00AAD8AD /* PhysicsController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54ED1809A4ED00AAD8AD /* PhysicsController.cpp */; };
-		42CC59461809A4EF00AAD8AD /* PhysicsFixedConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54EF1809A4ED00AAD8AD /* PhysicsFixedConstraint.cpp */; };
-		42CC59471809A4EF00AAD8AD /* PhysicsFixedConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54EF1809A4ED00AAD8AD /* PhysicsFixedConstraint.cpp */; };
-		42CC594A1809A4EF00AAD8AD /* PhysicsGenericConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F21809A4ED00AAD8AD /* PhysicsGenericConstraint.cpp */; };
-		42CC594B1809A4EF00AAD8AD /* PhysicsGenericConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F21809A4ED00AAD8AD /* PhysicsGenericConstraint.cpp */; };
-		42CC594E1809A4EF00AAD8AD /* PhysicsGhostObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F51809A4ED00AAD8AD /* PhysicsGhostObject.cpp */; };
-		42CC594F1809A4EF00AAD8AD /* PhysicsGhostObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F51809A4ED00AAD8AD /* PhysicsGhostObject.cpp */; };
-		42CC59521809A4EF00AAD8AD /* PhysicsHingeConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F71809A4ED00AAD8AD /* PhysicsHingeConstraint.cpp */; };
-		42CC59531809A4EF00AAD8AD /* PhysicsHingeConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F71809A4ED00AAD8AD /* PhysicsHingeConstraint.cpp */; };
-		42CC59561809A4EF00AAD8AD /* PhysicsRigidBody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F91809A4ED00AAD8AD /* PhysicsRigidBody.cpp */; };
-		42CC59571809A4EF00AAD8AD /* PhysicsRigidBody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54F91809A4ED00AAD8AD /* PhysicsRigidBody.cpp */; };
-		42CC595A1809A4EF00AAD8AD /* PhysicsSocketConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54FC1809A4ED00AAD8AD /* PhysicsSocketConstraint.cpp */; };
-		42CC595B1809A4EF00AAD8AD /* PhysicsSocketConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54FC1809A4ED00AAD8AD /* PhysicsSocketConstraint.cpp */; };
-		42CC595E1809A4EF00AAD8AD /* PhysicsSpringConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54FE1809A4ED00AAD8AD /* PhysicsSpringConstraint.cpp */; };
-		42CC595F1809A4EF00AAD8AD /* PhysicsSpringConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC54FE1809A4ED00AAD8AD /* PhysicsSpringConstraint.cpp */; };
-		42CC59621809A4EF00AAD8AD /* PhysicsVehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55011809A4ED00AAD8AD /* PhysicsVehicle.cpp */; };
-		42CC59631809A4EF00AAD8AD /* PhysicsVehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55011809A4ED00AAD8AD /* PhysicsVehicle.cpp */; };
-		42CC59661809A4EF00AAD8AD /* PhysicsVehicleWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55031809A4ED00AAD8AD /* PhysicsVehicleWheel.cpp */; };
-		42CC59671809A4EF00AAD8AD /* PhysicsVehicleWheel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55031809A4ED00AAD8AD /* PhysicsVehicleWheel.cpp */; };
-		42CC596A1809A4EF00AAD8AD /* Plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55051809A4ED00AAD8AD /* Plane.cpp */; };
-		42CC596B1809A4EF00AAD8AD /* Plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55051809A4ED00AAD8AD /* Plane.cpp */; };
-		42CC596E1809A4EF00AAD8AD /* Platform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55081809A4ED00AAD8AD /* Platform.cpp */; };
-		42CC596F1809A4EF00AAD8AD /* Platform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55081809A4ED00AAD8AD /* Platform.cpp */; };
-		42CC59721809A4EF00AAD8AD /* PlatformAndroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550A1809A4ED00AAD8AD /* PlatformAndroid.cpp */; };
-		42CC59731809A4EF00AAD8AD /* PlatformAndroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550A1809A4ED00AAD8AD /* PlatformAndroid.cpp */; };
-		42CC59771809A4EF00AAD8AD /* PlatformiOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550C1809A4ED00AAD8AD /* PlatformiOS.mm */; };
-		42CC59781809A4EF00AAD8AD /* PlatformLinux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550D1809A4ED00AAD8AD /* PlatformLinux.cpp */; };
-		42CC59791809A4EF00AAD8AD /* PlatformLinux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550D1809A4ED00AAD8AD /* PlatformLinux.cpp */; };
-		42CC597A1809A4EF00AAD8AD /* PlatformMacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550E1809A4ED00AAD8AD /* PlatformMacOSX.mm */; };
-		42CC597C1809A4EF00AAD8AD /* PlatformWindows.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550F1809A4EE00AAD8AD /* PlatformWindows.cpp */; };
-		42CC597D1809A4EF00AAD8AD /* PlatformWindows.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC550F1809A4EE00AAD8AD /* PlatformWindows.cpp */; };
-		42CC597E1809A4EF00AAD8AD /* Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55101809A4EE00AAD8AD /* Properties.cpp */; };
-		42CC597F1809A4EF00AAD8AD /* Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55101809A4EE00AAD8AD /* Properties.cpp */; };
-		42CC59821809A4EF00AAD8AD /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55121809A4EE00AAD8AD /* Quaternion.cpp */; };
-		42CC59831809A4EF00AAD8AD /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55121809A4EE00AAD8AD /* Quaternion.cpp */; };
-		42CC59861809A4EF00AAD8AD /* RadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55151809A4EE00AAD8AD /* RadioButton.cpp */; };
-		42CC59871809A4EF00AAD8AD /* RadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55151809A4EE00AAD8AD /* RadioButton.cpp */; };
-		42CC598A1809A4EF00AAD8AD /* Ray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55171809A4EE00AAD8AD /* Ray.cpp */; };
-		42CC598B1809A4EF00AAD8AD /* Ray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55171809A4EE00AAD8AD /* Ray.cpp */; };
-		42CC598E1809A4EF00AAD8AD /* Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC551A1809A4EE00AAD8AD /* Rectangle.cpp */; };
-		42CC598F1809A4EF00AAD8AD /* Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC551A1809A4EE00AAD8AD /* Rectangle.cpp */; };
-		42CC59921809A4EF00AAD8AD /* Ref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC551C1809A4EE00AAD8AD /* Ref.cpp */; };
-		42CC59931809A4EF00AAD8AD /* Ref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC551C1809A4EE00AAD8AD /* Ref.cpp */; };
-		42CC59961809A4EF00AAD8AD /* RenderState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC551E1809A4EE00AAD8AD /* RenderState.cpp */; };
-		42CC59971809A4EF00AAD8AD /* RenderState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC551E1809A4EE00AAD8AD /* RenderState.cpp */; };
-		42CC599A1809A4EF00AAD8AD /* RenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55201809A4EE00AAD8AD /* RenderTarget.cpp */; };
-		42CC599B1809A4EF00AAD8AD /* RenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55201809A4EE00AAD8AD /* RenderTarget.cpp */; };
-		42CC599E1809A4EF00AAD8AD /* Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55221809A4EE00AAD8AD /* Scene.cpp */; };
-		42CC599F1809A4EF00AAD8AD /* Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55221809A4EE00AAD8AD /* Scene.cpp */; };
-		42CC59A21809A4EF00AAD8AD /* SceneLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55241809A4EE00AAD8AD /* SceneLoader.cpp */; };
-		42CC59A31809A4EF00AAD8AD /* SceneLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55241809A4EE00AAD8AD /* SceneLoader.cpp */; };
-		42CC59AE1809A4EF00AAD8AD /* ScreenDisplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC552A1809A4EE00AAD8AD /* ScreenDisplayer.cpp */; };
-		42CC59AF1809A4EF00AAD8AD /* ScreenDisplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC552A1809A4EE00AAD8AD /* ScreenDisplayer.cpp */; };
-		42CC59B21809A4EF00AAD8AD /* ScriptController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC552C1809A4EE00AAD8AD /* ScriptController.cpp */; };
-		42CC59B31809A4EF00AAD8AD /* ScriptController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC552C1809A4EE00AAD8AD /* ScriptController.cpp */; };
-		42CC59B61809A4EF00AAD8AD /* ScriptTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC552F1809A4EE00AAD8AD /* ScriptTarget.cpp */; };
-		42CC59B71809A4EF00AAD8AD /* ScriptTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC552F1809A4EE00AAD8AD /* ScriptTarget.cpp */; };
-		42CC59BA1809A4EF00AAD8AD /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55311809A4EE00AAD8AD /* Slider.cpp */; };
-		42CC59BB1809A4EF00AAD8AD /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55311809A4EE00AAD8AD /* Slider.cpp */; };
-		42CC59E01809A4EF00AAD8AD /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55451809A4EE00AAD8AD /* SpriteBatch.cpp */; };
-		42CC59E11809A4EF00AAD8AD /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55451809A4EE00AAD8AD /* SpriteBatch.cpp */; };
-		42CC59E61809A4EF00AAD8AD /* Technique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55481809A4EE00AAD8AD /* Technique.cpp */; };
-		42CC59E71809A4EF00AAD8AD /* Technique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55481809A4EE00AAD8AD /* Technique.cpp */; };
-		42CC59EA1809A4EF00AAD8AD /* Terrain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC554A1809A4EE00AAD8AD /* Terrain.cpp */; };
-		42CC59EB1809A4EF00AAD8AD /* Terrain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC554A1809A4EE00AAD8AD /* Terrain.cpp */; };
-		42CC59EE1809A4EF00AAD8AD /* TerrainPatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC554C1809A4EE00AAD8AD /* TerrainPatch.cpp */; };
-		42CC59EF1809A4EF00AAD8AD /* TerrainPatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC554C1809A4EE00AAD8AD /* TerrainPatch.cpp */; };
-		42CC59F21809A4EF00AAD8AD /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC554E1809A4EE00AAD8AD /* TextBox.cpp */; };
-		42CC59F31809A4EF00AAD8AD /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC554E1809A4EE00AAD8AD /* TextBox.cpp */; };
-		42CC59F61809A4EF00AAD8AD /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55501809A4EE00AAD8AD /* Texture.cpp */; };
-		42CC59F71809A4EF00AAD8AD /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55501809A4EE00AAD8AD /* Texture.cpp */; };
-		42CC59FA1809A4EF00AAD8AD /* Theme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55521809A4EE00AAD8AD /* Theme.cpp */; };
-		42CC59FB1809A4EF00AAD8AD /* Theme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55521809A4EE00AAD8AD /* Theme.cpp */; };
-		42CC59FE1809A4EF00AAD8AD /* ThemeStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55541809A4EE00AAD8AD /* ThemeStyle.cpp */; };
-		42CC59FF1809A4EF00AAD8AD /* ThemeStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55541809A4EE00AAD8AD /* ThemeStyle.cpp */; };
-		42CC5A061809A4EF00AAD8AD /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55581809A4EE00AAD8AD /* Transform.cpp */; };
-		42CC5A071809A4EF00AAD8AD /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55581809A4EE00AAD8AD /* Transform.cpp */; };
-		42CC5A0A1809A4EF00AAD8AD /* Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC555A1809A4EE00AAD8AD /* Vector2.cpp */; };
-		42CC5A0B1809A4EF00AAD8AD /* Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC555A1809A4EE00AAD8AD /* Vector2.cpp */; };
-		42CC5A0E1809A4EF00AAD8AD /* Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC555D1809A4EE00AAD8AD /* Vector3.cpp */; };
-		42CC5A0F1809A4EF00AAD8AD /* Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC555D1809A4EE00AAD8AD /* Vector3.cpp */; };
-		42CC5A121809A4EF00AAD8AD /* Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55601809A4EE00AAD8AD /* Vector4.cpp */; };
-		42CC5A131809A4EF00AAD8AD /* Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55601809A4EE00AAD8AD /* Vector4.cpp */; };
-		42CC5A161809A4EF00AAD8AD /* VertexAttributeBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55631809A4EE00AAD8AD /* VertexAttributeBinding.cpp */; };
-		42CC5A171809A4EF00AAD8AD /* VertexAttributeBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55631809A4EE00AAD8AD /* VertexAttributeBinding.cpp */; };
-		42CC5A1A1809A4EF00AAD8AD /* VertexFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55651809A4EE00AAD8AD /* VertexFormat.cpp */; };
-		42CC5A1B1809A4EF00AAD8AD /* VertexFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55651809A4EE00AAD8AD /* VertexFormat.cpp */; };
-		42CC5A1E1809A4EF00AAD8AD /* VerticalLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55671809A4EE00AAD8AD /* VerticalLayout.cpp */; };
-		42CC5A1F1809A4EF00AAD8AD /* VerticalLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42CC55671809A4EE00AAD8AD /* VerticalLayout.cpp */; };
-		42D9299B1A6051EC0073258D /* Drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42D929991A6051EC0073258D /* Drawable.cpp */; };
-		42D9299C1A6051EC0073258D /* Drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42D929991A6051EC0073258D /* Drawable.cpp */; };
-		42ECC3FA1A4EF5A00036C839 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42ECC3F81A4EF5A00036C839 /* Text.cpp */; };
-		42ECC3FB1A4EF5A00036C839 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42ECC3F81A4EF5A00036C839 /* Text.cpp */; };
-		5B21E99616153890006EBEAC /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B21E99516153890006EBEAC /* IOKit.framework */; };
-		5B2BC75F1512514500D176CD /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B2BC75D1512514500D176CD /* OpenAL.framework */; };
-		5B2BC7601512514500D176CD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B2BC75E1512514500D176CD /* OpenGL.framework */; };
-		5B2BC7621512514D00D176CD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B2BC7611512514D00D176CD /* QuartzCore.framework */; };
-		6290E04A18223DCC00A28FB9 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6290E04918223DCC00A28FB9 /* GameKit.framework */; };
-		6290E04C18223DDD00A28FB9 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6290E04B18223DDD00A28FB9 /* GameKit.framework */; };
-		BD2636E516CF5B7400CFE15F /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD2636DF16CF5B7400CFE15F /* CoreMotion.framework */; };
-		BD2636E616CF5B7400CFE15F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD2636E016CF5B7400CFE15F /* Foundation.framework */; };
-		BD2636E716CF5B7400CFE15F /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD2636E116CF5B7400CFE15F /* OpenAL.framework */; };
-		BD2636E816CF5B7400CFE15F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD2636E216CF5B7400CFE15F /* OpenGLES.framework */; };
-		BD2636E916CF5B7400CFE15F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD2636E316CF5B7400CFE15F /* QuartzCore.framework */; };
-		BD2636EA16CF5B7400CFE15F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD2636E416CF5B7400CFE15F /* UIKit.framework */; };
-		DD4FBEA51A0C0D240015D30C /* Script.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4FBEA31A0C0D240015D30C /* Script.cpp */; };
-		DD4FBEA61A0C0D240015D30C /* Script.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4FBEA31A0C0D240015D30C /* Script.cpp */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
-		4204EC3F1A2EB8310074FCE9 /* TileSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TileSet.cpp; path = src/TileSet.cpp; sourceTree = SOURCE_ROOT; };
-		4204EC401A2EB8310074FCE9 /* TileSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TileSet.h; path = src/TileSet.h; sourceTree = SOURCE_ROOT; };
-		4204EC431A2F70BA0074FCE9 /* Sprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Sprite.h; path = src/Sprite.h; sourceTree = SOURCE_ROOT; };
-		4204EC441A2F878C0074FCE9 /* Sprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Sprite.cpp; path = src/Sprite.cpp; sourceTree = SOURCE_ROOT; };
-		420BBAA21817416D00C7B720 /* ControlFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ControlFactory.cpp; path = src/ControlFactory.cpp; sourceTree = SOURCE_ROOT; };
-		420BBAA31817416D00C7B720 /* ControlFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ControlFactory.h; path = src/ControlFactory.h; sourceTree = SOURCE_ROOT; };
-		4234D99A14686C52003031B3 /* libgameplay.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgameplay.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		4234D99D14686C52003031B3 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
-		424F31F41A60C28600395438 /* lua_AbsoluteLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AbsoluteLayout.cpp; sourceTree = "<group>"; };
-		424F31F51A60C28600395438 /* lua_AbsoluteLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AbsoluteLayout.h; sourceTree = "<group>"; };
-		424F31F61A60C28600395438 /* lua_AIAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIAgent.cpp; sourceTree = "<group>"; };
-		424F31F71A60C28600395438 /* lua_AIAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIAgent.h; sourceTree = "<group>"; };
-		424F31F81A60C28600395438 /* lua_AIAgentListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIAgentListener.cpp; sourceTree = "<group>"; };
-		424F31F91A60C28600395438 /* lua_AIAgentListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIAgentListener.h; sourceTree = "<group>"; };
-		424F31FA1A60C28600395438 /* lua_AIController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIController.cpp; sourceTree = "<group>"; };
-		424F31FB1A60C28600395438 /* lua_AIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIController.h; sourceTree = "<group>"; };
-		424F31FC1A60C28600395438 /* lua_AIMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIMessage.cpp; sourceTree = "<group>"; };
-		424F31FD1A60C28600395438 /* lua_AIMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIMessage.h; sourceTree = "<group>"; };
-		424F31FE1A60C28600395438 /* lua_AIState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIState.cpp; sourceTree = "<group>"; };
-		424F31FF1A60C28600395438 /* lua_AIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIState.h; sourceTree = "<group>"; };
-		424F32001A60C28600395438 /* lua_AIStateListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIStateListener.cpp; sourceTree = "<group>"; };
-		424F32011A60C28600395438 /* lua_AIStateListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIStateListener.h; sourceTree = "<group>"; };
-		424F32021A60C28600395438 /* lua_AIStateMachine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AIStateMachine.cpp; sourceTree = "<group>"; };
-		424F32031A60C28600395438 /* lua_AIStateMachine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AIStateMachine.h; sourceTree = "<group>"; };
-		424F32041A60C28600395438 /* lua_all_bindings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_all_bindings.cpp; sourceTree = "<group>"; };
-		424F32051A60C28600395438 /* lua_all_bindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_all_bindings.h; sourceTree = "<group>"; };
-		424F32061A60C28600395438 /* lua_Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Animation.cpp; sourceTree = "<group>"; };
-		424F32071A60C28600395438 /* lua_Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Animation.h; sourceTree = "<group>"; };
-		424F32081A60C28600395438 /* lua_AnimationClip.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AnimationClip.cpp; sourceTree = "<group>"; };
-		424F32091A60C28600395438 /* lua_AnimationClip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AnimationClip.h; sourceTree = "<group>"; };
-		424F320A1A60C28600395438 /* lua_AnimationClipListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AnimationClipListener.cpp; sourceTree = "<group>"; };
-		424F320B1A60C28600395438 /* lua_AnimationClipListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AnimationClipListener.h; sourceTree = "<group>"; };
-		424F320C1A60C28600395438 /* lua_AnimationController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AnimationController.cpp; sourceTree = "<group>"; };
-		424F320D1A60C28600395438 /* lua_AnimationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AnimationController.h; sourceTree = "<group>"; };
-		424F320E1A60C28600395438 /* lua_AnimationTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AnimationTarget.cpp; sourceTree = "<group>"; };
-		424F320F1A60C28600395438 /* lua_AnimationTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AnimationTarget.h; sourceTree = "<group>"; };
-		424F32101A60C28600395438 /* lua_AnimationValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AnimationValue.cpp; sourceTree = "<group>"; };
-		424F32111A60C28600395438 /* lua_AnimationValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AnimationValue.h; sourceTree = "<group>"; };
-		424F32121A60C28600395438 /* lua_AudioBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AudioBuffer.cpp; sourceTree = "<group>"; };
-		424F32131A60C28600395438 /* lua_AudioBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AudioBuffer.h; sourceTree = "<group>"; };
-		424F32141A60C28600395438 /* lua_AudioController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AudioController.cpp; sourceTree = "<group>"; };
-		424F32151A60C28600395438 /* lua_AudioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AudioController.h; sourceTree = "<group>"; };
-		424F32161A60C28600395438 /* lua_AudioListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AudioListener.cpp; sourceTree = "<group>"; };
-		424F32171A60C28600395438 /* lua_AudioListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AudioListener.h; sourceTree = "<group>"; };
-		424F32181A60C28600395438 /* lua_AudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_AudioSource.cpp; sourceTree = "<group>"; };
-		424F32191A60C28600395438 /* lua_AudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_AudioSource.h; sourceTree = "<group>"; };
-		424F321A1A60C28600395438 /* lua_BoundingBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_BoundingBox.cpp; sourceTree = "<group>"; };
-		424F321B1A60C28600395438 /* lua_BoundingBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_BoundingBox.h; sourceTree = "<group>"; };
-		424F321C1A60C28600395438 /* lua_BoundingSphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_BoundingSphere.cpp; sourceTree = "<group>"; };
-		424F321D1A60C28600395438 /* lua_BoundingSphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_BoundingSphere.h; sourceTree = "<group>"; };
-		424F321E1A60C28600395438 /* lua_Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Bundle.cpp; sourceTree = "<group>"; };
-		424F321F1A60C28600395438 /* lua_Bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Bundle.h; sourceTree = "<group>"; };
-		424F32201A60C28600395438 /* lua_Button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Button.cpp; sourceTree = "<group>"; };
-		424F32211A60C28600395438 /* lua_Button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Button.h; sourceTree = "<group>"; };
-		424F32221A60C28600395438 /* lua_Camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Camera.cpp; sourceTree = "<group>"; };
-		424F32231A60C28600395438 /* lua_Camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Camera.h; sourceTree = "<group>"; };
-		424F32241A60C28600395438 /* lua_CameraListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_CameraListener.cpp; sourceTree = "<group>"; };
-		424F32251A60C28600395438 /* lua_CameraListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_CameraListener.h; sourceTree = "<group>"; };
-		424F32261A60C28600395438 /* lua_CheckBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_CheckBox.cpp; sourceTree = "<group>"; };
-		424F32271A60C28600395438 /* lua_CheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_CheckBox.h; sourceTree = "<group>"; };
-		424F32281A60C28600395438 /* lua_Container.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Container.cpp; sourceTree = "<group>"; };
-		424F32291A60C28600395438 /* lua_Container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Container.h; sourceTree = "<group>"; };
-		424F322A1A60C28600395438 /* lua_Control.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Control.cpp; sourceTree = "<group>"; };
-		424F322B1A60C28600395438 /* lua_Control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Control.h; sourceTree = "<group>"; };
-		424F322C1A60C28600395438 /* lua_ControlListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ControlListener.cpp; sourceTree = "<group>"; };
-		424F322D1A60C28600395438 /* lua_ControlListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ControlListener.h; sourceTree = "<group>"; };
-		424F322E1A60C28600395438 /* lua_Curve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Curve.cpp; sourceTree = "<group>"; };
-		424F322F1A60C28600395438 /* lua_Curve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Curve.h; sourceTree = "<group>"; };
-		424F32301A60C28600395438 /* lua_DepthStencilTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_DepthStencilTarget.cpp; sourceTree = "<group>"; };
-		424F32311A60C28600395438 /* lua_DepthStencilTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_DepthStencilTarget.h; sourceTree = "<group>"; };
-		424F32321A60C28600395438 /* lua_Drawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Drawable.cpp; sourceTree = "<group>"; };
-		424F32331A60C28600395438 /* lua_Drawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Drawable.h; sourceTree = "<group>"; };
-		424F32341A60C28600395438 /* lua_Effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Effect.cpp; sourceTree = "<group>"; };
-		424F32351A60C28600395438 /* lua_Effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Effect.h; sourceTree = "<group>"; };
-		424F32361A60C28600395438 /* lua_FileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_FileSystem.cpp; sourceTree = "<group>"; };
-		424F32371A60C28600395438 /* lua_FileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_FileSystem.h; sourceTree = "<group>"; };
-		424F32381A60C28600395438 /* lua_FlowLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_FlowLayout.cpp; sourceTree = "<group>"; };
-		424F32391A60C28600395438 /* lua_FlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_FlowLayout.h; sourceTree = "<group>"; };
-		424F323A1A60C28600395438 /* lua_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Font.cpp; sourceTree = "<group>"; };
-		424F323B1A60C28600395438 /* lua_Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Font.h; sourceTree = "<group>"; };
-		424F323C1A60C28600395438 /* lua_Form.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Form.cpp; sourceTree = "<group>"; };
-		424F323D1A60C28600395438 /* lua_Form.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Form.h; sourceTree = "<group>"; };
-		424F323E1A60C28600395438 /* lua_FrameBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_FrameBuffer.cpp; sourceTree = "<group>"; };
-		424F323F1A60C28600395438 /* lua_FrameBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_FrameBuffer.h; sourceTree = "<group>"; };
-		424F32401A60C28600395438 /* lua_Frustum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Frustum.cpp; sourceTree = "<group>"; };
-		424F32411A60C28600395438 /* lua_Frustum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Frustum.h; sourceTree = "<group>"; };
-		424F32421A60C28600395438 /* lua_Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Game.cpp; sourceTree = "<group>"; };
-		424F32431A60C28600395438 /* lua_Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Game.h; sourceTree = "<group>"; };
-		424F32441A60C28600395438 /* lua_Gamepad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Gamepad.cpp; sourceTree = "<group>"; };
-		424F32451A60C28600395438 /* lua_Gamepad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Gamepad.h; sourceTree = "<group>"; };
-		424F32461A60C28600395438 /* lua_Gesture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Gesture.cpp; sourceTree = "<group>"; };
-		424F32471A60C28600395438 /* lua_Gesture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Gesture.h; sourceTree = "<group>"; };
-		424F32481A60C28600395438 /* lua_Global.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Global.cpp; sourceTree = "<group>"; };
-		424F32491A60C28600395438 /* lua_Global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Global.h; sourceTree = "<group>"; };
-		424F324A1A60C28600395438 /* lua_HeightField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_HeightField.cpp; sourceTree = "<group>"; };
-		424F324B1A60C28600395438 /* lua_HeightField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_HeightField.h; sourceTree = "<group>"; };
-		424F324C1A60C28600395438 /* lua_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Image.cpp; sourceTree = "<group>"; };
-		424F324D1A60C28600395438 /* lua_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Image.h; sourceTree = "<group>"; };
-		424F324E1A60C28600395438 /* lua_ImageControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ImageControl.cpp; sourceTree = "<group>"; };
-		424F324F1A60C28600395438 /* lua_ImageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ImageControl.h; sourceTree = "<group>"; };
-		424F32501A60C28600395438 /* lua_Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Joint.cpp; sourceTree = "<group>"; };
-		424F32511A60C28600395438 /* lua_Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Joint.h; sourceTree = "<group>"; };
-		424F32521A60C28600395438 /* lua_JoystickControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_JoystickControl.cpp; sourceTree = "<group>"; };
-		424F32531A60C28600395438 /* lua_JoystickControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_JoystickControl.h; sourceTree = "<group>"; };
-		424F32541A60C28600395438 /* lua_Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Keyboard.cpp; sourceTree = "<group>"; };
-		424F32551A60C28600395438 /* lua_Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Keyboard.h; sourceTree = "<group>"; };
-		424F32561A60C28600395438 /* lua_Label.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Label.cpp; sourceTree = "<group>"; };
-		424F32571A60C28600395438 /* lua_Label.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Label.h; sourceTree = "<group>"; };
-		424F32581A60C28600395438 /* lua_Layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Layout.cpp; sourceTree = "<group>"; };
-		424F32591A60C28600395438 /* lua_Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Layout.h; sourceTree = "<group>"; };
-		424F325A1A60C28600395438 /* lua_Light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Light.cpp; sourceTree = "<group>"; };
-		424F325B1A60C28600395438 /* lua_Light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Light.h; sourceTree = "<group>"; };
-		424F325C1A60C28600395438 /* lua_Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Logger.cpp; sourceTree = "<group>"; };
-		424F325D1A60C28600395438 /* lua_Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Logger.h; sourceTree = "<group>"; };
-		424F325E1A60C28600395438 /* lua_Material.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Material.cpp; sourceTree = "<group>"; };
-		424F325F1A60C28600395438 /* lua_Material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Material.h; sourceTree = "<group>"; };
-		424F32601A60C28600395438 /* lua_MaterialParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_MaterialParameter.cpp; sourceTree = "<group>"; };
-		424F32611A60C28600395438 /* lua_MaterialParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_MaterialParameter.h; sourceTree = "<group>"; };
-		424F32621A60C28600395438 /* lua_MathUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_MathUtil.cpp; sourceTree = "<group>"; };
-		424F32631A60C28600395438 /* lua_MathUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_MathUtil.h; sourceTree = "<group>"; };
-		424F32641A60C28600395438 /* lua_Matrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Matrix.cpp; sourceTree = "<group>"; };
-		424F32651A60C28600395438 /* lua_Matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Matrix.h; sourceTree = "<group>"; };
-		424F32661A60C28600395438 /* lua_Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Mesh.cpp; sourceTree = "<group>"; };
-		424F32671A60C28600395438 /* lua_Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Mesh.h; sourceTree = "<group>"; };
-		424F32681A60C28600395438 /* lua_MeshBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_MeshBatch.cpp; sourceTree = "<group>"; };
-		424F32691A60C28600395438 /* lua_MeshBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_MeshBatch.h; sourceTree = "<group>"; };
-		424F326A1A60C28600395438 /* lua_MeshPart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_MeshPart.cpp; sourceTree = "<group>"; };
-		424F326B1A60C28600395438 /* lua_MeshPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_MeshPart.h; sourceTree = "<group>"; };
-		424F326C1A60C28600395438 /* lua_MeshSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_MeshSkin.cpp; sourceTree = "<group>"; };
-		424F326D1A60C28600395438 /* lua_MeshSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_MeshSkin.h; sourceTree = "<group>"; };
-		424F326E1A60C28600395438 /* lua_Model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Model.cpp; sourceTree = "<group>"; };
-		424F326F1A60C28600395438 /* lua_Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Model.h; sourceTree = "<group>"; };
-		424F32701A60C28600395438 /* lua_Mouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Mouse.cpp; sourceTree = "<group>"; };
-		424F32711A60C28600395438 /* lua_Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Mouse.h; sourceTree = "<group>"; };
-		424F32721A60C28600395438 /* lua_Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Node.cpp; sourceTree = "<group>"; };
-		424F32731A60C28600395438 /* lua_Node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Node.h; sourceTree = "<group>"; };
-		424F32741A60C28600395438 /* lua_NodeCloneContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_NodeCloneContext.cpp; sourceTree = "<group>"; };
-		424F32751A60C28600395438 /* lua_NodeCloneContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_NodeCloneContext.h; sourceTree = "<group>"; };
-		424F32761A60C28600395438 /* lua_ParticleEmitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ParticleEmitter.cpp; sourceTree = "<group>"; };
-		424F32771A60C28600395438 /* lua_ParticleEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ParticleEmitter.h; sourceTree = "<group>"; };
-		424F32781A60C28600395438 /* lua_Pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Pass.cpp; sourceTree = "<group>"; };
-		424F32791A60C28600395438 /* lua_Pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Pass.h; sourceTree = "<group>"; };
-		424F327A1A60C28600395438 /* lua_PhysicsCharacter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsCharacter.cpp; sourceTree = "<group>"; };
-		424F327B1A60C28600395438 /* lua_PhysicsCharacter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsCharacter.h; sourceTree = "<group>"; };
-		424F327C1A60C28600395438 /* lua_PhysicsCollisionObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsCollisionObject.cpp; sourceTree = "<group>"; };
-		424F327D1A60C28600395438 /* lua_PhysicsCollisionObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsCollisionObject.h; sourceTree = "<group>"; };
-		424F327E1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsCollisionObjectCollisionListener.cpp; sourceTree = "<group>"; };
-		424F327F1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsCollisionObjectCollisionListener.h; sourceTree = "<group>"; };
-		424F32801A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsCollisionObjectCollisionPair.cpp; sourceTree = "<group>"; };
-		424F32811A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsCollisionObjectCollisionPair.h; sourceTree = "<group>"; };
-		424F32821A60C28600395438 /* lua_PhysicsCollisionShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsCollisionShape.cpp; sourceTree = "<group>"; };
-		424F32831A60C28600395438 /* lua_PhysicsCollisionShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsCollisionShape.h; sourceTree = "<group>"; };
-		424F32841A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsCollisionShapeDefinition.cpp; sourceTree = "<group>"; };
-		424F32851A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsCollisionShapeDefinition.h; sourceTree = "<group>"; };
-		424F32861A60C28600395438 /* lua_PhysicsConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsConstraint.cpp; sourceTree = "<group>"; };
-		424F32871A60C28600395438 /* lua_PhysicsConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsConstraint.h; sourceTree = "<group>"; };
-		424F32881A60C28600395438 /* lua_PhysicsController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsController.cpp; sourceTree = "<group>"; };
-		424F32891A60C28600395438 /* lua_PhysicsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsController.h; sourceTree = "<group>"; };
-		424F328A1A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsControllerHitFilter.cpp; sourceTree = "<group>"; };
-		424F328B1A60C28600395438 /* lua_PhysicsControllerHitFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsControllerHitFilter.h; sourceTree = "<group>"; };
-		424F328C1A60C28600395438 /* lua_PhysicsControllerHitResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsControllerHitResult.cpp; sourceTree = "<group>"; };
-		424F328D1A60C28600395438 /* lua_PhysicsControllerHitResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsControllerHitResult.h; sourceTree = "<group>"; };
-		424F328E1A60C28600395438 /* lua_PhysicsControllerListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsControllerListener.cpp; sourceTree = "<group>"; };
-		424F328F1A60C28600395438 /* lua_PhysicsControllerListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsControllerListener.h; sourceTree = "<group>"; };
-		424F32901A60C28600395438 /* lua_PhysicsFixedConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsFixedConstraint.cpp; sourceTree = "<group>"; };
-		424F32911A60C28600395438 /* lua_PhysicsFixedConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsFixedConstraint.h; sourceTree = "<group>"; };
-		424F32921A60C28600395438 /* lua_PhysicsGenericConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsGenericConstraint.cpp; sourceTree = "<group>"; };
-		424F32931A60C28600395438 /* lua_PhysicsGenericConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsGenericConstraint.h; sourceTree = "<group>"; };
-		424F32941A60C28600395438 /* lua_PhysicsGhostObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsGhostObject.cpp; sourceTree = "<group>"; };
-		424F32951A60C28600395438 /* lua_PhysicsGhostObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsGhostObject.h; sourceTree = "<group>"; };
-		424F32961A60C28600395438 /* lua_PhysicsHingeConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsHingeConstraint.cpp; sourceTree = "<group>"; };
-		424F32971A60C28600395438 /* lua_PhysicsHingeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsHingeConstraint.h; sourceTree = "<group>"; };
-		424F32981A60C28600395438 /* lua_PhysicsRigidBody.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsRigidBody.cpp; sourceTree = "<group>"; };
-		424F32991A60C28600395438 /* lua_PhysicsRigidBody.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsRigidBody.h; sourceTree = "<group>"; };
-		424F329A1A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsRigidBodyParameters.cpp; sourceTree = "<group>"; };
-		424F329B1A60C28600395438 /* lua_PhysicsRigidBodyParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsRigidBodyParameters.h; sourceTree = "<group>"; };
-		424F329C1A60C28600395438 /* lua_PhysicsSocketConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsSocketConstraint.cpp; sourceTree = "<group>"; };
-		424F329D1A60C28600395438 /* lua_PhysicsSocketConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsSocketConstraint.h; sourceTree = "<group>"; };
-		424F329E1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsSpringConstraint.cpp; sourceTree = "<group>"; };
-		424F329F1A60C28600395438 /* lua_PhysicsSpringConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsSpringConstraint.h; sourceTree = "<group>"; };
-		424F32A01A60C28600395438 /* lua_PhysicsVehicle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsVehicle.cpp; sourceTree = "<group>"; };
-		424F32A11A60C28600395438 /* lua_PhysicsVehicle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsVehicle.h; sourceTree = "<group>"; };
-		424F32A21A60C28600395438 /* lua_PhysicsVehicleWheel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_PhysicsVehicleWheel.cpp; sourceTree = "<group>"; };
-		424F32A31A60C28600395438 /* lua_PhysicsVehicleWheel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_PhysicsVehicleWheel.h; sourceTree = "<group>"; };
-		424F32A41A60C28600395438 /* lua_Plane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Plane.cpp; sourceTree = "<group>"; };
-		424F32A51A60C28600395438 /* lua_Plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Plane.h; sourceTree = "<group>"; };
-		424F32A61A60C28600395438 /* lua_Platform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Platform.cpp; sourceTree = "<group>"; };
-		424F32A71A60C28600395438 /* lua_Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Platform.h; sourceTree = "<group>"; };
-		424F32A81A60C28600395438 /* lua_Properties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Properties.cpp; sourceTree = "<group>"; };
-		424F32A91A60C28600395438 /* lua_Properties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Properties.h; sourceTree = "<group>"; };
-		424F32AA1A60C28600395438 /* lua_Quaternion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Quaternion.cpp; sourceTree = "<group>"; };
-		424F32AB1A60C28600395438 /* lua_Quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Quaternion.h; sourceTree = "<group>"; };
-		424F32AC1A60C28600395438 /* lua_RadioButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_RadioButton.cpp; sourceTree = "<group>"; };
-		424F32AD1A60C28600395438 /* lua_RadioButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_RadioButton.h; sourceTree = "<group>"; };
-		424F32AE1A60C28600395438 /* lua_Ray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Ray.cpp; sourceTree = "<group>"; };
-		424F32AF1A60C28600395438 /* lua_Ray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Ray.h; sourceTree = "<group>"; };
-		424F32B01A60C28600395438 /* lua_Rectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Rectangle.cpp; sourceTree = "<group>"; };
-		424F32B11A60C28600395438 /* lua_Rectangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Rectangle.h; sourceTree = "<group>"; };
-		424F32B21A60C28600395438 /* lua_Ref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Ref.cpp; sourceTree = "<group>"; };
-		424F32B31A60C28600395438 /* lua_Ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Ref.h; sourceTree = "<group>"; };
-		424F32B41A60C28600395438 /* lua_RenderState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_RenderState.cpp; sourceTree = "<group>"; };
-		424F32B51A60C28600395438 /* lua_RenderState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_RenderState.h; sourceTree = "<group>"; };
-		424F32B61A60C28600395438 /* lua_RenderStateStateBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_RenderStateStateBlock.cpp; sourceTree = "<group>"; };
-		424F32B71A60C28600395438 /* lua_RenderStateStateBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_RenderStateStateBlock.h; sourceTree = "<group>"; };
-		424F32B81A60C28600395438 /* lua_RenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_RenderTarget.cpp; sourceTree = "<group>"; };
-		424F32B91A60C28600395438 /* lua_RenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_RenderTarget.h; sourceTree = "<group>"; };
-		424F32BA1A60C28600395438 /* lua_Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Scene.cpp; sourceTree = "<group>"; };
-		424F32BB1A60C28600395438 /* lua_Scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Scene.h; sourceTree = "<group>"; };
-		424F32BC1A60C28600395438 /* lua_ScreenDisplayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ScreenDisplayer.cpp; sourceTree = "<group>"; };
-		424F32BD1A60C28600395438 /* lua_ScreenDisplayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ScreenDisplayer.h; sourceTree = "<group>"; };
-		424F32BE1A60C28600395438 /* lua_Script.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Script.cpp; sourceTree = "<group>"; };
-		424F32BF1A60C28600395438 /* lua_Script.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Script.h; sourceTree = "<group>"; };
-		424F32C01A60C28600395438 /* lua_ScriptController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ScriptController.cpp; sourceTree = "<group>"; };
-		424F32C11A60C28600395438 /* lua_ScriptController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ScriptController.h; sourceTree = "<group>"; };
-		424F32C21A60C28600395438 /* lua_ScriptTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ScriptTarget.cpp; sourceTree = "<group>"; };
-		424F32C31A60C28600395438 /* lua_ScriptTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ScriptTarget.h; sourceTree = "<group>"; };
-		424F32C41A60C28600395438 /* lua_ScriptTargetEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ScriptTargetEvent.cpp; sourceTree = "<group>"; };
-		424F32C51A60C28600395438 /* lua_ScriptTargetEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ScriptTargetEvent.h; sourceTree = "<group>"; };
-		424F32C61A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ScriptTargetEventRegistry.cpp; sourceTree = "<group>"; };
-		424F32C71A60C28600395438 /* lua_ScriptTargetEventRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ScriptTargetEventRegistry.h; sourceTree = "<group>"; };
-		424F32C81A60C28600395438 /* lua_Slider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Slider.cpp; sourceTree = "<group>"; };
-		424F32C91A60C28600395438 /* lua_Slider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Slider.h; sourceTree = "<group>"; };
-		424F32CA1A60C28600395438 /* lua_Sprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Sprite.cpp; sourceTree = "<group>"; };
-		424F32CB1A60C28600395438 /* lua_Sprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Sprite.h; sourceTree = "<group>"; };
-		424F32CC1A60C28600395438 /* lua_SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_SpriteBatch.cpp; sourceTree = "<group>"; };
-		424F32CD1A60C28600395438 /* lua_SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_SpriteBatch.h; sourceTree = "<group>"; };
-		424F32CE1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_SpriteBatchSpriteVertex.cpp; sourceTree = "<group>"; };
-		424F32CF1A60C28600395438 /* lua_SpriteBatchSpriteVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_SpriteBatchSpriteVertex.h; sourceTree = "<group>"; };
-		424F32D01A60C28600395438 /* lua_Technique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Technique.cpp; sourceTree = "<group>"; };
-		424F32D11A60C28600395438 /* lua_Technique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Technique.h; sourceTree = "<group>"; };
-		424F32D21A60C28600395438 /* lua_Terrain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Terrain.cpp; sourceTree = "<group>"; };
-		424F32D31A60C28600395438 /* lua_Terrain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Terrain.h; sourceTree = "<group>"; };
-		424F32D41A60C28600395438 /* lua_TerrainPatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_TerrainPatch.cpp; sourceTree = "<group>"; };
-		424F32D51A60C28600395438 /* lua_TerrainPatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_TerrainPatch.h; sourceTree = "<group>"; };
-		424F32D61A60C28600395438 /* lua_Text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Text.cpp; sourceTree = "<group>"; };
-		424F32D71A60C28600395438 /* lua_Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Text.h; sourceTree = "<group>"; };
-		424F32D81A60C28600395438 /* lua_TextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_TextBox.cpp; sourceTree = "<group>"; };
-		424F32D91A60C28600395438 /* lua_TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_TextBox.h; sourceTree = "<group>"; };
-		424F32DA1A60C28600395438 /* lua_Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Texture.cpp; sourceTree = "<group>"; };
-		424F32DB1A60C28600395438 /* lua_Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Texture.h; sourceTree = "<group>"; };
-		424F32DC1A60C28600395438 /* lua_TextureSampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_TextureSampler.cpp; sourceTree = "<group>"; };
-		424F32DD1A60C28600395438 /* lua_TextureSampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_TextureSampler.h; sourceTree = "<group>"; };
-		424F32DE1A60C28600395438 /* lua_Theme.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Theme.cpp; sourceTree = "<group>"; };
-		424F32DF1A60C28600395438 /* lua_Theme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Theme.h; sourceTree = "<group>"; };
-		424F32E01A60C28600395438 /* lua_ThemeSideRegions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ThemeSideRegions.cpp; sourceTree = "<group>"; };
-		424F32E11A60C28600395438 /* lua_ThemeSideRegions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ThemeSideRegions.h; sourceTree = "<group>"; };
-		424F32E21A60C28600395438 /* lua_ThemeStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ThemeStyle.cpp; sourceTree = "<group>"; };
-		424F32E31A60C28600395438 /* lua_ThemeStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ThemeStyle.h; sourceTree = "<group>"; };
-		424F32E41A60C28600395438 /* lua_ThemeThemeImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ThemeThemeImage.cpp; sourceTree = "<group>"; };
-		424F32E51A60C28600395438 /* lua_ThemeThemeImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ThemeThemeImage.h; sourceTree = "<group>"; };
-		424F32E61A60C28600395438 /* lua_ThemeUVs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_ThemeUVs.cpp; sourceTree = "<group>"; };
-		424F32E71A60C28600395438 /* lua_ThemeUVs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_ThemeUVs.h; sourceTree = "<group>"; };
-		424F32E81A60C28600395438 /* lua_TileSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_TileSet.cpp; sourceTree = "<group>"; };
-		424F32E91A60C28600395438 /* lua_TileSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_TileSet.h; sourceTree = "<group>"; };
-		424F32EA1A60C28600395438 /* lua_Touch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Touch.cpp; sourceTree = "<group>"; };
-		424F32EB1A60C28600395438 /* lua_Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Touch.h; sourceTree = "<group>"; };
-		424F32EC1A60C28600395438 /* lua_Transform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Transform.cpp; sourceTree = "<group>"; };
-		424F32ED1A60C28600395438 /* lua_Transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Transform.h; sourceTree = "<group>"; };
-		424F32EE1A60C28600395438 /* lua_TransformListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_TransformListener.cpp; sourceTree = "<group>"; };
-		424F32EF1A60C28600395438 /* lua_TransformListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_TransformListener.h; sourceTree = "<group>"; };
-		424F32F01A60C28600395438 /* lua_Uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Uniform.cpp; sourceTree = "<group>"; };
-		424F32F11A60C28600395438 /* lua_Uniform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Uniform.h; sourceTree = "<group>"; };
-		424F32F21A60C28600395438 /* lua_Vector2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Vector2.cpp; sourceTree = "<group>"; };
-		424F32F31A60C28600395438 /* lua_Vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Vector2.h; sourceTree = "<group>"; };
-		424F32F41A60C28600395438 /* lua_Vector3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Vector3.cpp; sourceTree = "<group>"; };
-		424F32F51A60C28600395438 /* lua_Vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Vector3.h; sourceTree = "<group>"; };
-		424F32F61A60C28600395438 /* lua_Vector4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_Vector4.cpp; sourceTree = "<group>"; };
-		424F32F71A60C28600395438 /* lua_Vector4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_Vector4.h; sourceTree = "<group>"; };
-		424F32F81A60C28600395438 /* lua_VertexAttributeBinding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_VertexAttributeBinding.cpp; sourceTree = "<group>"; };
-		424F32F91A60C28600395438 /* lua_VertexAttributeBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_VertexAttributeBinding.h; sourceTree = "<group>"; };
-		424F32FA1A60C28600395438 /* lua_VertexFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_VertexFormat.cpp; sourceTree = "<group>"; };
-		424F32FB1A60C28600395438 /* lua_VertexFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_VertexFormat.h; sourceTree = "<group>"; };
-		424F32FC1A60C28600395438 /* lua_VertexFormatElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_VertexFormatElement.cpp; sourceTree = "<group>"; };
-		424F32FD1A60C28600395438 /* lua_VertexFormatElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_VertexFormatElement.h; sourceTree = "<group>"; };
-		424F32FE1A60C28600395438 /* lua_VerticalLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua_VerticalLayout.cpp; sourceTree = "<group>"; };
-		424F32FF1A60C28600395438 /* lua_VerticalLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua_VerticalLayout.h; sourceTree = "<group>"; };
-		426F8315187F72A700640CBA /* JoystickControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JoystickControl.cpp; path = src/JoystickControl.cpp; sourceTree = SOURCE_ROOT; };
-		426F8316187F72A700640CBA /* JoystickControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JoystickControl.h; path = src/JoystickControl.h; sourceTree = SOURCE_ROOT; };
-		42CC52F71809A4EB00AAD8AD /* AbsoluteLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AbsoluteLayout.cpp; path = src/AbsoluteLayout.cpp; sourceTree = SOURCE_ROOT; };
-		42CC52F81809A4EB00AAD8AD /* AbsoluteLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AbsoluteLayout.h; path = src/AbsoluteLayout.h; sourceTree = SOURCE_ROOT; };
-		42CC52F91809A4EB00AAD8AD /* AIAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AIAgent.cpp; path = src/AIAgent.cpp; sourceTree = SOURCE_ROOT; };
-		42CC52FA1809A4EB00AAD8AD /* AIAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIAgent.h; path = src/AIAgent.h; sourceTree = SOURCE_ROOT; };
-		42CC52FB1809A4EB00AAD8AD /* AIController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AIController.cpp; path = src/AIController.cpp; sourceTree = SOURCE_ROOT; };
-		42CC52FC1809A4EB00AAD8AD /* AIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIController.h; path = src/AIController.h; sourceTree = SOURCE_ROOT; };
-		42CC52FD1809A4EB00AAD8AD /* AIMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AIMessage.cpp; path = src/AIMessage.cpp; sourceTree = SOURCE_ROOT; };
-		42CC52FE1809A4EB00AAD8AD /* AIMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIMessage.h; path = src/AIMessage.h; sourceTree = SOURCE_ROOT; };
-		42CC52FF1809A4EB00AAD8AD /* AIState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AIState.cpp; path = src/AIState.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53001809A4EB00AAD8AD /* AIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIState.h; path = src/AIState.h; sourceTree = SOURCE_ROOT; };
-		42CC53011809A4EB00AAD8AD /* AIStateMachine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AIStateMachine.cpp; path = src/AIStateMachine.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53021809A4EB00AAD8AD /* AIStateMachine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIStateMachine.h; path = src/AIStateMachine.h; sourceTree = SOURCE_ROOT; };
-		42CC53031809A4EB00AAD8AD /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Animation.cpp; path = src/Animation.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53041809A4EB00AAD8AD /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = src/Animation.h; sourceTree = SOURCE_ROOT; };
-		42CC53051809A4EB00AAD8AD /* AnimationClip.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationClip.cpp; path = src/AnimationClip.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53061809A4EB00AAD8AD /* AnimationClip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationClip.h; path = src/AnimationClip.h; sourceTree = SOURCE_ROOT; };
-		42CC53071809A4EB00AAD8AD /* AnimationController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationController.cpp; path = src/AnimationController.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53081809A4EB00AAD8AD /* AnimationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationController.h; path = src/AnimationController.h; sourceTree = SOURCE_ROOT; };
-		42CC53091809A4EB00AAD8AD /* AnimationTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationTarget.cpp; path = src/AnimationTarget.cpp; sourceTree = SOURCE_ROOT; };
-		42CC530A1809A4EB00AAD8AD /* AnimationTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationTarget.h; path = src/AnimationTarget.h; sourceTree = SOURCE_ROOT; };
-		42CC530B1809A4EB00AAD8AD /* AnimationValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationValue.cpp; path = src/AnimationValue.cpp; sourceTree = SOURCE_ROOT; };
-		42CC530C1809A4EB00AAD8AD /* AnimationValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationValue.h; path = src/AnimationValue.h; sourceTree = SOURCE_ROOT; };
-		42CC530D1809A4EB00AAD8AD /* AudioBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioBuffer.cpp; path = src/AudioBuffer.cpp; sourceTree = SOURCE_ROOT; };
-		42CC530E1809A4EB00AAD8AD /* AudioBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioBuffer.h; path = src/AudioBuffer.h; sourceTree = SOURCE_ROOT; };
-		42CC530F1809A4EB00AAD8AD /* AudioController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioController.cpp; path = src/AudioController.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53101809A4EB00AAD8AD /* AudioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioController.h; path = src/AudioController.h; sourceTree = SOURCE_ROOT; };
-		42CC53111809A4EB00AAD8AD /* AudioListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioListener.cpp; path = src/AudioListener.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53121809A4EB00AAD8AD /* AudioListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioListener.h; path = src/AudioListener.h; sourceTree = SOURCE_ROOT; };
-		42CC53131809A4EB00AAD8AD /* AudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioSource.cpp; path = src/AudioSource.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53141809A4EB00AAD8AD /* AudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioSource.h; path = src/AudioSource.h; sourceTree = SOURCE_ROOT; };
-		42CC53151809A4EB00AAD8AD /* Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Base.h; path = src/Base.h; sourceTree = SOURCE_ROOT; };
-		42CC53161809A4EB00AAD8AD /* BoundingBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BoundingBox.cpp; path = src/BoundingBox.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53171809A4EB00AAD8AD /* BoundingBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBox.h; path = src/BoundingBox.h; sourceTree = SOURCE_ROOT; };
-		42CC53181809A4EB00AAD8AD /* BoundingBox.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = BoundingBox.inl; path = src/BoundingBox.inl; sourceTree = SOURCE_ROOT; };
-		42CC53191809A4EB00AAD8AD /* BoundingSphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BoundingSphere.cpp; path = src/BoundingSphere.cpp; sourceTree = SOURCE_ROOT; };
-		42CC531A1809A4EB00AAD8AD /* BoundingSphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingSphere.h; path = src/BoundingSphere.h; sourceTree = SOURCE_ROOT; };
-		42CC531B1809A4EB00AAD8AD /* BoundingSphere.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = BoundingSphere.inl; path = src/BoundingSphere.inl; sourceTree = SOURCE_ROOT; };
-		42CC531C1809A4EB00AAD8AD /* Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Bundle.cpp; path = src/Bundle.cpp; sourceTree = SOURCE_ROOT; };
-		42CC531D1809A4EB00AAD8AD /* Bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bundle.h; path = src/Bundle.h; sourceTree = SOURCE_ROOT; };
-		42CC531E1809A4EB00AAD8AD /* Button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Button.cpp; path = src/Button.cpp; sourceTree = SOURCE_ROOT; };
-		42CC531F1809A4EB00AAD8AD /* Button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Button.h; path = src/Button.h; sourceTree = SOURCE_ROOT; };
-		42CC53201809A4EB00AAD8AD /* Camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Camera.cpp; path = src/Camera.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53211809A4EB00AAD8AD /* Camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Camera.h; path = src/Camera.h; sourceTree = SOURCE_ROOT; };
-		42CC53221809A4EB00AAD8AD /* CheckBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CheckBox.cpp; path = src/CheckBox.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53231809A4EB00AAD8AD /* CheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CheckBox.h; path = src/CheckBox.h; sourceTree = SOURCE_ROOT; };
-		42CC53241809A4EB00AAD8AD /* Container.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Container.cpp; path = src/Container.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53251809A4EB00AAD8AD /* Container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Container.h; path = src/Container.h; sourceTree = SOURCE_ROOT; };
-		42CC53261809A4EB00AAD8AD /* Control.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Control.cpp; path = src/Control.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53271809A4EB00AAD8AD /* Control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Control.h; path = src/Control.h; sourceTree = SOURCE_ROOT; };
-		42CC53281809A4EB00AAD8AD /* Curve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Curve.cpp; path = src/Curve.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53291809A4EB00AAD8AD /* Curve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Curve.h; path = src/Curve.h; sourceTree = SOURCE_ROOT; };
-		42CC532A1809A4EB00AAD8AD /* DebugNew.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DebugNew.cpp; path = src/DebugNew.cpp; sourceTree = SOURCE_ROOT; };
-		42CC532B1809A4EB00AAD8AD /* DebugNew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DebugNew.h; path = src/DebugNew.h; sourceTree = SOURCE_ROOT; };
-		42CC532C1809A4EB00AAD8AD /* DepthStencilTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DepthStencilTarget.cpp; path = src/DepthStencilTarget.cpp; sourceTree = SOURCE_ROOT; };
-		42CC532D1809A4EB00AAD8AD /* DepthStencilTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DepthStencilTarget.h; path = src/DepthStencilTarget.h; sourceTree = SOURCE_ROOT; };
-		42CC532E1809A4EB00AAD8AD /* Effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Effect.cpp; path = src/Effect.cpp; sourceTree = SOURCE_ROOT; };
-		42CC532F1809A4EB00AAD8AD /* Effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Effect.h; path = src/Effect.h; sourceTree = SOURCE_ROOT; };
-		42CC53301809A4EB00AAD8AD /* FileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileSystem.cpp; path = src/FileSystem.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53311809A4EB00AAD8AD /* FileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileSystem.h; path = src/FileSystem.h; sourceTree = SOURCE_ROOT; };
-		42CC53321809A4EB00AAD8AD /* FlowLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FlowLayout.cpp; path = src/FlowLayout.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53331809A4EB00AAD8AD /* FlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FlowLayout.h; path = src/FlowLayout.h; sourceTree = SOURCE_ROOT; };
-		42CC53341809A4EB00AAD8AD /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Font.cpp; path = src/Font.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53351809A4EB00AAD8AD /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Font.h; path = src/Font.h; sourceTree = SOURCE_ROOT; };
-		42CC53361809A4EB00AAD8AD /* Form.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Form.cpp; path = src/Form.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53371809A4EB00AAD8AD /* Form.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Form.h; path = src/Form.h; sourceTree = SOURCE_ROOT; };
-		42CC53381809A4EB00AAD8AD /* FrameBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FrameBuffer.cpp; path = src/FrameBuffer.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53391809A4EB00AAD8AD /* FrameBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FrameBuffer.h; path = src/FrameBuffer.h; sourceTree = SOURCE_ROOT; };
-		42CC533A1809A4EB00AAD8AD /* Frustum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Frustum.cpp; path = src/Frustum.cpp; sourceTree = SOURCE_ROOT; };
-		42CC533B1809A4EB00AAD8AD /* Frustum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Frustum.h; path = src/Frustum.h; sourceTree = SOURCE_ROOT; };
-		42CC533C1809A4EB00AAD8AD /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = src/Game.cpp; sourceTree = SOURCE_ROOT; };
-		42CC533D1809A4EB00AAD8AD /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Game.h; path = src/Game.h; sourceTree = SOURCE_ROOT; };
-		42CC533E1809A4EB00AAD8AD /* Game.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Game.inl; path = src/Game.inl; sourceTree = SOURCE_ROOT; };
-		42CC533F1809A4EB00AAD8AD /* Gamepad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Gamepad.cpp; path = src/Gamepad.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53401809A4EB00AAD8AD /* Gamepad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Gamepad.h; path = src/Gamepad.h; sourceTree = SOURCE_ROOT; };
-		42CC53411809A4EB00AAD8AD /* gameplay-main-android.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gameplay-main-android.cpp"; path = "src/gameplay-main-android.cpp"; sourceTree = SOURCE_ROOT; };
-		42CC53431809A4EB00AAD8AD /* gameplay-main-ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "gameplay-main-ios.mm"; path = "src/gameplay-main-ios.mm"; sourceTree = SOURCE_ROOT; };
-		42CC53441809A4EB00AAD8AD /* gameplay-main-linux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gameplay-main-linux.cpp"; path = "src/gameplay-main-linux.cpp"; sourceTree = SOURCE_ROOT; };
-		42CC53451809A4EB00AAD8AD /* gameplay-main-macosx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "gameplay-main-macosx.mm"; path = "src/gameplay-main-macosx.mm"; sourceTree = SOURCE_ROOT; };
-		42CC53461809A4EB00AAD8AD /* gameplay-main-windows.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gameplay-main-windows.cpp"; path = "src/gameplay-main-windows.cpp"; sourceTree = SOURCE_ROOT; };
-		42CC53471809A4EB00AAD8AD /* gameplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gameplay.h; path = src/gameplay.h; sourceTree = SOURCE_ROOT; };
-		42CC53481809A4EB00AAD8AD /* Gesture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Gesture.h; path = src/Gesture.h; sourceTree = SOURCE_ROOT; };
-		42CC53491809A4EB00AAD8AD /* HeightField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HeightField.cpp; path = src/HeightField.cpp; sourceTree = SOURCE_ROOT; };
-		42CC534A1809A4EB00AAD8AD /* HeightField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HeightField.h; path = src/HeightField.h; sourceTree = SOURCE_ROOT; };
-		42CC534B1809A4EB00AAD8AD /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Image.cpp; path = src/Image.cpp; sourceTree = SOURCE_ROOT; };
-		42CC534C1809A4EB00AAD8AD /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Image.h; path = src/Image.h; sourceTree = SOURCE_ROOT; };
-		42CC534D1809A4EC00AAD8AD /* Image.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Image.inl; path = src/Image.inl; sourceTree = SOURCE_ROOT; };
-		42CC534E1809A4EC00AAD8AD /* ImageControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ImageControl.cpp; path = src/ImageControl.cpp; sourceTree = SOURCE_ROOT; };
-		42CC534F1809A4EC00AAD8AD /* ImageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageControl.h; path = src/ImageControl.h; sourceTree = SOURCE_ROOT; };
-		42CC53501809A4EC00AAD8AD /* Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Joint.cpp; path = src/Joint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53511809A4EC00AAD8AD /* Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Joint.h; path = src/Joint.h; sourceTree = SOURCE_ROOT; };
-		42CC53551809A4EC00AAD8AD /* Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Keyboard.h; path = src/Keyboard.h; sourceTree = SOURCE_ROOT; };
-		42CC53561809A4EC00AAD8AD /* Label.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Label.cpp; path = src/Label.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53571809A4EC00AAD8AD /* Label.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Label.h; path = src/Label.h; sourceTree = SOURCE_ROOT; };
-		42CC53581809A4EC00AAD8AD /* Layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Layout.cpp; path = src/Layout.cpp; sourceTree = SOURCE_ROOT; };
-		42CC53591809A4EC00AAD8AD /* Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Layout.h; path = src/Layout.h; sourceTree = SOURCE_ROOT; };
-		42CC535A1809A4EC00AAD8AD /* Light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Light.cpp; path = src/Light.cpp; sourceTree = SOURCE_ROOT; };
-		42CC535B1809A4EC00AAD8AD /* Light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Light.h; path = src/Light.h; sourceTree = SOURCE_ROOT; };
-		42CC535C1809A4EC00AAD8AD /* Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Logger.cpp; path = src/Logger.cpp; sourceTree = SOURCE_ROOT; };
-		42CC535D1809A4EC00AAD8AD /* Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logger.h; path = src/Logger.h; sourceTree = SOURCE_ROOT; };
-		42CC54C71809A4ED00AAD8AD /* Material.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Material.cpp; path = src/Material.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54C81809A4ED00AAD8AD /* Material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Material.h; path = src/Material.h; sourceTree = SOURCE_ROOT; };
-		42CC54C91809A4ED00AAD8AD /* MaterialParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaterialParameter.cpp; path = src/MaterialParameter.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54CA1809A4ED00AAD8AD /* MaterialParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MaterialParameter.h; path = src/MaterialParameter.h; sourceTree = SOURCE_ROOT; };
-		42CC54CB1809A4ED00AAD8AD /* MathUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MathUtil.cpp; path = src/MathUtil.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54CC1809A4ED00AAD8AD /* MathUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MathUtil.h; path = src/MathUtil.h; sourceTree = SOURCE_ROOT; };
-		42CC54CD1809A4ED00AAD8AD /* MathUtil.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MathUtil.inl; path = src/MathUtil.inl; sourceTree = SOURCE_ROOT; };
-		42CC54CE1809A4ED00AAD8AD /* MathUtilNeon.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MathUtilNeon.inl; path = src/MathUtilNeon.inl; sourceTree = SOURCE_ROOT; };
-		42CC54CF1809A4ED00AAD8AD /* Matrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Matrix.cpp; path = src/Matrix.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54D01809A4ED00AAD8AD /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = src/Matrix.h; sourceTree = SOURCE_ROOT; };
-		42CC54D11809A4ED00AAD8AD /* Matrix.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Matrix.inl; path = src/Matrix.inl; sourceTree = SOURCE_ROOT; };
-		42CC54D21809A4ED00AAD8AD /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Mesh.cpp; path = src/Mesh.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54D31809A4ED00AAD8AD /* Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mesh.h; path = src/Mesh.h; sourceTree = SOURCE_ROOT; };
-		42CC54D41809A4ED00AAD8AD /* MeshBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshBatch.cpp; path = src/MeshBatch.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54D51809A4ED00AAD8AD /* MeshBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshBatch.h; path = src/MeshBatch.h; sourceTree = SOURCE_ROOT; };
-		42CC54D61809A4ED00AAD8AD /* MeshBatch.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MeshBatch.inl; path = src/MeshBatch.inl; sourceTree = SOURCE_ROOT; };
-		42CC54D71809A4ED00AAD8AD /* MeshPart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshPart.cpp; path = src/MeshPart.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54D81809A4ED00AAD8AD /* MeshPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshPart.h; path = src/MeshPart.h; sourceTree = SOURCE_ROOT; };
-		42CC54D91809A4ED00AAD8AD /* MeshSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshSkin.cpp; path = src/MeshSkin.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54DA1809A4ED00AAD8AD /* MeshSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshSkin.h; path = src/MeshSkin.h; sourceTree = SOURCE_ROOT; };
-		42CC54DB1809A4ED00AAD8AD /* Model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Model.cpp; path = src/Model.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54DC1809A4ED00AAD8AD /* Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Model.h; path = src/Model.h; sourceTree = SOURCE_ROOT; };
-		42CC54DD1809A4ED00AAD8AD /* Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mouse.h; path = src/Mouse.h; sourceTree = SOURCE_ROOT; };
-		42CC54DE1809A4ED00AAD8AD /* Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Node.cpp; path = src/Node.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54DF1809A4ED00AAD8AD /* Node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Node.h; path = src/Node.h; sourceTree = SOURCE_ROOT; };
-		42CC54E01809A4ED00AAD8AD /* ParticleEmitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ParticleEmitter.cpp; path = src/ParticleEmitter.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54E11809A4ED00AAD8AD /* ParticleEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ParticleEmitter.h; path = src/ParticleEmitter.h; sourceTree = SOURCE_ROOT; };
-		42CC54E21809A4ED00AAD8AD /* Pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Pass.cpp; path = src/Pass.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54E31809A4ED00AAD8AD /* Pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Pass.h; path = src/Pass.h; sourceTree = SOURCE_ROOT; };
-		42CC54E41809A4ED00AAD8AD /* PhysicsCharacter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsCharacter.cpp; path = src/PhysicsCharacter.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54E51809A4ED00AAD8AD /* PhysicsCharacter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsCharacter.h; path = src/PhysicsCharacter.h; sourceTree = SOURCE_ROOT; };
-		42CC54E61809A4ED00AAD8AD /* PhysicsCollisionObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsCollisionObject.cpp; path = src/PhysicsCollisionObject.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54E71809A4ED00AAD8AD /* PhysicsCollisionObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsCollisionObject.h; path = src/PhysicsCollisionObject.h; sourceTree = SOURCE_ROOT; };
-		42CC54E81809A4ED00AAD8AD /* PhysicsCollisionShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsCollisionShape.cpp; path = src/PhysicsCollisionShape.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54E91809A4ED00AAD8AD /* PhysicsCollisionShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsCollisionShape.h; path = src/PhysicsCollisionShape.h; sourceTree = SOURCE_ROOT; };
-		42CC54EA1809A4ED00AAD8AD /* PhysicsConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsConstraint.cpp; path = src/PhysicsConstraint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54EB1809A4ED00AAD8AD /* PhysicsConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsConstraint.h; path = src/PhysicsConstraint.h; sourceTree = SOURCE_ROOT; };
-		42CC54EC1809A4ED00AAD8AD /* PhysicsConstraint.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PhysicsConstraint.inl; path = src/PhysicsConstraint.inl; sourceTree = SOURCE_ROOT; };
-		42CC54ED1809A4ED00AAD8AD /* PhysicsController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsController.cpp; path = src/PhysicsController.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54EE1809A4ED00AAD8AD /* PhysicsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsController.h; path = src/PhysicsController.h; sourceTree = SOURCE_ROOT; };
-		42CC54EF1809A4ED00AAD8AD /* PhysicsFixedConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsFixedConstraint.cpp; path = src/PhysicsFixedConstraint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54F01809A4ED00AAD8AD /* PhysicsFixedConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsFixedConstraint.h; path = src/PhysicsFixedConstraint.h; sourceTree = SOURCE_ROOT; };
-		42CC54F11809A4ED00AAD8AD /* PhysicsFixedConstraint.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PhysicsFixedConstraint.inl; path = src/PhysicsFixedConstraint.inl; sourceTree = SOURCE_ROOT; };
-		42CC54F21809A4ED00AAD8AD /* PhysicsGenericConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsGenericConstraint.cpp; path = src/PhysicsGenericConstraint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54F31809A4ED00AAD8AD /* PhysicsGenericConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsGenericConstraint.h; path = src/PhysicsGenericConstraint.h; sourceTree = SOURCE_ROOT; };
-		42CC54F41809A4ED00AAD8AD /* PhysicsGenericConstraint.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PhysicsGenericConstraint.inl; path = src/PhysicsGenericConstraint.inl; sourceTree = SOURCE_ROOT; };
-		42CC54F51809A4ED00AAD8AD /* PhysicsGhostObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsGhostObject.cpp; path = src/PhysicsGhostObject.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54F61809A4ED00AAD8AD /* PhysicsGhostObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsGhostObject.h; path = src/PhysicsGhostObject.h; sourceTree = SOURCE_ROOT; };
-		42CC54F71809A4ED00AAD8AD /* PhysicsHingeConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsHingeConstraint.cpp; path = src/PhysicsHingeConstraint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54F81809A4ED00AAD8AD /* PhysicsHingeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsHingeConstraint.h; path = src/PhysicsHingeConstraint.h; sourceTree = SOURCE_ROOT; };
-		42CC54F91809A4ED00AAD8AD /* PhysicsRigidBody.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsRigidBody.cpp; path = src/PhysicsRigidBody.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54FA1809A4ED00AAD8AD /* PhysicsRigidBody.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsRigidBody.h; path = src/PhysicsRigidBody.h; sourceTree = SOURCE_ROOT; };
-		42CC54FB1809A4ED00AAD8AD /* PhysicsRigidBody.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PhysicsRigidBody.inl; path = src/PhysicsRigidBody.inl; sourceTree = SOURCE_ROOT; };
-		42CC54FC1809A4ED00AAD8AD /* PhysicsSocketConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsSocketConstraint.cpp; path = src/PhysicsSocketConstraint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54FD1809A4ED00AAD8AD /* PhysicsSocketConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsSocketConstraint.h; path = src/PhysicsSocketConstraint.h; sourceTree = SOURCE_ROOT; };
-		42CC54FE1809A4ED00AAD8AD /* PhysicsSpringConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsSpringConstraint.cpp; path = src/PhysicsSpringConstraint.cpp; sourceTree = SOURCE_ROOT; };
-		42CC54FF1809A4ED00AAD8AD /* PhysicsSpringConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsSpringConstraint.h; path = src/PhysicsSpringConstraint.h; sourceTree = SOURCE_ROOT; };
-		42CC55001809A4ED00AAD8AD /* PhysicsSpringConstraint.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PhysicsSpringConstraint.inl; path = src/PhysicsSpringConstraint.inl; sourceTree = SOURCE_ROOT; };
-		42CC55011809A4ED00AAD8AD /* PhysicsVehicle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsVehicle.cpp; path = src/PhysicsVehicle.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55021809A4ED00AAD8AD /* PhysicsVehicle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsVehicle.h; path = src/PhysicsVehicle.h; sourceTree = SOURCE_ROOT; };
-		42CC55031809A4ED00AAD8AD /* PhysicsVehicleWheel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PhysicsVehicleWheel.cpp; path = src/PhysicsVehicleWheel.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55041809A4ED00AAD8AD /* PhysicsVehicleWheel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhysicsVehicleWheel.h; path = src/PhysicsVehicleWheel.h; sourceTree = SOURCE_ROOT; };
-		42CC55051809A4ED00AAD8AD /* Plane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Plane.cpp; path = src/Plane.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55061809A4ED00AAD8AD /* Plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Plane.h; path = src/Plane.h; sourceTree = SOURCE_ROOT; };
-		42CC55071809A4ED00AAD8AD /* Plane.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Plane.inl; path = src/Plane.inl; sourceTree = SOURCE_ROOT; };
-		42CC55081809A4ED00AAD8AD /* Platform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Platform.cpp; path = src/Platform.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55091809A4ED00AAD8AD /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Platform.h; path = src/Platform.h; sourceTree = SOURCE_ROOT; };
-		42CC550A1809A4ED00AAD8AD /* PlatformAndroid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformAndroid.cpp; path = src/PlatformAndroid.cpp; sourceTree = SOURCE_ROOT; };
-		42CC550C1809A4ED00AAD8AD /* PlatformiOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PlatformiOS.mm; path = src/PlatformiOS.mm; sourceTree = SOURCE_ROOT; };
-		42CC550D1809A4ED00AAD8AD /* PlatformLinux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformLinux.cpp; path = src/PlatformLinux.cpp; sourceTree = SOURCE_ROOT; };
-		42CC550E1809A4ED00AAD8AD /* PlatformMacOSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PlatformMacOSX.mm; path = src/PlatformMacOSX.mm; sourceTree = SOURCE_ROOT; };
-		42CC550F1809A4EE00AAD8AD /* PlatformWindows.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformWindows.cpp; path = src/PlatformWindows.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55101809A4EE00AAD8AD /* Properties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Properties.cpp; path = src/Properties.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55111809A4EE00AAD8AD /* Properties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Properties.h; path = src/Properties.h; sourceTree = SOURCE_ROOT; };
-		42CC55121809A4EE00AAD8AD /* Quaternion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Quaternion.cpp; path = src/Quaternion.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55131809A4EE00AAD8AD /* Quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Quaternion.h; path = src/Quaternion.h; sourceTree = SOURCE_ROOT; };
-		42CC55141809A4EE00AAD8AD /* Quaternion.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Quaternion.inl; path = src/Quaternion.inl; sourceTree = SOURCE_ROOT; };
-		42CC55151809A4EE00AAD8AD /* RadioButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RadioButton.cpp; path = src/RadioButton.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55161809A4EE00AAD8AD /* RadioButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RadioButton.h; path = src/RadioButton.h; sourceTree = SOURCE_ROOT; };
-		42CC55171809A4EE00AAD8AD /* Ray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Ray.cpp; path = src/Ray.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55181809A4EE00AAD8AD /* Ray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Ray.h; path = src/Ray.h; sourceTree = SOURCE_ROOT; };
-		42CC55191809A4EE00AAD8AD /* Ray.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Ray.inl; path = src/Ray.inl; sourceTree = SOURCE_ROOT; };
-		42CC551A1809A4EE00AAD8AD /* Rectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Rectangle.cpp; path = src/Rectangle.cpp; sourceTree = SOURCE_ROOT; };
-		42CC551B1809A4EE00AAD8AD /* Rectangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Rectangle.h; path = src/Rectangle.h; sourceTree = SOURCE_ROOT; };
-		42CC551C1809A4EE00AAD8AD /* Ref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Ref.cpp; path = src/Ref.cpp; sourceTree = SOURCE_ROOT; };
-		42CC551D1809A4EE00AAD8AD /* Ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Ref.h; path = src/Ref.h; sourceTree = SOURCE_ROOT; };
-		42CC551E1809A4EE00AAD8AD /* RenderState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderState.cpp; path = src/RenderState.cpp; sourceTree = SOURCE_ROOT; };
-		42CC551F1809A4EE00AAD8AD /* RenderState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderState.h; path = src/RenderState.h; sourceTree = SOURCE_ROOT; };
-		42CC55201809A4EE00AAD8AD /* RenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderTarget.cpp; path = src/RenderTarget.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55211809A4EE00AAD8AD /* RenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderTarget.h; path = src/RenderTarget.h; sourceTree = SOURCE_ROOT; };
-		42CC55221809A4EE00AAD8AD /* Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scene.cpp; path = src/Scene.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55231809A4EE00AAD8AD /* Scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scene.h; path = src/Scene.h; sourceTree = SOURCE_ROOT; };
-		42CC55241809A4EE00AAD8AD /* SceneLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SceneLoader.cpp; path = src/SceneLoader.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55251809A4EE00AAD8AD /* SceneLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SceneLoader.h; path = src/SceneLoader.h; sourceTree = SOURCE_ROOT; };
-		42CC552A1809A4EE00AAD8AD /* ScreenDisplayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenDisplayer.cpp; path = src/ScreenDisplayer.cpp; sourceTree = SOURCE_ROOT; };
-		42CC552B1809A4EE00AAD8AD /* ScreenDisplayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenDisplayer.h; path = src/ScreenDisplayer.h; sourceTree = SOURCE_ROOT; };
-		42CC552C1809A4EE00AAD8AD /* ScriptController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScriptController.cpp; path = src/ScriptController.cpp; sourceTree = SOURCE_ROOT; };
-		42CC552D1809A4EE00AAD8AD /* ScriptController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScriptController.h; path = src/ScriptController.h; sourceTree = SOURCE_ROOT; };
-		42CC552E1809A4EE00AAD8AD /* ScriptController.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = ScriptController.inl; path = src/ScriptController.inl; sourceTree = SOURCE_ROOT; };
-		42CC552F1809A4EE00AAD8AD /* ScriptTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScriptTarget.cpp; path = src/ScriptTarget.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55301809A4EE00AAD8AD /* ScriptTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScriptTarget.h; path = src/ScriptTarget.h; sourceTree = SOURCE_ROOT; };
-		42CC55311809A4EE00AAD8AD /* Slider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cpp; path = src/Slider.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55321809A4EE00AAD8AD /* Slider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slider.h; path = src/Slider.h; sourceTree = SOURCE_ROOT; };
-		42CC55451809A4EE00AAD8AD /* SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SpriteBatch.cpp; path = src/SpriteBatch.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55461809A4EE00AAD8AD /* SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpriteBatch.h; path = src/SpriteBatch.h; sourceTree = SOURCE_ROOT; };
-		42CC55471809A4EE00AAD8AD /* Stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Stream.h; path = src/Stream.h; sourceTree = SOURCE_ROOT; };
-		42CC55481809A4EE00AAD8AD /* Technique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Technique.cpp; path = src/Technique.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55491809A4EE00AAD8AD /* Technique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Technique.h; path = src/Technique.h; sourceTree = SOURCE_ROOT; };
-		42CC554A1809A4EE00AAD8AD /* Terrain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Terrain.cpp; path = src/Terrain.cpp; sourceTree = SOURCE_ROOT; };
-		42CC554B1809A4EE00AAD8AD /* Terrain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Terrain.h; path = src/Terrain.h; sourceTree = SOURCE_ROOT; };
-		42CC554C1809A4EE00AAD8AD /* TerrainPatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TerrainPatch.cpp; path = src/TerrainPatch.cpp; sourceTree = SOURCE_ROOT; };
-		42CC554D1809A4EE00AAD8AD /* TerrainPatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TerrainPatch.h; path = src/TerrainPatch.h; sourceTree = SOURCE_ROOT; };
-		42CC554E1809A4EE00AAD8AD /* TextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextBox.cpp; path = src/TextBox.cpp; sourceTree = SOURCE_ROOT; };
-		42CC554F1809A4EE00AAD8AD /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextBox.h; path = src/TextBox.h; sourceTree = SOURCE_ROOT; };
-		42CC55501809A4EE00AAD8AD /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Texture.cpp; path = src/Texture.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55511809A4EE00AAD8AD /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Texture.h; path = src/Texture.h; sourceTree = SOURCE_ROOT; };
-		42CC55521809A4EE00AAD8AD /* Theme.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Theme.cpp; path = src/Theme.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55531809A4EE00AAD8AD /* Theme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Theme.h; path = src/Theme.h; sourceTree = SOURCE_ROOT; };
-		42CC55541809A4EE00AAD8AD /* ThemeStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThemeStyle.cpp; path = src/ThemeStyle.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55551809A4EE00AAD8AD /* ThemeStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThemeStyle.h; path = src/ThemeStyle.h; sourceTree = SOURCE_ROOT; };
-		42CC55561809A4EE00AAD8AD /* TimeListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimeListener.h; path = src/TimeListener.h; sourceTree = SOURCE_ROOT; };
-		42CC55571809A4EE00AAD8AD /* Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Touch.h; path = src/Touch.h; sourceTree = SOURCE_ROOT; };
-		42CC55581809A4EE00AAD8AD /* Transform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Transform.cpp; path = src/Transform.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55591809A4EE00AAD8AD /* Transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Transform.h; path = src/Transform.h; sourceTree = SOURCE_ROOT; };
-		42CC555A1809A4EE00AAD8AD /* Vector2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector2.cpp; path = src/Vector2.cpp; sourceTree = SOURCE_ROOT; };
-		42CC555B1809A4EE00AAD8AD /* Vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector2.h; path = src/Vector2.h; sourceTree = SOURCE_ROOT; };
-		42CC555C1809A4EE00AAD8AD /* Vector2.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Vector2.inl; path = src/Vector2.inl; sourceTree = SOURCE_ROOT; };
-		42CC555D1809A4EE00AAD8AD /* Vector3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector3.cpp; path = src/Vector3.cpp; sourceTree = SOURCE_ROOT; };
-		42CC555E1809A4EE00AAD8AD /* Vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector3.h; path = src/Vector3.h; sourceTree = SOURCE_ROOT; };
-		42CC555F1809A4EE00AAD8AD /* Vector3.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Vector3.inl; path = src/Vector3.inl; sourceTree = SOURCE_ROOT; };
-		42CC55601809A4EE00AAD8AD /* Vector4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector4.cpp; path = src/Vector4.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55611809A4EE00AAD8AD /* Vector4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector4.h; path = src/Vector4.h; sourceTree = SOURCE_ROOT; };
-		42CC55621809A4EE00AAD8AD /* Vector4.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Vector4.inl; path = src/Vector4.inl; sourceTree = SOURCE_ROOT; };
-		42CC55631809A4EE00AAD8AD /* VertexAttributeBinding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VertexAttributeBinding.cpp; path = src/VertexAttributeBinding.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55641809A4EE00AAD8AD /* VertexAttributeBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexAttributeBinding.h; path = src/VertexAttributeBinding.h; sourceTree = SOURCE_ROOT; };
-		42CC55651809A4EE00AAD8AD /* VertexFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VertexFormat.cpp; path = src/VertexFormat.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55661809A4EE00AAD8AD /* VertexFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexFormat.h; path = src/VertexFormat.h; sourceTree = SOURCE_ROOT; };
-		42CC55671809A4EE00AAD8AD /* VerticalLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VerticalLayout.cpp; path = src/VerticalLayout.cpp; sourceTree = SOURCE_ROOT; };
-		42CC55681809A4EE00AAD8AD /* VerticalLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VerticalLayout.h; path = src/VerticalLayout.h; sourceTree = SOURCE_ROOT; };
-		42D929991A6051EC0073258D /* Drawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Drawable.cpp; path = src/Drawable.cpp; sourceTree = SOURCE_ROOT; };
-		42D9299A1A6051EC0073258D /* Drawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Drawable.h; path = src/Drawable.h; sourceTree = SOURCE_ROOT; };
-		42ECC3F81A4EF5A00036C839 /* Text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Text.cpp; path = src/Text.cpp; sourceTree = SOURCE_ROOT; };
-		42ECC3F91A4EF5A00036C839 /* Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Text.h; path = src/Text.h; sourceTree = SOURCE_ROOT; };
-		5B04C5CA14BFCFE100EB0071 /* libgameplay.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgameplay.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		5B21E99516153890006EBEAC /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
-		5B2BC75D1512514500D176CD /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
-		5B2BC75E1512514500D176CD /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
-		5B2BC7611512514D00D176CD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
-		5BC4E7D4150F8C3C00CBE1C0 /* res */ = {isa = PBXFileReference; lastKnownFileType = folder; path = res; sourceTree = "<group>"; };
-		6290E04918223DCC00A28FB9 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/GameKit.framework; sourceTree = DEVELOPER_DIR; };
-		6290E04B18223DDD00A28FB9 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; };
-		BD2636DF16CF5B7400CFE15F /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; };
-		BD2636E016CF5B7400CFE15F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
-		BD2636E116CF5B7400CFE15F /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; };
-		BD2636E216CF5B7400CFE15F /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
-		BD2636E316CF5B7400CFE15F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
-		BD2636E416CF5B7400CFE15F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
-		DD4FBEA31A0C0D240015D30C /* Script.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Script.cpp; path = src/Script.cpp; sourceTree = SOURCE_ROOT; };
-		DD4FBEA41A0C0D240015D30C /* Script.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Script.h; path = src/Script.h; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		4234D99714686C52003031B3 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				6290E04C18223DDD00A28FB9 /* GameKit.framework in Frameworks */,
-				5B21E99616153890006EBEAC /* IOKit.framework in Frameworks */,
-				5B2BC7621512514D00D176CD /* QuartzCore.framework in Frameworks */,
-				5B2BC75F1512514500D176CD /* OpenAL.framework in Frameworks */,
-				5B2BC7601512514500D176CD /* OpenGL.framework in Frameworks */,
-				4234D99E14686C52003031B3 /* Cocoa.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5B04C57414BFCFE100EB0071 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				6290E04A18223DCC00A28FB9 /* GameKit.framework in Frameworks */,
-				BD2636E516CF5B7400CFE15F /* CoreMotion.framework in Frameworks */,
-				BD2636E616CF5B7400CFE15F /* Foundation.framework in Frameworks */,
-				BD2636E716CF5B7400CFE15F /* OpenAL.framework in Frameworks */,
-				BD2636E816CF5B7400CFE15F /* OpenGLES.framework in Frameworks */,
-				BD2636E916CF5B7400CFE15F /* QuartzCore.framework in Frameworks */,
-				BD2636EA16CF5B7400CFE15F /* UIKit.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		420BBAA51817416D00C7B720 /* lua */ = {
-			isa = PBXGroup;
-			children = (
-				424F31F41A60C28600395438 /* lua_AbsoluteLayout.cpp */,
-				424F31F51A60C28600395438 /* lua_AbsoluteLayout.h */,
-				424F31F61A60C28600395438 /* lua_AIAgent.cpp */,
-				424F31F71A60C28600395438 /* lua_AIAgent.h */,
-				424F31F81A60C28600395438 /* lua_AIAgentListener.cpp */,
-				424F31F91A60C28600395438 /* lua_AIAgentListener.h */,
-				424F31FA1A60C28600395438 /* lua_AIController.cpp */,
-				424F31FB1A60C28600395438 /* lua_AIController.h */,
-				424F31FC1A60C28600395438 /* lua_AIMessage.cpp */,
-				424F31FD1A60C28600395438 /* lua_AIMessage.h */,
-				424F31FE1A60C28600395438 /* lua_AIState.cpp */,
-				424F31FF1A60C28600395438 /* lua_AIState.h */,
-				424F32001A60C28600395438 /* lua_AIStateListener.cpp */,
-				424F32011A60C28600395438 /* lua_AIStateListener.h */,
-				424F32021A60C28600395438 /* lua_AIStateMachine.cpp */,
-				424F32031A60C28600395438 /* lua_AIStateMachine.h */,
-				424F32041A60C28600395438 /* lua_all_bindings.cpp */,
-				424F32051A60C28600395438 /* lua_all_bindings.h */,
-				424F32061A60C28600395438 /* lua_Animation.cpp */,
-				424F32071A60C28600395438 /* lua_Animation.h */,
-				424F32081A60C28600395438 /* lua_AnimationClip.cpp */,
-				424F32091A60C28600395438 /* lua_AnimationClip.h */,
-				424F320A1A60C28600395438 /* lua_AnimationClipListener.cpp */,
-				424F320B1A60C28600395438 /* lua_AnimationClipListener.h */,
-				424F320C1A60C28600395438 /* lua_AnimationController.cpp */,
-				424F320D1A60C28600395438 /* lua_AnimationController.h */,
-				424F320E1A60C28600395438 /* lua_AnimationTarget.cpp */,
-				424F320F1A60C28600395438 /* lua_AnimationTarget.h */,
-				424F32101A60C28600395438 /* lua_AnimationValue.cpp */,
-				424F32111A60C28600395438 /* lua_AnimationValue.h */,
-				424F32121A60C28600395438 /* lua_AudioBuffer.cpp */,
-				424F32131A60C28600395438 /* lua_AudioBuffer.h */,
-				424F32141A60C28600395438 /* lua_AudioController.cpp */,
-				424F32151A60C28600395438 /* lua_AudioController.h */,
-				424F32161A60C28600395438 /* lua_AudioListener.cpp */,
-				424F32171A60C28600395438 /* lua_AudioListener.h */,
-				424F32181A60C28600395438 /* lua_AudioSource.cpp */,
-				424F32191A60C28600395438 /* lua_AudioSource.h */,
-				424F321A1A60C28600395438 /* lua_BoundingBox.cpp */,
-				424F321B1A60C28600395438 /* lua_BoundingBox.h */,
-				424F321C1A60C28600395438 /* lua_BoundingSphere.cpp */,
-				424F321D1A60C28600395438 /* lua_BoundingSphere.h */,
-				424F321E1A60C28600395438 /* lua_Bundle.cpp */,
-				424F321F1A60C28600395438 /* lua_Bundle.h */,
-				424F32201A60C28600395438 /* lua_Button.cpp */,
-				424F32211A60C28600395438 /* lua_Button.h */,
-				424F32221A60C28600395438 /* lua_Camera.cpp */,
-				424F32231A60C28600395438 /* lua_Camera.h */,
-				424F32241A60C28600395438 /* lua_CameraListener.cpp */,
-				424F32251A60C28600395438 /* lua_CameraListener.h */,
-				424F32261A60C28600395438 /* lua_CheckBox.cpp */,
-				424F32271A60C28600395438 /* lua_CheckBox.h */,
-				424F32281A60C28600395438 /* lua_Container.cpp */,
-				424F32291A60C28600395438 /* lua_Container.h */,
-				424F322A1A60C28600395438 /* lua_Control.cpp */,
-				424F322B1A60C28600395438 /* lua_Control.h */,
-				424F322C1A60C28600395438 /* lua_ControlListener.cpp */,
-				424F322D1A60C28600395438 /* lua_ControlListener.h */,
-				424F322E1A60C28600395438 /* lua_Curve.cpp */,
-				424F322F1A60C28600395438 /* lua_Curve.h */,
-				424F32301A60C28600395438 /* lua_DepthStencilTarget.cpp */,
-				424F32311A60C28600395438 /* lua_DepthStencilTarget.h */,
-				424F32321A60C28600395438 /* lua_Drawable.cpp */,
-				424F32331A60C28600395438 /* lua_Drawable.h */,
-				424F32341A60C28600395438 /* lua_Effect.cpp */,
-				424F32351A60C28600395438 /* lua_Effect.h */,
-				424F32361A60C28600395438 /* lua_FileSystem.cpp */,
-				424F32371A60C28600395438 /* lua_FileSystem.h */,
-				424F32381A60C28600395438 /* lua_FlowLayout.cpp */,
-				424F32391A60C28600395438 /* lua_FlowLayout.h */,
-				424F323A1A60C28600395438 /* lua_Font.cpp */,
-				424F323B1A60C28600395438 /* lua_Font.h */,
-				424F323C1A60C28600395438 /* lua_Form.cpp */,
-				424F323D1A60C28600395438 /* lua_Form.h */,
-				424F323E1A60C28600395438 /* lua_FrameBuffer.cpp */,
-				424F323F1A60C28600395438 /* lua_FrameBuffer.h */,
-				424F32401A60C28600395438 /* lua_Frustum.cpp */,
-				424F32411A60C28600395438 /* lua_Frustum.h */,
-				424F32421A60C28600395438 /* lua_Game.cpp */,
-				424F32431A60C28600395438 /* lua_Game.h */,
-				424F32441A60C28600395438 /* lua_Gamepad.cpp */,
-				424F32451A60C28600395438 /* lua_Gamepad.h */,
-				424F32461A60C28600395438 /* lua_Gesture.cpp */,
-				424F32471A60C28600395438 /* lua_Gesture.h */,
-				424F32481A60C28600395438 /* lua_Global.cpp */,
-				424F32491A60C28600395438 /* lua_Global.h */,
-				424F324A1A60C28600395438 /* lua_HeightField.cpp */,
-				424F324B1A60C28600395438 /* lua_HeightField.h */,
-				424F324C1A60C28600395438 /* lua_Image.cpp */,
-				424F324D1A60C28600395438 /* lua_Image.h */,
-				424F324E1A60C28600395438 /* lua_ImageControl.cpp */,
-				424F324F1A60C28600395438 /* lua_ImageControl.h */,
-				424F32501A60C28600395438 /* lua_Joint.cpp */,
-				424F32511A60C28600395438 /* lua_Joint.h */,
-				424F32521A60C28600395438 /* lua_JoystickControl.cpp */,
-				424F32531A60C28600395438 /* lua_JoystickControl.h */,
-				424F32541A60C28600395438 /* lua_Keyboard.cpp */,
-				424F32551A60C28600395438 /* lua_Keyboard.h */,
-				424F32561A60C28600395438 /* lua_Label.cpp */,
-				424F32571A60C28600395438 /* lua_Label.h */,
-				424F32581A60C28600395438 /* lua_Layout.cpp */,
-				424F32591A60C28600395438 /* lua_Layout.h */,
-				424F325A1A60C28600395438 /* lua_Light.cpp */,
-				424F325B1A60C28600395438 /* lua_Light.h */,
-				424F325C1A60C28600395438 /* lua_Logger.cpp */,
-				424F325D1A60C28600395438 /* lua_Logger.h */,
-				424F325E1A60C28600395438 /* lua_Material.cpp */,
-				424F325F1A60C28600395438 /* lua_Material.h */,
-				424F32601A60C28600395438 /* lua_MaterialParameter.cpp */,
-				424F32611A60C28600395438 /* lua_MaterialParameter.h */,
-				424F32621A60C28600395438 /* lua_MathUtil.cpp */,
-				424F32631A60C28600395438 /* lua_MathUtil.h */,
-				424F32641A60C28600395438 /* lua_Matrix.cpp */,
-				424F32651A60C28600395438 /* lua_Matrix.h */,
-				424F32661A60C28600395438 /* lua_Mesh.cpp */,
-				424F32671A60C28600395438 /* lua_Mesh.h */,
-				424F32681A60C28600395438 /* lua_MeshBatch.cpp */,
-				424F32691A60C28600395438 /* lua_MeshBatch.h */,
-				424F326A1A60C28600395438 /* lua_MeshPart.cpp */,
-				424F326B1A60C28600395438 /* lua_MeshPart.h */,
-				424F326C1A60C28600395438 /* lua_MeshSkin.cpp */,
-				424F326D1A60C28600395438 /* lua_MeshSkin.h */,
-				424F326E1A60C28600395438 /* lua_Model.cpp */,
-				424F326F1A60C28600395438 /* lua_Model.h */,
-				424F32701A60C28600395438 /* lua_Mouse.cpp */,
-				424F32711A60C28600395438 /* lua_Mouse.h */,
-				424F32721A60C28600395438 /* lua_Node.cpp */,
-				424F32731A60C28600395438 /* lua_Node.h */,
-				424F32741A60C28600395438 /* lua_NodeCloneContext.cpp */,
-				424F32751A60C28600395438 /* lua_NodeCloneContext.h */,
-				424F32761A60C28600395438 /* lua_ParticleEmitter.cpp */,
-				424F32771A60C28600395438 /* lua_ParticleEmitter.h */,
-				424F32781A60C28600395438 /* lua_Pass.cpp */,
-				424F32791A60C28600395438 /* lua_Pass.h */,
-				424F327A1A60C28600395438 /* lua_PhysicsCharacter.cpp */,
-				424F327B1A60C28600395438 /* lua_PhysicsCharacter.h */,
-				424F327C1A60C28600395438 /* lua_PhysicsCollisionObject.cpp */,
-				424F327D1A60C28600395438 /* lua_PhysicsCollisionObject.h */,
-				424F327E1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp */,
-				424F327F1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.h */,
-				424F32801A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp */,
-				424F32811A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.h */,
-				424F32821A60C28600395438 /* lua_PhysicsCollisionShape.cpp */,
-				424F32831A60C28600395438 /* lua_PhysicsCollisionShape.h */,
-				424F32841A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp */,
-				424F32851A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.h */,
-				424F32861A60C28600395438 /* lua_PhysicsConstraint.cpp */,
-				424F32871A60C28600395438 /* lua_PhysicsConstraint.h */,
-				424F32881A60C28600395438 /* lua_PhysicsController.cpp */,
-				424F32891A60C28600395438 /* lua_PhysicsController.h */,
-				424F328A1A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp */,
-				424F328B1A60C28600395438 /* lua_PhysicsControllerHitFilter.h */,
-				424F328C1A60C28600395438 /* lua_PhysicsControllerHitResult.cpp */,
-				424F328D1A60C28600395438 /* lua_PhysicsControllerHitResult.h */,
-				424F328E1A60C28600395438 /* lua_PhysicsControllerListener.cpp */,
-				424F328F1A60C28600395438 /* lua_PhysicsControllerListener.h */,
-				424F32901A60C28600395438 /* lua_PhysicsFixedConstraint.cpp */,
-				424F32911A60C28600395438 /* lua_PhysicsFixedConstraint.h */,
-				424F32921A60C28600395438 /* lua_PhysicsGenericConstraint.cpp */,
-				424F32931A60C28600395438 /* lua_PhysicsGenericConstraint.h */,
-				424F32941A60C28600395438 /* lua_PhysicsGhostObject.cpp */,
-				424F32951A60C28600395438 /* lua_PhysicsGhostObject.h */,
-				424F32961A60C28600395438 /* lua_PhysicsHingeConstraint.cpp */,
-				424F32971A60C28600395438 /* lua_PhysicsHingeConstraint.h */,
-				424F32981A60C28600395438 /* lua_PhysicsRigidBody.cpp */,
-				424F32991A60C28600395438 /* lua_PhysicsRigidBody.h */,
-				424F329A1A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp */,
-				424F329B1A60C28600395438 /* lua_PhysicsRigidBodyParameters.h */,
-				424F329C1A60C28600395438 /* lua_PhysicsSocketConstraint.cpp */,
-				424F329D1A60C28600395438 /* lua_PhysicsSocketConstraint.h */,
-				424F329E1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp */,
-				424F329F1A60C28600395438 /* lua_PhysicsSpringConstraint.h */,
-				424F32A01A60C28600395438 /* lua_PhysicsVehicle.cpp */,
-				424F32A11A60C28600395438 /* lua_PhysicsVehicle.h */,
-				424F32A21A60C28600395438 /* lua_PhysicsVehicleWheel.cpp */,
-				424F32A31A60C28600395438 /* lua_PhysicsVehicleWheel.h */,
-				424F32A41A60C28600395438 /* lua_Plane.cpp */,
-				424F32A51A60C28600395438 /* lua_Plane.h */,
-				424F32A61A60C28600395438 /* lua_Platform.cpp */,
-				424F32A71A60C28600395438 /* lua_Platform.h */,
-				424F32A81A60C28600395438 /* lua_Properties.cpp */,
-				424F32A91A60C28600395438 /* lua_Properties.h */,
-				424F32AA1A60C28600395438 /* lua_Quaternion.cpp */,
-				424F32AB1A60C28600395438 /* lua_Quaternion.h */,
-				424F32AC1A60C28600395438 /* lua_RadioButton.cpp */,
-				424F32AD1A60C28600395438 /* lua_RadioButton.h */,
-				424F32AE1A60C28600395438 /* lua_Ray.cpp */,
-				424F32AF1A60C28600395438 /* lua_Ray.h */,
-				424F32B01A60C28600395438 /* lua_Rectangle.cpp */,
-				424F32B11A60C28600395438 /* lua_Rectangle.h */,
-				424F32B21A60C28600395438 /* lua_Ref.cpp */,
-				424F32B31A60C28600395438 /* lua_Ref.h */,
-				424F32B41A60C28600395438 /* lua_RenderState.cpp */,
-				424F32B51A60C28600395438 /* lua_RenderState.h */,
-				424F32B61A60C28600395438 /* lua_RenderStateStateBlock.cpp */,
-				424F32B71A60C28600395438 /* lua_RenderStateStateBlock.h */,
-				424F32B81A60C28600395438 /* lua_RenderTarget.cpp */,
-				424F32B91A60C28600395438 /* lua_RenderTarget.h */,
-				424F32BA1A60C28600395438 /* lua_Scene.cpp */,
-				424F32BB1A60C28600395438 /* lua_Scene.h */,
-				424F32BC1A60C28600395438 /* lua_ScreenDisplayer.cpp */,
-				424F32BD1A60C28600395438 /* lua_ScreenDisplayer.h */,
-				424F32BE1A60C28600395438 /* lua_Script.cpp */,
-				424F32BF1A60C28600395438 /* lua_Script.h */,
-				424F32C01A60C28600395438 /* lua_ScriptController.cpp */,
-				424F32C11A60C28600395438 /* lua_ScriptController.h */,
-				424F32C21A60C28600395438 /* lua_ScriptTarget.cpp */,
-				424F32C31A60C28600395438 /* lua_ScriptTarget.h */,
-				424F32C41A60C28600395438 /* lua_ScriptTargetEvent.cpp */,
-				424F32C51A60C28600395438 /* lua_ScriptTargetEvent.h */,
-				424F32C61A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp */,
-				424F32C71A60C28600395438 /* lua_ScriptTargetEventRegistry.h */,
-				424F32C81A60C28600395438 /* lua_Slider.cpp */,
-				424F32C91A60C28600395438 /* lua_Slider.h */,
-				424F32CA1A60C28600395438 /* lua_Sprite.cpp */,
-				424F32CB1A60C28600395438 /* lua_Sprite.h */,
-				424F32CC1A60C28600395438 /* lua_SpriteBatch.cpp */,
-				424F32CD1A60C28600395438 /* lua_SpriteBatch.h */,
-				424F32CE1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp */,
-				424F32CF1A60C28600395438 /* lua_SpriteBatchSpriteVertex.h */,
-				424F32D01A60C28600395438 /* lua_Technique.cpp */,
-				424F32D11A60C28600395438 /* lua_Technique.h */,
-				424F32D21A60C28600395438 /* lua_Terrain.cpp */,
-				424F32D31A60C28600395438 /* lua_Terrain.h */,
-				424F32D41A60C28600395438 /* lua_TerrainPatch.cpp */,
-				424F32D51A60C28600395438 /* lua_TerrainPatch.h */,
-				424F32D61A60C28600395438 /* lua_Text.cpp */,
-				424F32D71A60C28600395438 /* lua_Text.h */,
-				424F32D81A60C28600395438 /* lua_TextBox.cpp */,
-				424F32D91A60C28600395438 /* lua_TextBox.h */,
-				424F32DA1A60C28600395438 /* lua_Texture.cpp */,
-				424F32DB1A60C28600395438 /* lua_Texture.h */,
-				424F32DC1A60C28600395438 /* lua_TextureSampler.cpp */,
-				424F32DD1A60C28600395438 /* lua_TextureSampler.h */,
-				424F32DE1A60C28600395438 /* lua_Theme.cpp */,
-				424F32DF1A60C28600395438 /* lua_Theme.h */,
-				424F32E01A60C28600395438 /* lua_ThemeSideRegions.cpp */,
-				424F32E11A60C28600395438 /* lua_ThemeSideRegions.h */,
-				424F32E21A60C28600395438 /* lua_ThemeStyle.cpp */,
-				424F32E31A60C28600395438 /* lua_ThemeStyle.h */,
-				424F32E41A60C28600395438 /* lua_ThemeThemeImage.cpp */,
-				424F32E51A60C28600395438 /* lua_ThemeThemeImage.h */,
-				424F32E61A60C28600395438 /* lua_ThemeUVs.cpp */,
-				424F32E71A60C28600395438 /* lua_ThemeUVs.h */,
-				424F32E81A60C28600395438 /* lua_TileSet.cpp */,
-				424F32E91A60C28600395438 /* lua_TileSet.h */,
-				424F32EA1A60C28600395438 /* lua_Touch.cpp */,
-				424F32EB1A60C28600395438 /* lua_Touch.h */,
-				424F32EC1A60C28600395438 /* lua_Transform.cpp */,
-				424F32ED1A60C28600395438 /* lua_Transform.h */,
-				424F32EE1A60C28600395438 /* lua_TransformListener.cpp */,
-				424F32EF1A60C28600395438 /* lua_TransformListener.h */,
-				424F32F01A60C28600395438 /* lua_Uniform.cpp */,
-				424F32F11A60C28600395438 /* lua_Uniform.h */,
-				424F32F21A60C28600395438 /* lua_Vector2.cpp */,
-				424F32F31A60C28600395438 /* lua_Vector2.h */,
-				424F32F41A60C28600395438 /* lua_Vector3.cpp */,
-				424F32F51A60C28600395438 /* lua_Vector3.h */,
-				424F32F61A60C28600395438 /* lua_Vector4.cpp */,
-				424F32F71A60C28600395438 /* lua_Vector4.h */,
-				424F32F81A60C28600395438 /* lua_VertexAttributeBinding.cpp */,
-				424F32F91A60C28600395438 /* lua_VertexAttributeBinding.h */,
-				424F32FA1A60C28600395438 /* lua_VertexFormat.cpp */,
-				424F32FB1A60C28600395438 /* lua_VertexFormat.h */,
-				424F32FC1A60C28600395438 /* lua_VertexFormatElement.cpp */,
-				424F32FD1A60C28600395438 /* lua_VertexFormatElement.h */,
-				424F32FE1A60C28600395438 /* lua_VerticalLayout.cpp */,
-				424F32FF1A60C28600395438 /* lua_VerticalLayout.h */,
-			);
-			name = lua;
-			path = src/lua;
-			sourceTree = SOURCE_ROOT;
-		};
-		4234D98A14686BB6003031B3 = {
-			isa = PBXGroup;
-			children = (
-				5BC4E7D4150F8C3C00CBE1C0 /* res */,
-				4234D9A314686C52003031B3 /* src */,
-				42CCD4AF146D811D00353661 /* Frameworks */,
-				4234D99B14686C52003031B3 /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		4234D99B14686C52003031B3 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				4234D99A14686C52003031B3 /* libgameplay.a */,
-				5B04C5CA14BFCFE100EB0071 /* libgameplay.a */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		4234D9A314686C52003031B3 /* src */ = {
-			isa = PBXGroup;
-			children = (
-				420BBAA51817416D00C7B720 /* lua */,
-				42CC52F71809A4EB00AAD8AD /* AbsoluteLayout.cpp */,
-				42CC52F81809A4EB00AAD8AD /* AbsoluteLayout.h */,
-				42CC52F91809A4EB00AAD8AD /* AIAgent.cpp */,
-				42CC52FA1809A4EB00AAD8AD /* AIAgent.h */,
-				42CC52FB1809A4EB00AAD8AD /* AIController.cpp */,
-				42CC52FC1809A4EB00AAD8AD /* AIController.h */,
-				42CC52FD1809A4EB00AAD8AD /* AIMessage.cpp */,
-				42CC52FE1809A4EB00AAD8AD /* AIMessage.h */,
-				42CC52FF1809A4EB00AAD8AD /* AIState.cpp */,
-				42CC53001809A4EB00AAD8AD /* AIState.h */,
-				42CC53011809A4EB00AAD8AD /* AIStateMachine.cpp */,
-				42CC53021809A4EB00AAD8AD /* AIStateMachine.h */,
-				42CC53031809A4EB00AAD8AD /* Animation.cpp */,
-				42CC53041809A4EB00AAD8AD /* Animation.h */,
-				42CC53051809A4EB00AAD8AD /* AnimationClip.cpp */,
-				42CC53061809A4EB00AAD8AD /* AnimationClip.h */,
-				42CC53071809A4EB00AAD8AD /* AnimationController.cpp */,
-				42CC53081809A4EB00AAD8AD /* AnimationController.h */,
-				42CC53091809A4EB00AAD8AD /* AnimationTarget.cpp */,
-				42CC530A1809A4EB00AAD8AD /* AnimationTarget.h */,
-				42CC530B1809A4EB00AAD8AD /* AnimationValue.cpp */,
-				42CC530C1809A4EB00AAD8AD /* AnimationValue.h */,
-				42CC530D1809A4EB00AAD8AD /* AudioBuffer.cpp */,
-				42CC530E1809A4EB00AAD8AD /* AudioBuffer.h */,
-				42CC530F1809A4EB00AAD8AD /* AudioController.cpp */,
-				42CC53101809A4EB00AAD8AD /* AudioController.h */,
-				42CC53111809A4EB00AAD8AD /* AudioListener.cpp */,
-				42CC53121809A4EB00AAD8AD /* AudioListener.h */,
-				42CC53131809A4EB00AAD8AD /* AudioSource.cpp */,
-				42CC53141809A4EB00AAD8AD /* AudioSource.h */,
-				42CC53151809A4EB00AAD8AD /* Base.h */,
-				42CC53161809A4EB00AAD8AD /* BoundingBox.cpp */,
-				42CC53171809A4EB00AAD8AD /* BoundingBox.h */,
-				42CC53181809A4EB00AAD8AD /* BoundingBox.inl */,
-				42CC53191809A4EB00AAD8AD /* BoundingSphere.cpp */,
-				42CC531A1809A4EB00AAD8AD /* BoundingSphere.h */,
-				42CC531B1809A4EB00AAD8AD /* BoundingSphere.inl */,
-				42CC531C1809A4EB00AAD8AD /* Bundle.cpp */,
-				42CC531D1809A4EB00AAD8AD /* Bundle.h */,
-				42CC531E1809A4EB00AAD8AD /* Button.cpp */,
-				42CC531F1809A4EB00AAD8AD /* Button.h */,
-				42CC53201809A4EB00AAD8AD /* Camera.cpp */,
-				42CC53211809A4EB00AAD8AD /* Camera.h */,
-				42CC53221809A4EB00AAD8AD /* CheckBox.cpp */,
-				42CC53231809A4EB00AAD8AD /* CheckBox.h */,
-				42CC53241809A4EB00AAD8AD /* Container.cpp */,
-				42CC53251809A4EB00AAD8AD /* Container.h */,
-				42CC53261809A4EB00AAD8AD /* Control.cpp */,
-				42CC53271809A4EB00AAD8AD /* Control.h */,
-				420BBAA21817416D00C7B720 /* ControlFactory.cpp */,
-				420BBAA31817416D00C7B720 /* ControlFactory.h */,
-				42CC53281809A4EB00AAD8AD /* Curve.cpp */,
-				42CC53291809A4EB00AAD8AD /* Curve.h */,
-				42CC532A1809A4EB00AAD8AD /* DebugNew.cpp */,
-				42CC532B1809A4EB00AAD8AD /* DebugNew.h */,
-				42CC532C1809A4EB00AAD8AD /* DepthStencilTarget.cpp */,
-				42CC532D1809A4EB00AAD8AD /* DepthStencilTarget.h */,
-				42D929991A6051EC0073258D /* Drawable.cpp */,
-				42D9299A1A6051EC0073258D /* Drawable.h */,
-				42CC532E1809A4EB00AAD8AD /* Effect.cpp */,
-				42CC532F1809A4EB00AAD8AD /* Effect.h */,
-				42CC53301809A4EB00AAD8AD /* FileSystem.cpp */,
-				42CC53311809A4EB00AAD8AD /* FileSystem.h */,
-				42CC53321809A4EB00AAD8AD /* FlowLayout.cpp */,
-				42CC53331809A4EB00AAD8AD /* FlowLayout.h */,
-				42CC53341809A4EB00AAD8AD /* Font.cpp */,
-				42CC53351809A4EB00AAD8AD /* Font.h */,
-				42CC53361809A4EB00AAD8AD /* Form.cpp */,
-				42CC53371809A4EB00AAD8AD /* Form.h */,
-				42CC53381809A4EB00AAD8AD /* FrameBuffer.cpp */,
-				42CC53391809A4EB00AAD8AD /* FrameBuffer.h */,
-				42CC533A1809A4EB00AAD8AD /* Frustum.cpp */,
-				42CC533B1809A4EB00AAD8AD /* Frustum.h */,
-				42CC533C1809A4EB00AAD8AD /* Game.cpp */,
-				42CC533D1809A4EB00AAD8AD /* Game.h */,
-				42CC533E1809A4EB00AAD8AD /* Game.inl */,
-				42CC533F1809A4EB00AAD8AD /* Gamepad.cpp */,
-				42CC53401809A4EB00AAD8AD /* Gamepad.h */,
-				42CC53411809A4EB00AAD8AD /* gameplay-main-android.cpp */,
-				42CC53431809A4EB00AAD8AD /* gameplay-main-ios.mm */,
-				42CC53441809A4EB00AAD8AD /* gameplay-main-linux.cpp */,
-				42CC53451809A4EB00AAD8AD /* gameplay-main-macosx.mm */,
-				42CC53461809A4EB00AAD8AD /* gameplay-main-windows.cpp */,
-				42CC53471809A4EB00AAD8AD /* gameplay.h */,
-				42CC53481809A4EB00AAD8AD /* Gesture.h */,
-				42CC53491809A4EB00AAD8AD /* HeightField.cpp */,
-				42CC534A1809A4EB00AAD8AD /* HeightField.h */,
-				42CC534B1809A4EB00AAD8AD /* Image.cpp */,
-				42CC534C1809A4EB00AAD8AD /* Image.h */,
-				42CC534D1809A4EC00AAD8AD /* Image.inl */,
-				42CC534E1809A4EC00AAD8AD /* ImageControl.cpp */,
-				42CC534F1809A4EC00AAD8AD /* ImageControl.h */,
-				42CC53501809A4EC00AAD8AD /* Joint.cpp */,
-				42CC53511809A4EC00AAD8AD /* Joint.h */,
-				426F8315187F72A700640CBA /* JoystickControl.cpp */,
-				426F8316187F72A700640CBA /* JoystickControl.h */,
-				42CC53551809A4EC00AAD8AD /* Keyboard.h */,
-				42CC53561809A4EC00AAD8AD /* Label.cpp */,
-				42CC53571809A4EC00AAD8AD /* Label.h */,
-				42CC53581809A4EC00AAD8AD /* Layout.cpp */,
-				42CC53591809A4EC00AAD8AD /* Layout.h */,
-				42CC535A1809A4EC00AAD8AD /* Light.cpp */,
-				42CC535B1809A4EC00AAD8AD /* Light.h */,
-				42CC535C1809A4EC00AAD8AD /* Logger.cpp */,
-				42CC535D1809A4EC00AAD8AD /* Logger.h */,
-				42CC54C71809A4ED00AAD8AD /* Material.cpp */,
-				42CC54C81809A4ED00AAD8AD /* Material.h */,
-				42CC54C91809A4ED00AAD8AD /* MaterialParameter.cpp */,
-				42CC54CA1809A4ED00AAD8AD /* MaterialParameter.h */,
-				42CC54CB1809A4ED00AAD8AD /* MathUtil.cpp */,
-				42CC54CC1809A4ED00AAD8AD /* MathUtil.h */,
-				42CC54CD1809A4ED00AAD8AD /* MathUtil.inl */,
-				42CC54CE1809A4ED00AAD8AD /* MathUtilNeon.inl */,
-				42CC54CF1809A4ED00AAD8AD /* Matrix.cpp */,
-				42CC54D01809A4ED00AAD8AD /* Matrix.h */,
-				42CC54D11809A4ED00AAD8AD /* Matrix.inl */,
-				42CC54D21809A4ED00AAD8AD /* Mesh.cpp */,
-				42CC54D31809A4ED00AAD8AD /* Mesh.h */,
-				42CC54D41809A4ED00AAD8AD /* MeshBatch.cpp */,
-				42CC54D51809A4ED00AAD8AD /* MeshBatch.h */,
-				42CC54D61809A4ED00AAD8AD /* MeshBatch.inl */,
-				42CC54D71809A4ED00AAD8AD /* MeshPart.cpp */,
-				42CC54D81809A4ED00AAD8AD /* MeshPart.h */,
-				42CC54D91809A4ED00AAD8AD /* MeshSkin.cpp */,
-				42CC54DA1809A4ED00AAD8AD /* MeshSkin.h */,
-				42CC54DB1809A4ED00AAD8AD /* Model.cpp */,
-				42CC54DC1809A4ED00AAD8AD /* Model.h */,
-				42CC54DD1809A4ED00AAD8AD /* Mouse.h */,
-				42CC54DE1809A4ED00AAD8AD /* Node.cpp */,
-				42CC54DF1809A4ED00AAD8AD /* Node.h */,
-				42CC54E01809A4ED00AAD8AD /* ParticleEmitter.cpp */,
-				42CC54E11809A4ED00AAD8AD /* ParticleEmitter.h */,
-				42CC54E21809A4ED00AAD8AD /* Pass.cpp */,
-				42CC54E31809A4ED00AAD8AD /* Pass.h */,
-				42CC54E41809A4ED00AAD8AD /* PhysicsCharacter.cpp */,
-				42CC54E51809A4ED00AAD8AD /* PhysicsCharacter.h */,
-				42CC54E61809A4ED00AAD8AD /* PhysicsCollisionObject.cpp */,
-				42CC54E71809A4ED00AAD8AD /* PhysicsCollisionObject.h */,
-				42CC54E81809A4ED00AAD8AD /* PhysicsCollisionShape.cpp */,
-				42CC54E91809A4ED00AAD8AD /* PhysicsCollisionShape.h */,
-				42CC54EA1809A4ED00AAD8AD /* PhysicsConstraint.cpp */,
-				42CC54EB1809A4ED00AAD8AD /* PhysicsConstraint.h */,
-				42CC54EC1809A4ED00AAD8AD /* PhysicsConstraint.inl */,
-				42CC54ED1809A4ED00AAD8AD /* PhysicsController.cpp */,
-				42CC54EE1809A4ED00AAD8AD /* PhysicsController.h */,
-				42CC54EF1809A4ED00AAD8AD /* PhysicsFixedConstraint.cpp */,
-				42CC54F01809A4ED00AAD8AD /* PhysicsFixedConstraint.h */,
-				42CC54F11809A4ED00AAD8AD /* PhysicsFixedConstraint.inl */,
-				42CC54F21809A4ED00AAD8AD /* PhysicsGenericConstraint.cpp */,
-				42CC54F31809A4ED00AAD8AD /* PhysicsGenericConstraint.h */,
-				42CC54F41809A4ED00AAD8AD /* PhysicsGenericConstraint.inl */,
-				42CC54F51809A4ED00AAD8AD /* PhysicsGhostObject.cpp */,
-				42CC54F61809A4ED00AAD8AD /* PhysicsGhostObject.h */,
-				42CC54F71809A4ED00AAD8AD /* PhysicsHingeConstraint.cpp */,
-				42CC54F81809A4ED00AAD8AD /* PhysicsHingeConstraint.h */,
-				42CC54F91809A4ED00AAD8AD /* PhysicsRigidBody.cpp */,
-				42CC54FA1809A4ED00AAD8AD /* PhysicsRigidBody.h */,
-				42CC54FB1809A4ED00AAD8AD /* PhysicsRigidBody.inl */,
-				42CC54FC1809A4ED00AAD8AD /* PhysicsSocketConstraint.cpp */,
-				42CC54FD1809A4ED00AAD8AD /* PhysicsSocketConstraint.h */,
-				42CC54FE1809A4ED00AAD8AD /* PhysicsSpringConstraint.cpp */,
-				42CC54FF1809A4ED00AAD8AD /* PhysicsSpringConstraint.h */,
-				42CC55001809A4ED00AAD8AD /* PhysicsSpringConstraint.inl */,
-				42CC55011809A4ED00AAD8AD /* PhysicsVehicle.cpp */,
-				42CC55021809A4ED00AAD8AD /* PhysicsVehicle.h */,
-				42CC55031809A4ED00AAD8AD /* PhysicsVehicleWheel.cpp */,
-				42CC55041809A4ED00AAD8AD /* PhysicsVehicleWheel.h */,
-				42CC55051809A4ED00AAD8AD /* Plane.cpp */,
-				42CC55061809A4ED00AAD8AD /* Plane.h */,
-				42CC55071809A4ED00AAD8AD /* Plane.inl */,
-				42CC55081809A4ED00AAD8AD /* Platform.cpp */,
-				42CC55091809A4ED00AAD8AD /* Platform.h */,
-				42CC550A1809A4ED00AAD8AD /* PlatformAndroid.cpp */,
-				42CC550C1809A4ED00AAD8AD /* PlatformiOS.mm */,
-				42CC550D1809A4ED00AAD8AD /* PlatformLinux.cpp */,
-				42CC550E1809A4ED00AAD8AD /* PlatformMacOSX.mm */,
-				42CC550F1809A4EE00AAD8AD /* PlatformWindows.cpp */,
-				42CC55101809A4EE00AAD8AD /* Properties.cpp */,
-				42CC55111809A4EE00AAD8AD /* Properties.h */,
-				42CC55121809A4EE00AAD8AD /* Quaternion.cpp */,
-				42CC55131809A4EE00AAD8AD /* Quaternion.h */,
-				42CC55141809A4EE00AAD8AD /* Quaternion.inl */,
-				42CC55151809A4EE00AAD8AD /* RadioButton.cpp */,
-				42CC55161809A4EE00AAD8AD /* RadioButton.h */,
-				42CC55171809A4EE00AAD8AD /* Ray.cpp */,
-				42CC55181809A4EE00AAD8AD /* Ray.h */,
-				42CC55191809A4EE00AAD8AD /* Ray.inl */,
-				42CC551A1809A4EE00AAD8AD /* Rectangle.cpp */,
-				42CC551B1809A4EE00AAD8AD /* Rectangle.h */,
-				42CC551C1809A4EE00AAD8AD /* Ref.cpp */,
-				42CC551D1809A4EE00AAD8AD /* Ref.h */,
-				42CC551E1809A4EE00AAD8AD /* RenderState.cpp */,
-				42CC551F1809A4EE00AAD8AD /* RenderState.h */,
-				42CC55201809A4EE00AAD8AD /* RenderTarget.cpp */,
-				42CC55211809A4EE00AAD8AD /* RenderTarget.h */,
-				42CC55221809A4EE00AAD8AD /* Scene.cpp */,
-				42CC55231809A4EE00AAD8AD /* Scene.h */,
-				42CC55241809A4EE00AAD8AD /* SceneLoader.cpp */,
-				42CC55251809A4EE00AAD8AD /* SceneLoader.h */,
-				42CC552A1809A4EE00AAD8AD /* ScreenDisplayer.cpp */,
-				42CC552B1809A4EE00AAD8AD /* ScreenDisplayer.h */,
-				DD4FBEA31A0C0D240015D30C /* Script.cpp */,
-				DD4FBEA41A0C0D240015D30C /* Script.h */,
-				42CC552C1809A4EE00AAD8AD /* ScriptController.cpp */,
-				42CC552D1809A4EE00AAD8AD /* ScriptController.h */,
-				42CC552E1809A4EE00AAD8AD /* ScriptController.inl */,
-				42CC552F1809A4EE00AAD8AD /* ScriptTarget.cpp */,
-				42CC55301809A4EE00AAD8AD /* ScriptTarget.h */,
-				42CC55311809A4EE00AAD8AD /* Slider.cpp */,
-				42CC55321809A4EE00AAD8AD /* Slider.h */,
-				4204EC441A2F878C0074FCE9 /* Sprite.cpp */,
-				4204EC431A2F70BA0074FCE9 /* Sprite.h */,
-				42CC55451809A4EE00AAD8AD /* SpriteBatch.cpp */,
-				42CC55461809A4EE00AAD8AD /* SpriteBatch.h */,
-				42CC55471809A4EE00AAD8AD /* Stream.h */,
-				42CC55481809A4EE00AAD8AD /* Technique.cpp */,
-				42CC55491809A4EE00AAD8AD /* Technique.h */,
-				42CC554A1809A4EE00AAD8AD /* Terrain.cpp */,
-				42CC554B1809A4EE00AAD8AD /* Terrain.h */,
-				42CC554C1809A4EE00AAD8AD /* TerrainPatch.cpp */,
-				42CC554D1809A4EE00AAD8AD /* TerrainPatch.h */,
-				42ECC3F81A4EF5A00036C839 /* Text.cpp */,
-				42ECC3F91A4EF5A00036C839 /* Text.h */,
-				42CC554E1809A4EE00AAD8AD /* TextBox.cpp */,
-				42CC554F1809A4EE00AAD8AD /* TextBox.h */,
-				42CC55501809A4EE00AAD8AD /* Texture.cpp */,
-				42CC55511809A4EE00AAD8AD /* Texture.h */,
-				42CC55521809A4EE00AAD8AD /* Theme.cpp */,
-				42CC55531809A4EE00AAD8AD /* Theme.h */,
-				42CC55541809A4EE00AAD8AD /* ThemeStyle.cpp */,
-				42CC55551809A4EE00AAD8AD /* ThemeStyle.h */,
-				4204EC3F1A2EB8310074FCE9 /* TileSet.cpp */,
-				4204EC401A2EB8310074FCE9 /* TileSet.h */,
-				42CC55561809A4EE00AAD8AD /* TimeListener.h */,
-				42CC55571809A4EE00AAD8AD /* Touch.h */,
-				42CC55581809A4EE00AAD8AD /* Transform.cpp */,
-				42CC55591809A4EE00AAD8AD /* Transform.h */,
-				42CC555A1809A4EE00AAD8AD /* Vector2.cpp */,
-				42CC555B1809A4EE00AAD8AD /* Vector2.h */,
-				42CC555C1809A4EE00AAD8AD /* Vector2.inl */,
-				42CC555D1809A4EE00AAD8AD /* Vector3.cpp */,
-				42CC555E1809A4EE00AAD8AD /* Vector3.h */,
-				42CC555F1809A4EE00AAD8AD /* Vector3.inl */,
-				42CC55601809A4EE00AAD8AD /* Vector4.cpp */,
-				42CC55611809A4EE00AAD8AD /* Vector4.h */,
-				42CC55621809A4EE00AAD8AD /* Vector4.inl */,
-				42CC55631809A4EE00AAD8AD /* VertexAttributeBinding.cpp */,
-				42CC55641809A4EE00AAD8AD /* VertexAttributeBinding.h */,
-				42CC55651809A4EE00AAD8AD /* VertexFormat.cpp */,
-				42CC55661809A4EE00AAD8AD /* VertexFormat.h */,
-				42CC55671809A4EE00AAD8AD /* VerticalLayout.cpp */,
-				42CC55681809A4EE00AAD8AD /* VerticalLayout.h */,
-			);
-			name = src;
-			path = gameplay;
-			sourceTree = "<group>";
-		};
-		42CCD4AF146D811D00353661 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				5B04C5FD14BFE52300EB0071 /* iOS */,
-				5B04C5FE14BFE52F00EB0071 /* MacOSX */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		5B04C5FD14BFE52300EB0071 /* iOS */ = {
-			isa = PBXGroup;
-			children = (
-				6290E04918223DCC00A28FB9 /* GameKit.framework */,
-				BD2636DF16CF5B7400CFE15F /* CoreMotion.framework */,
-				BD2636E016CF5B7400CFE15F /* Foundation.framework */,
-				BD2636E116CF5B7400CFE15F /* OpenAL.framework */,
-				BD2636E216CF5B7400CFE15F /* OpenGLES.framework */,
-				BD2636E316CF5B7400CFE15F /* QuartzCore.framework */,
-				BD2636E416CF5B7400CFE15F /* UIKit.framework */,
-			);
-			name = iOS;
-			sourceTree = "<group>";
-		};
-		5B04C5FE14BFE52F00EB0071 /* MacOSX */ = {
-			isa = PBXGroup;
-			children = (
-				6290E04B18223DDD00A28FB9 /* GameKit.framework */,
-				5B21E99516153890006EBEAC /* IOKit.framework */,
-				5B2BC7611512514D00D176CD /* QuartzCore.framework */,
-				5B2BC75D1512514500D176CD /* OpenAL.framework */,
-				5B2BC75E1512514500D176CD /* OpenGL.framework */,
-				4234D99D14686C52003031B3 /* Cocoa.framework */,
-			);
-			name = MacOSX;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		4234D99914686C52003031B3 /* gameplay-macosx */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay-macosx" */;
-			buildPhases = (
-				4234D99614686C52003031B3 /* Sources */,
-				4234D99714686C52003031B3 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "gameplay-macosx";
-			productName = gameplay;
-			productReference = 4234D99A14686C52003031B3 /* libgameplay.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		5B04C52B14BFCFE100EB0071 /* gameplay-ios */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 5B04C5C714BFCFE100EB0071 /* Build configuration list for PBXNativeTarget "gameplay-ios" */;
-			buildPhases = (
-				5B04C52C14BFCFE100EB0071 /* Sources */,
-				5B04C57414BFCFE100EB0071 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = "gameplay-ios";
-			productName = gameplay;
-			productReference = 5B04C5CA14BFCFE100EB0071 /* libgameplay.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		4234D98C14686BB6003031B3 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0610;
-			};
-			buildConfigurationList = 4234D98F14686BB6003031B3 /* Build configuration list for PBXProject "gameplay" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 4234D98A14686BB6003031B3;
-			productRefGroup = 4234D99B14686C52003031B3 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				4234D99914686C52003031B3 /* gameplay-macosx */,
-				5B04C52B14BFCFE100EB0071 /* gameplay-ios */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
-		4234D99614686C52003031B3 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				424F33A61A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp in Sources */,
-				42CC59861809A4EF00AAD8AD /* RadioButton.cpp in Sources */,
-				424F330A1A60C28600395438 /* lua_AIState.cpp in Sources */,
-				42CC596E1809A4EF00AAD8AD /* Platform.cpp in Sources */,
-				424F331C1A60C28600395438 /* lua_AnimationValue.cpp in Sources */,
-				424F338E1A60C28600395438 /* lua_PhysicsCollisionShape.cpp in Sources */,
-				424F33FE1A60C28600395438 /* lua_Vector2.cpp in Sources */,
-				42CC56001809A4EF00AAD8AD /* gameplay-main-linux.cpp in Sources */,
-				42CC598A1809A4EF00AAD8AD /* Ray.cpp in Sources */,
-				42CC56041809A4EF00AAD8AD /* gameplay-main-windows.cpp in Sources */,
-				424F33EC1A60C28600395438 /* lua_ThemeSideRegions.cpp in Sources */,
-				42CC59AE1809A4EF00AAD8AD /* ScreenDisplayer.cpp in Sources */,
-				424F332E1A60C28600395438 /* lua_Camera.cpp in Sources */,
-				424F33BA1A60C28600395438 /* lua_Ray.cpp in Sources */,
-				42CC599A1809A4EF00AAD8AD /* RenderTarget.cpp in Sources */,
-				42CC59421809A4EF00AAD8AD /* PhysicsController.cpp in Sources */,
-				42CC59E61809A4EF00AAD8AD /* Technique.cpp in Sources */,
-				424F33E01A60C28600395438 /* lua_TerrainPatch.cpp in Sources */,
-				424F33D41A60C28600395438 /* lua_Slider.cpp in Sources */,
-				424F33741A60C28600395438 /* lua_MeshBatch.cpp in Sources */,
-				42CC598E1809A4EF00AAD8AD /* Rectangle.cpp in Sources */,
-				42CC55DE1809A4EF00AAD8AD /* FlowLayout.cpp in Sources */,
-				424F337E1A60C28600395438 /* lua_Node.cpp in Sources */,
-				424F33101A60C28600395438 /* lua_all_bindings.cpp in Sources */,
-				4204EC411A2EB8310074FCE9 /* TileSet.cpp in Sources */,
-				42CC59F61809A4EF00AAD8AD /* Texture.cpp in Sources */,
-				42CC55CA1809A4EF00AAD8AD /* Curve.cpp in Sources */,
-				42CC599E1809A4EF00AAD8AD /* Scene.cpp in Sources */,
-				42CC593E1809A4EF00AAD8AD /* PhysicsConstraint.cpp in Sources */,
-				424F33261A60C28600395438 /* lua_BoundingBox.cpp in Sources */,
-				42CC55981809A4EF00AAD8AD /* AudioBuffer.cpp in Sources */,
-				42CC55A41809A4EF00AAD8AD /* AudioSource.cpp in Sources */,
-				424F33DC1A60C28600395438 /* lua_Technique.cpp in Sources */,
-				42CC55C61809A4EF00AAD8AD /* Control.cpp in Sources */,
-				424F33501A60C28600395438 /* lua_Gamepad.cpp in Sources */,
-				424F34001A60C28600395438 /* lua_Vector3.cpp in Sources */,
-				42CC56161809A4EF00AAD8AD /* Joint.cpp in Sources */,
-				42CC59961809A4EF00AAD8AD /* RenderState.cpp in Sources */,
-				424F33841A60C28600395438 /* lua_Pass.cpp in Sources */,
-				424F33481A60C28600395438 /* lua_Form.cpp in Sources */,
-				424F340A1A60C28600395438 /* lua_VerticalLayout.cpp in Sources */,
-				424F33641A60C28600395438 /* lua_Layout.cpp in Sources */,
-				424F333E1A60C28600395438 /* lua_Drawable.cpp in Sources */,
-				42CC59721809A4EF00AAD8AD /* PlatformAndroid.cpp in Sources */,
-				424F336C1A60C28600395438 /* lua_MaterialParameter.cpp in Sources */,
-				42CC55881809A4EF00AAD8AD /* AnimationClip.cpp in Sources */,
-				42CC59921809A4EF00AAD8AD /* Ref.cpp in Sources */,
-				424F33921A60C28600395438 /* lua_PhysicsConstraint.cpp in Sources */,
-				42CC595A1809A4EF00AAD8AD /* PhysicsSocketConstraint.cpp in Sources */,
-				42CC59EA1809A4EF00AAD8AD /* Terrain.cpp in Sources */,
-				424F338C1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp in Sources */,
-				42CC597E1809A4EF00AAD8AD /* Properties.cpp in Sources */,
-				42CC5A161809A4EF00AAD8AD /* VertexAttributeBinding.cpp in Sources */,
-				424F33761A60C28600395438 /* lua_MeshPart.cpp in Sources */,
-				42CC59B21809A4EF00AAD8AD /* ScriptController.cpp in Sources */,
-				424F33421A60C28600395438 /* lua_FileSystem.cpp in Sources */,
-				42CC55AA1809A4EF00AAD8AD /* BoundingBox.cpp in Sources */,
-				42CC55941809A4EF00AAD8AD /* AnimationValue.cpp in Sources */,
-				DD4FBEA51A0C0D240015D30C /* Script.cpp in Sources */,
-				424F334A1A60C28600395438 /* lua_FrameBuffer.cpp in Sources */,
-				424F33DE1A60C28600395438 /* lua_Terrain.cpp in Sources */,
-				424F33CA1A60C28600395438 /* lua_Script.cpp in Sources */,
-				424F33D61A60C28600395438 /* lua_Sprite.cpp in Sources */,
-				42CC5A0E1809A4EF00AAD8AD /* Vector3.cpp in Sources */,
-				424F33281A60C28600395438 /* lua_BoundingSphere.cpp in Sources */,
-				42CC55BA1809A4EF00AAD8AD /* Camera.cpp in Sources */,
-				42CC59201809A4EF00AAD8AD /* Model.cpp in Sources */,
-				42CC59EE1809A4EF00AAD8AD /* TerrainPatch.cpp in Sources */,
-				424F33441A60C28600395438 /* lua_FlowLayout.cpp in Sources */,
-				424F33221A60C28600395438 /* lua_AudioListener.cpp in Sources */,
-				424F33461A60C28600395438 /* lua_Font.cpp in Sources */,
-				424F339A1A60C28600395438 /* lua_PhysicsControllerListener.cpp in Sources */,
-				42CC557C1809A4EF00AAD8AD /* AIState.cpp in Sources */,
-				424F33141A60C28600395438 /* lua_AnimationClip.cpp in Sources */,
-				42CC59001809A4EF00AAD8AD /* Material.cpp in Sources */,
-				424F33801A60C28600395438 /* lua_NodeCloneContext.cpp in Sources */,
-				424F339C1A60C28600395438 /* lua_PhysicsFixedConstraint.cpp in Sources */,
-				426F8317187F72A700640CBA /* JoystickControl.cpp in Sources */,
-				424F33F21A60C28600395438 /* lua_ThemeUVs.cpp in Sources */,
-				42CC5A1E1809A4EF00AAD8AD /* VerticalLayout.cpp in Sources */,
-				424F33FA1A60C28600395438 /* lua_TransformListener.cpp in Sources */,
-				424F33561A60C28600395438 /* lua_HeightField.cpp in Sources */,
-				42CC59821809A4EF00AAD8AD /* Quaternion.cpp in Sources */,
-				42CC59E01809A4EF00AAD8AD /* SpriteBatch.cpp in Sources */,
-				42CC59521809A4EF00AAD8AD /* PhysicsHingeConstraint.cpp in Sources */,
-				424F33861A60C28600395438 /* lua_PhysicsCharacter.cpp in Sources */,
-				424F335C1A60C28600395438 /* lua_Joint.cpp in Sources */,
-				42CC55EE1809A4EF00AAD8AD /* Frustum.cpp in Sources */,
-				424F33D21A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp in Sources */,
-				424F33C61A60C28600395438 /* lua_Scene.cpp in Sources */,
-				42CC55901809A4EF00AAD8AD /* AnimationTarget.cpp in Sources */,
-				424F33521A60C28600395438 /* lua_Gesture.cpp in Sources */,
-				424F33601A60C28600395438 /* lua_Keyboard.cpp in Sources */,
-				42CC55D61809A4EF00AAD8AD /* Effect.cpp in Sources */,
-				42CC562C1809A4EF00AAD8AD /* Logger.cpp in Sources */,
-				424F330C1A60C28600395438 /* lua_AIStateListener.cpp in Sources */,
-				42CC56281809A4EF00AAD8AD /* Light.cpp in Sources */,
-				42CC59041809A4EF00AAD8AD /* MaterialParameter.cpp in Sources */,
-				42CC55841809A4EF00AAD8AD /* Animation.cpp in Sources */,
-				42CC558C1809A4EF00AAD8AD /* AnimationController.cpp in Sources */,
-				42CC59F21809A4EF00AAD8AD /* TextBox.cpp in Sources */,
-				424F33B21A60C28600395438 /* lua_Platform.cpp in Sources */,
-				424F33041A60C28600395438 /* lua_AIAgentListener.cpp in Sources */,
-				42CC5A1A1809A4EF00AAD8AD /* VertexFormat.cpp in Sources */,
-				42CC5A061809A4EF00AAD8AD /* Transform.cpp in Sources */,
-				424F33821A60C28600395438 /* lua_ParticleEmitter.cpp in Sources */,
-				42CC559C1809A4EF00AAD8AD /* AudioController.cpp in Sources */,
-				42CC55BE1809A4EF00AAD8AD /* CheckBox.cpp in Sources */,
-				42CC5A0A1809A4EF00AAD8AD /* Vector2.cpp in Sources */,
-				424F33D01A60C28600395438 /* lua_ScriptTargetEvent.cpp in Sources */,
-				42CC55A01809A4EF00AAD8AD /* AudioListener.cpp in Sources */,
-				424F33981A60C28600395438 /* lua_PhysicsControllerHitResult.cpp in Sources */,
-				424F335A1A60C28600395438 /* lua_ImageControl.cpp in Sources */,
-				424F33781A60C28600395438 /* lua_MeshSkin.cpp in Sources */,
-				424F33401A60C28600395438 /* lua_Effect.cpp in Sources */,
-				42CC5A121809A4EF00AAD8AD /* Vector4.cpp in Sources */,
-				424F33241A60C28600395438 /* lua_AudioSource.cpp in Sources */,
-				424F33C01A60C28600395438 /* lua_RenderState.cpp in Sources */,
-				424F33961A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp in Sources */,
-				42CC59BA1809A4EF00AAD8AD /* Slider.cpp in Sources */,
-				42CC59321809A4EF00AAD8AD /* PhysicsCharacter.cpp in Sources */,
-				424F33201A60C28600395438 /* lua_AudioController.cpp in Sources */,
-				424F33B41A60C28600395438 /* lua_Properties.cpp in Sources */,
-				424F33001A60C28600395438 /* lua_AbsoluteLayout.cpp in Sources */,
-				424F33BE1A60C28600395438 /* lua_Ref.cpp in Sources */,
-				424F337A1A60C28600395438 /* lua_Model.cpp in Sources */,
-				424F33681A60C28600395438 /* lua_Logger.cpp in Sources */,
-				42CC59081809A4EF00AAD8AD /* MathUtil.cpp in Sources */,
-				424F339E1A60C28600395438 /* lua_PhysicsGenericConstraint.cpp in Sources */,
-				42CC55EA1809A4EF00AAD8AD /* FrameBuffer.cpp in Sources */,
-				424F33341A60C28600395438 /* lua_Container.cpp in Sources */,
-				42CC59561809A4EF00AAD8AD /* PhysicsRigidBody.cpp in Sources */,
-				42CC59261809A4EF00AAD8AD /* Node.cpp in Sources */,
-				424F33BC1A60C28600395438 /* lua_Rectangle.cpp in Sources */,
-				42CC597A1809A4EF00AAD8AD /* PlatformMacOSX.mm in Sources */,
-				424F33D81A60C28600395438 /* lua_SpriteBatch.cpp in Sources */,
-				424F33A81A60C28600395438 /* lua_PhysicsSocketConstraint.cpp in Sources */,
-				424F33381A60C28600395438 /* lua_ControlListener.cpp in Sources */,
-				424F34041A60C28600395438 /* lua_VertexAttributeBinding.cpp in Sources */,
-				4204EC451A2F878C0074FCE9 /* Sprite.cpp in Sources */,
-				424F337C1A60C28600395438 /* lua_Mouse.cpp in Sources */,
-				424F333C1A60C28600395438 /* lua_DepthStencilTarget.cpp in Sources */,
-				42CC592A1809A4EF00AAD8AD /* ParticleEmitter.cpp in Sources */,
-				42CC560A1809A4EF00AAD8AD /* HeightField.cpp in Sources */,
-				42D9299B1A6051EC0073258D /* Drawable.cpp in Sources */,
-				424F33901A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp in Sources */,
-				42CC55AE1809A4EF00AAD8AD /* BoundingSphere.cpp in Sources */,
-				42CC55CE1809A4EF00AAD8AD /* DebugNew.cpp in Sources */,
-				424F33581A60C28600395438 /* lua_Image.cpp in Sources */,
-				424F332C1A60C28600395438 /* lua_Button.cpp in Sources */,
-				424F33B01A60C28600395438 /* lua_Plane.cpp in Sources */,
-				42CC59141809A4EF00AAD8AD /* MeshBatch.cpp in Sources */,
-				424F33CC1A60C28600395438 /* lua_ScriptController.cpp in Sources */,
-				42CC55701809A4EF00AAD8AD /* AIAgent.cpp in Sources */,
-				424F330E1A60C28600395438 /* lua_AIStateMachine.cpp in Sources */,
-				424F33C41A60C28600395438 /* lua_RenderTarget.cpp in Sources */,
-				424F33DA1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp in Sources */,
-				42CC55D21809A4EF00AAD8AD /* DepthStencilTarget.cpp in Sources */,
-				42CC55B61809A4EF00AAD8AD /* Button.cpp in Sources */,
-				424F335E1A60C28600395438 /* lua_JoystickControl.cpp in Sources */,
-				42CC596A1809A4EF00AAD8AD /* Plane.cpp in Sources */,
-				424F33A21A60C28600395438 /* lua_PhysicsHingeConstraint.cpp in Sources */,
-				42CC55E61809A4EF00AAD8AD /* Form.cpp in Sources */,
-				42CC55801809A4EF00AAD8AD /* AIStateMachine.cpp in Sources */,
-				42CC560E1809A4EF00AAD8AD /* Image.cpp in Sources */,
-				424F33881A60C28600395438 /* lua_PhysicsCollisionObject.cpp in Sources */,
-				42CC591C1809A4EF00AAD8AD /* MeshSkin.cpp in Sources */,
-				42CC56021809A4EF00AAD8AD /* gameplay-main-macosx.mm in Sources */,
-				420BBC0E1817416F00C7B720 /* ControlFactory.cpp in Sources */,
-				424F33941A60C28600395438 /* lua_PhysicsController.cpp in Sources */,
-				424F331A1A60C28600395438 /* lua_AnimationTarget.cpp in Sources */,
-				424F33F61A60C28600395438 /* lua_Touch.cpp in Sources */,
-				424F34021A60C28600395438 /* lua_Vector4.cpp in Sources */,
-				424F33AE1A60C28600395438 /* lua_PhysicsVehicleWheel.cpp in Sources */,
-				424F33E61A60C28600395438 /* lua_Texture.cpp in Sources */,
-				42CC55741809A4EF00AAD8AD /* AIController.cpp in Sources */,
-				42CC59361809A4EF00AAD8AD /* PhysicsCollisionObject.cpp in Sources */,
-				424F33A01A60C28600395438 /* lua_PhysicsGhostObject.cpp in Sources */,
-				424F33661A60C28600395438 /* lua_Light.cpp in Sources */,
-				424F33EA1A60C28600395438 /* lua_Theme.cpp in Sources */,
-				424F33FC1A60C28600395438 /* lua_Uniform.cpp in Sources */,
-				42CC595E1809A4EF00AAD8AD /* PhysicsSpringConstraint.cpp in Sources */,
-				424F33AC1A60C28600395438 /* lua_PhysicsVehicle.cpp in Sources */,
-				42CC59661809A4EF00AAD8AD /* PhysicsVehicleWheel.cpp in Sources */,
-				424F33541A60C28600395438 /* lua_Global.cpp in Sources */,
-				424F33361A60C28600395438 /* lua_Control.cpp in Sources */,
-				42CC594E1809A4EF00AAD8AD /* PhysicsGhostObject.cpp in Sources */,
-				424F33081A60C28600395438 /* lua_AIMessage.cpp in Sources */,
-				42CC597C1809A4EF00AAD8AD /* PlatformWindows.cpp in Sources */,
-				42CC55B21809A4EF00AAD8AD /* Bundle.cpp in Sources */,
-				42CC592E1809A4EF00AAD8AD /* Pass.cpp in Sources */,
-				424F33621A60C28600395438 /* lua_Label.cpp in Sources */,
-				42CC55F61809A4EF00AAD8AD /* Gamepad.cpp in Sources */,
-				42CC56201809A4EF00AAD8AD /* Label.cpp in Sources */,
-				42CC59B61809A4EF00AAD8AD /* ScriptTarget.cpp in Sources */,
-				424F333A1A60C28600395438 /* lua_Curve.cpp in Sources */,
-				42CC59FE1809A4EF00AAD8AD /* ThemeStyle.cpp in Sources */,
-				424F33C81A60C28600395438 /* lua_ScreenDisplayer.cpp in Sources */,
-				42CC59A21809A4EF00AAD8AD /* SceneLoader.cpp in Sources */,
-				424F34081A60C28600395438 /* lua_VertexFormatElement.cpp in Sources */,
-				42CC556C1809A4EF00AAD8AD /* AbsoluteLayout.cpp in Sources */,
-				424F336A1A60C28600395438 /* lua_Material.cpp in Sources */,
-				424F334E1A60C28600395438 /* lua_Game.cpp in Sources */,
-				42CC59181809A4EF00AAD8AD /* MeshPart.cpp in Sources */,
-				42CC55FA1809A4EF00AAD8AD /* gameplay-main-android.cpp in Sources */,
-				424F336E1A60C28600395438 /* lua_MathUtil.cpp in Sources */,
-				42CC55781809A4EF00AAD8AD /* AIMessage.cpp in Sources */,
-				424F33B81A60C28600395438 /* lua_RadioButton.cpp in Sources */,
-				424F33061A60C28600395438 /* lua_AIController.cpp in Sources */,
-				424F338A1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp in Sources */,
-				424F33C21A60C28600395438 /* lua_RenderStateStateBlock.cpp in Sources */,
-				42CC594A1809A4EF00AAD8AD /* PhysicsGenericConstraint.cpp in Sources */,
-				42CC593A1809A4EF00AAD8AD /* PhysicsCollisionShape.cpp in Sources */,
-				424F33121A60C28600395438 /* lua_Animation.cpp in Sources */,
-				42CC59FA1809A4EF00AAD8AD /* Theme.cpp in Sources */,
-				424F34061A60C28600395438 /* lua_VertexFormat.cpp in Sources */,
-				424F33F81A60C28600395438 /* lua_Transform.cpp in Sources */,
-				424F33181A60C28600395438 /* lua_AnimationController.cpp in Sources */,
-				424F33301A60C28600395438 /* lua_CameraListener.cpp in Sources */,
-				424F33E81A60C28600395438 /* lua_TextureSampler.cpp in Sources */,
-				424F33701A60C28600395438 /* lua_Matrix.cpp in Sources */,
-				42CC55C21809A4EF00AAD8AD /* Container.cpp in Sources */,
-				424F33CE1A60C28600395438 /* lua_ScriptTarget.cpp in Sources */,
-				424F33AA1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp in Sources */,
-				42CC59781809A4EF00AAD8AD /* PlatformLinux.cpp in Sources */,
-				424F33A41A60C28600395438 /* lua_PhysicsRigidBody.cpp in Sources */,
-				42CC59461809A4EF00AAD8AD /* PhysicsFixedConstraint.cpp in Sources */,
-				424F334C1A60C28600395438 /* lua_Frustum.cpp in Sources */,
-				424F33EE1A60C28600395438 /* lua_ThemeStyle.cpp in Sources */,
-				424F33321A60C28600395438 /* lua_CheckBox.cpp in Sources */,
-				424F331E1A60C28600395438 /* lua_AudioBuffer.cpp in Sources */,
-				424F33161A60C28600395438 /* lua_AnimationClipListener.cpp in Sources */,
-				424F33F41A60C28600395438 /* lua_TileSet.cpp in Sources */,
-				424F33721A60C28600395438 /* lua_Mesh.cpp in Sources */,
-				42CC55F21809A4EF00AAD8AD /* Game.cpp in Sources */,
-				42CC59101809A4EF00AAD8AD /* Mesh.cpp in Sources */,
-				424F33E21A60C28600395438 /* lua_Text.cpp in Sources */,
-				42CC55DA1809A4EF00AAD8AD /* FileSystem.cpp in Sources */,
-				42CC59621809A4EF00AAD8AD /* PhysicsVehicle.cpp in Sources */,
-				42ECC3FA1A4EF5A00036C839 /* Text.cpp in Sources */,
-				42CC56121809A4EF00AAD8AD /* ImageControl.cpp in Sources */,
-				42CC55E21809A4EF00AAD8AD /* Font.cpp in Sources */,
-				424F332A1A60C28600395438 /* lua_Bundle.cpp in Sources */,
-				424F33F01A60C28600395438 /* lua_ThemeThemeImage.cpp in Sources */,
-				42CC56241809A4EF00AAD8AD /* Layout.cpp in Sources */,
-				42CC590C1809A4EF00AAD8AD /* Matrix.cpp in Sources */,
-				424F33B61A60C28600395438 /* lua_Quaternion.cpp in Sources */,
-				424F33021A60C28600395438 /* lua_AIAgent.cpp in Sources */,
-				424F33E41A60C28600395438 /* lua_TextBox.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5B04C52C14BFCFE100EB0071 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				424F33A71A60C28600395438 /* lua_PhysicsRigidBodyParameters.cpp in Sources */,
-				42CC59871809A4EF00AAD8AD /* RadioButton.cpp in Sources */,
-				424F330B1A60C28600395438 /* lua_AIState.cpp in Sources */,
-				42CC596F1809A4EF00AAD8AD /* Platform.cpp in Sources */,
-				424F331D1A60C28600395438 /* lua_AnimationValue.cpp in Sources */,
-				424F338F1A60C28600395438 /* lua_PhysicsCollisionShape.cpp in Sources */,
-				424F33FF1A60C28600395438 /* lua_Vector2.cpp in Sources */,
-				42CC56011809A4EF00AAD8AD /* gameplay-main-linux.cpp in Sources */,
-				42CC598B1809A4EF00AAD8AD /* Ray.cpp in Sources */,
-				42CC56051809A4EF00AAD8AD /* gameplay-main-windows.cpp in Sources */,
-				424F33ED1A60C28600395438 /* lua_ThemeSideRegions.cpp in Sources */,
-				42CC59AF1809A4EF00AAD8AD /* ScreenDisplayer.cpp in Sources */,
-				424F332F1A60C28600395438 /* lua_Camera.cpp in Sources */,
-				424F33BB1A60C28600395438 /* lua_Ray.cpp in Sources */,
-				42CC599B1809A4EF00AAD8AD /* RenderTarget.cpp in Sources */,
-				42CC59431809A4EF00AAD8AD /* PhysicsController.cpp in Sources */,
-				42CC59E71809A4EF00AAD8AD /* Technique.cpp in Sources */,
-				424F33E11A60C28600395438 /* lua_TerrainPatch.cpp in Sources */,
-				424F33D51A60C28600395438 /* lua_Slider.cpp in Sources */,
-				424F33751A60C28600395438 /* lua_MeshBatch.cpp in Sources */,
-				42CC598F1809A4EF00AAD8AD /* Rectangle.cpp in Sources */,
-				42CC55DF1809A4EF00AAD8AD /* FlowLayout.cpp in Sources */,
-				424F337F1A60C28600395438 /* lua_Node.cpp in Sources */,
-				424F33111A60C28600395438 /* lua_all_bindings.cpp in Sources */,
-				4204EC421A2EB8310074FCE9 /* TileSet.cpp in Sources */,
-				42CC59F71809A4EF00AAD8AD /* Texture.cpp in Sources */,
-				42CC55CB1809A4EF00AAD8AD /* Curve.cpp in Sources */,
-				42CC599F1809A4EF00AAD8AD /* Scene.cpp in Sources */,
-				42CC55FF1809A4EF00AAD8AD /* gameplay-main-ios.mm in Sources */,
-				424F33271A60C28600395438 /* lua_BoundingBox.cpp in Sources */,
-				42CC593F1809A4EF00AAD8AD /* PhysicsConstraint.cpp in Sources */,
-				42CC55991809A4EF00AAD8AD /* AudioBuffer.cpp in Sources */,
-				424F33DD1A60C28600395438 /* lua_Technique.cpp in Sources */,
-				42CC55A51809A4EF00AAD8AD /* AudioSource.cpp in Sources */,
-				424F33511A60C28600395438 /* lua_Gamepad.cpp in Sources */,
-				424F34011A60C28600395438 /* lua_Vector3.cpp in Sources */,
-				42CC55C71809A4EF00AAD8AD /* Control.cpp in Sources */,
-				42CC56171809A4EF00AAD8AD /* Joint.cpp in Sources */,
-				424F33851A60C28600395438 /* lua_Pass.cpp in Sources */,
-				424F33491A60C28600395438 /* lua_Form.cpp in Sources */,
-				424F340B1A60C28600395438 /* lua_VerticalLayout.cpp in Sources */,
-				424F33651A60C28600395438 /* lua_Layout.cpp in Sources */,
-				424F333F1A60C28600395438 /* lua_Drawable.cpp in Sources */,
-				42CC59971809A4EF00AAD8AD /* RenderState.cpp in Sources */,
-				424F336D1A60C28600395438 /* lua_MaterialParameter.cpp in Sources */,
-				42CC59731809A4EF00AAD8AD /* PlatformAndroid.cpp in Sources */,
-				42CC55891809A4EF00AAD8AD /* AnimationClip.cpp in Sources */,
-				424F33931A60C28600395438 /* lua_PhysicsConstraint.cpp in Sources */,
-				42CC59931809A4EF00AAD8AD /* Ref.cpp in Sources */,
-				42CC595B1809A4EF00AAD8AD /* PhysicsSocketConstraint.cpp in Sources */,
-				424F338D1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionPair.cpp in Sources */,
-				42CC59EB1809A4EF00AAD8AD /* Terrain.cpp in Sources */,
-				42CC597F1809A4EF00AAD8AD /* Properties.cpp in Sources */,
-				424F33771A60C28600395438 /* lua_MeshPart.cpp in Sources */,
-				42CC5A171809A4EF00AAD8AD /* VertexAttributeBinding.cpp in Sources */,
-				424F33431A60C28600395438 /* lua_FileSystem.cpp in Sources */,
-				42CC59B31809A4EF00AAD8AD /* ScriptController.cpp in Sources */,
-				42CC55AB1809A4EF00AAD8AD /* BoundingBox.cpp in Sources */,
-				DD4FBEA61A0C0D240015D30C /* Script.cpp in Sources */,
-				424F334B1A60C28600395438 /* lua_FrameBuffer.cpp in Sources */,
-				424F33DF1A60C28600395438 /* lua_Terrain.cpp in Sources */,
-				424F33CB1A60C28600395438 /* lua_Script.cpp in Sources */,
-				424F33D71A60C28600395438 /* lua_Sprite.cpp in Sources */,
-				42CC55951809A4EF00AAD8AD /* AnimationValue.cpp in Sources */,
-				424F33291A60C28600395438 /* lua_BoundingSphere.cpp in Sources */,
-				42CC5A0F1809A4EF00AAD8AD /* Vector3.cpp in Sources */,
-				42CC55BB1809A4EF00AAD8AD /* Camera.cpp in Sources */,
-				42CC59211809A4EF00AAD8AD /* Model.cpp in Sources */,
-				424F33451A60C28600395438 /* lua_FlowLayout.cpp in Sources */,
-				424F33231A60C28600395438 /* lua_AudioListener.cpp in Sources */,
-				424F33471A60C28600395438 /* lua_Font.cpp in Sources */,
-				424F339B1A60C28600395438 /* lua_PhysicsControllerListener.cpp in Sources */,
-				42CC59EF1809A4EF00AAD8AD /* TerrainPatch.cpp in Sources */,
-				424F33151A60C28600395438 /* lua_AnimationClip.cpp in Sources */,
-				42CC557D1809A4EF00AAD8AD /* AIState.cpp in Sources */,
-				424F33811A60C28600395438 /* lua_NodeCloneContext.cpp in Sources */,
-				424F339D1A60C28600395438 /* lua_PhysicsFixedConstraint.cpp in Sources */,
-				426F8318187F72A700640CBA /* JoystickControl.cpp in Sources */,
-				424F33F31A60C28600395438 /* lua_ThemeUVs.cpp in Sources */,
-				42CC59011809A4EF00AAD8AD /* Material.cpp in Sources */,
-				424F33FB1A60C28600395438 /* lua_TransformListener.cpp in Sources */,
-				424F33571A60C28600395438 /* lua_HeightField.cpp in Sources */,
-				42CC5A1F1809A4EF00AAD8AD /* VerticalLayout.cpp in Sources */,
-				42CC59831809A4EF00AAD8AD /* Quaternion.cpp in Sources */,
-				42CC59E11809A4EF00AAD8AD /* SpriteBatch.cpp in Sources */,
-				424F33871A60C28600395438 /* lua_PhysicsCharacter.cpp in Sources */,
-				424F335D1A60C28600395438 /* lua_Joint.cpp in Sources */,
-				42CC59531809A4EF00AAD8AD /* PhysicsHingeConstraint.cpp in Sources */,
-				424F33D31A60C28600395438 /* lua_ScriptTargetEventRegistry.cpp in Sources */,
-				424F33C71A60C28600395438 /* lua_Scene.cpp in Sources */,
-				42CC55EF1809A4EF00AAD8AD /* Frustum.cpp in Sources */,
-				424F33531A60C28600395438 /* lua_Gesture.cpp in Sources */,
-				424F33611A60C28600395438 /* lua_Keyboard.cpp in Sources */,
-				42CC55911809A4EF00AAD8AD /* AnimationTarget.cpp in Sources */,
-				42CC55D71809A4EF00AAD8AD /* Effect.cpp in Sources */,
-				424F330D1A60C28600395438 /* lua_AIStateListener.cpp in Sources */,
-				42CC562D1809A4EF00AAD8AD /* Logger.cpp in Sources */,
-				42CC56291809A4EF00AAD8AD /* Light.cpp in Sources */,
-				42CC59051809A4EF00AAD8AD /* MaterialParameter.cpp in Sources */,
-				42CC55851809A4EF00AAD8AD /* Animation.cpp in Sources */,
-				42CC558D1809A4EF00AAD8AD /* AnimationController.cpp in Sources */,
-				424F33B31A60C28600395438 /* lua_Platform.cpp in Sources */,
-				424F33051A60C28600395438 /* lua_AIAgentListener.cpp in Sources */,
-				42CC59771809A4EF00AAD8AD /* PlatformiOS.mm in Sources */,
-				42CC59F31809A4EF00AAD8AD /* TextBox.cpp in Sources */,
-				424F33831A60C28600395438 /* lua_ParticleEmitter.cpp in Sources */,
-				42CC5A1B1809A4EF00AAD8AD /* VertexFormat.cpp in Sources */,
-				42CC5A071809A4EF00AAD8AD /* Transform.cpp in Sources */,
-				42CC559D1809A4EF00AAD8AD /* AudioController.cpp in Sources */,
-				424F33D11A60C28600395438 /* lua_ScriptTargetEvent.cpp in Sources */,
-				42CC55BF1809A4EF00AAD8AD /* CheckBox.cpp in Sources */,
-				424F33991A60C28600395438 /* lua_PhysicsControllerHitResult.cpp in Sources */,
-				424F335B1A60C28600395438 /* lua_ImageControl.cpp in Sources */,
-				424F33791A60C28600395438 /* lua_MeshSkin.cpp in Sources */,
-				424F33411A60C28600395438 /* lua_Effect.cpp in Sources */,
-				42CC5A0B1809A4EF00AAD8AD /* Vector2.cpp in Sources */,
-				424F33251A60C28600395438 /* lua_AudioSource.cpp in Sources */,
-				424F33C11A60C28600395438 /* lua_RenderState.cpp in Sources */,
-				424F33971A60C28600395438 /* lua_PhysicsControllerHitFilter.cpp in Sources */,
-				42CC55A11809A4EF00AAD8AD /* AudioListener.cpp in Sources */,
-				42CC5A131809A4EF00AAD8AD /* Vector4.cpp in Sources */,
-				424F33211A60C28600395438 /* lua_AudioController.cpp in Sources */,
-				424F33B51A60C28600395438 /* lua_Properties.cpp in Sources */,
-				424F33011A60C28600395438 /* lua_AbsoluteLayout.cpp in Sources */,
-				424F33BF1A60C28600395438 /* lua_Ref.cpp in Sources */,
-				424F337B1A60C28600395438 /* lua_Model.cpp in Sources */,
-				424F33691A60C28600395438 /* lua_Logger.cpp in Sources */,
-				42CC59BB1809A4EF00AAD8AD /* Slider.cpp in Sources */,
-				424F339F1A60C28600395438 /* lua_PhysicsGenericConstraint.cpp in Sources */,
-				42CC59331809A4EF00AAD8AD /* PhysicsCharacter.cpp in Sources */,
-				424F33351A60C28600395438 /* lua_Container.cpp in Sources */,
-				42CC59091809A4EF00AAD8AD /* MathUtil.cpp in Sources */,
-				42CC55EB1809A4EF00AAD8AD /* FrameBuffer.cpp in Sources */,
-				424F33BD1A60C28600395438 /* lua_Rectangle.cpp in Sources */,
-				42CC59571809A4EF00AAD8AD /* PhysicsRigidBody.cpp in Sources */,
-				424F33D91A60C28600395438 /* lua_SpriteBatch.cpp in Sources */,
-				424F33A91A60C28600395438 /* lua_PhysicsSocketConstraint.cpp in Sources */,
-				424F33391A60C28600395438 /* lua_ControlListener.cpp in Sources */,
-				424F34051A60C28600395438 /* lua_VertexAttributeBinding.cpp in Sources */,
-				4204EC461A2F878C0074FCE9 /* Sprite.cpp in Sources */,
-				424F337D1A60C28600395438 /* lua_Mouse.cpp in Sources */,
-				424F333D1A60C28600395438 /* lua_DepthStencilTarget.cpp in Sources */,
-				42CC59271809A4EF00AAD8AD /* Node.cpp in Sources */,
-				42CC592B1809A4EF00AAD8AD /* ParticleEmitter.cpp in Sources */,
-				42D9299C1A6051EC0073258D /* Drawable.cpp in Sources */,
-				424F33911A60C28600395438 /* lua_PhysicsCollisionShapeDefinition.cpp in Sources */,
-				42CC560B1809A4EF00AAD8AD /* HeightField.cpp in Sources */,
-				42CC55AF1809A4EF00AAD8AD /* BoundingSphere.cpp in Sources */,
-				424F33591A60C28600395438 /* lua_Image.cpp in Sources */,
-				424F332D1A60C28600395438 /* lua_Button.cpp in Sources */,
-				424F33B11A60C28600395438 /* lua_Plane.cpp in Sources */,
-				42CC55CF1809A4EF00AAD8AD /* DebugNew.cpp in Sources */,
-				424F33CD1A60C28600395438 /* lua_ScriptController.cpp in Sources */,
-				42CC59151809A4EF00AAD8AD /* MeshBatch.cpp in Sources */,
-				424F330F1A60C28600395438 /* lua_AIStateMachine.cpp in Sources */,
-				424F33C51A60C28600395438 /* lua_RenderTarget.cpp in Sources */,
-				424F33DB1A60C28600395438 /* lua_SpriteBatchSpriteVertex.cpp in Sources */,
-				42CC55711809A4EF00AAD8AD /* AIAgent.cpp in Sources */,
-				42CC55D31809A4EF00AAD8AD /* DepthStencilTarget.cpp in Sources */,
-				424F335F1A60C28600395438 /* lua_JoystickControl.cpp in Sources */,
-				42CC55B71809A4EF00AAD8AD /* Button.cpp in Sources */,
-				424F33A31A60C28600395438 /* lua_PhysicsHingeConstraint.cpp in Sources */,
-				42CC596B1809A4EF00AAD8AD /* Plane.cpp in Sources */,
-				42CC55E71809A4EF00AAD8AD /* Form.cpp in Sources */,
-				42CC55811809A4EF00AAD8AD /* AIStateMachine.cpp in Sources */,
-				424F33891A60C28600395438 /* lua_PhysicsCollisionObject.cpp in Sources */,
-				42CC560F1809A4EF00AAD8AD /* Image.cpp in Sources */,
-				42CC591D1809A4EF00AAD8AD /* MeshSkin.cpp in Sources */,
-				420BBC0F1817416F00C7B720 /* ControlFactory.cpp in Sources */,
-				424F33951A60C28600395438 /* lua_PhysicsController.cpp in Sources */,
-				424F331B1A60C28600395438 /* lua_AnimationTarget.cpp in Sources */,
-				424F33F71A60C28600395438 /* lua_Touch.cpp in Sources */,
-				424F34031A60C28600395438 /* lua_Vector4.cpp in Sources */,
-				424F33AF1A60C28600395438 /* lua_PhysicsVehicleWheel.cpp in Sources */,
-				424F33E71A60C28600395438 /* lua_Texture.cpp in Sources */,
-				42CC55751809A4EF00AAD8AD /* AIController.cpp in Sources */,
-				42CC59371809A4EF00AAD8AD /* PhysicsCollisionObject.cpp in Sources */,
-				424F33A11A60C28600395438 /* lua_PhysicsGhostObject.cpp in Sources */,
-				424F33671A60C28600395438 /* lua_Light.cpp in Sources */,
-				424F33EB1A60C28600395438 /* lua_Theme.cpp in Sources */,
-				424F33FD1A60C28600395438 /* lua_Uniform.cpp in Sources */,
-				42CC595F1809A4EF00AAD8AD /* PhysicsSpringConstraint.cpp in Sources */,
-				424F33AD1A60C28600395438 /* lua_PhysicsVehicle.cpp in Sources */,
-				42CC59671809A4EF00AAD8AD /* PhysicsVehicleWheel.cpp in Sources */,
-				424F33551A60C28600395438 /* lua_Global.cpp in Sources */,
-				424F33371A60C28600395438 /* lua_Control.cpp in Sources */,
-				42CC594F1809A4EF00AAD8AD /* PhysicsGhostObject.cpp in Sources */,
-				424F33091A60C28600395438 /* lua_AIMessage.cpp in Sources */,
-				42CC597D1809A4EF00AAD8AD /* PlatformWindows.cpp in Sources */,
-				42CC55B31809A4EF00AAD8AD /* Bundle.cpp in Sources */,
-				42CC592F1809A4EF00AAD8AD /* Pass.cpp in Sources */,
-				424F33631A60C28600395438 /* lua_Label.cpp in Sources */,
-				42CC55F71809A4EF00AAD8AD /* Gamepad.cpp in Sources */,
-				42CC56211809A4EF00AAD8AD /* Label.cpp in Sources */,
-				42CC59B71809A4EF00AAD8AD /* ScriptTarget.cpp in Sources */,
-				424F333B1A60C28600395438 /* lua_Curve.cpp in Sources */,
-				42CC59FF1809A4EF00AAD8AD /* ThemeStyle.cpp in Sources */,
-				424F33C91A60C28600395438 /* lua_ScreenDisplayer.cpp in Sources */,
-				42CC59A31809A4EF00AAD8AD /* SceneLoader.cpp in Sources */,
-				424F34091A60C28600395438 /* lua_VertexFormatElement.cpp in Sources */,
-				42CC556D1809A4EF00AAD8AD /* AbsoluteLayout.cpp in Sources */,
-				424F336B1A60C28600395438 /* lua_Material.cpp in Sources */,
-				424F334F1A60C28600395438 /* lua_Game.cpp in Sources */,
-				42CC59191809A4EF00AAD8AD /* MeshPart.cpp in Sources */,
-				42CC55FB1809A4EF00AAD8AD /* gameplay-main-android.cpp in Sources */,
-				424F336F1A60C28600395438 /* lua_MathUtil.cpp in Sources */,
-				42CC55791809A4EF00AAD8AD /* AIMessage.cpp in Sources */,
-				424F33B91A60C28600395438 /* lua_RadioButton.cpp in Sources */,
-				424F33071A60C28600395438 /* lua_AIController.cpp in Sources */,
-				424F338B1A60C28600395438 /* lua_PhysicsCollisionObjectCollisionListener.cpp in Sources */,
-				424F33C31A60C28600395438 /* lua_RenderStateStateBlock.cpp in Sources */,
-				42CC594B1809A4EF00AAD8AD /* PhysicsGenericConstraint.cpp in Sources */,
-				42CC593B1809A4EF00AAD8AD /* PhysicsCollisionShape.cpp in Sources */,
-				424F33131A60C28600395438 /* lua_Animation.cpp in Sources */,
-				42CC59FB1809A4EF00AAD8AD /* Theme.cpp in Sources */,
-				424F34071A60C28600395438 /* lua_VertexFormat.cpp in Sources */,
-				424F33F91A60C28600395438 /* lua_Transform.cpp in Sources */,
-				424F33191A60C28600395438 /* lua_AnimationController.cpp in Sources */,
-				424F33311A60C28600395438 /* lua_CameraListener.cpp in Sources */,
-				424F33E91A60C28600395438 /* lua_TextureSampler.cpp in Sources */,
-				424F33711A60C28600395438 /* lua_Matrix.cpp in Sources */,
-				42CC55C31809A4EF00AAD8AD /* Container.cpp in Sources */,
-				424F33CF1A60C28600395438 /* lua_ScriptTarget.cpp in Sources */,
-				424F33AB1A60C28600395438 /* lua_PhysicsSpringConstraint.cpp in Sources */,
-				42CC59791809A4EF00AAD8AD /* PlatformLinux.cpp in Sources */,
-				424F33A51A60C28600395438 /* lua_PhysicsRigidBody.cpp in Sources */,
-				42CC59471809A4EF00AAD8AD /* PhysicsFixedConstraint.cpp in Sources */,
-				424F334D1A60C28600395438 /* lua_Frustum.cpp in Sources */,
-				424F33EF1A60C28600395438 /* lua_ThemeStyle.cpp in Sources */,
-				424F33331A60C28600395438 /* lua_CheckBox.cpp in Sources */,
-				424F331F1A60C28600395438 /* lua_AudioBuffer.cpp in Sources */,
-				424F33171A60C28600395438 /* lua_AnimationClipListener.cpp in Sources */,
-				424F33F51A60C28600395438 /* lua_TileSet.cpp in Sources */,
-				424F33731A60C28600395438 /* lua_Mesh.cpp in Sources */,
-				42CC55F31809A4EF00AAD8AD /* Game.cpp in Sources */,
-				42CC59111809A4EF00AAD8AD /* Mesh.cpp in Sources */,
-				424F33E31A60C28600395438 /* lua_Text.cpp in Sources */,
-				42CC55DB1809A4EF00AAD8AD /* FileSystem.cpp in Sources */,
-				42CC59631809A4EF00AAD8AD /* PhysicsVehicle.cpp in Sources */,
-				42ECC3FB1A4EF5A00036C839 /* Text.cpp in Sources */,
-				42CC56131809A4EF00AAD8AD /* ImageControl.cpp in Sources */,
-				42CC55E31809A4EF00AAD8AD /* Font.cpp in Sources */,
-				424F332B1A60C28600395438 /* lua_Bundle.cpp in Sources */,
-				424F33F11A60C28600395438 /* lua_ThemeThemeImage.cpp in Sources */,
-				42CC56251809A4EF00AAD8AD /* Layout.cpp in Sources */,
-				42CC590D1809A4EF00AAD8AD /* Matrix.cpp in Sources */,
-				424F33B71A60C28600395438 /* lua_Quaternion.cpp in Sources */,
-				424F33031A60C28600395438 /* lua_AIAgent.cpp in Sources */,
-				424F33E51A60C28600395438 /* lua_TextBox.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		4234D99114686BB6003031B3 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = src/gameplay.h;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = macosx;
-				SUPPORTED_PLATFORMS = "iphonesimulator macosx iphoneos";
-				VALID_ARCHS = "armv7 armv7s arm64 i386 x86_64";
-			};
-			name = Debug;
-		};
-		4234D99214686BB6003031B3 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = src/gameplay.h;
-				SDKROOT = macosx;
-				SUPPORTED_PLATFORMS = "iphonesimulator macosx iphoneos";
-				VALID_ARCHS = "armv7 armv7s arm64 i386 x86_64";
-			};
-			name = Release;
-		};
-		4234D9A914686C52003031B3 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				COMBINE_HIDPI_IMAGES = YES;
-				COPY_PHASE_STRIP = NO;
-				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = "../external-deps/include";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
-				MACOSX_DEPLOYMENT_TARGET = 10.9;
-				ONLY_ACTIVE_ARCH = YES;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				PRODUCT_NAME = gameplay;
-				PUBLIC_HEADERS_FOLDER_PATH = "$(PROJECT_NAME)_include";
-				SHARED_PRECOMPS_DIR = "";
-				SUPPORTED_PLATFORMS = macosx;
-				USER_HEADER_SEARCH_PATHS = "";
-				VALID_ARCHS = x86_64;
-			};
-			name = Debug;
-		};
-		4234D9AA14686C52003031B3 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				COMBINE_HIDPI_IMAGES = YES;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = "../external-deps/include";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
-				MACOSX_DEPLOYMENT_TARGET = 10.9;
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				PRODUCT_NAME = gameplay;
-				PUBLIC_HEADERS_FOLDER_PATH = "$(PROJECT_NAME)_include";
-				SHARED_PRECOMPS_DIR = "";
-				SUPPORTED_PLATFORMS = macosx;
-				USER_HEADER_SEARCH_PATHS = "";
-				VALID_ARCHS = x86_64;
-			};
-			name = Release;
-		};
-		5B04C5C814BFCFE100EB0071 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				DEPLOYMENT_LOCATION = NO;
-				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = "../external-deps/include";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
-				LINK_WITH_STANDARD_LIBRARIES = NO;
-				MACOSX_DEPLOYMENT_TARGET = 10.9;
-				ONLY_ACTIVE_ARCH = YES;
-				OTHER_LDFLAGS = "";
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				PRODUCT_NAME = gameplay;
-				PROVISIONING_PROFILE = "";
-				PUBLIC_HEADERS_FOLDER_PATH = include;
-				SDKROOT = iphoneos;
-				SHARED_PRECOMPS_DIR = "";
-				SKIP_INSTALL = YES;
-				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				USER_HEADER_SEARCH_PATHS = "";
-				VALID_ARCHS = "armv7 armv7s arm64 i386";
-			};
-			name = Debug;
-		};
-		5B04C5C914BFCFE100EB0071 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEPLOYMENT_LOCATION = NO;
-				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_PREPROCESSOR_DEFINITIONS = "";
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = "../external-deps/include";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
-				LINK_WITH_STANDARD_LIBRARIES = NO;
-				MACOSX_DEPLOYMENT_TARGET = 10.9;
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = "";
-				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
-				PRODUCT_NAME = gameplay;
-				PROVISIONING_PROFILE = "";
-				PUBLIC_HEADERS_FOLDER_PATH = include;
-				SDKROOT = iphoneos;
-				SHARED_PRECOMPS_DIR = "";
-				SKIP_INSTALL = YES;
-				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				USER_HEADER_SEARCH_PATHS = "";
-				VALID_ARCHS = "armv7 armv7s arm64 i386";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		4234D98F14686BB6003031B3 /* Build configuration list for PBXProject "gameplay" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				4234D99114686BB6003031B3 /* Debug */,
-				4234D99214686BB6003031B3 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay-macosx" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				4234D9A914686C52003031B3 /* Debug */,
-				4234D9AA14686C52003031B3 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		5B04C5C714BFCFE100EB0071 /* Build configuration list for PBXNativeTarget "gameplay-ios" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5B04C5C814BFCFE100EB0071 /* Debug */,
-				5B04C5C914BFCFE100EB0071 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 4234D98C14686BB6003031B3 /* Project object */;
-}

+ 0 - 68
gameplay/gameplay.xcodeproj/xcshareddata/xcschemes/gameplay-ios.xcscheme

@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "0610"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "5B04C52B14BFCFE100EB0071"
-               BuildableName = "libgameplay.a"
-               BlueprintName = "gameplay-ios"
-               ReferencedContainer = "container:gameplay.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "5B04C52B14BFCFE100EB0071"
-            BuildableName = "libgameplay.a"
-            BlueprintName = "gameplay-ios"
-            ReferencedContainer = "container:gameplay.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 0 - 68
gameplay/gameplay.xcodeproj/xcshareddata/xcschemes/gameplay-macosx.xcscheme

@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "0610"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "4234D99914686C52003031B3"
-               BuildableName = "libgameplay.a"
-               BlueprintName = "gameplay-macosx"
-               ReferencedContainer = "container:gameplay.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "4234D99914686C52003031B3"
-            BuildableName = "libgameplay.a"
-            BlueprintName = "gameplay-macosx"
-            ReferencedContainer = "container:gameplay.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

BIN
gameplay/res/design/arial.ttf


BIN
gameplay/res/design/default-theme.psd


BIN
gameplay/res/design/icon_128.ico


BIN
gameplay/res/design/icon_16.ico


BIN
gameplay/res/design/icon_32.ico


BIN
gameplay/res/design/icon_64.ico


File diff suppressed because it is too large
+ 0 - 27
gameplay/res/design/logo.ai


BIN
gameplay/res/icon.png


BIN
gameplay/res/icon_tray.png


BIN
gameplay/res/logo_black.png


BIN
gameplay/res/logo_powered_black.png


BIN
gameplay/res/logo_powered_white.png


BIN
gameplay/res/logo_white.png


+ 0 - 41
gameplay/res/materials/terrain.material

@@ -1,41 +0,0 @@
-//
-// Default Terrain material file.
-// 
-// In addition to the built-in Node material auto-bindings, the following terrain-specific
-// auto-bindings are also supported:
-//
-// TERRAIN_NORMAL_MAP                   : normal map sampler (if using a normal map)
-// TERRAIN_LAYER_MAPS                   : array of texture samplers for each terrain layer
-// TERRAIN_ROW                          : row index of the current terrain patch
-// TERRAIN_COLUMN                       : column index of the current terrain patch
-//
-// To add lighting (other than ambient) to a terrain, you can add additional pass defines and
-// uniform bindings and handle them in your specific game or renderer. See the gameplay
-// terrain sample for an example.
-//
-material terrain
-{
-    u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-
-    u_normalMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-    //u_normalMap = TERRAIN_NORMAL_MAP
-
-    u_surfaceLayerMaps = TERRAIN_LAYER_MAPS
-
-    u_ambientColor = SCENE_AMBIENT_COLOR
-
-    renderState
-    {
-        cullFace = true
-        depthTest = true
-    }
-
-    technique
-    {
-        pass
-        {
-            vertexShader = res/shaders/terrain.vert
-            fragmentShader = res/shaders/terrain.frag
-        }
-    }
-}

+ 0 - 144
gameplay/res/shaders/colored.frag

@@ -1,144 +0,0 @@
-#ifdef OPENGL_ES
-#ifdef GL_FRAGMENT_PRECISION_HIGH
-precision highp float;
-#else
-precision mediump float;
-#endif
-#endif
-
-#ifndef DIRECTIONAL_LIGHT_COUNT
-#define DIRECTIONAL_LIGHT_COUNT 0
-#endif
-#ifndef SPOT_LIGHT_COUNT
-#define SPOT_LIGHT_COUNT 0
-#endif
-#ifndef POINT_LIGHT_COUNT
-#define POINT_LIGHT_COUNT 0
-#endif
-#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-#define LIGHTING
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform vec3 u_ambientColor;
-uniform vec4 u_diffuseColor;
-
-#if defined(LIGHTMAP)
-uniform sampler2D u_lightmapTexture;
-#endif
-
-#if defined(LIGHTING)
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0)
-uniform vec3 u_directionalLightColor[DIRECTIONAL_LIGHT_COUNT];
-uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-uniform vec3 u_pointLightColor[POINT_LIGHT_COUNT];
-uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
-uniform float u_pointLightRangeInverse[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-uniform vec3 u_spotLightColor[SPOT_LIGHT_COUNT];
-uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
-uniform float u_spotLightRangeInverse[SPOT_LIGHT_COUNT];
-uniform float u_spotLightInnerAngleCos[SPOT_LIGHT_COUNT];
-uniform float u_spotLightOuterAngleCos[SPOT_LIGHT_COUNT];
-#endif
-
-#if defined(SPECULAR)
-uniform float u_specularExponent;
-#endif
-
-#endif
-
-#if defined(MODULATE_COLOR)
-uniform vec4 u_modulateColor;
-#endif
-
-#if defined(MODULATE_ALPHA)
-uniform float u_modulateAlpha;
-#endif
-
-///////////////////////////////////////////////////////////
-// Variables
-vec4 _baseColor;
-
-///////////////////////////////////////////////////////////
-// Varyings
-#if defined(VERTEX_COLOR)
-varying vec3 v_color;
-#endif
-
-#if defined(LIGHTMAP)
-varying vec2 v_texCoord1;
-#endif
-
-#if defined(LIGHTING)
-
-varying vec3 v_normalVector;
-
-#if (POINT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-
-#if defined(SPECULAR)
-varying vec3 v_cameraDirection; 
-#endif
-
-#include "lighting.frag"
-
-#endif
-
-#if defined(CLIP_PLANE)
-varying float v_clipDistance;
-#endif
-
-void main()
-{
-    #if defined(CLIP_PLANE)
-    if(v_clipDistance < 0.0) discard;
-    #endif
- 
-    #if defined(LIGHTING)
-
-    #if defined(VERTEX_COLOR)
-	_baseColor.rgb = v_color;
-    #else
-    _baseColor = u_diffuseColor;
-	#endif
-    
-    gl_FragColor.a = _baseColor.a;
-    gl_FragColor.rgb = getLitPixel();
-    
-    #else
-    
-    #if defined(VERTEX_COLOR)
-    gl_FragColor.rgb = v_color;
-    gl_FragColor.a = 1.0;
-    #else
-    gl_FragColor = u_diffuseColor;
-    #endif
-    
-    #endif
-
-	#if defined(LIGHTMAP)
-	vec4 lightColor = texture2D(u_lightmapTexture, v_texCoord1);
-	gl_FragColor.rgb *= lightColor.rgb;
-	#endif
-
-	#if defined(MODULATE_COLOR)
-    gl_FragColor *= u_modulateColor;
-    #endif
-
-	#if defined(MODULATE_ALPHA)
-    gl_FragColor.a *= u_modulateAlpha;
-    #endif
-}

+ 0 - 149
gameplay/res/shaders/colored.vert

@@ -1,149 +0,0 @@
-#ifndef DIRECTIONAL_LIGHT_COUNT
-#define DIRECTIONAL_LIGHT_COUNT 0
-#endif
-#ifndef SPOT_LIGHT_COUNT
-#define SPOT_LIGHT_COUNT 0
-#endif
-#ifndef POINT_LIGHT_COUNT
-#define POINT_LIGHT_COUNT 0
-#endif
-#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-#define LIGHTING
-#endif
-
-///////////////////////////////////////////////////////////
-// Attributes
-attribute vec4 a_position;
-
-#if defined(SKINNING)
-attribute vec4 a_blendWeights;
-attribute vec4 a_blendIndices;
-#endif
-
-#if defined(LIGHTMAP)
-attribute vec2 a_texCoord1;
-#endif
-
-#if defined(LIGHTING)
-attribute vec3 a_normal;
-#endif
-
-#if defined(VERTEX_COLOR)
-attribute vec3 a_color;
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform mat4 u_worldViewProjectionMatrix;
-
-#if defined(SKINNING)
-uniform vec4 u_matrixPalette[SKINNING_JOINT_COUNT * 3];
-#endif
-
-#if defined(LIGHTING)
-uniform mat4 u_inverseTransposeWorldViewMatrix;
-
-#if (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0) || defined(SPECULAR)
-uniform mat4 u_worldViewMatrix;
-#endif
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0)
-uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0) 
-uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-uniform vec3 u_spotLightPosition[SPOT_LIGHT_COUNT];
-uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-
-#if defined(SPECULAR)
-uniform vec3 u_cameraPosition;
-#endif
-
-#endif
-
-#if defined(CLIP_PLANE)
-uniform mat4 u_worldMatrix;
-uniform vec4 u_clipPlane;
-#endif
-
-///////////////////////////////////////////////////////////
-// Varyings
-#if defined(LIGHTMAP)
-varying vec2 v_texCoord1;
-#endif
-
-#if defined(VERTEX_COLOR)
-varying vec3 v_color;
-#endif
-
-#if defined(LIGHTING)
-
-varying vec3 v_normalVector;
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0) 
-varying vec3 v_lightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-
-#if defined(SPECULAR)
-varying vec3 v_cameraDirection;
-#endif
-
-#include "lighting.vert"
-
-#endif
-
-#if defined(SKINNING)
-#include "skinning.vert"
-#else
-#include "skinning-none.vert" 
-#endif
-
-#if defined(CLIP_PLANE)
-varying float v_clipDistance;
-#endif
-
-void main()
-{
-    vec4 position = getPosition();
-    gl_Position = u_worldViewProjectionMatrix * position;
-
-    #if defined (LIGHTING)
-
-    vec3 normal = getNormal();
-
-    // Transform normal to view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz, u_inverseTransposeWorldViewMatrix[1].xyz, u_inverseTransposeWorldViewMatrix[2].xyz);
-    v_normalVector = inverseTransposeWorldViewMatrix * normal;
-
-    // Apply light.
-    applyLight(position);
-
-    #endif
-
-    // Pass the lightmap texture coordinate
-    #if defined(LIGHTMAP)
-    v_texCoord1 = a_texCoord1;
-    #endif
-    
-    // Pass the vertex color
-    #if defined(VERTEX_COLOR)
-	v_color = a_color;
-    #endif
-    
-    #if defined(CLIP_PLANE)
-    v_clipDistance = dot(u_worldMatrix * position, u_clipPlane);
-    #endif    
-}

+ 0 - 40
gameplay/res/shaders/font.frag

@@ -1,40 +0,0 @@
-#ifdef OPENGL_ES
-#extension GL_OES_standard_derivatives : enable
-#ifdef GL_FRAGMENT_PRECISION_HIGH
-precision highp float;
-#else
-precision mediump float;
-#endif
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform sampler2D u_texture;
-
-#ifdef DISTANCE_FIELD
-uniform vec2 u_cutoff;
-#endif
-
-///////////////////////////////////////////////////////////
-// Varyings
-varying vec2 v_texCoord;
-varying vec4 v_color;
-
-
-void main()
-{ 
-    #ifdef DISTANCE_FIELD
-    
-    gl_FragColor = v_color;
-    float distance = texture2D(u_texture, v_texCoord).a;
-    float smoothing = fwidth(distance);
-    float alpha = smoothstep(0.5 - smoothing * u_cutoff.x, 0.5 + smoothing * u_cutoff.y, distance);
-    gl_FragColor.a = alpha * v_color.a;
-    
-    #else
-    
-    gl_FragColor = v_color;
-    gl_FragColor.a = texture2D(u_texture, v_texCoord).a * v_color.a;
-    
-    #endif
-}

+ 0 - 22
gameplay/res/shaders/font.vert

@@ -1,22 +0,0 @@
-///////////////////////////////////////////////////////////
-// Atttributes
-attribute vec3 a_position;
-attribute vec2 a_texCoord;
-attribute vec4 a_color;
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform mat4 u_projectionMatrix;
-
-///////////////////////////////////////////////////////////
-// Varyings
-varying vec2 v_texCoord;
-varying vec4 v_color;
-
-
-void main()
-{
-    gl_Position = u_projectionMatrix * vec4(a_position, 1);
-    v_texCoord = a_texCoord;
-    v_color = a_color;
-}

+ 0 - 92
gameplay/res/shaders/lighting.frag

@@ -1,92 +0,0 @@
-
-vec3 computeLighting(vec3 normalVector, vec3 lightDirection, vec3 lightColor, float attenuation)
-{
-    float diffuse = max(dot(normalVector, lightDirection), 0.0);
-     vec3 diffuseColor = lightColor * _baseColor.rgb * diffuse * attenuation;
-
-    #if defined(SPECULAR)
-
-	// Phong shading
-    //vec3 vertexToEye = normalize(v_cameraDirection);
-    //vec3 specularAngle = normalize(normalVector * diffuse * 2.0 - lightDirection);  
-    //vec3 specularColor = vec3(pow(clamp(dot(specularAngle, vertexToEye), 0.0, 1.0), u_specularExponent)); 
-
-    // Blinn-Phong shading
-    vec3 vertexToEye = normalize(v_cameraDirection);
-    vec3 halfVector = normalize(lightDirection + vertexToEye);
-    float specularAngle = clamp(dot(normalVector, halfVector), 0.0, 1.0);
-    vec3 specularColor = vec3(pow(specularAngle, u_specularExponent)) * attenuation;
-
-    return diffuseColor + specularColor;
-
-    #else
-    
-    return diffuseColor;
-    
-    #endif
-}
-
-vec3 getLitPixel()
-{
-    #if defined(BUMPED)
-    
-    vec3 normalVector = normalize(texture2D(u_normalmapTexture, v_texCoord).rgb * 2.0 - 1.0);
-    
-    #else
-    
-    vec3 normalVector = normalize(v_normalVector);
-    
-    #endif
-    
-    vec3 ambientColor = _baseColor.rgb * u_ambientColor;
-    vec3 combinedColor = ambientColor;
-
-    // Directional light contribution
-    #if (DIRECTIONAL_LIGHT_COUNT > 0)
-    for (int i = 0; i < DIRECTIONAL_LIGHT_COUNT; ++i)
-    {
-        #if defined(BUMPED)
-        vec3 lightDirection = normalize(v_directionalLightDirection[i] * 2.0);
-        #else
-        vec3 lightDirection = normalize(u_directionalLightDirection[i] * 2.0);
-        #endif 
-        combinedColor += computeLighting(normalVector, -lightDirection, u_directionalLightColor[i], 1.0);
-    }
-    #endif
-
-    // Point light contribution
-    #if (POINT_LIGHT_COUNT > 0)
-    for (int i = 0; i < POINT_LIGHT_COUNT; ++i)
-    {
-        vec3 ldir = v_vertexToPointLightDirection[i] * u_pointLightRangeInverse[i];
-        float attenuation = clamp(1.0 - dot(ldir, ldir), 0.0, 1.0);
-        combinedColor += computeLighting(normalVector, normalize(v_vertexToPointLightDirection[i]), u_pointLightColor[i], attenuation);
-    }
-    #endif
-
-    // Spot light contribution
-    #if (SPOT_LIGHT_COUNT > 0)
-    for (int i = 0; i < SPOT_LIGHT_COUNT; ++i)
-    {
-        // Compute range attenuation
-        vec3 ldir = v_vertexToSpotLightDirection[i] * u_spotLightRangeInverse[i];
-        float attenuation = clamp(1.0 - dot(ldir, ldir), 0.0, 1.0);
-        vec3 vertexToSpotLightDirection = normalize(v_vertexToSpotLightDirection[i]);
-
-        #if defined(BUMPED)
-            vec3 spotLightDirection = normalize(v_spotLightDirection[i] * 2.0);
-        #else
-            vec3 spotLightDirection = normalize(u_spotLightDirection[i] * 2.0);
-        #endif
-
-        // "-lightDirection" is used because light direction points in opposite direction to spot direction.
-        float spotCurrentAngleCos = dot(spotLightDirection, -vertexToSpotLightDirection);
-
-		// Apply spot attenuation
-        attenuation *= smoothstep(u_spotLightOuterAngleCos[i], u_spotLightInnerAngleCos[i], spotCurrentAngleCos);
-        combinedColor += computeLighting(normalVector, vertexToSpotLightDirection, u_spotLightColor[i], attenuation);
-    }
-    #endif
-
-    return combinedColor;
-}

+ 0 - 67
gameplay/res/shaders/lighting.vert

@@ -1,67 +0,0 @@
-
-#if defined(BUMPED)
-void applyLight(vec4 position, mat3 tangentSpaceTransformMatrix)
-{
-    #if (defined(SPECULAR) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0))
-    vec4 positionWorldViewSpace = u_worldViewMatrix * position;
-    #endif
-    
-    #if (DIRECTIONAL_LIGHT_COUNT > 0)
-    for (int i = 0; i < DIRECTIONAL_LIGHT_COUNT; ++i)
-    {
-        // Transform light direction to tangent space
-        v_directionalLightDirection[i] = tangentSpaceTransformMatrix * u_directionalLightDirection[i];
-    }
-    #endif
-    
-    #if (POINT_LIGHT_COUNT > 0)
-    for (int i = 0; i < POINT_LIGHT_COUNT; ++i)
-    {
-        // Compute the vertex to light direction, in tangent space
-        v_vertexToPointLightDirection[i] = tangentSpaceTransformMatrix * (u_pointLightPosition[i] - positionWorldViewSpace.xyz);
-    }
-    #endif
-    
-    #if (SPOT_LIGHT_COUNT > 0)
-    for (int i = 0; i < SPOT_LIGHT_COUNT; ++i)
-    {
-        // Compute the vertex to light direction, in tangent space
-	    v_vertexToSpotLightDirection[i] = tangentSpaceTransformMatrix * (u_spotLightPosition[i] - positionWorldViewSpace.xyz);
-        v_spotLightDirection[i] = tangentSpaceTransformMatrix * u_spotLightDirection[i];
-    }
-    #endif
-    
-    #if defined(SPECULAR)
-    // Compute camera direction and transform it to tangent space.
-    v_cameraDirection = tangentSpaceTransformMatrix * (u_cameraPosition - positionWorldViewSpace.xyz);
-    #endif
-}
-#else
-void applyLight(vec4 position)
-{
-    #if defined(SPECULAR) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-	vec4 positionWorldViewSpace = u_worldViewMatrix * position;
-    #endif
-
-    #if (POINT_LIGHT_COUNT > 0)
-    for (int i = 0; i < POINT_LIGHT_COUNT; ++i)
-    {
-        // Compute the light direction with light position and the vertex position.
-        v_vertexToPointLightDirection[i] = u_pointLightPosition[i] - positionWorldViewSpace.xyz;
-    }
-    #endif
-
-    #if (SPOT_LIGHT_COUNT > 0)
-    for (int i = 0; i < SPOT_LIGHT_COUNT; ++i)
-    {
-        // Compute the light direction with light position and the vertex position.
-	    v_vertexToSpotLightDirection[i] = u_spotLightPosition[i] - positionWorldViewSpace.xyz;
-    }
-    #endif
-
-    #if defined(SPECULAR)  
-	v_cameraDirection = u_cameraPosition - positionWorldViewSpace.xyz;
-    #endif
-}
-
-#endif

+ 0 - 25
gameplay/res/shaders/skinning-none.vert

@@ -1,25 +0,0 @@
-vec4 getPosition()
-{
-    return a_position;    
-}
-
-#if defined(LIGHTING)
-
-vec3 getNormal()
-{
-    return a_normal;
-}
-
-#if defined(BUMPED)
-vec3 getTangent()
-{
-    return a_tangent;
-}
-
-vec3 getBinormal()
-{
-    return a_binormal;
-}
-#endif
-
-#endif

+ 0 - 84
gameplay/res/shaders/skinning.vert

@@ -1,84 +0,0 @@
-
-vec4 _skinnedPosition;
-
-void skinPosition(float blendWeight, int matrixIndex)
-{
-    vec4 tmp;
-    tmp.x = dot(a_position, u_matrixPalette[matrixIndex]);
-    tmp.y = dot(a_position, u_matrixPalette[matrixIndex + 1]);
-    tmp.z = dot(a_position, u_matrixPalette[matrixIndex + 2]);
-    tmp.w = a_position.w;
-    _skinnedPosition += blendWeight * tmp;
-}
-
-vec4 getPosition()
-{
-    _skinnedPosition = vec4(0.0);
-    float blendWeight = a_blendWeights[0];
-    int matrixIndex = int (a_blendIndices[0]) * 3;
-    skinPosition(blendWeight, matrixIndex);
-    blendWeight = a_blendWeights[1];
-    matrixIndex = int(a_blendIndices[1]) * 3;
-    skinPosition(blendWeight, matrixIndex);
-    blendWeight = a_blendWeights[2];
-    matrixIndex = int(a_blendIndices[2]) * 3;
-    skinPosition(blendWeight, matrixIndex);
-    blendWeight = a_blendWeights[3];
-    matrixIndex = int(a_blendIndices[3]) * 3;
-    skinPosition(blendWeight, matrixIndex);
-    return _skinnedPosition;    
-}
-
-#if defined(LIGHTING)
-
-vec3 _skinnedNormal;
-
-void skinTangentSpaceVector(vec3 vector, float blendWeight, int matrixIndex)
-{
-    vec3 tmp;
-    tmp.x = dot(vector, u_matrixPalette[matrixIndex].xyz);
-    tmp.y = dot(vector, u_matrixPalette[matrixIndex + 1].xyz);
-    tmp.z = dot(vector, u_matrixPalette[matrixIndex + 2].xyz);
-    _skinnedNormal += blendWeight * tmp;
-}
-
-vec3 getTangentSpaceVector(vec3 vector)
-{
-    _skinnedNormal = vec3(0.0);
-    // Transform normal to view space using matrix palette with four matrices used to transform a vertex.
-    float blendWeight = a_blendWeights[0];
-    int matrixIndex = int (a_blendIndices[0]) * 3;
-    skinTangentSpaceVector(vector, blendWeight, matrixIndex);
-    blendWeight = a_blendWeights[1];
-    matrixIndex = int(a_blendIndices[1]) * 3;
-    skinTangentSpaceVector(vector, blendWeight, matrixIndex);
-    blendWeight = a_blendWeights[2];
-    matrixIndex = int(a_blendIndices[2]) * 3;
-    skinTangentSpaceVector(vector, blendWeight, matrixIndex);
-    blendWeight = a_blendWeights[3];
-    matrixIndex = int(a_blendIndices[3]) * 3;
-    skinTangentSpaceVector(vector, blendWeight, matrixIndex);
-    return _skinnedNormal;
-}
-
-vec3 getNormal()
-{
-    return getTangentSpaceVector(a_normal);
-}
-
-#if defined(BUMPED)
-
-vec3 getTangent()
-{
-    return getTangentSpaceVector(a_tangent);
-}
-
-vec3 getBinormal()
-{
-    return getTangentSpaceVector(a_binormal);
-}
-
-#endif
-
-#endif
-

+ 0 - 22
gameplay/res/shaders/sprite.frag

@@ -1,22 +0,0 @@
-#ifdef OPENGL_ES
-#ifdef GL_FRAGMENT_PRECISION_HIGH
-precision highp float;
-#else
-precision mediump float;
-#endif
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform sampler2D u_texture;
-
-///////////////////////////////////////////////////////////
-// Varyings
-varying vec2 v_texCoord;
-varying vec4 v_color;
-
-
-void main()
-{
-    gl_FragColor = v_color * texture2D(u_texture, v_texCoord);
-}

+ 0 - 22
gameplay/res/shaders/sprite.vert

@@ -1,22 +0,0 @@
-///////////////////////////////////////////////////////////
-// Attributes
-attribute vec3 a_position;
-attribute vec2 a_texCoord;
-attribute vec4 a_color;
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform mat4 u_projectionMatrix;
-
-///////////////////////////////////////////////////////////
-// Varyings
-varying vec2 v_texCoord;
-varying vec4 v_color;
-
-
-void main()
-{
-    gl_Position = u_projectionMatrix * vec4(a_position, 1);
-    v_texCoord = a_texCoord;
-    v_color = a_color;
-}

+ 0 - 152
gameplay/res/shaders/terrain.frag

@@ -1,152 +0,0 @@
-#ifdef OPENGL_ES
-#ifdef GL_FRAGMENT_PRECISION_HIGH
-precision highp float;
-#else
-precision mediump float;
-#endif
-#endif
-
-#ifndef DIRECTIONAL_LIGHT_COUNT
-#define DIRECTIONAL_LIGHT_COUNT 0
-#endif
-#ifndef SPOT_LIGHT_COUNT
-#define SPOT_LIGHT_COUNT 0
-#endif
-#ifndef POINT_LIGHT_COUNT
-#define POINT_LIGHT_COUNT 0
-#endif
-#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-#define LIGHTING
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform vec3 u_ambientColor; 
-
-#if defined(LIGHTING)
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0)
-uniform vec3 u_directionalLightColor[DIRECTIONAL_LIGHT_COUNT];
-uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-uniform vec3 u_pointLightColor[POINT_LIGHT_COUNT];
-uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
-uniform float u_pointLightRangeInverse[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-uniform vec3 u_spotLightColor[SPOT_LIGHT_COUNT];
-uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
-uniform float u_spotLightRangeInverse[SPOT_LIGHT_COUNT];
-uniform float u_spotLightInnerAngleCos[SPOT_LIGHT_COUNT];
-uniform float u_spotLightOuterAngleCos[SPOT_LIGHT_COUNT];
-#endif
-
-#if defined (NORMAL_MAP)
-uniform sampler2D u_normalMap;
-uniform mat4 u_normalMatrix;
-#endif
-
-#endif
-
-#if defined(DEBUG_PATCHES)
-uniform float u_row;
-uniform float u_column;
-#endif
-
-#if (LAYER_COUNT > 0)
-uniform sampler2D u_surfaceLayerMaps[SAMPLER_COUNT];
-#endif
-
-///////////////////////////////////////////////////////////
-// Variables
-vec4 _baseColor;
-
-///////////////////////////////////////////////////////////
-// Varyings
-#if defined(LIGHTING)
-#if !defined(NORMAL_MAP)
-varying vec3 v_normalVector;
-#else
-vec3 v_normalVector;
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0)
-varying vec3 v_lightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-
-#endif
-#endif
-
-varying vec2 v_texCoord0;
-
-#if (LAYER_COUNT > 0)
-varying vec2 v_texCoordLayer0;
-#endif
-#if (LAYER_COUNT > 1)
-varying vec2 v_texCoordLayer1;
-#endif
-#if (LAYER_COUNT > 2)
-varying vec2 v_texCoordLayer2;
-#endif
-#if (LAYER_COUNT > 1)
-void blendLayer(sampler2D textureMap, vec2 texCoord, float alphaBlend)
-{
-    vec3 diffuse = texture2D(textureMap,  mod(texCoord, vec2(1,1))).rgb;
-    _baseColor.rgb = _baseColor.rgb * (1.0 - alphaBlend) + diffuse * alphaBlend;
-}
-#endif
-
-#if defined(LIGHTING)
-#include "lighting.frag"
-#endif
-
-
-void main()
-{
-    #if (LAYER_COUNT > 0)
-    // Sample base texture
-	_baseColor.rgb = texture2D(u_surfaceLayerMaps[TEXTURE_INDEX_0], mod(v_texCoordLayer0, vec2(1,1))).rgb;
-    _baseColor.a = 1.0;
-    #else
-    // If no layers are defined, simply use a white color
-    _baseColor = vec4(1, 1, 1, 1);
-    #endif
-
-    #if (LAYER_COUNT > 1)
-    blendLayer(u_surfaceLayerMaps[TEXTURE_INDEX_1], v_texCoordLayer1, texture2D(u_surfaceLayerMaps[BLEND_INDEX_1], v_texCoord0)[BLEND_CHANNEL_1]);
-    #endif
-    #if (LAYER_COUNT > 2)
-    blendLayer(u_surfaceLayerMaps[TEXTURE_INDEX_2], v_texCoordLayer2, texture2D(u_surfaceLayerMaps[BLEND_INDEX_2], v_texCoord0)[BLEND_CHANNEL_2]);
-    #endif
-
-    #if defined(DEBUG_PATCHES)
-    float tint = mod(u_row + mod(u_column, 2.0), 2.0);
-    _baseColor.rgb = _baseColor.rgb * 0.75 + vec3(1.0-tint, tint, 0) * 0.25;
-    #endif
-
-    #if defined(LIGHTING)
-
-    #if defined(NORMAL_MAP)
-    v_normalVector = texture2D(u_normalMap, v_texCoord0).xyz * 2.0 - 1.0;
-    v_normalVector = (u_normalMatrix * vec4(v_normalVector.x, v_normalVector.y, v_normalVector.z, 0)).xyz;
-    #endif
-
-    gl_FragColor.a = _baseColor.a;
-    gl_FragColor.rgb = getLitPixel();
-
-    #else
-
-    gl_FragColor.rgb = _baseColor.rgb;
-
-    #endif
-}

+ 0 - 114
gameplay/res/shaders/terrain.vert

@@ -1,114 +0,0 @@
-#ifndef DIRECTIONAL_LIGHT_COUNT
-#define DIRECTIONAL_LIGHT_COUNT 0
-#endif
-#ifndef SPOT_LIGHT_COUNT
-#define SPOT_LIGHT_COUNT 0
-#endif
-#ifndef POINT_LIGHT_COUNT
-#define POINT_LIGHT_COUNT 0
-#endif
-#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-#define LIGHTING
-#endif
-
-///////////////////////////////////////////////////////////
-// Attributes
-attribute vec4 a_position;
-#if !defined(NORMAL_MAP) && defined(LIGHTING)
-attribute vec3 a_normal;
-#endif
-attribute vec2 a_texCoord0;
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform mat4 u_worldViewProjectionMatrix;
-#if !defined(NORMAL_MAP) && defined(LIGHTING)
-uniform mat4 u_normalMatrix;
-#endif
-
-#if defined(LIGHTING)
-
-uniform mat4 u_inverseTransposeWorldViewMatrix;
-
-#if (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-uniform mat4 u_worldViewMatrix;
-#endif
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0)
-uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0) 
-uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-uniform vec3 u_spotLightPosition[SPOT_LIGHT_COUNT];
-uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-
-#endif
-
-///////////////////////////////////////////////////////////
-// Varyings
-
-#if defined(LIGHTING)
-varying vec3 v_normalVector;
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0) 
-varying vec3 v_lightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-
-#include "lighting.vert"
-
-#endif
-
-varying vec2 v_texCoord0;
-#if LAYER_COUNT > 0
-varying vec2 v_texCoordLayer0;
-#endif
-#if LAYER_COUNT > 1
-varying vec2 v_texCoordLayer1;
-#endif
-#if LAYER_COUNT > 2
-varying vec2 v_texCoordLayer2;
-#endif
-
-
-void main()
-{
-    // Transform position to clip space.
-    gl_Position = u_worldViewProjectionMatrix * a_position;
-
-    #if defined(LIGHTING)
-
-    #if !defined(NORMAL_MAP) 
-    v_normalVector = normalize((u_normalMatrix * vec4(a_normal.x, a_normal.y, a_normal.z, 0)).xyz);
-    #endif
-
-    applyLight(a_position);
-
-    #endif
-
-    // Pass base texture coord
-    v_texCoord0 = a_texCoord0;
-
-    // Pass repeated texture coordinates for each layer
-    #if LAYER_COUNT > 0
-    v_texCoordLayer0 = a_texCoord0 * TEXTURE_REPEAT_0;
-    #endif
-    #if LAYER_COUNT > 1
-    v_texCoordLayer1 = a_texCoord0 * TEXTURE_REPEAT_1;
-    #endif
-    #if LAYER_COUNT > 2
-    v_texCoordLayer2 = a_texCoord0 * TEXTURE_REPEAT_2;
-    #endif
-}

+ 0 - 155
gameplay/res/shaders/textured.frag

@@ -1,155 +0,0 @@
-#ifdef OPENGL_ES
-#ifdef GL_FRAGMENT_PRECISION_HIGH
-precision highp float;
-#else
-precision mediump float;
-#endif
-#endif
-
-#ifndef DIRECTIONAL_LIGHT_COUNT
-#define DIRECTIONAL_LIGHT_COUNT 0
-#endif
-#ifndef SPOT_LIGHT_COUNT
-#define SPOT_LIGHT_COUNT 0
-#endif
-#ifndef POINT_LIGHT_COUNT
-#define POINT_LIGHT_COUNT 0
-#endif
-#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-#define LIGHTING
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform vec3 u_ambientColor;
-
-uniform sampler2D u_diffuseTexture;
-
-#if defined(LIGHTMAP)
-uniform sampler2D u_lightmapTexture;
-#endif
-
-#if defined(LIGHTING)
-
-#if defined(BUMPED)
-uniform sampler2D u_normalmapTexture;
-#endif
-
-#if (DIRECTIONAL_LIGHT_COUNT > 0)
-uniform vec3 u_directionalLightColor[DIRECTIONAL_LIGHT_COUNT];
-#if !defined(BUMPED)
-uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-uniform vec3 u_pointLightColor[POINT_LIGHT_COUNT];
-uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
-uniform float u_pointLightRangeInverse[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-uniform vec3 u_spotLightColor[SPOT_LIGHT_COUNT];
-uniform float u_spotLightRangeInverse[SPOT_LIGHT_COUNT];
-uniform float u_spotLightInnerAngleCos[SPOT_LIGHT_COUNT];
-uniform float u_spotLightOuterAngleCos[SPOT_LIGHT_COUNT];
-#if !defined(BUMPED)
-uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-#endif
-
-#if defined(SPECULAR)
-uniform float u_specularExponent;
-#endif
-
-#endif
-
-#if defined(MODULATE_COLOR)
-uniform vec4 u_modulateColor;
-#endif
-
-#if defined(MODULATE_ALPHA)
-uniform float u_modulateAlpha;
-#endif
-
-///////////////////////////////////////////////////////////
-// Variables
-vec4 _baseColor;
-
-///////////////////////////////////////////////////////////
-// Varyings
-varying vec2 v_texCoord;
-
-#if defined(LIGHTMAP)
-varying vec2 v_texCoord1;
-#endif
-
-#if defined(LIGHTING)
-
-#if !defined(BUMPED)
-varying vec3 v_normalVector;
-#endif
-
-#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
-varying vec3 v_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
-#if defined(BUMPED)
-varying vec3 v_spotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-#endif
-
-#if defined(SPECULAR)
-varying vec3 v_cameraDirection; 
-#endif
-
-#include "lighting.frag"
-
-#endif
-
-#if defined(CLIP_PLANE)
-varying float v_clipDistance;
-#endif
-
-
-void main()
-{
-    #if defined(CLIP_PLANE)
-    if(v_clipDistance < 0.0) discard;
-    #endif
- 
-    _baseColor = texture2D(u_diffuseTexture, v_texCoord);
- 
-    gl_FragColor.a = _baseColor.a;
-
-    #if defined(TEXTURE_DISCARD_ALPHA)
-    if (gl_FragColor.a < 0.5)
-        discard;
-    #endif
-
-    #if defined(LIGHTING)
-
-    gl_FragColor.rgb = getLitPixel();
-    #else
-    gl_FragColor.rgb = _baseColor.rgb;
-    #endif
-
-	#if defined(LIGHTMAP)
-	vec4 lightColor = texture2D(u_lightmapTexture, v_texCoord1);
-	gl_FragColor.rgb *= lightColor.rgb;
-	#endif
-
-    #if defined(MODULATE_COLOR)
-    gl_FragColor *= u_modulateColor;
-    #endif
-
-    #if defined(MODULATE_ALPHA)
-    gl_FragColor.a *= u_modulateAlpha;
-    #endif
-}

+ 0 - 180
gameplay/res/shaders/textured.vert

@@ -1,180 +0,0 @@
-#ifndef DIRECTIONAL_LIGHT_COUNT
-#define DIRECTIONAL_LIGHT_COUNT 0
-#endif
-#ifndef SPOT_LIGHT_COUNT
-#define SPOT_LIGHT_COUNT 0
-#endif
-#ifndef POINT_LIGHT_COUNT
-#define POINT_LIGHT_COUNT 0
-#endif
-#if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-#define LIGHTING
-#endif
-
-///////////////////////////////////////////////////////////
-// Atributes
-attribute vec4 a_position;
-
-#if defined(SKINNING)
-attribute vec4 a_blendWeights;
-attribute vec4 a_blendIndices;
-#endif
-
-attribute vec2 a_texCoord;
-
-#if defined(LIGHTMAP)
-attribute vec2 a_texCoord1; 
-#endif
-
-#if defined(LIGHTING)
-attribute vec3 a_normal;
-
-#if defined(BUMPED)
-attribute vec3 a_tangent;
-attribute vec3 a_binormal;
-#endif
-
-#endif
-
-///////////////////////////////////////////////////////////
-// Uniforms
-uniform mat4 u_worldViewProjectionMatrix;
-#if defined(SKINNING)
-uniform vec4 u_matrixPalette[SKINNING_JOINT_COUNT * 3];
-#endif
-
-#if defined(LIGHTING)
-uniform mat4 u_inverseTransposeWorldViewMatrix;
-
-#if defined(SPECULAR) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
-uniform mat4 u_worldViewMatrix;
-#endif
-
-#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
-uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0) 
-uniform vec3 u_spotLightPosition[SPOT_LIGHT_COUNT];
-#if defined(BUMPED)
-uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-#endif
-
-#if defined(SPECULAR)
-uniform vec3 u_cameraPosition;
-#endif
-
-#endif
-
-#if defined(TEXTURE_REPEAT)
-uniform vec2 u_textureRepeat;
-#endif
-
-#if defined(TEXTURE_OFFSET)
-uniform vec2 u_textureOffset;
-#endif
-
-#if defined(CLIP_PLANE)
-uniform mat4 u_worldMatrix;
-uniform vec4 u_clipPlane;
-#endif
-
-///////////////////////////////////////////////////////////
-// Varyings
-varying vec2 v_texCoord;
-
-#if defined(LIGHTMAP)
-varying vec2 v_texCoord1;
-#endif
-
-#if defined(LIGHTING)
-
-#if !defined(BUMPED)
-varying vec3 v_normalVector;
-#endif
-
-#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
-varying vec3 v_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
-#endif
-
-#if (POINT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
-#endif
-
-#if (SPOT_LIGHT_COUNT > 0)
-varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
-#if defined(BUMPED)
-varying vec3 v_spotLightDirection[SPOT_LIGHT_COUNT];
-#endif
-#endif
-
-#if defined(SPECULAR)
-varying vec3 v_cameraDirection;
-#endif
-
-#include "lighting.vert"
-
-#endif
-
-#if defined(SKINNING)
-#include "skinning.vert"
-#else
-#include "skinning-none.vert" 
-#endif
-
-#if defined(CLIP_PLANE)
-varying float v_clipDistance;
-#endif
-
-void main()
-{
-    vec4 position = getPosition();
-    gl_Position = u_worldViewProjectionMatrix * position;
-
-    #if defined(LIGHTING)
-    vec3 normal = getNormal();
-    // Transform the normal, tangent and binormals to view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz, u_inverseTransposeWorldViewMatrix[1].xyz, u_inverseTransposeWorldViewMatrix[2].xyz);
-    vec3 normalVector = normalize(inverseTransposeWorldViewMatrix * normal);
-    
-    #if defined(BUMPED)
-    
-    vec3 tangent = getTangent();
-    vec3 binormal = getBinormal();
-    vec3 tangentVector  = normalize(inverseTransposeWorldViewMatrix * tangent);
-    vec3 binormalVector = normalize(inverseTransposeWorldViewMatrix * binormal);
-    mat3 tangentSpaceTransformMatrix = mat3(tangentVector.x, binormalVector.x, normalVector.x, tangentVector.y, binormalVector.y, normalVector.y, tangentVector.z, binormalVector.z, normalVector.z);
-    applyLight(position, tangentSpaceTransformMatrix);
-    
-    #else
-    
-    v_normalVector = normalVector;
-    applyLight(position);
-    
-    #endif
-    
-    #endif 
-    
-    v_texCoord = a_texCoord;
-    
-    #if defined(TEXTURE_REPEAT)
-    v_texCoord *= u_textureRepeat;
-    #endif
-    
-    #if defined(TEXTURE_OFFSET)
-    v_texCoord += u_textureOffset;
-    #endif
-    
-    #if defined(LIGHTMAP)
-    v_texCoord1 = a_texCoord1;
-    #endif
-    
-    #if defined(CLIP_PLANE)
-    v_clipDistance = dot(u_worldMatrix * position, u_clipPlane);
-    #endif
-}

BIN
gameplay/res/ui/arial.gpb


BIN
gameplay/res/ui/default-theme.png


+ 0 - 474
gameplay/res/ui/default.theme

@@ -1,474 +0,0 @@
-theme mainMenu
-{
-    texture = default-theme.png
-
-    /////////////////////////////////////////////////////////////////////
-    //                    Global theme variables                       //
-    /////////////////////////////////////////////////////////////////////
-
-    ${normalColor} = #ffffffff
-    ${hoverColor} = #eeeeeeff
-    ${activeColor} = #aaaaaaff
-    ${focusColor} = ${normalColor}
-    ${textColor} = #ffffffff
-    ${font} = arial.gpb
-    ${fontSize} = 16
-    ${disabledOpacity} = 0.5
-
-    /////////////////////////////////////////////////////////////////////
-    //                        Image lists                              //
-    /////////////////////////////////////////////////////////////////////
-
-    imageList normalImages
-    {
-        color = ${normalColor}
-
-        image unchecked
-        {
-            region = 83, 3, 34, 34
-        }
-
-        image checked
-        {
-            region = 83, 37, 34, 34
-        }
-
-        image unselected
-        {
-            region = 120, 3, 34, 34
-        }
-
-        image selected
-        {
-            region = 120, 37, 34, 34
-        }
-
-        image minCap
-        {
-            region = 3, 41, 8, 17
-        }
-
-        image track
-        {
-            region = 11, 41, 62, 17
-        }
-
-        image maxCap
-        {
-            region = 73, 41, 8, 17
-        }
-
-        image marker
-        {
-            region = 6, 59, 15, 27
-        }
-
-        image textCaret
-        {
-            region = 6, 92, 7, 22
-        }
-
-        image scrollBarTopCap
-        {
-            region = 65, 59, 13, 6
-        }
-
-        image verticalScrollBar
-        {
-            region = 65, 65, 13, 2
-        }
-
-        image scrollBarBottomCap
-        {
-            region = 65, 88, 13, 6
-        }
-
-        image scrollBarLeftCap
-        {
-            region = 25, 59, 6, 13
-        }
-
-        image horizontalScrollBar
-        {
-            region = 32, 59, 2, 13
-        }
-
-        image scrollBarRightCap
-        {
-            region = 55, 59, 6, 13
-        }
-    }
-
-    imageList hoverImages : normalImages
-    {
-        color = ${hoverColor}
-
-        image textCaret
-        {
-            color = ${normalColor}
-            region = 6, 92, 7, 22
-        }
-    }
-
-    imageList activeImages : normalImages
-    {
-        color = ${activeColor}
-
-        image unchecked
-        {
-            region = 83, 37, 34, 34
-        }
-
-        image checked
-        {
-            region = 83, 37, 34, 34
-        }
-
-        image selected
-        {
-            region = 120, 37, 34, 34
-        }
-
-        image unselected
-        {
-            region = 120, 37, 34, 34
-        }
-
-        image textCaret
-        {
-            color = ${normalColor}
-            region = 6, 92, 7, 22
-        }
-    }
-
-    /////////////////////////////////////////////////////////////////////
-    //                     Skin definitions                            //
-    /////////////////////////////////////////////////////////////////////
-
-    skin FormSkin
-    {
-        border
-        {
-            left = 8
-            right = 8
-            top = 8
-            bottom = 8
-        }
-
-        region = 4, 4, 32, 32
-        color = ${normalColor}
-    }
-
-    skin ButtonSkin
-    {
-        border
-        {
-            left = 12
-            right = 12
-            top = 12
-            bottom = 12
-        }
-
-        region = 42, 3, 34, 34
-        color = ${normalColor}
-    }
-
-    skin ButtonSkinHover : ButtonSkin
-    {
-        color = ${hoverColor}
-    }
-
-    skin ButtonSkinActive : ButtonSkin
-    {
-        color = ${activeColor}
-    }
-
-    skin ButtonSkinFocus : ButtonSkin
-    {
-        color = ${focusColor}
-    }
-
-    skin TextBoxSkin
-    {
-        border
-        {
-            left = 8
-            right = 8
-            top = 8
-            bottom = 8
-        }
-
-        region = 159, 3, 34, 34
-        color = ${normalColor}
-    }
-
-    skin TextBoxSkinHover : TextBoxSkin
-    {
-        color = ${hoverColor}
-    }
-
-    skin TextBoxSkinActive : TextBoxSkin
-    {
-        color = ${normalColor}
-    }
-
-    skin PanelSkin
-    {
-        border
-        {
-            left = 10
-            right = 10
-            top = 10
-            bottom = 10
-        }
-
-        region = 83, 3, 34, 34
-        color = ${normalColor}
-    }
-
-    style Form
-    {
-        padding
-        {
-            left = 2
-            right = 2
-            top = 2
-            bottom = 2
-        }
-
-        stateNormal
-        {
-            skin = FormSkin
-            imageList = normalImages
-        }
-
-        stateHover
-        {
-            imageList = hoverImages
-        }
-
-        stateActive
-        {
-            imageList = activeImages
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    style Container
-    {
-        stateNormal
-        {
-            imageList = normalImages
-        }
-
-        stateHover
-        {
-            imageList = hoverImages
-        }
-
-        stateActive
-        {
-            imageList = activeImages
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    style Label
-    {
-        stateNormal
-        {
-            font = ${font}
-            fontSize = ${fontSize}
-            textColor = ${textColor}
-            textAlignment = ALIGN_VCENTER_LEFT
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    style Button
-    {
-        padding
-        {
-            left = 8
-            right = 8
-            top = 4
-            bottom = 4
-        }
-
-        stateNormal
-        {
-            skin = ButtonSkin
-            font = ${font}
-            textColor = ${textColor}
-            fontSize = ${fontSize}
-            textAlignment = ALIGN_VCENTER_HCENTER
-        }
-
-        stateHover
-        {
-            skin = ButtonSkinHover
-        }
-
-        stateActive
-        {
-            skin = ButtonSkinActive
-        }
-
-        stateFocus
-        {
-            skin = ButtonSkinFocus
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    style CheckBox : Label
-    {
-        stateNormal
-        {
-            imageList = normalImages
-        }
-
-        stateHover
-        {
-            imageList = hoverImages
-        }
-
-        stateActive
-        {
-            imageList = activeImages
-        }
-
-        stateFocus
-        {
-            imageList = hoverImages
-        }
-    }
-
-    style RadioButton : CheckBox
-    {
-    }
-
-    style TextBox
-    {
-        stateNormal
-        {
-            skin = TextBoxSkin
-            imageList = normalImages
-            font = ${font}
-            fontSize = ${fontSize}
-            textColor = ${textColor}
-            textAlignment = ALIGN_TOP_LEFT
-        }
-
-        stateHover
-        {
-            skin = TextBoxSkinHover
-        }
-
-        stateActive
-        {
-            skin = TextBoxSkinActive
-            imageList = activeImages
-        }
-
-        stateFocus
-        {
-            skin = TextBoxSkinHover
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    style Slider
-    {
-        stateNormal
-        {
-            imageList = normalImages
-            font = ${font}
-            fontSize = ${fontSize}
-            textColor = ${textColor}
-            textAlignment = ALIGN_TOP_LEFT
-        }
-
-        stateHover
-        {
-            imageList = hoverImages
-        }
-
-        stateActive
-        {
-            imageList = activeImages
-        }
-
-        stateFocus
-        {
-            imageList = hoverImages
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    style Image
-    {
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-
-    // Empty style that has no skin
-    style Empty
-    {
-    }
-
-    // Style that can be used as a background for a container
-    style Panel
-    {
-        stateNormal
-        {
-            skin = PanelSkin
-            font = ${font}
-            fontSize = ${fontSize}
-            textColor = ${textColor}
-            textAlignment = ALIGN_VCENTER_HCENTER
-            imageList = normalImages
-        }
-
-        stateHover
-        {
-            imageList = hoverImages
-        }
-
-        stateActive
-        {
-            imageList = activeImages
-        }
-
-        stateDisabled
-        {
-            opacity = ${disabledOpacity}
-        }
-    }
-}

+ 0 - 98
gameplay/src/AIAgent.cpp

@@ -1,98 +0,0 @@
-#include "Base.h"
-#include "AIAgent.h"
-#include "Node.h"
-
-namespace gameplay
-{
-
-AIAgent::AIAgent()
-    : _stateMachine(NULL), _node(NULL), _enabled(true), _listener(NULL), _next(NULL)
-{
-    _stateMachine = new AIStateMachine(this);
-}
-
-AIAgent::~AIAgent()
-{
-    SAFE_DELETE(_stateMachine);
-}
-
-AIAgent* AIAgent::create()
-{
-    return new AIAgent();
-}
-
-const char* AIAgent::getId() const
-{
-    if (_node)
-        return _node->getId();
-
-    return "";
-}
-
-Node* AIAgent::getNode() const
-{
-    return _node;
-}
-    
-void AIAgent::setNode(Node* node)
-{
-    _node = node;
-}
-
-AIStateMachine* AIAgent::getStateMachine()
-{
-    return _stateMachine;
-}
-
-bool AIAgent::isEnabled() const
-{
-    return (_node && _enabled);
-}
-
-void AIAgent::setEnabled(bool enabled)
-{
-    _enabled = enabled;
-}
-
-void AIAgent::setListener(Listener* listener)
-{
-    _listener = listener;
-}
-
-void AIAgent::update(float elapsedTime)
-{
-    _stateMachine->update(elapsedTime);
-}
-
-bool AIAgent::processMessage(AIMessage* message)
-{
-    // Handle built-in message types.
-    switch (message->_messageType)
-    {
-    case AIMessage::MESSAGE_TYPE_STATE_CHANGE:
-        {
-            // Change state message
-            const char* stateId = message->getString(0);
-            if (stateId)
-            {
-                AIState* state = _stateMachine->getState(stateId);
-                if (state)
-                    _stateMachine->setStateInternal(state);
-            }
-        }
-        break;
-    case AIMessage::MESSAGE_TYPE_CUSTOM:
-        break;
-    }
-
-    // Dispatch message to registered listener.
-    if (_listener && _listener->messageReceived(message))
-        return true;
-
-    if (_node && _node->fireScriptEvent<bool>(GP_GET_SCRIPT_EVENT(Node, messageReceived), dynamic_cast<void*>(_node), message))
-        return true;
-
-    return false;
-}
-
-}

+ 0 - 174
gameplay/src/AIAgent.h

@@ -1,174 +0,0 @@
-#ifndef AIAGENT_H_
-#define AIAGENT_H_
-
-#include "Ref.h"
-#include "AIStateMachine.h"
-#include "AIMessage.h"
-
-namespace gameplay
-{
-
-class Node;
-
-/**
- * Defines an AI agent that can be added to nodes in a scene.
- *
- * Agents represent a unit of intelligence in a game and can be used
- * to program logic for a character or object in a game, using constructs
- * such as state machines. By default, an AIAgent has an empty state 
- * machine.
- */
-class AIAgent : public Ref
-{
-    friend class Node;
-    friend class AIState;
-    friend class AIController;
-
-public:
-
-    /**
-     * Interface for listening to AIAgent events.
-     */
-    class Listener
-    {
-    public:
-
-        /**
-         * Virtual destructor.
-         */
-        virtual ~Listener() { };
-
-        /**
-         * Called when a new message is sent to the AIAgent.
-         *
-         * Both global/broadcast messages and messages sent explicitly to the
-         * AIAgent are sent through this method. Returning true from this method
-         * will mark the message as handled and it will dispose of the message
-         * and prevent any other possible recipients from receiving the message.
-         * Alternatively, returning false allows the message to continue being
-         * routed though the AI system.
-         *
-         * @param message The message received.
-         *
-         * @return true to mark the message as handled, false otherwise.
-         */
-        virtual bool messageReceived(AIMessage* message) = 0;
-    };
-
-    /**
-     * Creates a new AIAgent.
-     *
-     * @return A new AIAgent.
-     * @script{create}
-     */
-    static AIAgent* create();
-
-    /**
-     * Returns the identifier for the AIAgent.
-     *
-     * This method simply returns the ID of the Node which this AIAgent
-     * is bound to. If this AIAgent is not bound to a Node, this method
-     * returns an empty string.
-     *
-     * @return The identifier for the agent.
-     */
-    const char* getId() const;
-
-    /**
-     * Returns the Node this AIAgent is assigned to.
-     *
-     * @return The Node this agent is assigned to.
-     */
-    Node* getNode() const;
-
-    /**
-     * Returns the state machine for the AIAgent.
-     *
-     * @return The agent's state machine.
-     */
-    AIStateMachine* getStateMachine();
-
-    /**
-     * Determines if this AIAgent is currently enabled.
-     *
-     * Agents are always disabled until they have been associated
-     * with a valid Node though Node::setAgent(AIAgent*). In addition,
-     * an AIAgent can be explicitly enabled or disabled using the
-     * setEnabled(bool) method.
-     *
-     * @return true if the agent is enabled, false otherwise.
-     */
-    bool isEnabled() const;
-
-    /**
-     * Sets whether this AIAgent is enabled.
-     *
-     * By default, AIAgents are enabled and they can receive messages and state
-     * changes. When disabled, AIAgents stop receiving messages and their state
-     * machines are halted until they are re-enabled.
-     *
-     * @param enabled true if the AIAgent should be enabled, false otherwise.
-     */
-    void setEnabled(bool enabled);
-
-    /**
-     * Sets an event listener for this AIAgent.
-     *
-     * @param listener The new AIAgent listener, or NULL to remove any existing listener.
-     */
-    void setListener(Listener* listener);
-
-private:
-
-    /**
-     * Constructor.
-     */
-    AIAgent();
-
-    /**
-     * Destructor.
-     *
-     * Hidden, use SAFE_RELEASE instead.
-     */
-    virtual ~AIAgent();
-
-    /**
-     * Hidden copy constructor.
-     */
-    AIAgent(const AIAgent&);
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AIAgent& operator=(const AIAgent&);
-    
-    /**
-     * Set the node this agent is attached to.
-     */
-    void setNode(Node* node);
-
-    /**
-     * Called by the AIController to process a message for the AIAgent.
-     *
-     * @param message The message to be processed.
-     *
-     * @return true if the message was handled, false otherwise.
-     */
-    bool processMessage(AIMessage* message);
-
-    /**
-     * Called once per frame by the AIController to update the agent.
-     */
-    void update(float elapsedTime);
-
-    AIStateMachine* _stateMachine;
-    Node* _node;
-    bool _enabled;
-    Listener* _listener;
-    AIAgent* _next;
-
-};
-
-}
-
-#endif

+ 0 - 188
gameplay/src/AIController.cpp

@@ -1,188 +0,0 @@
-#include "Base.h"
-#include "AIController.h"
-#include "Game.h"
-
-namespace gameplay
-{
-
-AIController::AIController()
-    : _paused(false), _firstMessage(NULL), _firstAgent(NULL)
-{
-}
-
-AIController::~AIController()
-{
-}
-
-void AIController::initialize()
-{
-}
-
-void AIController::finalize()
-{
-    // Remove all agents
-    AIAgent* agent = _firstAgent;
-    while (agent)
-    {
-        AIAgent* temp = agent;
-        agent = agent->_next;
-        SAFE_RELEASE(temp);
-    }
-    _firstAgent = NULL;
-
-    // Remove all messages
-    AIMessage* message = _firstMessage;
-    while (message)
-    {
-        AIMessage* temp = message;
-        message = message->_next;
-        AIMessage::destroy(temp);
-    }
-    _firstMessage = NULL;
-}
-
-void AIController::pause()
-{
-    _paused = true;
-}
-
-void AIController::resume()
-{
-    _paused = false;
-}
-
-void AIController::sendMessage(AIMessage* message, float delay)
-{
-    if (delay <= 0)
-    {
-        // Send instantly
-        if (message->getReceiver() == NULL || strlen(message->getReceiver()) == 0)
-        {
-            // Broadcast message to all agents
-            AIAgent* agent = _firstAgent;
-            while (agent)
-            {
-                if (agent->processMessage(message))
-                    break; // message consumed by this agent - stop bubbling
-                agent = agent->_next;
-            }
-        }
-        else
-        {
-            // Single recipient
-            AIAgent* agent = findAgent(message->getReceiver());
-            if (agent)
-            {
-                agent->processMessage(message);
-            }
-            else
-            {
-                GP_WARN("Failed to locate AIAgent for message recipient: %s", message->getReceiver());
-            }
-        }
-
-        // Delete the message, since it is finished being processed
-        AIMessage::destroy(message);
-    }
-    else
-    {
-        // Queue for later delivery
-        if (_firstMessage)
-            message->_next = _firstMessage;
-        _firstMessage = message;
-    }
-}
-
-void AIController::update(float elapsedTime)
-{
-    if (_paused)
-        return;
-
-    static Game* game = Game::getInstance();
-
-    // Send all pending messages that have expired
-    AIMessage* prevMsg = NULL;
-    AIMessage* msg = _firstMessage;
-    while (msg)
-    {
-        // If the message delivery time has expired, send it (this also deletes it)
-        if (msg->getDeliveryTime() >= game->getGameTime())
-        {
-            // Link the message out of our list
-            if (prevMsg)
-                prevMsg->_next = msg->_next;
-
-            AIMessage* temp = msg;
-            msg = msg->_next;
-            temp->_next = NULL;
-            sendMessage(temp);
-        }
-        else
-        {
-            prevMsg = msg;
-            msg = msg->_next;
-        }
-    }
-
-    // Update all enabled agents
-    AIAgent* agent = _firstAgent;
-    while (agent)
-    {
-        if (agent->isEnabled())
-            agent->update(elapsedTime);
-
-        agent = agent->_next;
-    }
-}
-
-void AIController::addAgent(AIAgent* agent)
-{
-    agent->addRef();
-
-    if (_firstAgent)
-        agent->_next = _firstAgent;
-
-    _firstAgent = agent;
-}
-
-void AIController::removeAgent(AIAgent* agent)
-{
-    // Search our linked list of agents and link this agent out.
-    AIAgent* prevAgent = NULL;
-    AIAgent* itr = _firstAgent;
-    while (itr)
-    {
-        if (itr == agent)
-        {
-            if (prevAgent)
-                prevAgent->_next = agent->_next;
-            else
-                _firstAgent = agent->_next;
-
-            agent->_next = NULL;
-            agent->release();
-            break;
-        }
-
-        prevAgent = itr;
-        itr = itr->_next;
-    }
-}
-
-AIAgent* AIController::findAgent(const char* id) const
-{
-    GP_ASSERT(id);
-
-    AIAgent* agent = _firstAgent;
-    while (agent)
-    {
-        if (strcmp(id, agent->getId()) == 0)
-            return agent;
-
-        agent = agent->_next;
-    }
-
-    return NULL;
-}
-
-}

+ 0 - 107
gameplay/src/AIController.h

@@ -1,107 +0,0 @@
-#ifndef AICONTROLLER_H_
-#define AICONTROLLER_H_
-
-#include "AIAgent.h"
-#include "AIMessage.h"
-
-namespace gameplay
-{
-
-/**
- * Defines and facilitates the state machine execution and message passing
- * between AI objects in the game. This class is generally not interfaced
- * with directly.
- */
-class AIController
-{
-    friend class Game;
-    friend class Node;
-
-public:
-
-    /**
-     * Routes the specified message to its intended recipient(s).
-     *
-     * Messages are arbitrary packets of data that are sent either to a single or to multiple
-     * recipients in the game.
-     *
-     * Once the specified message has been delivered, it is automatically destroyed by the AIController.
-     * For this reason, AIMessage pointers should NOT be held or explicitly destroyed by any code after
-     * they are sent through the AIController.
-     *
-     * @param message The message to send.
-     * @param delay The delay (in milliseconds) to wait before sending the message.
-     */
-    void sendMessage(AIMessage* message, float delay = 0);
-
-    /**
-     * Searches for an AIAgent that is registered with the AIController with the specified ID.
-     *
-     * @param id ID of the agent to find.
-     *
-     * @return The first agent matching the specified ID, or NULL if no matching agent could be found.
-     */
-    AIAgent* findAgent(const char* id) const;
-
-private:
-
-    /**
-     * Constructor.
-     */
-    AIController();
-
-    /**
-     * Destructor.
-     */
-    ~AIController();
-
-    /**
-     * Hidden copy constructor.
-     */
-    AIController(const AIController&);
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AIController& operator=(const AIController&);
-
-    /**
-     * Called during startup to initialize the AIController.
-     */
-    void initialize();
-
-    /**
-     * Called during shutdown to finalize the AIController.
-     */
-    void finalize();
-
-    /**
-     * Pauses the AIController.
-     */
-    void pause();
-
-    /**
-     * Resumes the AIController.
-     */
-    void resume();
-
-    /**
-     * Called each frame to update the AIController.
-     *
-     * @param elapsedTime The elapsed time, in milliseconds.
-     */
-    void update(float elapsedTime);
-
-    void addAgent(AIAgent* agent);
-
-    void removeAgent(AIAgent* agent);
-
-    bool _paused;
-    AIMessage* _firstMessage;
-    AIAgent* _firstAgent;
-
-};
-
-}
-
-#endif

+ 0 - 204
gameplay/src/AIMessage.cpp

@@ -1,204 +0,0 @@
-#include "Base.h"
-#include "AIMessage.h"
-
-namespace gameplay
-{
-
-AIMessage::AIMessage()
-    : _id(0), _deliveryTime(0), _parameters(NULL), _parameterCount(0), _messageType(MESSAGE_TYPE_CUSTOM), _next(NULL)
-{
-}
-
-AIMessage::~AIMessage()
-{
-    SAFE_DELETE_ARRAY(_parameters);
-}
-
-AIMessage* AIMessage::create(unsigned int id, const char* sender, const char* receiver, unsigned int parameterCount)
-{
-    AIMessage* message = new AIMessage();
-    message->_id = id;
-    message->_sender = sender;
-    message->_receiver = receiver;
-    message->_parameterCount = parameterCount;
-    if (parameterCount > 0)
-        message->_parameters = new AIMessage::Parameter[parameterCount];
-    return message;
-}
-
-void AIMessage::destroy(AIMessage* message)
-{
-    SAFE_DELETE(message);
-}
-
-unsigned int AIMessage::getId() const
-{
-    return _id;
-}
-
-const char* AIMessage::getSender() const
-{
-    return _sender.c_str();
-}
-
-const char* AIMessage::getReceiver() const
-{
-    return _receiver.c_str();
-}
-
-double AIMessage::getDeliveryTime() const
-{
-    return _deliveryTime;
-}
-
-int AIMessage::getInt(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(_parameters[index].type == AIMessage::INTEGER);
-
-    return _parameters[index].intValue;
-}
-
-void AIMessage::setInt(unsigned int index, int value)
-{
-    GP_ASSERT(index < _parameterCount);
-
-    clearParameter(index);
-
-    _parameters[index].intValue = value;
-    _parameters[index].type = AIMessage::INTEGER;
-}
-
-long AIMessage::getLong(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(_parameters[index].type == AIMessage::LONG);
-
-    return _parameters[index].longValue;
-}
-
-void AIMessage::setLong(unsigned int index, long value)
-{
-    GP_ASSERT(index < _parameterCount);
-
-    clearParameter(index);
-
-    _parameters[index].longValue = value;
-    _parameters[index].type = AIMessage::LONG;
-}
-
-float AIMessage::getFloat(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(_parameters[index].type == AIMessage::FLOAT);
-
-    return _parameters[index].floatValue;
-}
-
-void AIMessage::setFloat(unsigned int index, float value)
-{
-    GP_ASSERT(index < _parameterCount);
-
-    clearParameter(index);
-
-    _parameters[index].floatValue = value;
-    _parameters[index].type = AIMessage::FLOAT;
-}
-
-double AIMessage::getDouble(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(_parameters[index].type == AIMessage::DOUBLE);
-
-    return _parameters[index].doubleValue;
-}
-
-void AIMessage::setDouble(unsigned int index, double value)
-{
-    GP_ASSERT(index < _parameterCount);
-
-    clearParameter(index);
-
-    _parameters[index].doubleValue = value;
-    _parameters[index].type = AIMessage::DOUBLE;
-}
-
-bool AIMessage::getBoolean(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(_parameters[index].type == AIMessage::BOOLEAN);
-
-    return _parameters[index].boolValue;
-}
-
-void AIMessage::setBoolean(unsigned int index, bool value)
-{
-    GP_ASSERT(index < _parameterCount);
-
-    clearParameter(index);
-
-    _parameters[index].boolValue = value;
-    _parameters[index].type = AIMessage::BOOLEAN;
-}
-
-const char* AIMessage::getString(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(_parameters[index].type == AIMessage::STRING);
-
-    return _parameters[index].stringValue;
-}
-
-void AIMessage::setString(unsigned int index, const char* value)
-{
-    GP_ASSERT(index < _parameterCount);
-    GP_ASSERT(value);
-
-    clearParameter(index);
-
-    // Copy the string into our parameter
-    size_t len = strlen(value);
-    char* buffer = new char[len + 1];
-    strcpy(buffer, value);
-    _parameters[index].stringValue = buffer;
-    _parameters[index].type = AIMessage::STRING;
-}
-
-unsigned int AIMessage::getParameterCount() const
-{
-    return _parameterCount;
-}
-
-AIMessage::ParameterType AIMessage::getParameterType(unsigned int index) const
-{
-    GP_ASSERT(index < _parameterCount);
-
-    return _parameters[index].type;
-}
-
-void AIMessage::clearParameter(unsigned int index)
-{
-    GP_ASSERT(index < _parameterCount);
-
-    _parameters[index].clear();
-}
-
-AIMessage::Parameter::Parameter()
-    : type(UNDEFINED)
-{
-}
-
-AIMessage::Parameter::~Parameter()
-{
-    clear();
-}
-
-void AIMessage::Parameter::clear()
-{
-    if (type == AIMessage::STRING)
-        SAFE_DELETE_ARRAY(stringValue);
-
-    type = AIMessage::UNDEFINED;
-}
-
-}

+ 0 - 283
gameplay/src/AIMessage.h

@@ -1,283 +0,0 @@
-#ifndef AIMESSAGE_H_
-#define AIMESSAGE_H_
-
-namespace gameplay
-{
-
-/**
- * Defines a simple message structure used for passing messages through
- * the AI system.
- *
- * Messages can store an arbitrary number of parameters. For the sake of simplicity,
- * each parameter is stored as type double, which is flexible enough to store most
- * data that needs to be passed.
- */
-class AIMessage
-{
-    friend class AIAgent;
-    friend class AIController;
-    friend class AIStateMachine;
-
-public:
-
-    /**
-     * Enumeration of supported AIMessage parameter types.
-     */
-    enum ParameterType
-    {
-        UNDEFINED,
-        INTEGER,
-        LONG,
-        FLOAT,
-        DOUBLE,
-        BOOLEAN,
-        STRING
-    };
-
-    /**
-     * Creates a new message.
-     *
-     * Once a message is constructed and populated with data, it can be routed to its
-     * intended recipient(s) by calling AIController::sendMessage(AIMessage*). The
-     * AIController will then handle scheduling and delivery of the message and it will
-     * also destroy the message after it has been successfully delivered. For this reason,
-     * once a message has been sent through AIController, it is unsafe to use or destroy
-     * the message pointer.
-     *
-     * @param id The message ID.
-     * @param sender AIAgent sender ID (can be empty or null for an anonymous message).
-     * @param receiver AIAgent receiver ID (can be empty or null for a broadcast message).
-     * @param parameterCount Number of parameters for this message.
-     *
-     * @return A new AIMessage.
-     */
-    static AIMessage* create(unsigned int id, const char* sender, const char* receiver, unsigned int parameterCount);
-
-    /**
-     * Destroys an AIMessage.
-     *
-     * Under normal circumstances this method does not need to be called since the
-     * AIController will automatically destroy an AIMessage once it has been 
-     * sent. However, in the rare case where an AIMessage is constructed and not
-     * passed to AIController::sendMessage, this method should be called to destroy
-     * the message.
-     */
-    static void destroy(AIMessage* message);
-
-    /**
-     * Returns the message ID.
-     *
-     * @return The message ID.
-     */
-    unsigned int getId() const;
-
-    /**
-     * Returns the sender for the message.
-     *
-     * @return The message sender ID.
-     */
-    const char* getSender() const;
-
-    /**
-     * Returns the receiver for the message.
-     *
-     * @return The message receiver.
-     */
-    const char* getReceiver() const;
-
-    /**
-     * Returns the value of the specified parameter as an integer.
-     *
-     * @param index Index of the parameter to get.
-     *
-     * @return The parameter value.
-     */
-    int getInt(unsigned int index) const;
-
-    /**
-     * Sets an integer parameter.
-     *
-     * @param index Index of the parameter to set.
-     * @param value The parameter value.
-     */
-    void setInt(unsigned int index, int value);
-
-    /**
-     * Returns the value of the specified parameter as a long integer.
-     *
-     * @param index Index of the parameter to get.
-     *
-     * @return The parameter value.
-     */
-    long getLong(unsigned int index) const;
-
-    /**
-     * Sets a long integer parameter.
-     *
-     * @param index Index of the parameter to set.
-     * @param value The parameter value.
-     */
-    void setLong(unsigned int index, long value);
-
-    /**
-     * Returns the value of the specified parameter as a float.
-     *
-     * @param index Index of the parameter to get.
-     *
-     * @return The parameter value.
-     */
-    float getFloat(unsigned int index) const;
-
-    /**
-     * Sets a float parameter.
-     *
-     * @param index Index of the parameter to set.
-     * @param value The parameter value.
-     */
-    void setFloat(unsigned int index, float value);
-
-    /**
-     * Returns the value of the specified parameter as a double.
-     *
-     * @param index Index of the parameter to get.
-     *
-     * @return The parameter value.
-     */
-    double getDouble(unsigned int index) const;
-
-    /**
-     * Sets a double parameter.
-     *
-     * @param index Index of the parameter to set.
-     * @param value The parameter value.
-     */
-    void setDouble(unsigned int index, double value);
-
-    /**
-     * Returns the value of the specified parameter as a boolean.
-     *
-     * @param index Index of the parameter to get.
-     *
-     * @return The parameter value.
-     */
-    bool getBoolean(unsigned int index) const;
-
-    /**
-     * Sets a long parameter.
-     *
-     * @param index Index of the parameter to set.
-     * @param value The parameter value.
-     */
-    void setBoolean(unsigned int index, bool value);
-
-    /**
-     * Returns the value of the specified parameter as a string.
-     *
-     * @param index Index of the parameter to get.
-     *
-     * @return The parameter value.
-     */
-    const char* getString(unsigned int index) const;
-
-    /**
-     * Sets a string parameter.
-     *
-     * @param index Index of the parameter to set.
-     * @param value The parameter value.
-     */
-    void setString(unsigned int index, const char* value);
-
-    /**
-     * Returns the number of parameters for this message.
-     * 
-     * @return The number of message parameters.
-     */
-    unsigned int getParameterCount() const;
-
-    /** 
-     * Returns the type of the specified parameter.
-     *
-     * @param index Index of the parameter to query.
-     *
-     * @return The parameter type.
-     */
-    ParameterType getParameterType(unsigned int index) const;
-
-private:
-
-    /**
-     * Internal message type enumeration.
-     */
-    enum MessageType
-    {
-        MESSAGE_TYPE_STATE_CHANGE,
-        MESSAGE_TYPE_CUSTOM
-    };
-
-    /**
-     * Defines a flexible message parameter.
-     */
-    struct Parameter
-    {
-        Parameter();
-
-        ~Parameter();
-
-        void clear();
-
-        union
-        {
-            int intValue;
-            long longValue;
-            float floatValue;
-            double doubleValue;
-            bool boolValue;
-            char* stringValue;
-        };
-
-        AIMessage::ParameterType type;
-    };
-
-    /**
-     * Constructor.
-     */
-    AIMessage();
-
-    /**
-     * Hidden copy constructor.
-     */
-    AIMessage(const AIMessage&);
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AIMessage& operator=(const AIMessage&);
-
-    /**
-     * Destructor (hidden - use AIMessage::destroy instead).
-     */
-    ~AIMessage();
-
-    /**
-     * Returns the delivery time for the message.
-     *
-     * @return The delivery time for the message, or zero if the message is not currently scheduled to be delivered.
-     */
-    double getDeliveryTime() const;
-
-    void clearParameter(unsigned int index);
-
-    unsigned int _id;
-    std::string _sender;
-    std::string _receiver;
-    double _deliveryTime;
-    Parameter* _parameters;
-    unsigned int _parameterCount;
-    MessageType _messageType;
-    AIMessage* _next;
-
-};
-
-}
-
-#endif

+ 0 - 82
gameplay/src/AIState.cpp

@@ -1,82 +0,0 @@
-#include "Base.h"
-#include "AIState.h"
-#include "AIAgent.h"
-#include "AIStateMachine.h"
-#include "Node.h"
-
-namespace gameplay
-{
-
-AIState* AIState::_empty = NULL;
-
-AIState::AIState(const char* id)
-    : _id(id), _listener(NULL)
-{
-}
-
-AIState::~AIState()
-{
-}
-
-AIState* AIState::create(const char* id)
-{
-    return new AIState(id);
-}
-
-const char* AIState::getId() const
-{
-    return _id.c_str();
-}
-
-void AIState::setListener(Listener* listener)
-{
-    _listener = listener;
-}
-
-void AIState::enter(AIStateMachine* stateMachine)
-{
-    if (_listener)
-        _listener->stateEnter(stateMachine->getAgent(), this);
-
-    Node* node = stateMachine->_agent->_node;
-    if (node)
-        node->fireScriptEvent<void>(GP_GET_SCRIPT_EVENT(Node, stateEnter), dynamic_cast<void*>(node), this);
-}
-
-void AIState::exit(AIStateMachine* stateMachine)
-{
-    if (_listener)
-        _listener->stateExit(stateMachine->getAgent(), this);
-
-    Node* node = stateMachine->_agent->_node;
-    if (node)
-        node->fireScriptEvent<void>(GP_GET_SCRIPT_EVENT(Node, stateExit), dynamic_cast<void*>(node), this);
-}
-
-void AIState::update(AIStateMachine* stateMachine, float elapsedTime)
-{
-    if (_listener)
-        _listener->stateUpdate(stateMachine->getAgent(), this, elapsedTime);
-
-    Node* node = stateMachine->_agent->_node;
-    if (node)
-        node->fireScriptEvent<void>(GP_GET_SCRIPT_EVENT(Node, stateUpdate), dynamic_cast<void*>(node), this, elapsedTime);
-}
-
-AIState::Listener::~Listener()
-{
-}
-
-void AIState::Listener::stateEnter(AIAgent* agent, AIState* state)
-{
-}
-
-void AIState::Listener::stateExit(AIAgent* agent, AIState* state)
-{
-}
-
-void AIState::Listener::stateUpdate(AIAgent* agent, AIState* state, float elapsedTime)
-{
-}
-
-}

+ 0 - 136
gameplay/src/AIState.h

@@ -1,136 +0,0 @@
-#ifndef AISTATE_H_
-#define AISTATE_H_
-
-#include "Ref.h"
-
-namespace gameplay
-{
-
-class AIAgent;
-class AIStateMachine;
-
-/**
- * Defines a single state in an AIStateMachine.
- *
- * An AIState encapsulates a state and unit of work within an AI
- * state machine. Events can be programmed or scripted when the
- * state is entered, exited and each frame/tick in its update event.
- */
-class AIState : public Ref
-{
-    friend class AIStateMachine;
-
-public:
-
-    /**
-     * Interface for listening to AIState events.
-     */
-    class Listener
-    {
-    public:
-
-        /**
-         * Virtual destructor.
-         */
-        virtual ~Listener();
-
-        /** 
-         * Called when a state is entered.
-         *
-         * @param agent The AIAgent this state event is for.
-         * @param state The state that was entered.
-         */
-        virtual void stateEnter(AIAgent* agent, AIState* state);
-
-        /**
-         * Called when a state is exited.
-         *
-         * @param agent The AIAgent this state event is for.
-         * @param state The state that was exited.
-         */
-        virtual void stateExit(AIAgent* agent, AIState* state);
-
-        /**
-         * Called once per frame when for a state when it is active.
-         *
-         * This method is normally where the logic for a state is implemented.
-         *
-         * @param agent The AIAgent this state event is for.
-         * @param state The active AIState.
-         * @param elapsedTime The elapsed time, in milliseconds.
-         */
-        virtual void stateUpdate(AIAgent* agent, AIState* state, float elapsedTime);
-    };
-
-    /**
-     * Creates a new AISTate.
-     *
-     * @param id The ID of the new AIState.
-     *
-     * @return The new AIState.
-     * @script{create}
-     */
-    static AIState* create(const char* id);
-
-    /**
-     * Returns the ID of this state.
-     *
-     * @return The state ID.
-     */
-    const char* getId() const;
-
-    /**
-     * Sets a listener to dispatch state events to.
-     * 
-     * @param listener Listener to dispatch state events to, or NULL to disable event dispatching.
-     */
-    void setListener(Listener* listener);
-
-private:
-
-    /**
-     * Constructs a new AIState.
-     */
-    AIState(const char* id);
-
-    /**
-     * Destructor.
-     */
-    ~AIState();
-
-    /**
-     * Hidden copy constructor.
-     */
-    AIState(const AIState&);
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AIState& operator=(const AIState&);
-
-    /**
-     * Called by AIStateMachine when this state is being entered.
-     */
-    void enter(AIStateMachine* stateMachine);
-
-    /**
-     * Called by AIStateMachine when this state is being exited.
-     */
-    void exit(AIStateMachine* stateMachine);
-
-    /**
-     * Called by AIStateMachine once per frame to update this state when it is active.
-     */
-    void update(AIStateMachine* stateMachine, float elapsedTime);
-
-    std::string _id;
-    Listener* _listener;
-
-    // The default/empty state.
-    static AIState* _empty;
-
-};
-
-}
-
-#endif

+ 0 - 143
gameplay/src/AIStateMachine.cpp

@@ -1,143 +0,0 @@
-#include "Base.h"
-#include "AIStateMachine.h"
-#include "AIAgent.h"
-#include "AIMessage.h"
-#include "Game.h"
-
-namespace gameplay
-{
-
-AIStateMachine::AIStateMachine(AIAgent* agent)
-    : _agent(agent)
-{
-    GP_ASSERT(agent);
-    if (AIState::_empty)
-        AIState::_empty->addRef();
-    else
-        AIState::_empty = new AIState("");
-    _currentState = AIState::_empty;
-}
-
-AIStateMachine::~AIStateMachine()
-{
-    // Release all states
-    for (std::list<AIState*>::iterator itr = _states.begin(); itr != _states.end(); ++itr)
-    {
-        (*itr)->release();
-    }
-
-    if (AIState::_empty)
-    {
-        if (AIState::_empty->getRefCount() == 1)
-        {
-            SAFE_RELEASE(AIState::_empty);
-        }
-        else
-        {
-            AIState::_empty->release();
-        }
-    }
-}
-
-AIAgent* AIStateMachine::getAgent() const
-{
-    return _agent;
-}
-
-AIState* AIStateMachine::addState(const char* id)
-{
-    AIState* state = AIState::create(id);
-    _states.push_back(state);
-    return state;
-}
-
-void AIStateMachine::addState(AIState* state)
-{
-    state->addRef();
-    _states.push_back(state);
-}
-
-void AIStateMachine::removeState(AIState* state)
-{
-    std::list<AIState*>::iterator itr = std::find(_states.begin(), _states.end(), state);
-    if (itr != _states.end())
-    {
-        _states.erase(itr);
-        state->release();
-    }
-}
-
-AIState* AIStateMachine::getState(const char* id) const
-{
-    GP_ASSERT(id);
-
-    for (std::list<AIState*>::const_iterator itr = _states.begin(); itr != _states.end(); ++itr)
-    {
-        AIState* state = (*itr);
-
-        if (strcmp(id, state->getId()) == 0)
-            return state;
-    }
-
-    return NULL;
-}
-
-AIState* AIStateMachine::getActiveState() const
-{
-    return _currentState;
-}
-
-bool AIStateMachine::hasState(AIState* state) const
-{
-    GP_ASSERT(state);
-
-    return (std::find(_states.begin(), _states.end(), state) != _states.end());
-}
-
-AIState* AIStateMachine::setState(const char* id)
-{
-    AIState* state = getState(id);
-    if (state)
-        sendChangeStateMessage(state);
-    return state;
-}
-
-bool AIStateMachine::setState(AIState* state)
-{
-    if (hasState(state))
-    {
-        sendChangeStateMessage(state);
-        return true;
-    }
-
-    return false;
-}
-
-void AIStateMachine::sendChangeStateMessage(AIState* newState)
-{
-    AIMessage* message = AIMessage::create(0, _agent->getId(), _agent->getId(), 1);
-    message->_messageType = AIMessage::MESSAGE_TYPE_STATE_CHANGE;
-    message->setString(0, newState->getId());
-    Game::getInstance()->getAIController()->sendMessage(message);
-}
-
-void AIStateMachine::setStateInternal(AIState* state)
-{
-    GP_ASSERT(hasState(state));
-
-    // Fire the exit event for the current state
-    _currentState->exit(this);
-
-    // Set the new state
-    _currentState = state;
-
-    // Fire the enter event for the new state
-    _currentState->enter(this);
-}
-
-void AIStateMachine::update(float elapsedTime)
-{
-    _currentState->update(this, elapsedTime);
-}
-
-}

+ 0 - 161
gameplay/src/AIStateMachine.h

@@ -1,161 +0,0 @@
-#ifndef AISTATEMACHINE_H_
-#define AISTATEMACHINE_H_
-
-#include "AIState.h"
-
-namespace gameplay
-{
-
-class AIAgent;
-
-/**
- * Defines a simple AI state machine that can be used to program logic
- * for an AIAgent in a game.
- *
- * A state machine uses AIState objects to represent different states
- * of an object in the game. The state machine provides access to the
- * current state of an AI agent and it controls state changes as well.
- * When a new state is set, the stateExited event will be called for the
- * previous state, the stateEntered event will be called for the new state
- * and then the stateUpdate event will begin to be called each frame
- * while the new state is active.
- *
- * Communication of state changes is facilitated through the AIMessage class.
- * Messages are dispatched by the AIController and can be used for purposes
- * other than state changes as well. Messages may be sent to the state
- * machines of any other agents in a game and can contain any arbitrary
- * information. This mechanism provides a simple, flexible and easily
- * debuggable method for communicating between AI objects in a game.
- */
-class AIStateMachine
-{
-    friend class AIAgent;
-    friend class AIState;
-
-public:
-
-    /**
-     * Returns the AIAgent that owns this state machine.
-     *
-     * @return The AIAgent that owns this state machine.
-     */
-    AIAgent* getAgent() const;
-
-    /**
-     * Creates and adds a new state to the state machine.
-     *
-     * @param id ID of the new state.
-     *
-     * @return The newly created and added state.
-     */
-    AIState* addState(const char* id);
-
-    /**
-     * Adds a state to the state machine.
-     *
-     * The specified state may be shared by other state machines.
-     * Its reference count is increased while it is held by
-     * this state machine.
-     *
-     * @param state The state to add.
-     */
-    void addState(AIState* state);
-
-    /**
-     * Removes a state from the state machine.
-     *
-     * @param state The state to remove.
-     */
-    void removeState(AIState* state);
-
-    /**
-     * Returns a state registered with this state machine.
-     *
-     * @param id The ID of the state to return.
-     *
-     * @return The state with the given ID, or NULL if no such state exists.
-     */
-    AIState* getState(const char* id) const;
-
-    /**
-     * Returns the active state for this state machine.
-     *
-     * @return The active state for this state machine.
-     */
-    AIState* getActiveState() const;
-
-    /**
-     * Changes the state of this state machine to the given state.
-     *
-     * If no state with the given ID exists within this state machine,
-     * this method does nothing.
-     *
-     * @param id The ID of the new state.
-     *
-     * @return The new state, or NULL if no matching state could be found.
-     */
-    AIState* setState(const char* id);
-
-    /**
-     * Changes the state of this state machine to the given state.
-     *
-     * If the given state is not registered with this state machine,
-     * this method does nothing.
-     *
-     * @param state The new state.
-     *
-     * @return true if the state is successfully changed, false otherwise.
-     */
-    bool setState(AIState* state);
-
-private:
-
-    /**
-     * Constructor.
-     */
-    AIStateMachine(AIAgent* agent);
-
-    /**
-     * Destructor.
-     */
-    ~AIStateMachine();
-
-    /**
-     * Hidden copy constructor.
-     */
-    AIStateMachine(const AIStateMachine&);
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AIStateMachine& operator=(const AIStateMachine&);
-
-    /**
-     * Sends a message to change the state of this state machine.
-     */
-    void sendChangeStateMessage(AIState* newState);
-
-    /**
-     * Changes the active state of the state machine.
-     */
-    void setStateInternal(AIState* state);
-
-    /**
-     * Determines if the specified state exists within this state machine.
-     */
-    bool hasState(AIState* state) const;
-
-    /**
-     * Called by AIController to update the state machine each frame.
-     */
-    void update(float elapsedTime);
-
-    AIAgent* _agent;
-    AIState* _currentState;
-    std::list<AIState*> _states;
-
-};
-
-}
-
-#endif

+ 0 - 44
gameplay/src/AbsoluteLayout.cpp

@@ -1,44 +0,0 @@
-#include "Base.h"
-#include "Control.h"
-#include "AbsoluteLayout.h"
-#include "Container.h"
-
-namespace gameplay
-{
-
-static AbsoluteLayout* __instance;
-
-AbsoluteLayout::AbsoluteLayout()
-{
-}
-
-AbsoluteLayout::~AbsoluteLayout()
-{
-    __instance = NULL;
-}
-
-AbsoluteLayout* AbsoluteLayout::create()
-{
-    if (!__instance)
-    {
-        __instance = new AbsoluteLayout();
-    }
-    else
-    {
-        __instance->addRef();
-    }
-
-    return __instance;
-}
-
-Layout::Type AbsoluteLayout::getType()
-{
-    return Layout::LAYOUT_ABSOLUTE;
-}
-
-void AbsoluteLayout::update(const Container* container)
-{
-    // Nothing to do for absolute layout
-}
-
-}

+ 0 - 67
gameplay/src/AbsoluteLayout.h

@@ -1,67 +0,0 @@
-#ifndef ABSOLUTELAYOUT_H_
-#define ABSOLUTELAYOUT_H_
-
-#include "Layout.h"
-
-namespace gameplay
-{
-
-/**
- * Defines a Layout for forms and containers that requires the user
- * to specify absolute positions for all contained controls.
- */
-class AbsoluteLayout : public Layout
-{
-    friend class Form;
-    friend class Container;
-
-public:
-
-    /**
-     * Get the type of this Layout.
-     *
-     * @return Layout::LAYOUT_ABSOLUTE
-     */
-    Layout::Type getType();
-
-protected:
-
-    /**
-     * Update the controls contained by the specified container.
-     *
-     * An AbsoluteLayout does nothing to modify the layout of controls.
-     * It simply calls update() on any control that is dirty.
-     *
-     * @param container The container to update.
-     */
-    void update(const Container* container);
-
-private:
-    
-    /*
-     * Constructor.
-     */
-    AbsoluteLayout();
-    
-    /*
-     * Constructor.
-     */
-    AbsoluteLayout(const AbsoluteLayout& copy);
-    
-    /*
-     * Destructor.
-     */
-    virtual ~AbsoluteLayout();
-
-    /**
-     * Create an AbsoluteLayout.
-     *
-     * @return An AbsoluteLayout object.
-     */
-    static AbsoluteLayout* create();
-
-};
-
-}
-
-#endif

+ 0 - 478
gameplay/src/Animation.cpp

@@ -1,478 +0,0 @@
-#include "Base.h"
-#include "Animation.h"
-#include "AnimationController.h"
-#include "AnimationClip.h"
-#include "AnimationTarget.h"
-#include "Game.h"
-#include "Transform.h"
-#include "Properties.h"
-
-#define ANIMATION_INDEFINITE_STR "INDEFINITE"
-#define ANIMATION_DEFAULT_CLIP 0
-#define ANIMATION_ROTATE_OFFSET 0
-#define ANIMATION_SRT_OFFSET 3
-
-namespace gameplay
-{
-
-Animation::Animation(const char* id, AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, unsigned int type)
-    : _controller(Game::getInstance()->getAnimationController()), _id(id), _duration(0L), _defaultClip(NULL), _clips(NULL)
-{
-    createChannel(target, propertyId, keyCount, keyTimes, keyValues, type);
-
-    // Release the animation because a newly created animation has a ref count of 1 and the channels hold the ref to animation.
-    release();
-    GP_ASSERT(getRefCount() == 1);
-}
-
-Animation::Animation(const char* id, AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, float* keyInValue, float* keyOutValue, unsigned int type)
-    : _controller(Game::getInstance()->getAnimationController()), _id(id), _duration(0L), _defaultClip(NULL), _clips(NULL)
-{
-    createChannel(target, propertyId, keyCount, keyTimes, keyValues, keyInValue, keyOutValue, type);
-    // Release the animation because a newly created animation has a ref count of 1 and the channels hold the ref to animation.
-    release();
-    GP_ASSERT(getRefCount() == 1);
-}
-
-Animation::Animation(const char* id)
-    : _controller(Game::getInstance()->getAnimationController()), _id(id), _duration(0L), _defaultClip(NULL), _clips(NULL)
-{
-}
-
-Animation::~Animation()
-{
-    _channels.clear();
-
-    if (_defaultClip)
-    {
-        if (_defaultClip->isClipStateBitSet(AnimationClip::CLIP_IS_PLAYING_BIT))
-        {
-            GP_ASSERT(_controller);
-            _controller->unschedule(_defaultClip);
-        }
-        SAFE_RELEASE(_defaultClip);
-    }
-
-    if (_clips)
-    {
-        std::vector<AnimationClip*>::iterator clipIter = _clips->begin();
-
-        while (clipIter != _clips->end())
-        {
-            AnimationClip* clip = *clipIter;
-            GP_ASSERT(clip);
-            if (clip->isClipStateBitSet(AnimationClip::CLIP_IS_PLAYING_BIT))
-            {
-                GP_ASSERT(_controller);
-                _controller->unschedule(clip);
-            }
-            SAFE_RELEASE(clip);
-            clipIter++;
-        }
-        _clips->clear();
-    }
-    SAFE_DELETE(_clips);
-}
-
-Animation::Channel::Channel(Animation* animation, AnimationTarget* target, int propertyId, Curve* curve, unsigned long duration)
-    : _animation(animation), _target(target), _propertyId(propertyId), _curve(curve), _duration(duration)
-{
-    GP_ASSERT(_animation);
-    GP_ASSERT(_target);
-    GP_ASSERT(_curve);
-
-    // get property component count, and ensure the property exists on the AnimationTarget by getting the property component count.
-    GP_ASSERT(_target->getAnimationPropertyComponentCount(propertyId));
-    _curve->addRef();
-    _target->addChannel(this);
-    _animation->addRef();
-}
-
-Animation::Channel::Channel(const Channel& copy, Animation* animation, AnimationTarget* target)
-    : _animation(animation), _target(target), _propertyId(copy._propertyId), _curve(copy._curve), _duration(copy._duration)
-{
-    GP_ASSERT(_curve);
-    GP_ASSERT(_target);
-    GP_ASSERT(_animation);
-
-    _curve->addRef();
-    _target->addChannel(this);
-    _animation->addRef();
-}
-
-Animation::Channel::~Channel()
-{
-    SAFE_RELEASE(_curve);
-    SAFE_RELEASE(_animation);
-}
-
-Curve* Animation::Channel::getCurve() const
-{
-    return _curve;
-}
-
-const char* Animation::getId() const
-{
-    return _id.c_str();
-}
-
-unsigned long Animation::getDuration() const
-{
-    return _duration;
-}
-
-void Animation::createClips(const char* url)
-{
-    Properties* properties = Properties::create(url);
-    GP_ASSERT(properties);
-
-    Properties* pAnimation = (strlen(properties->getNamespace()) > 0) ? properties : properties->getNextNamespace();
-    GP_ASSERT(pAnimation);
-
-    int frameCount = pAnimation->getInt("frameCount");
-    if (frameCount <= 0)
-        GP_ERROR("The animation's frame count must be greater than 0.");
-
-    createClips(pAnimation, (unsigned int)frameCount);
-
-    SAFE_DELETE(properties);
-}
-
-AnimationClip* Animation::createClip(const char* id, unsigned long begin, unsigned long end)
-{
-    AnimationClip* clip = new AnimationClip(id, this, begin, end);
-    addClip(clip);
-    return clip;
-}
-
-AnimationClip* Animation::getClip(const char* id)
-{
-    // If id is NULL return the default clip.
-    if (id == NULL)
-    {
-        if (_defaultClip == NULL)
-            createDefaultClip();
-
-        return _defaultClip;
-    }
-    else
-    {
-        return findClip(id);
-    }
-}
-
-AnimationClip* Animation::getClip(unsigned int index) const
-{
-    if (_clips)
-        return _clips->at(index);
-
-    return NULL;
-}
-
-unsigned int Animation::getClipCount() const
-{
-    return _clips ? (unsigned int)_clips->size() : 0;
-}
-
-void Animation::play(const char* clipId)
-{
-    // If id is NULL, play the default clip.
-    if (clipId == NULL)
-    {
-        if (_defaultClip == NULL)
-            createDefaultClip();
-
-        _defaultClip->play();
-    }
-    else
-    {
-        // Find animation clip and play.
-        AnimationClip* clip = findClip(clipId);
-        if (clip != NULL)
-            clip->play();
-    }
-}
-
-void Animation::stop(const char* clipId)
-{
-    // If id is NULL, play the default clip.
-    if (clipId == NULL)
-    {
-        if (_defaultClip)
-            _defaultClip->stop();
-    }
-    else
-    {
-        // Find animation clip and play.
-        AnimationClip* clip = findClip(clipId);
-        if (clip != NULL)
-            clip->stop();
-    }
-}
-
-void Animation::pause(const char * clipId)
-{
-    if (clipId == NULL)
-    {
-        if (_defaultClip)
-            _defaultClip->pause();
-    }
-    else
-    {
-        AnimationClip* clip = findClip(clipId);
-        if (clip != NULL)
-            clip->pause();
-    }
-}
-
-bool Animation::targets(AnimationTarget* target) const
-{
-    for (std::vector<Animation::Channel*>::const_iterator itr = _channels.begin(); itr != _channels.end(); ++itr)
-    {
-        GP_ASSERT(*itr);
-        if ((*itr)->_target == target)
-        {
-            return true;
-        }
-    }
-    return false;
-}
-
-
-void Animation::createDefaultClip()
-{
-    _defaultClip = new AnimationClip("default_clip", this, 0.0f, _duration);
-}
-
-void Animation::createClips(Properties* animationProperties, unsigned int frameCount)
-{
-    GP_ASSERT(animationProperties);
-
-    Properties* pClip = animationProperties->getNextNamespace();
-
-    while (pClip != NULL && std::strcmp(pClip->getNamespace(), "clip") == 0)
-    {
-        int begin = pClip->getInt("begin");
-        int end = pClip->getInt("end");
-
-        AnimationClip* clip = createClip(pClip->getId(), ((float)begin / frameCount) * _duration, ((float)end / frameCount) * _duration);
-
-        const char* repeat = pClip->getString("repeatCount");
-        if (repeat)
-        {
-            if (strcmp(repeat, ANIMATION_INDEFINITE_STR) == 0)
-            {
-                clip->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);
-            }
-            else
-            {
-                float value;
-                sscanf(repeat, "%f", &value);
-                clip->setRepeatCount(value);
-            }
-        }
-
-        const char* speed = pClip->getString("speed");
-        if (speed)
-        {
-            float value;
-            sscanf(speed, "%f", &value);
-            clip->setSpeed(value);
-        }
-
-        clip->setLoopBlendTime(pClip->getFloat("loopBlendTime")); // returns zero if not specified
-
-        pClip = animationProperties->getNextNamespace();
-    }
-}
-
-void Animation::addClip(AnimationClip* clip)
-{
-    if (_clips == NULL)
-        _clips = new std::vector<AnimationClip*>;
-
-    GP_ASSERT(clip);
-    _clips->push_back(clip);
-}
-
-AnimationClip* Animation::findClip(const char* id) const
-{
-    if (_clips)
-    {
-        size_t clipCount = _clips->size();
-        for (size_t i = 0; i < clipCount; i++)
-        {
-            AnimationClip* clip = _clips->at(i);
-            GP_ASSERT(clip);
-            if (clip->_id.compare(id) == 0)
-            {
-                return clip;
-            }
-        }
-    }
-    return NULL;
-}
-
-Animation::Channel* Animation::createChannel(AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, unsigned int type)
-{
-    GP_ASSERT(target);
-    GP_ASSERT(keyTimes);
-    GP_ASSERT(keyValues);
-
-    unsigned int propertyComponentCount = target->getAnimationPropertyComponentCount(propertyId);
-    GP_ASSERT(propertyComponentCount > 0);
-
-    Curve* curve = Curve::create(keyCount, propertyComponentCount);
-    GP_ASSERT(curve);
-    if (target->_targetType == AnimationTarget::TRANSFORM)
-        setTransformRotationOffset(curve, propertyId);
-
-    unsigned int lowest = keyTimes[0];
-    unsigned long duration = keyTimes[keyCount-1] - lowest;
-
-    float* normalizedKeyTimes = new float[keyCount];
-
-    normalizedKeyTimes[0] = 0.0f;
-    curve->setPoint(0, normalizedKeyTimes[0], keyValues, (Curve::InterpolationType) type);
-
-    unsigned int pointOffset = propertyComponentCount;
-    unsigned int i = 1;
-    for (; i < keyCount - 1; i++)
-    {
-        normalizedKeyTimes[i] = (float) (keyTimes[i] - lowest) / (float) duration;
-        curve->setPoint(i, normalizedKeyTimes[i], (keyValues + pointOffset), (Curve::InterpolationType) type);
-        pointOffset += propertyComponentCount;
-    }
-    if (keyCount > 1) {
-        i = keyCount - 1;
-        normalizedKeyTimes[i] = 1.0f;
-        curve->setPoint(i, normalizedKeyTimes[i], keyValues + pointOffset, (Curve::InterpolationType) type);
-    }
-
-    SAFE_DELETE_ARRAY(normalizedKeyTimes);
-
-    Channel* channel = new Channel(this, target, propertyId, curve, duration);
-    curve->release();
-    addChannel(channel);
-    return channel;
-}
-
-Animation::Channel* Animation::createChannel(AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, float* keyInValue, float* keyOutValue, unsigned int type)
-{
-    GP_ASSERT(target);
-    GP_ASSERT(keyTimes);
-    GP_ASSERT(keyValues);
-
-    unsigned int propertyComponentCount = target->getAnimationPropertyComponentCount(propertyId);
-    GP_ASSERT(propertyComponentCount > 0);
-
-    Curve* curve = Curve::create(keyCount, propertyComponentCount);
-    GP_ASSERT(curve);
-    if (target->_targetType == AnimationTarget::TRANSFORM)
-        setTransformRotationOffset(curve, propertyId);
-
-    unsigned long lowest = keyTimes[0];
-    unsigned long duration = keyTimes[keyCount-1] - lowest;
-
-    float* normalizedKeyTimes = new float[keyCount];
-
-    normalizedKeyTimes[0] = 0.0f;
-    curve->setPoint(0, normalizedKeyTimes[0], keyValues, (Curve::InterpolationType) type, keyInValue, keyOutValue);
-
-    unsigned int pointOffset = propertyComponentCount;
-    unsigned int i = 1;
-    for (; i < keyCount - 1; i++)
-    {
-        normalizedKeyTimes[i] = (float) (keyTimes[i] - lowest) / (float) duration;
-        curve->setPoint(i, normalizedKeyTimes[i], (keyValues + pointOffset), (Curve::InterpolationType) type, (keyInValue + pointOffset), (keyOutValue + pointOffset));
-        pointOffset += propertyComponentCount;
-    }
-    i = keyCount - 1;
-    normalizedKeyTimes[i] = 1.0f;
-    curve->setPoint(i, normalizedKeyTimes[i], keyValues + pointOffset, (Curve::InterpolationType) type, keyInValue + pointOffset, keyOutValue + pointOffset);
-
-    SAFE_DELETE_ARRAY(normalizedKeyTimes);
-
-    Channel* channel = new Channel(this, target, propertyId, curve, duration);
-    curve->release();
-    addChannel(channel);
-    return channel;
-}
-
-void Animation::addChannel(Channel* channel)
-{
-    GP_ASSERT(channel);
-    _channels.push_back(channel);
-
-    if (channel->_duration > _duration)
-        _duration = channel->_duration;
-}
-
-void Animation::removeChannel(Channel* channel)
-{
-    std::vector<Animation::Channel*>::iterator itr = _channels.begin();
-    while (itr != _channels.end())
-    {
-        Animation::Channel* chan = *itr;
-        if (channel == chan)
-        {
-            _channels.erase(itr);
-            return;
-        }
-        else
-        {
-            itr++;
-        }
-    }
-}
-
-void Animation::setTransformRotationOffset(Curve* curve, unsigned int propertyId)
-{
-    GP_ASSERT(curve);
-
-    switch (propertyId)
-    {
-    case Transform::ANIMATE_ROTATE:
-    case Transform::ANIMATE_ROTATE_TRANSLATE:
-        curve->setQuaternionOffset(ANIMATION_ROTATE_OFFSET);
-        return;
-    case Transform::ANIMATE_SCALE_ROTATE:
-    case Transform::ANIMATE_SCALE_ROTATE_TRANSLATE:
-        curve->setQuaternionOffset(ANIMATION_SRT_OFFSET);
-        return;
-    }
-
-    return;
-}
-
-Animation* Animation::clone(Channel* channel, AnimationTarget* target)
-{
-    GP_ASSERT(channel);
-
-    Animation* animation = new Animation(getId());
-
-    Animation::Channel* channelCopy = new Animation::Channel(*channel, animation, target);
-    animation->addChannel(channelCopy);
-    // Release the animation because a newly created animation has a ref count of 1 and the channels hold the ref to animation.
-    animation->release();
-    GP_ASSERT(animation->getRefCount() == 1);
-
-    // Clone the clips
-    
-    if (_defaultClip)
-    {
-        animation->_defaultClip = _defaultClip->clone(animation);
-    }
-    
-    if (_clips)
-    {
-        for (std::vector<AnimationClip*>::iterator it = _clips->begin(); it != _clips->end(); ++it)
-        {
-            AnimationClip* newClip = (*it)->clone(animation);
-            animation->addClip(newClip);
-        }
-    }
-    return animation;
-}
-
-}

+ 0 - 241
gameplay/src/Animation.h

@@ -1,241 +0,0 @@
-#ifndef ANIMATION_H_
-#define ANIMATION_H_
-
-#include "Ref.h"
-#include "Properties.h"
-#include "Curve.h"
-
-namespace gameplay
-{
-
-class AnimationTarget;
-class AnimationController;
-class AnimationClip;
-
-/**
- * Defines a generic property animation.
- *
- * To run an animation you must play an AnimationClip.
- * Every Animation has the default clip which will run from begin-end time.
- * You can create additional clips to run only parts of an animation and control
- * various runtime characteristics, such as repeat count, etc.
- *
- * @see http://gameplay3d.github.io/GamePlay/docs/file-formats.html#wiki-Animation
- */
-class Animation : public Ref
-{
-    friend class AnimationClip;
-    friend class AnimationTarget;
-    friend class Bundle;
-
-public:
-
-    /**
-     * Gets the Animation's ID.
-     *
-     * @return The Animation's ID.
-     */
-    const char* getId() const;
-
-    /**
-     * Gets the Animation's duration.
-     *
-     * @return The Animation's duration (in milliseconds).
-     */
-    unsigned long getDuration() const;
-
-    /**
-     * Creates an AnimationClip from the Properties object defined at the specified URL,
-     * where the URL is of the format "<file-path>.<extension>#<namespace-id>/<namespace-id>/.../<namespace-id>"
-     * (and "#<namespace-id>/<namespace-id>/.../<namespace-id>" is optional).
-     *
-     * @param url The URL pointing to the Properties object containing the clip definitions.
-     */
-    void createClips(const char* url);
-
-    /**
-     * Creates an AnimationClip from the Animation.
-     *
-     * @param id The ID to the give the AnimationClip.
-     * @param begin The begin time (in milliseconds) or keyframe(for keyframe animations).
-     * @param end The end time (in milliseconds) or keyframe (for keyframe animations).
-     *
-     * @return The newly created AnimationClip; NULL if an AnimationClip already exists with the same ID.
-     * @script{create}
-     */
-    AnimationClip* createClip(const char* id, unsigned long begin, unsigned long end);
-
-    /**
-     * Finds the AnimationClip with the specified name. If NULL, gets the default clip.
-     *
-     * @param clipId The ID of the AnimationClip to get.
-     *
-     * @return The AnimationClip with the specified ID; NULL if an AnimationClip with the given ID is not found.
-     */
-    AnimationClip* getClip(const char* clipId = NULL);
-
-    /**
-     * Returns the AnimationClip at the given index.
-     *
-     * @param index Index of the clip to return.
-     */
-    AnimationClip* getClip(unsigned int index) const;
-
-    /**
-     * Returns the number of animation clips in this animation.
-     */
-    unsigned int getClipCount() const;
-
-    /**
-     * Plays the AnimationClip with the specified name.
-     *
-     * @param clipId The ID of the AnimationClip to play. If NULL, plays the default clip.
-     */
-    void play(const char* clipId = NULL);
-
-    /**
-     * Stops the AnimationClip with the specified name.
-     *
-     * @param clipId The ID of the AnimationClip to stop. If NULL, stops the default clip.
-     */
-    void stop(const char* clipId = NULL);
-
-    /**
-     * Pauses the AnimationClip with the specified name.
-     *
-     * @param clipId The ID of the AnimationClip to pause. If NULL, pauses the default clip.
-     */
-    void pause(const char* clipId = NULL);
-
-    /**
-     * Returns true if this animation targets the given AnimationTarget.
-     */
-    bool targets(AnimationTarget* target) const;
-
-private:
-
-    /**
-     * Defines a channel which holds the target, target property, curve values, and duration.
-     *
-     * An animation can have 1 or more channels. All typical simple property animations
-     * will have 1 channel. Skeletal animation will have 1 channel per joint to be animated.
-     */
-    class Channel
-    {
-        friend class AnimationClip;
-        friend class Animation;
-        friend class AnimationTarget;
-
-    private:
-
-        Channel(Animation* animation, AnimationTarget* target, int propertyId, Curve* curve, unsigned long duration);
-        Channel(const Channel& copy, Animation* animation, AnimationTarget* target);
-        Channel(const Channel&); // Hidden copy constructor.
-        ~Channel();
-        Channel& operator=(const Channel&); // Hidden copy assignment operator.
-        Curve* getCurve() const;
-
-        Animation* _animation;                // Reference to the animation this channel belongs to.
-        AnimationTarget* _target;             // The target of this channel.
-        int _propertyId;                      // The target property this channel targets.
-        Curve* _curve;                        // The curve used to represent the animation data.
-        unsigned long _duration;              // The length of the animation (in milliseconds).
-    };
-
-    /**
-     * Hidden copy constructor.
-     */
-    Animation(const Animation& copy);
-
-    /**
-     * Constructor.
-     */
-    Animation(const char* id, AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, float* keyInValue, float* keyOutValue, unsigned int type);
-
-    /**
-     * Constructor.
-     */
-    Animation(const char* id, AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, unsigned int type);
-
-    /**
-     * Constructor.
-     */
-    Animation(const char* id);
-
-    /**
-     * Destructor.
-     */
-    ~Animation();
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    Animation& operator=(const Animation&);
-
-    /**
-     * Creates the default clip.
-     */
-    void createDefaultClip();
-
-    /**
-     * Creates AnimationClip's for this Animation from the specified Property object.
-     */
-    void createClips(Properties* animationProperties, unsigned int frameCount);
-
-    /**
-     * Adds a clip to this Animation.
-     */
-    void addClip(AnimationClip* clip);
-
-    /**
-     * Finds the clip with the given ID.
-     */
-    AnimationClip* findClip(const char* id) const;
-
-    /**
-     * Creates a channel within this animation.
-     */
-    Channel* createChannel(AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, unsigned int type);
-
-    /**
-     * Creates a channel within this animation.
-     */
-    Channel* createChannel(AnimationTarget* target, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, float* keyInValue, float* keyOutValue, unsigned int type);
-
-    /**
-     * Adds a channel to the animation.
-     */
-    void addChannel(Channel* channel);
-
-    /**
-     * Removes a channel from the animation.
-     */
-    void removeChannel(Channel* channel);
-
-    /**
-     * Sets the rotation offset in a Curve representing a Transform's animation data.
-     */
-    void setTransformRotationOffset(Curve* curve, unsigned int propertyId);
-
-    /**
-     * Clones this animation.
-     *
-     * @param channel The channel to clone and add to the animation.
-     * @param target The target of the animation.
-     *
-     * @return The newly created animation.
-     */
-    Animation* clone(Channel* channel, AnimationTarget* target);
-
-    AnimationController* _controller;       // The AnimationController that this Animation will run on.
-    std::string _id;                        // The Animation's ID.
-    unsigned long _duration;                // the length of the animation (in milliseconds).
-    std::vector<Channel*> _channels;        // The channels within this Animation.
-    AnimationClip* _defaultClip;            // The Animation's default clip.
-    std::vector<AnimationClip*>* _clips;    // All the clips created from this Animation.
-
-};
-
-}
-
-#endif

+ 0 - 692
gameplay/src/AnimationClip.cpp

@@ -1,692 +0,0 @@
-#include "Base.h"
-#include "AnimationClip.h"
-#include "Animation.h"
-#include "AnimationTarget.h"
-#include "Game.h"
-#include "Quaternion.h"
-#include "ScriptController.h"
-
-namespace gameplay
-{
-
-extern void splitURL(const std::string& url, std::string* file, std::string* id);
-
-AnimationClip::AnimationClip(const char* id, Animation* animation, unsigned long startTime, unsigned long endTime)
-    : _id(id), _animation(animation), _startTime(startTime), _endTime(endTime), _duration(_endTime - _startTime), 
-      _stateBits(0x00), _repeatCount(1.0f), _loopBlendTime(0), _activeDuration(_duration * _repeatCount), _speed(1.0f), _timeStarted(0), 
-      _elapsedTime(0), _crossFadeToClip(NULL), _crossFadeOutElapsed(0), _crossFadeOutDuration(0), _blendWeight(1.0f),
-      _beginListeners(NULL), _endListeners(NULL), _listeners(NULL), _listenerItr(NULL)
-{
-    GP_REGISTER_SCRIPT_EVENTS();
-
-    GP_ASSERT(_animation);
-    GP_ASSERT(0 <= startTime && startTime <= _animation->_duration && 0 <= endTime && endTime <= _animation->_duration);
-
-    for (size_t i = 0, count = _animation->_channels.size(); i < count; i++)
-    {
-        GP_ASSERT(_animation->_channels[i]);
-        GP_ASSERT(_animation->_channels[i]->getCurve());
-        _values.push_back(new AnimationValue(_animation->_channels[i]->getCurve()->getComponentCount()));
-    }
-}
-
-AnimationClip::~AnimationClip()
-{
-    std::vector<AnimationValue*>::iterator valueIter = _values.begin();
-    while (valueIter != _values.end())
-    {
-        SAFE_DELETE(*valueIter);
-        valueIter++;
-    }
-    _values.clear();
-
-    SAFE_RELEASE(_crossFadeToClip);
-    SAFE_DELETE(_beginListeners);
-    SAFE_DELETE(_endListeners);
-
-    if (_listeners)
-    {
-        *_listenerItr = _listeners->begin();
-        while (*_listenerItr != _listeners->end())
-        {
-            ListenerEvent* lEvt = **_listenerItr;
-            SAFE_DELETE(lEvt);
-            ++(*_listenerItr);
-        }
-        SAFE_DELETE(_listeners);
-    }
-    SAFE_DELETE(_listenerItr);
-}
-
-AnimationClip::ListenerEvent::ListenerEvent(Listener* listener, unsigned long eventTime)
-{
-    _listener = listener;
-    _eventTime = eventTime;
-}
-
-AnimationClip::ListenerEvent::~ListenerEvent()
-{
-}
-
-const char* AnimationClip::getTypeName() const
-{
-    return "AnimationClip";
-}
-
-const char* AnimationClip::getId() const
-{
-    return _id.c_str();
-}
-
-Animation* AnimationClip::getAnimation() const
-{
-    return _animation;
-}
-
-unsigned long AnimationClip::getStartTime() const
-{
-    return _startTime;
-}
-
-unsigned long AnimationClip::getEndTime() const
-{
-    return _endTime;
-}
-
-float AnimationClip::getElapsedTime() const
-{
-    return _elapsedTime;
-}
-
-void AnimationClip::setRepeatCount(float repeatCount)
-{
-    GP_ASSERT(repeatCount == REPEAT_INDEFINITE || repeatCount > 0.0f);
-
-    _repeatCount = repeatCount;
-
-    if (repeatCount == REPEAT_INDEFINITE)
-    {
-        _activeDuration = _duration + _loopBlendTime;
-    }
-    else
-    {
-        _activeDuration = _duration * _repeatCount;
-
-        if (repeatCount > 1.0f && _loopBlendTime > 0.0f)
-            _activeDuration += std::ceil(repeatCount - 1.0f) * _loopBlendTime;
-    }
-}
-
-float AnimationClip::getRepeatCount() const
-{
-    return _repeatCount;
-}
-
-void AnimationClip::setActiveDuration(unsigned long duration)
-{
-    GP_ASSERT(duration >= 0);
-
-    if (duration == REPEAT_INDEFINITE)
-    {
-        _activeDuration = _duration + _loopBlendTime;
-    }
-    else
-    {
-        _activeDuration = duration;
-        _repeatCount = (float)_activeDuration / (float)_duration;
-    }
-}
-
-unsigned long AnimationClip::getActiveDuration() const
-{
-    if (_repeatCount == REPEAT_INDEFINITE)
-        return REPEAT_INDEFINITE;
-
-    return _activeDuration;
-}
-
-unsigned long AnimationClip::getDuration() const
-{
-    return _duration;
-}
-
-void AnimationClip::setSpeed(float speed)
-{
-    _speed = speed;
-}
-
-float AnimationClip::getSpeed() const
-{
-    return _speed;
-}
-
-void AnimationClip::setBlendWeight(float blendWeight)
-{
-    _blendWeight = blendWeight;
-}
-
-float AnimationClip::getBlendWeight() const
-{
-    return _blendWeight;
-}
-
-void AnimationClip::setLoopBlendTime(float loopBlendTime)
-{
-    if (loopBlendTime < 0.0f)
-    {
-        _loopBlendTime = 0;
-    }
-    else
-    {
-        _loopBlendTime = (unsigned int)loopBlendTime;
-    }
-}
-
-float AnimationClip::getLoopBlendTime() const
-{
-    return _loopBlendTime;
-}
-
-bool AnimationClip::isPlaying() const
-{
-    return (isClipStateBitSet(CLIP_IS_PLAYING_BIT) && !isClipStateBitSet(CLIP_IS_PAUSED_BIT));
-}
-
-void AnimationClip::play()
-{
-    if (isClipStateBitSet(CLIP_IS_PLAYING_BIT))
-    {
-        // If paused, reset the bit and return.
-        if (isClipStateBitSet(CLIP_IS_PAUSED_BIT))
-        {
-            resetClipStateBit(CLIP_IS_PAUSED_BIT);
-            return;
-        }
-
-        // If the clip is set to be removed, reset the flag.
-        if (isClipStateBitSet(CLIP_IS_MARKED_FOR_REMOVAL_BIT))
-            resetClipStateBit(CLIP_IS_MARKED_FOR_REMOVAL_BIT);
-
-        // Set the state bit to restart.
-        setClipStateBit(CLIP_IS_RESTARTED_BIT);
-    }
-    else
-    {
-        setClipStateBit(CLIP_IS_PLAYING_BIT);
-        GP_ASSERT(_animation);
-        GP_ASSERT(_animation->_controller);
-        _animation->_controller->schedule(this);
-    }
-    
-    _timeStarted = Game::getGameTime();
-}
-
-void AnimationClip::stop()
-{
-    if (isClipStateBitSet(CLIP_IS_PLAYING_BIT))
-    {
-        // Reset the restarted and paused bits. 
-        resetClipStateBit(CLIP_IS_RESTARTED_BIT);
-        resetClipStateBit(CLIP_IS_PAUSED_BIT);
-
-        // Mark the clip to removed from the AnimationController.
-        setClipStateBit(CLIP_IS_MARKED_FOR_REMOVAL_BIT);
-    }
-}
-
-void AnimationClip::pause()
-{
-    if (isClipStateBitSet(CLIP_IS_PLAYING_BIT) && !isClipStateBitSet(CLIP_IS_MARKED_FOR_REMOVAL_BIT))
-    {
-        setClipStateBit(CLIP_IS_PAUSED_BIT);
-    }
-}
-
-void AnimationClip::crossFade(AnimationClip* clip, unsigned long duration)
-{
-    GP_ASSERT(clip);
-
-    // Check if the given clip is fading into this clip.
-    // We should reset the clip from fading out, and this one from fading in 
-    // in order to start the crossfade back the other way.
-    if (clip->isClipStateBitSet(CLIP_IS_FADING_OUT_BIT) && clip->_crossFadeToClip == this)
-    {
-        clip->resetClipStateBit(CLIP_IS_FADING_OUT_BIT);
-        clip->_crossFadeToClip->resetClipStateBit(CLIP_IS_FADING_IN_BIT);
-        SAFE_RELEASE(clip->_crossFadeToClip);
-    }
-
-    // If I already have a clip I'm fading to and it's not the same as the given clip release it.
-    // Assign the new clip and increase it's ref count.
-    if (_crossFadeToClip)
-    {
-        SAFE_RELEASE(_crossFadeToClip);
-    }
-
-    // Set and initialize the crossfade clip
-    _crossFadeToClip = clip;
-    _crossFadeToClip->addRef();
-    _crossFadeToClip->setClipStateBit(CLIP_IS_FADING_IN_BIT);
-    _crossFadeToClip->_blendWeight = 0.0f;
-    
-    // Set and initialize this clip to fade out
-    setClipStateBit(CLIP_IS_FADING_OUT_STARTED_BIT);
-    setClipStateBit(CLIP_IS_FADING_OUT_BIT);
-    _crossFadeOutElapsed = 0.0f;
-    _crossFadeOutDuration = duration;
-    
-    // If this clip is currently not playing, we should start playing it.
-    if (!isClipStateBitSet(CLIP_IS_PLAYING_BIT))
-        play();
-
-    // Start playing the cross fade clip.
-    _crossFadeToClip->play(); 
-}
-
-void AnimationClip::addListener(AnimationClip::Listener* listener, unsigned long eventTime)
-{
-    GP_ASSERT(listener);
-    GP_ASSERT(eventTime < _activeDuration);
-
-    ListenerEvent* listenerEvent = new ListenerEvent(listener, eventTime);
-
-    if (!_listeners)
-    {
-        _listeners = new std::list<ListenerEvent*>;
-        _listeners->push_front(listenerEvent);
-
-        _listenerItr = new std::list<ListenerEvent*>::iterator;
-        if (isClipStateBitSet(CLIP_IS_PLAYING_BIT))
-            *_listenerItr = _listeners->begin();
-    }
-    else
-    {
-        for (std::list<ListenerEvent*>::iterator itr = _listeners->begin(); itr != _listeners->end(); itr++)
-        {
-            GP_ASSERT(*itr);
-            if (eventTime < (*itr)->_eventTime)
-            {
-                itr = _listeners->insert(itr, listenerEvent);
-
-                // If playing, update the iterator if we need to.
-                // otherwise, it will just be set the next time the clip gets played.
-                if (isClipStateBitSet(CLIP_IS_PLAYING_BIT))
-                {
-                    float currentTime = fmodf(_elapsedTime, (float)_duration);
-                    GP_ASSERT(**_listenerItr || *_listenerItr == _listeners->end());
-                    if ((_speed >= 0.0f && currentTime < eventTime && (*_listenerItr == _listeners->end() || eventTime < (**_listenerItr)->_eventTime)) ||
-                        (_speed <= 0 && currentTime > eventTime && (*_listenerItr == _listeners->begin() || eventTime > (**_listenerItr)->_eventTime)))
-                    {
-                        *_listenerItr = itr;
-                    }
-                }
-                return;
-            }
-        }
-        _listeners->push_back(listenerEvent);
-    }
-}
-
-void AnimationClip::removeListener(AnimationClip::Listener* listener, unsigned long eventTime)
-{
-    if (_listeners)
-    {
-        GP_ASSERT(listener);
-        std::list<ListenerEvent*>::iterator iter = std::find_if(_listeners->begin(), _listeners->end(), [&](ListenerEvent* lst){ return lst->_eventTime == eventTime && lst->_listener == listener; });
-        if (iter != _listeners->end())
-        {
-            if (isClipStateBitSet(CLIP_IS_PLAYING_BIT))
-            {
-                float currentTime = fmodf(_elapsedTime, (float)_duration);
-                GP_ASSERT(**_listenerItr || *_listenerItr == _listeners->end());
-
-                // We the listener has not been triggered yet, then check if it is next to be triggered, remove it, and update the iterator
-                if (((_speed >= 0.0f && currentTime < eventTime) || (_speed <= 0 && currentTime > eventTime)) &&
-                    *iter == **_listenerItr)
-                {
-                    *_listenerItr = _listeners->erase(iter);
-                    return;
-                }
-            }
-            _listeners->erase(iter);
-        }
-    }
-}
-
-void AnimationClip::addBeginListener(AnimationClip::Listener* listener)
-{
-    if (!_beginListeners)
-        _beginListeners = new std::vector<Listener*>;
-
-    GP_ASSERT(listener);
-    _beginListeners->push_back(listener);
-}
-
-void AnimationClip::removeBeginListener(AnimationClip::Listener* listener)
-{
-    if (_beginListeners)
-    {
-        GP_ASSERT(listener);
-        std::vector<Listener*>::iterator iter = std::find(_beginListeners->begin(), _beginListeners->end(), listener);
-        if (iter != _beginListeners->end())
-        {
-            _beginListeners->erase(iter);
-        }
-    }
-}
-
-void AnimationClip::addEndListener(AnimationClip::Listener* listener)
-{
-    if (!_endListeners)
-        _endListeners = new std::vector<Listener*>;
-
-    GP_ASSERT(listener);
-    _endListeners->push_back(listener);
-}
-
-void AnimationClip::removeEndListener(AnimationClip::Listener* listener)
-{
-    if (_endListeners)
-    {
-        GP_ASSERT(listener);
-        std::vector<Listener*>::iterator iter = std::find(_endListeners->begin(), _endListeners->end(), listener);
-        if (iter != _endListeners->end())
-        {
-            _endListeners->erase(iter);
-        }
-    }
-}
-
-bool AnimationClip::update(float elapsedTime)
-{
-    if (isClipStateBitSet(CLIP_IS_PAUSED_BIT))
-    {
-        return false;
-    }
-
-    if (isClipStateBitSet(CLIP_IS_MARKED_FOR_REMOVAL_BIT))
-    {
-        // If the marked for removal bit is set, it means stop() was called on the AnimationClip at some point
-        // after the last update call. Reset the flag, and return true so the AnimationClip is removed from the 
-        // running clips on the AnimationController.
-        onEnd();
-        return true;
-    }
-
-    if (!isClipStateBitSet(CLIP_IS_STARTED_BIT))
-    {
-        // Clip is just starting
-        onBegin();
-    }
-    else
-    {
-        // Clip was already running
-        _elapsedTime += elapsedTime * _speed;
-
-        if (_repeatCount == REPEAT_INDEFINITE && _elapsedTime <= 0)
-        {
-            // Elapsed time is moving backwards, so wrap it back around the end when it falls below zero
-            _elapsedTime = _activeDuration + _elapsedTime;
-
-            // TODO: account for _loopBlendTime
-        }
-    }
-
-    // Current time within a loop of the clip
-    float currentTime = 0.0f;
-
-    // Check to see if clip is complete.
-    if (_repeatCount != REPEAT_INDEFINITE && ((_speed >= 0.0f && _elapsedTime >= _activeDuration) || (_speed <= 0.0f && _elapsedTime <= 0.0f)))
-    {
-        // We finished our active duration (including repeats), so clamp to our end value.
-        resetClipStateBit(CLIP_IS_STARTED_BIT);
-
-        // Ensure we end off at the endpoints of our clip (-speed==0, +speed==_duration)
-        currentTime = _speed < 0.0f ? 0.0f : _duration;
-    }
-    else
-    {
-        // If _duration == 0, we have a "pose". Just set currentTime to 0.
-        if (_duration == 0)
-        {
-            currentTime = 0.0f;
-        }
-        else
-        {
-            // Animation is running normally.
-            currentTime = fmodf(_elapsedTime, _duration + _loopBlendTime);
-        }
-    }
-
-    // Notify any listeners of Animation events.
-    if (_listeners)
-    {
-        GP_ASSERT(_listenerItr);
-
-        if (_speed >= 0.0f)
-        {
-            while (*_listenerItr != _listeners->end() && _elapsedTime >= (long) (**_listenerItr)->_eventTime)
-            {
-                GP_ASSERT(_listenerItr);
-                GP_ASSERT(**_listenerItr);
-                GP_ASSERT((**_listenerItr)->_listener);
-
-                (**_listenerItr)->_listener->animationEvent(this, Listener::TIME);
-                ++(*_listenerItr);
-            }
-        }
-        else
-        {
-            while (*_listenerItr != _listeners->begin() && _elapsedTime <= (long) (**_listenerItr)->_eventTime)
-            {
-                GP_ASSERT(_listenerItr);
-                GP_ASSERT(**_listenerItr);
-                GP_ASSERT((**_listenerItr)->_listener);
-
-                (**_listenerItr)->_listener->animationEvent(this, Listener::TIME);
-                --(*_listenerItr);
-            }
-        }
-    }
-
-    // Fire script update event
-    fireScriptEvent<void>(GP_GET_SCRIPT_EVENT(AnimationClip, clipUpdate), this, _elapsedTime);
-
-    // Add back in start time, and divide by the total animation's duration to get the actual percentage complete
-    GP_ASSERT(_animation);
-
-    // Compute percentage complete for the current loop (prevent a divide by zero if _duration==0).
-    // Note that we don't use (currentTime/(_duration+_loopBlendTime)). That's because we want a
-    // % value that is outside the 0-1 range for loop smoothing/blending purposes.
-    float percentComplete = _duration == 0 ? 1 : currentTime / (float)_duration;
-
-    if (_loopBlendTime == 0.0f)
-        percentComplete = MATH_CLAMP(percentComplete, 0.0f, 1.0f);
-
-    // If we're cross fading, compute blend weights
-    if (isClipStateBitSet(CLIP_IS_FADING_OUT_BIT))
-    {
-        GP_ASSERT(_crossFadeToClip);
-        GP_ASSERT(_crossFadeOutDuration > 0);
-
-        if (isClipStateBitSet(CLIP_IS_FADING_OUT_STARTED_BIT)) // Calculate elapsed time since the fade out begin.
-        {
-            GP_ASSERT(_crossFadeToClip);
-            _crossFadeOutElapsed = (Game::getGameTime() - _crossFadeToClip->_timeStarted) * fabs(_speed); 
-            resetClipStateBit(CLIP_IS_FADING_OUT_STARTED_BIT);
-        }
-        else
-        {
-            // continue tracking elapsed time.
-            _crossFadeOutElapsed += elapsedTime * fabs(_speed);
-        }
-
-        if (_crossFadeOutElapsed < _crossFadeOutDuration)
-        {
-            // Calculate this clip's blend weight.
-            float tempBlendWeight = ((float)_crossFadeOutDuration - _crossFadeOutElapsed) / (float)_crossFadeOutDuration;
-            
-            // If this clip is fading in, adjust the crossfade clip's weight to be a percentage of your current blend weight
-            if (isClipStateBitSet(CLIP_IS_FADING_IN_BIT))
-            {
-                _crossFadeToClip->_blendWeight = (1.0f - tempBlendWeight) * _blendWeight;
-                _blendWeight -= _crossFadeToClip->_blendWeight;
-            }
-            else
-            {
-                // Just set the blend weight.
-                _crossFadeToClip->_blendWeight = (1.0f - tempBlendWeight);
-                _blendWeight = tempBlendWeight;
-            }
-        }
-        else
-        {
-            // Fade is done.
-            _crossFadeToClip->_blendWeight = 1.0f;
-            _blendWeight = 0.0f;
-            resetClipStateBit(CLIP_IS_STARTED_BIT);            
-            resetClipStateBit(CLIP_IS_FADING_OUT_BIT);
-            _crossFadeToClip->resetClipStateBit(CLIP_IS_FADING_IN_BIT);
-            SAFE_RELEASE(_crossFadeToClip);
-        }
-    }
-    
-    // Evaluate this clip.
-    Animation::Channel* channel = NULL;
-    AnimationValue* value = NULL;
-    AnimationTarget* target = NULL;
-    size_t channelCount = _animation->_channels.size();
-    float percentageStart = (float)_startTime / (float)_animation->_duration;
-    float percentageEnd = (float)_endTime / (float)_animation->_duration;
-    float percentageBlend = (float)_loopBlendTime / (float)_animation->_duration;
-    for (size_t i = 0; i < channelCount; i++)
-    {
-        channel = _animation->_channels[i];
-        GP_ASSERT(channel);
-        target = channel->_target;
-        GP_ASSERT(target);
-        value = _values[i];
-        GP_ASSERT(value);
-
-        // Evaluate the point on Curve
-        GP_ASSERT(channel->getCurve());
-        channel->getCurve()->evaluate(percentComplete, percentageStart, percentageEnd, percentageBlend, value->_value);
-
-        // Set the animation value on the target property.
-        target->setAnimationPropertyValue(channel->_propertyId, value, _blendWeight);
-    }
-
-    // When ended. Probably should move to it's own method so we can call it when the clip is ended early.
-    if (isClipStateBitSet(CLIP_IS_MARKED_FOR_REMOVAL_BIT) || !isClipStateBitSet(CLIP_IS_STARTED_BIT))
-    {
-        onEnd();
-        return true;
-    }
-
-    return false;
-}
-
-void AnimationClip::onBegin()
-{
-    this->addRef();
-
-    // Initialize animation to play.
-    setClipStateBit(CLIP_IS_STARTED_BIT);
-    if (_speed >= 0)
-    {
-        _elapsedTime = (Game::getGameTime() - _timeStarted) * _speed;
-
-        if (_listeners)
-            *_listenerItr = _listeners->begin();
-    }
-    else
-    {
-        _elapsedTime = _activeDuration + (Game::getGameTime() - _timeStarted) * _speed;
-
-        if (_listeners)
-            *_listenerItr = _listeners->end();
-    }
-    
-    // Notify begin listeners if any.
-    if (_beginListeners)
-    {
-        std::vector<Listener*>::iterator listener = _beginListeners->begin();
-        while (listener != _beginListeners->end())
-        {
-            GP_ASSERT(*listener);
-            (*listener)->animationEvent(this, Listener::BEGIN);
-            listener++;
-        }
-    }
-
-    // Fire script begin event
-    fireScriptEvent<void>(GP_GET_SCRIPT_EVENT(AnimationClip, clipBegin), this);
-
-    this->release();
-}
-
-void AnimationClip::onEnd()
-{
-    this->addRef();
-
-    _blendWeight = 1.0f;
-    resetClipStateBit(CLIP_ALL_BITS);
-
-    // Notify end listeners if any.
-    if (_endListeners)
-    {
-        std::vector<Listener*>::iterator listener = _endListeners->begin();
-        while (listener != _endListeners->end())
-        {
-            GP_ASSERT(*listener);
-            (*listener)->animationEvent(this, Listener::END);
-            listener++;
-        }
-    }
-
-    // Fire script end event
-    fireScriptEvent<void>(GP_GET_SCRIPT_EVENT(AnimationClip, clipEnd), this);
-
-    this->release();
-}
-
-bool AnimationClip::isClipStateBitSet(unsigned char bit) const
-{
-    return (_stateBits & bit) == bit;
-}
-
-void AnimationClip::setClipStateBit(unsigned char bit)
-{
-    _stateBits |= bit;
-}
-
-void AnimationClip::resetClipStateBit(unsigned char bit)
-{
-    _stateBits &= ~bit;
-}
-
-AnimationClip* AnimationClip::clone(Animation* animation) const
-{
-    // Don't clone the elapsed time, listeners or crossfade information.
-    AnimationClip* newClip = new AnimationClip(getId(), animation, getStartTime(), getEndTime());
-    newClip->setSpeed(getSpeed());
-    newClip->setRepeatCount(getRepeatCount());
-    newClip->setBlendWeight(getBlendWeight());
-    
-    size_t size = _values.size();
-    newClip->_values.resize(size, NULL);
-    for (size_t i = 0; i < size; ++i)
-    {
-        if (newClip->_values[i] == NULL)
-        {
-            newClip->_values[i] = new AnimationValue(*_values[i]);
-        }
-        else
-        {
-            *newClip->_values[i] = *_values[i];
-        }
-    }
-    return newClip;
-}
-
-}

+ 0 - 414
gameplay/src/AnimationClip.h

@@ -1,414 +0,0 @@
-#ifndef ANIMATIONCLIP_H_
-#define ANIMATIONCLIP_H_
-
-#include "AnimationValue.h"
-#include "Curve.h"
-#include "Animation.h"
-#include "ScriptTarget.h"
-
-namespace gameplay
-{
-
-class Animation;
-class AnimationValue;
-
-/**
- * Defines the runtime session of an Animation to be played.
- */
-class AnimationClip : public Ref, public ScriptTarget
-{
-    friend class AnimationController;
-    friend class Animation;
-
-    GP_SCRIPT_EVENTS_START();
-    GP_SCRIPT_EVENT(clipBegin, "<AnimationClip>");
-    GP_SCRIPT_EVENT(clipEnd, "<AnimationClip>");
-    GP_SCRIPT_EVENT(clipUpdate, "<AnimationClip>f");
-    GP_SCRIPT_EVENTS_END();
-
-public:
-
-    /**
-     * Defines a constant for indefinitely repeating an AnimationClip.
-     */
-    static const unsigned int REPEAT_INDEFINITE = 0;
-
-    /**
-     * Defines an animation event listener.
-     */
-    class Listener
-    {
-        friend class AnimationClip;
-
-    public:
-
-        /**
-         * Constructor.
-         */
-        Listener() 
-        {
-        }
-
-        /**
-         * The type of animation event.
-         */
-        enum EventType 
-        {
-            /**
-             * Event fired when the clip begins.
-             */
-            BEGIN,
-
-            /**
-             * Event fired when the clip ends.
-             */
-            END,
-
-            /**
-             * Event fired at a specified time during a clip update.
-             */
-            TIME
-        };
-        
-        /*
-         * Destructor.
-         */
-        virtual ~Listener() { }
-
-        /**
-         * Handles when animation event occurs.
-         */
-        virtual void animationEvent(AnimationClip* clip, EventType type) = 0;
-    };
-
-    /**
-     * Extends ScriptTarget::getTypeName() to return the type name of this class.
-     *
-     * @return The type name of this class: "AnimationClip"
-     * @see ScriptTarget::getTypeName()
-     */
-    const char* getTypeName() const;
-
-    /**
-     * Gets the AnimationClip's ID.
-     *
-     * @return The AnimationClip's ID.
-     */
-    const char* getId() const;
-
-    /**
-     * Gets the Animation that this AnimationClip was created from.
-     * 
-     * @return The Animation that this clip was created from.
-     */
-    Animation* getAnimation() const;
-
-    /**
-     * Gets the AnimationClip's start time.
-     *
-     * @return The time (in milliseconds) that the AnimationClip starts playing from.
-     */
-    unsigned long getStartTime() const;
-
-    /**
-     * Gets the AnimationClip's end time.
-     * 
-     * @return The time (in milliseconds) that the AnimationClip will end.
-     */
-    unsigned long getEndTime() const;
-
-    /**
-     * Gets the AnimationClip's elapsed time.
-     *
-     * @return The elapsed time of the AnimationClip (in milliseconds).
-     */
-    float getElapsedTime() const;
-
-    /**
-     * Sets the AnimationClip's repeat count. Overrides repeat duration.
-     *
-     * Use REPEAT_INDEFINITE to play the AnimationClip indefinitely.
-     * 
-     * @param repeatCount The repeat count to set on the AnimationClip.
-     */
-    void setRepeatCount(float repeatCount);
-
-    /**
-     * Gets the AnimationClip's repeat count.
-     *
-     * @return The repeat count that is set on the AnimationClip.
-     */
-    float getRepeatCount() const;
-
-    /**
-     * Sets the AnimationClip's active duration. Overrides repeat count.
-     *
-     * Use REPEAT_INDEFINITE to play the AnimationClip indefinitely.
-     *
-     * @param duration The active duration that is set on the AnimationClip, in milliseconds.
-     */
-    void setActiveDuration(unsigned long duration);
-
-    /**
-     * Gets the AnimationClip's active duration.
-     * 
-     * @return the AnimationClip's active duration.
-     */
-    unsigned long getActiveDuration() const;
-
-    /**
-     * Gets the AnimationClip's duration.
-     *
-     * @return the AnimationClip's duration, in milliseconds.
-     */
-    unsigned long getDuration() const;
-
-    /**
-     * Set the AnimationClip's running speed. 
-     *
-     * @param speed The clips running speed.
-     */
-    void setSpeed(float speed);
-
-    /**
-     * Gets the AninimationClip's running speed.
-     *
-     * @return The AninimationClip's running speed.
-     */
-    float getSpeed() const;
-
-    /**
-     * Sets the blend weight of the AnimationClip.
-     *
-     * @param blendWeight The blend weight to apply to the clip.
-     */
-    void setBlendWeight(float blendWeight);
-
-    /** 
-     * Gets the blend weight of the AnimationClip.
-     *
-     * @return The blendweight of the AnimationClip.
-     */
-    float getBlendWeight() const;
-
-    /**
-     * Sets the time (in milliseconds) to append to the clip's active duration
-     * to use for blending the end points of the clip when looping.
-     *
-     * @param loopBlendTime Time spent blending end points of clip when looping.
-     */
-    void setLoopBlendTime(float loopBlendTime);
-
-    /**
-     * Returns the amount of time (in milliseconds) spent blending the clip's 
-     * end points when looping.
-     *
-     * @return Time spent blending end points of the clip when looping.
-     */
-    float getLoopBlendTime() const;
-
-    /**
-     * Checks if the AnimationClip is playing.
-     *
-     * @return true if the AnimationClip is playing; false if the AnimationClip is not playing.
-     */
-    bool isPlaying() const;
-
-    /**
-     * Plays the AnimationClip.
-     */
-    void play();
-
-    /**
-     * Stops the AnimationClip.
-     */
-    void stop();
-
-    /**
-     * Pauses the AnimationClip.
-     */
-    void pause();
-
-    /**
-     * Fades this clip out, and the specified clip in over the given duration.
-     *
-     * @param clip The clip to fade into.
-     * @param duration The duration of the fade.
-     */
-    void crossFade(AnimationClip* clip, unsigned long duration);
-
-    /**
-     * Adds an animation begin listener.
-     *
-     * @param listener The listener to be called when an AnimationClip begins.
-     */
-    void addBeginListener(AnimationClip::Listener* listener);
-
-    /**
-     * Removes an animation begin listener.
-     *
-     * @param listener The listener to be removed.
-     */
-    void removeBeginListener(AnimationClip::Listener* listener);
-
-    /**
-     * Adds an animation end listener.
-     *
-     * @param listener The listener to be called when an AnimationClip ends.
-     */
-    void addEndListener(AnimationClip::Listener* listener);
-
-    /**
-     * Removes an animation end listener.
-     *
-     * @param listener The listener to be removed.
-     */
-    void removeEndListener(AnimationClip::Listener* listener);
-
-    /**
-     * Adds an animation listener to be called back at the specified eventTime during the playback 
-     * of the AnimationClip.
-     *
-     * @param listener The listener to be called when the AnimationClip reaches the 
-     *      specified time in its playback.
-     * @param eventTime The time the listener will be called during the playback of the AnimationClip. 
-     *      Must be between 0 and the duration of the AnimationClip.
-     */
-    void addListener(AnimationClip::Listener* listener, unsigned long eventTime);
-
-    /**
-     * Removes an animation listener assigned to the specified eventTime.
-     *
-     * @param listener The listener to be removed with the specified time.
-     * @param eventTime The time of the listener to be removed.
-     */
-    void removeListener(AnimationClip::Listener* listener, unsigned long eventTime);
-
-private:
-    
-    static const unsigned char CLIP_IS_PLAYING_BIT = 0x01;             // Bit representing whether AnimationClip is a running clip in AnimationController
-    static const unsigned char CLIP_IS_STARTED_BIT = 0x02;             // Bit representing whether the AnimationClip has actually been started (ie: received first call to update())
-    static const unsigned char CLIP_IS_FADING_OUT_STARTED_BIT = 0x04;  // Bit representing that a cross fade has started.
-    static const unsigned char CLIP_IS_FADING_OUT_BIT = 0x08;          // Bit representing whether the clip is fading out.
-    static const unsigned char CLIP_IS_FADING_IN_BIT = 0x10;           // Bit representing whether the clip is fading out.
-    static const unsigned char CLIP_IS_MARKED_FOR_REMOVAL_BIT = 0x20;  // Bit representing whether the clip has ended and should be removed from the AnimationController.
-    static const unsigned char CLIP_IS_RESTARTED_BIT = 0x40;           // Bit representing if the clip should be restarted by the AnimationController.
-    static const unsigned char CLIP_IS_PAUSED_BIT = 0x80;              // Bit representing if the clip is currently paused.
-    static const unsigned char CLIP_ALL_BITS = 0xFF;                   // Bit mask for all the state bits.
-
-    /**
-     * ListenerEvent.
-     *
-     * Internal structure used for storing the event time at which an AnimationClip::Listener should be called back.
-     */
-    struct ListenerEvent
-    {
-        /** 
-         * Constructor.
-         */
-        ListenerEvent(Listener* listener, unsigned long eventTime);
-
-        /**
-         * Destructor.
-         */
-        ~ListenerEvent();
-
-        /**
-         * Hidden copy assignment operator.
-         */
-        ListenerEvent& operator=(const ListenerEvent&);
-
-        Listener* _listener;        // This listener to call back when this event is triggered.
-        unsigned long _eventTime;   // The time at which the listener will be called back at during the playback of the AnimationClip.
-    };
-
-    /**
-     * Constructor.
-     */
-    AnimationClip(const char* id, Animation* animation, unsigned long startTime, unsigned long endTime);
-
-    /**
-     * Constructor.
-     */
-    AnimationClip();
-
-    /**
-     * Constructor.
-     */
-    AnimationClip(const AnimationClip& copy);
-
-    /**
-     * Destructor.
-     */
-    ~AnimationClip();
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AnimationClip& operator=(const AnimationClip&);
-
-    /**
-     * Updates the animation with the elapsed time.
-     */
-    bool update(float elapsedTime);
-
-    /**
-     * Handles when the AnimationClip begins.
-     */
-    void onBegin();
-
-    /**
-     * Handles when the AnimationClip ends.
-     */
-    void onEnd();
-
-    /**
-     * Determines whether the given bit is set in the AnimationClip's state.
-     */
-    bool isClipStateBitSet(unsigned char bit) const;
-
-    /**
-     * Sets the given bit in the AnimationClip's state.
-     */
-    void setClipStateBit(unsigned char bit);
-
-    /**
-     * Resets the given bit in the AnimationClip's state.
-     */
-    void resetClipStateBit(unsigned char bit);
-
-    /**
-     * Clones the animation clip.
-     * 
-     * @param animation The animation that the new clip belongs to.
-     * 
-     * @return The newly created animation clip.
-     */
-    AnimationClip* clone(Animation* animation) const;
-
-    std::string _id;                                    // AnimationClip ID.
-    Animation* _animation;                              // The Animation this clip is created from.
-    unsigned long _startTime;                           // Start time of the clip.
-    unsigned long _endTime;                             // End time of the clip.
-    unsigned long _duration;                            // The total duration.
-    unsigned char _stateBits;                           // Bit flag used to keep track of the clip's current state.
-    float _repeatCount;                                 // The clip's repeat count.
-    unsigned int _loopBlendTime;                        // Time spent blending the last frame of animation with the first frame, when looping.
-    unsigned long _activeDuration;                      // The active duration of the clip.
-    float _speed;                                       // The speed that the clip is playing. Default is 1.0. Negative goes in reverse.
-    double _timeStarted;                                // The game time when this clip was actually started.
-    float _elapsedTime;                                 // Time elapsed while the clip is running.
-    AnimationClip* _crossFadeToClip;                    // The clip to cross fade to.
-    float _crossFadeOutElapsed;                         // The amount of time that has elapsed for the crossfade.
-    unsigned long _crossFadeOutDuration;                // The duration of the cross fade.
-    float _blendWeight;                                 // The clip's blendweight.
-    std::vector<AnimationValue*> _values;               // AnimationValue holder.
-    std::vector<Listener*>* _beginListeners;            // Collection of begin listeners on the clip.
-    std::vector<Listener*>* _endListeners;              // Collection of end listeners on the clip.
-    std::list<ListenerEvent*>* _listeners;              // Ordered collection of listeners on the clip.
-    std::list<ListenerEvent*>::iterator* _listenerItr;  // Iterator that points to the next listener event to be triggered.
-};
-
-}
-
-#endif

+ 0 - 136
gameplay/src/AnimationController.cpp

@@ -1,136 +0,0 @@
-#include "Base.h"
-#include "AnimationController.h"
-#include "Game.h"
-#include "Curve.h"
-
-namespace gameplay
-{
-
-AnimationController::AnimationController()
-    : _state(STOPPED)
-{
-}
-
-AnimationController::~AnimationController()
-{
-}
-
-void AnimationController::stopAllAnimations() 
-{
-    std::list<AnimationClip*>::iterator clipIter = _runningClips.begin();
-    while (clipIter != _runningClips.end())
-    {
-        AnimationClip* clip = *clipIter;
-        GP_ASSERT(clip);
-        clip->stop();
-        clipIter++;
-    }
-}
-
-AnimationController::State AnimationController::getState() const
-{
-    return _state;
-}
-
-void AnimationController::initialize()
-{
-    _state = IDLE;
-}
-
-void AnimationController::finalize()
-{
-    std::list<AnimationClip*>::iterator itr = _runningClips.begin();
-    for ( ; itr != _runningClips.end(); itr++)
-    {
-        AnimationClip* clip = *itr;
-        SAFE_RELEASE(clip);
-    }
-    _runningClips.clear();
-    _state = STOPPED;
-}
-
-void AnimationController::resume()
-{
-    if (_runningClips.empty())
-        _state = IDLE;
-    else
-        _state = RUNNING;
-}
-
-void AnimationController::pause()
-{
-    _state = PAUSED;
-}
-
-void AnimationController::schedule(AnimationClip* clip)
-{
-    if (_runningClips.empty())
-    {
-        _state = RUNNING;
-    }
-
-    GP_ASSERT(clip);
-    clip->addRef();
-    _runningClips.push_back(clip);
-}
-
-void AnimationController::unschedule(AnimationClip* clip)
-{
-    std::list<AnimationClip*>::iterator clipItr = _runningClips.begin();
-    while (clipItr != _runningClips.end())
-    {
-        AnimationClip* rClip = (*clipItr);
-        if (rClip == clip)
-        {
-            _runningClips.erase(clipItr);
-            SAFE_RELEASE(clip);
-            break;
-        }
-        clipItr++;
-    }
-
-    if (_runningClips.empty())
-        _state = IDLE;
-}
-
-void AnimationController::update(float elapsedTime)
-{
-    if (_state != RUNNING)
-        return;
-    
-    Transform::suspendTransformChanged();
-
-    // Loop through running clips and call update() on them.
-    std::list<AnimationClip*>::iterator clipIter = _runningClips.begin();
-    while (clipIter != _runningClips.end())
-    {
-        AnimationClip* clip = (*clipIter);
-        GP_ASSERT(clip);
-        clip->addRef();
-        if (clip->isClipStateBitSet(AnimationClip::CLIP_IS_RESTARTED_BIT))
-        {   // If the CLIP_IS_RESTARTED_BIT is set, we should end the clip and 
-            // move it from where it is in the running clips list to the back.
-            clip->onEnd();
-            clip->setClipStateBit(AnimationClip::CLIP_IS_PLAYING_BIT);
-            _runningClips.push_back(clip);
-            clipIter = _runningClips.erase(clipIter);
-        }
-        else if (clip->update(elapsedTime))
-        {
-            clip->release();
-            clipIter = _runningClips.erase(clipIter);
-        }
-        else
-        {
-            clipIter++;
-        }
-        clip->release();
-    }
-
-    Transform::resumeTransformChanged();
-
-    if (_runningClips.empty())
-        _state = IDLE;
-}
-
-}

+ 0 - 106
gameplay/src/AnimationController.h

@@ -1,106 +0,0 @@
-#ifndef ANIMATIONCONTROLLER_H_
-#define ANIMATIONCONTROLLER_H_
-
-#include "AnimationClip.h"
-#include "Animation.h"
-#include "AnimationTarget.h"
-#include "Properties.h"
-
-namespace gameplay
-{
-
-/**
- * Defines a class for controlling game animation.
- */
-class AnimationController
-{
-    friend class Game;
-    friend class Animation;
-    friend class AnimationClip;
-    friend class SceneLoader;
-
-public:
-
-    /** 
-     * Stops all AnimationClips currently playing on the AnimationController.
-     */
-    void stopAllAnimations();
-       
-private:
-
-    /**
-     * The states that the AnimationController may be in.
-     */
-    enum State
-    {
-        RUNNING,
-        IDLE,
-        PAUSED,
-        STOPPED
-    };
-
-    /**
-     * Constructor.
-     */
-    AnimationController();
-
-    /**
-     * Constructor.
-     */
-    AnimationController(const AnimationController& copy);
-
-    /**
-     * Destructor.
-     */
-    ~AnimationController();
-
-    /**
-     * Gets the controller's state.
-     *
-     * @return The current state.
-     */
-    State getState() const;
-
-    /**
-     * Callback for when the controller is initialized.
-     */
-    void initialize();
-
-    /*
-     * Callback for when the controller is finalized.
-     */
-    void finalize();
-
-    /**
-     * Resumes the AnimationController.
-     */
-    void resume();
-    
-    /**
-     * Pauses the AnimationController.
-     */
-    void pause();
-
-    /**
-     * Schedules an AnimationClip to run.
-     */
-    void schedule(AnimationClip* clip);
-
-    /**
-     * Unschedules an AnimationClip.
-     */
-    void unschedule(AnimationClip* clip);
-    
-    /**
-     * Callback for when the controller receives a frame update event.
-     */
-    void update(float elapsedTime);
-    
-    State _state;                                 // The current state of the AnimationController.
-    std::list<AnimationClip*> _runningClips;      // A list of running AnimationClips.
-};
-
-}
-
-#endif
-

+ 0 - 561
gameplay/src/AnimationTarget.cpp

@@ -1,561 +0,0 @@
-#include "Base.h"
-#include "AnimationTarget.h"
-#include "Animation.h"
-#include "Game.h"
-#include "Node.h"
-#include "MaterialParameter.h"
-
-#define ANIMATION_TARGET_INDEFINITE_STR "INDEFINITE"
-
-namespace gameplay
-{
-
-AnimationTarget::AnimationTarget()
-    : _targetType(SCALAR), _animationChannels(NULL)
-{
-}
-
-AnimationTarget::~AnimationTarget()
-{
-    if (_animationChannels)
-    {
-        std::vector<Animation::Channel*>::iterator itr = _animationChannels->begin();
-        while (itr != _animationChannels->end())
-        {
-            Animation::Channel* channel = (*itr);
-            GP_ASSERT(channel);
-            GP_ASSERT(channel->_animation);
-            channel->_animation->removeChannel(channel);
-            SAFE_DELETE(channel);
-            itr++;
-        }
-        _animationChannels->clear();
-        SAFE_DELETE(_animationChannels);
-    }
-}
-
-Animation* AnimationTarget::createAnimation(const char* id, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, Curve::InterpolationType type)
-{
-    GP_ASSERT(type != Curve::BEZIER && type != Curve::HERMITE);
-    GP_ASSERT(keyCount >= 1 && keyTimes && keyValues);
-
-    Animation* animation = new Animation(id, this, propertyId, keyCount, keyTimes, keyValues, type);
-
-    return animation;
-}
-
-Animation* AnimationTarget::createAnimation(const char* id, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, float* keyInValue, float* keyOutValue, Curve::InterpolationType type)
-{
-    GP_ASSERT(keyCount >= 1 && keyTimes && keyValues && keyInValue && keyOutValue);
-    Animation* animation = new Animation(id, this, propertyId, keyCount, keyTimes, keyValues, keyInValue, keyOutValue, type);
-
-    return animation;
-}
-
-Animation* AnimationTarget::createAnimation(const char* id, const char* url)
-{
-    Properties* p = Properties::create(url);
-    GP_ASSERT(p);
-
-    Animation* animation = createAnimation(id, (strlen(p->getNamespace()) > 0) ? p : p->getNextNamespace());
-
-    SAFE_DELETE(p);
-
-    return animation;
-}
-
-Animation* AnimationTarget::createAnimationFromTo(const char* id, int propertyId, float* from, float* to, Curve::InterpolationType type, unsigned long duration)
-{
-    GP_ASSERT(from);
-    GP_ASSERT(to);
-
-    const unsigned int propertyComponentCount = getAnimationPropertyComponentCount(propertyId);
-    GP_ASSERT(propertyComponentCount > 0);
-    float* keyValues = new float[2 * propertyComponentCount];
-
-    memcpy(keyValues, from, sizeof(float) * propertyComponentCount);
-    memcpy(keyValues + propertyComponentCount, to, sizeof(float) * propertyComponentCount);
-
-    unsigned int* keyTimes = new unsigned int[2];
-    keyTimes[0] = 0;
-    keyTimes[1] = (unsigned int)duration;
-
-    Animation* animation = createAnimation(id, propertyId, 2, keyTimes, keyValues, type);
-
-    SAFE_DELETE_ARRAY(keyValues);
-    SAFE_DELETE_ARRAY(keyTimes);
-
-    return animation;
-}
-
-Animation* AnimationTarget::createAnimationFromBy(const char* id, int propertyId, float* from, float* by, Curve::InterpolationType type, unsigned long duration)
-{
-    GP_ASSERT(from);
-    GP_ASSERT(by);
-
-    const unsigned int propertyComponentCount = getAnimationPropertyComponentCount(propertyId);
-    GP_ASSERT(propertyComponentCount > 0);
-    float* keyValues = new float[2 * propertyComponentCount];
-
-    memcpy(keyValues, from, sizeof(float) * propertyComponentCount);
-
-    convertByValues(propertyId, propertyComponentCount, from, by);
-    memcpy(keyValues + propertyComponentCount, by, sizeof(float) * propertyComponentCount);
-
-    unsigned int* keyTimes = new unsigned int[2];
-    keyTimes[0] = 0;
-    keyTimes[1] = (unsigned int)duration;
-
-    Animation* animation = createAnimation(id, propertyId, 2, keyTimes, keyValues, type);
-
-    SAFE_DELETE_ARRAY(keyValues);
-    SAFE_DELETE_ARRAY(keyTimes);
-
-    return animation;
-}
-
-Animation* AnimationTarget::createAnimation(const char* id, Properties* animationProperties)
-{
-    GP_ASSERT(animationProperties);
-    if (std::strcmp(animationProperties->getNamespace(), "animation") != 0)
-    {
-        GP_ERROR("Invalid animation namespace '%s'.", animationProperties->getNamespace());
-        return NULL;
-    }
-
-    const char* propertyIdStr = animationProperties->getString("property");
-    if (propertyIdStr == NULL)
-    {
-        GP_ERROR("Attribute 'property' must be specified for an animation.");
-        return NULL;
-    }
-
-    // Get animation target property id
-	int propertyId = getPropertyId(_targetType, propertyIdStr);
-    if (propertyId == -1)
-    {
-        GP_ERROR("Property ID is invalid.");
-        return NULL;
-    }
-
-    unsigned int keyCount = animationProperties->getInt("keyCount");
-    if (keyCount == 0)
-    {
-        GP_ERROR("Attribute 'keyCount' must be specified for an animation.");
-        return NULL;
-    }
-
-    const char* keyTimesStr = animationProperties->getString("keyTimes");
-    if (keyTimesStr == NULL)
-    {
-        GP_ERROR("Attribute 'keyTimes' must be specified for an animation.");
-        return NULL;
-    }
-
-    const char* keyValuesStr = animationProperties->getString("keyValues");
-    if (keyValuesStr == NULL)
-    {
-        GP_ERROR("Attribute 'keyValues' must be specified for an animation.");
-        return NULL;
-    }
-
-    const char* curveStr = animationProperties->getString("curve");
-    if (curveStr == NULL)
-    {
-        GP_ERROR("Attribute 'curve' must be specified for an animation.");
-        return NULL;
-    }
-
-    char delimeter = ' ';
-    size_t startOffset = 0;
-    size_t endOffset = std::string::npos;
-
-    unsigned int* keyTimes = new unsigned int[keyCount];
-    for (size_t i = 0; i < keyCount; i++)
-    {
-        endOffset = static_cast<std::string>(keyTimesStr).find_first_of(delimeter, startOffset);
-        if (endOffset != std::string::npos)
-        {
-            keyTimes[i] = std::strtoul(static_cast<std::string>(keyTimesStr).substr(startOffset, endOffset - startOffset).c_str(), NULL, 0);
-        }
-        else
-        {
-            keyTimes[i] = std::strtoul(static_cast<std::string>(keyTimesStr).substr(startOffset, static_cast<std::string>(keyTimesStr).length()).c_str(), NULL, 0);
-        }
-        startOffset = endOffset + 1;
-    }
-
-    startOffset = 0;
-    endOffset = std::string::npos;
-
-    int componentCount = getAnimationPropertyComponentCount(propertyId);
-    GP_ASSERT(componentCount > 0);
-
-    unsigned int components = keyCount * componentCount;
-
-    float* keyValues = new float[components];
-    for (unsigned int i = 0; i < components; i++)
-    {
-        endOffset = static_cast<std::string>(keyValuesStr).find_first_of(delimeter, startOffset);
-        if (endOffset != std::string::npos)
-        {
-            keyValues[i] = std::atof(static_cast<std::string>(keyValuesStr).substr(startOffset, endOffset - startOffset).c_str());
-        }
-        else
-        {
-            keyValues[i] = std::atof(static_cast<std::string>(keyValuesStr).substr(startOffset, static_cast<std::string>(keyValuesStr).length()).c_str());
-        }
-        startOffset = endOffset + 1;
-    }
-
-    const char* keyInStr = animationProperties->getString("keyIn");
-    float* keyIn = NULL;
-    if (keyInStr)
-    {
-        keyIn = new float[components];
-        startOffset = 0;
-        endOffset = std::string::npos;
-        for (unsigned int i = 0; i < components; i++)
-        {
-            endOffset = static_cast<std::string>(keyInStr).find_first_of(delimeter, startOffset);
-            if (endOffset != std::string::npos)
-            {
-                keyIn[i] = std::atof(static_cast<std::string>(keyInStr).substr(startOffset, endOffset - startOffset).c_str());
-            }
-            else
-            {
-                keyIn[i] = std::atof(static_cast<std::string>(keyInStr).substr(startOffset, static_cast<std::string>(keyInStr).length()).c_str());
-            }
-            startOffset = endOffset + 1;
-        }
-    }
-
-    const char* keyOutStr = animationProperties->getString("keyOut");
-    float* keyOut = NULL;
-    if (keyOutStr)
-    {
-        keyOut = new float[components];
-        startOffset = 0;
-        endOffset = std::string::npos;
-        for (unsigned int i = 0; i < components; i++)
-        {
-            endOffset = static_cast<std::string>(keyOutStr).find_first_of(delimeter, startOffset);
-            if (endOffset != std::string::npos)
-            {
-                keyOut[i] = std::atof(static_cast<std::string>(keyOutStr).substr(startOffset, endOffset - startOffset).c_str());
-            }
-            else
-            {
-                keyOut[i] = std::atof(static_cast<std::string>(keyOutStr).substr(startOffset, static_cast<std::string>(keyOutStr).length()).c_str());
-            }
-            startOffset = endOffset + 1;
-        }
-    }
-
-    int curve = Curve::getInterpolationType(curveStr);
-
-    Animation* animation = NULL;
-    if (keyIn && keyOut)
-    {
-        animation = createAnimation(id, propertyId, keyCount, keyTimes, keyValues, keyIn, keyOut, (Curve::InterpolationType)curve);
-    }
-    else
-    {
-        animation = createAnimation(id, propertyId, keyCount, keyTimes, keyValues, (Curve::InterpolationType) curve);
-    }
-
-    const char* repeat = animationProperties->getString("repeatCount");
-    if (repeat)
-    {
-        if (strcmp(repeat, ANIMATION_TARGET_INDEFINITE_STR) == 0)
-        {
-            animation->getClip()->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);
-        }
-        else
-        {
-            float value;
-            sscanf(repeat, "%f", &value);
-            animation->getClip()->setRepeatCount(value);
-        }
-    }
-    
-    SAFE_DELETE_ARRAY(keyOut);
-    SAFE_DELETE_ARRAY(keyIn);
-    SAFE_DELETE_ARRAY(keyValues);
-    SAFE_DELETE_ARRAY(keyTimes);
-
-    Properties* pClip = animationProperties->getNextNamespace();
-    if (pClip && std::strcmp(pClip->getNamespace(), "clip") == 0)
-    {
-        int frameCount = animationProperties->getInt("frameCount");
-        if (frameCount <= 0)
-        {
-            GP_ERROR("Frame count must be greater than zero for a clip.");
-            return animation;
-        }
-        animation->createClips(animationProperties, (unsigned int) frameCount);
-    }
-    
-    return animation;
-}
-
-void AnimationTarget::destroyAnimation(const char* id)
-{
-    // Find the animation with the specified ID.
-    Animation::Channel* channel = getChannel(id);
-    if (channel == NULL)
-        return;
-
-    // Remove this target's channel from animation, and from the target's list of channels.
-    GP_ASSERT(channel->_animation);
-    channel->_animation->removeChannel(channel);
-    removeChannel(channel);
-
-    SAFE_DELETE(channel);
-}
-
-Animation* AnimationTarget::getAnimation(const char* id) const
-{
-    if (_animationChannels)
-    {
-        std::vector<Animation::Channel*>::iterator itr = _animationChannels->begin();
-        GP_ASSERT(*itr);
-
-        if (id == NULL)
-            return (*itr)->_animation;
-
-        Animation::Channel* channel = NULL;
-        for (; itr != _animationChannels->end(); itr++)
-        {
-            channel = (Animation::Channel*)(*itr);
-            GP_ASSERT(channel);
-            GP_ASSERT(channel->_animation);
-            if (channel->_animation->_id.compare(id) == 0)
-            {
-                return channel->_animation;
-            }
-        }
-    }
-
-    return NULL;
-}
-
-int AnimationTarget::getPropertyId(TargetType type, const char* propertyIdStr)
-{
-    GP_ASSERT(propertyIdStr);
-
-    if (type == AnimationTarget::TRANSFORM)
-    {
-        if (strcmp(propertyIdStr, "ANIMATE_SCALE") == 0)
-        {
-            return Transform::ANIMATE_SCALE;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_SCALE_X") == 0)
-        {
-            return Transform::ANIMATE_SCALE_X;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_SCALE_Y") == 0)
-        {
-            return Transform::ANIMATE_SCALE_Y;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_SCALE_Z") == 0)
-        {
-            return Transform::ANIMATE_SCALE_Z;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_ROTATE") == 0)
-        {
-            return Transform::ANIMATE_ROTATE;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_TRANSLATE") == 0)
-        {
-            return Transform::ANIMATE_TRANSLATE;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_TRANSLATE_X") == 0)
-        {
-            return Transform::ANIMATE_TRANSLATE_X;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_TRANSLATE_Y") == 0)
-        {
-            return Transform::ANIMATE_TRANSLATE_Y;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_TRANSLATE_Z") == 0)
-        {
-            return Transform::ANIMATE_TRANSLATE_Z;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_ROTATE_TRANSLATE") == 0)
-        {
-            return Transform::ANIMATE_ROTATE_TRANSLATE;
-        }
-        else if (strcmp(propertyIdStr, "ANIMATE_SCALE_ROTATE_TRANSLATE") == 0)
-        {
-            return Transform::ANIMATE_SCALE_ROTATE_TRANSLATE;
-        }
-    }
-    else
-    {
-        if (strcmp(propertyIdStr, "ANIMATE_UNIFORM") == 0)
-        {
-            return MaterialParameter::ANIMATE_UNIFORM;
-        }
-    }
-
-    return -1;
-}
-
-void AnimationTarget::addChannel(Animation::Channel* channel)
-{
-    if (_animationChannels == NULL)
-        _animationChannels = new std::vector<Animation::Channel*>;
-
-    GP_ASSERT(channel);
-    _animationChannels->push_back(channel);
-}
-
-void AnimationTarget::removeChannel(Animation::Channel* channel)
-{
-    if (_animationChannels)
-    {
-        std::vector<Animation::Channel*>::iterator itr = _animationChannels->begin();
-        for ( ; itr != _animationChannels->end(); itr++)
-        {
-            Animation::Channel* temp = *itr;
-            if (channel == temp)
-            {
-                _animationChannels->erase(itr);
-
-                if (_animationChannels->empty())
-                    SAFE_DELETE(_animationChannels);
-
-                return;
-            }
-        }
-    }
-}
-
-Animation::Channel* AnimationTarget::getChannel(const char* id) const
-{
-    if (_animationChannels)
-    {
-        std::vector<Animation::Channel*>::iterator itr = _animationChannels->begin();
-
-        if (id == NULL)
-            return (*itr);
-
-        Animation::Channel* channel = NULL;
-        for (; itr != _animationChannels->end(); itr++)
-        {
-            channel = (Animation::Channel*)(*itr);
-            GP_ASSERT(channel);
-            if (channel->_animation->_id.compare(id) == 0)
-            {
-                return channel;
-            }
-        }
-    }
-
-    return NULL;
-}
-
-void AnimationTarget::cloneInto(AnimationTarget* target, NodeCloneContext &context) const
-{
-    if (_animationChannels)
-    {
-        for (std::vector<Animation::Channel*>::const_iterator it = _animationChannels->begin(); it != _animationChannels->end(); ++it)
-        {
-            Animation::Channel* channel = *it;
-            GP_ASSERT(channel);
-            GP_ASSERT(channel->_animation);
-
-            Animation* animation = context.findClonedAnimation(channel->_animation);
-            if (animation != NULL)
-            {
-                Animation::Channel* channelCopy = new Animation::Channel(*channel, animation, target);
-                animation->addChannel(channelCopy);
-            }
-            else
-            {
-                // Clone the animation and register it with the context so that it only gets cloned once.
-                animation = channel->_animation->clone(channel, target);
-                context.registerClonedAnimation(channel->_animation, animation);
-            }
-        }
-    }
-}
-
-void AnimationTarget::convertByValues(unsigned int propertyId, unsigned int componentCount, float* from, float* by)
-{
-    if (_targetType == AnimationTarget::TRANSFORM)
-    {
-        switch(propertyId)
-        {
-            case Transform::ANIMATE_SCALE:
-            case Transform::ANIMATE_SCALE_UNIT:
-            case Transform::ANIMATE_SCALE_X:
-            case Transform::ANIMATE_SCALE_Y:
-            case Transform::ANIMATE_SCALE_Z:
-            {
-                convertScaleByValues(from, by, componentCount);
-                break;
-            }
-            case Transform::ANIMATE_TRANSLATE:
-            case Transform::ANIMATE_TRANSLATE_X:
-            case Transform::ANIMATE_TRANSLATE_Y:
-            case Transform::ANIMATE_TRANSLATE_Z:
-            {
-                convertByValues(from, by, componentCount);
-                break;
-            }
-            case Transform::ANIMATE_ROTATE:
-            {
-                convertQuaternionByValues(from, by);
-                break;
-            }
-            case Transform::ANIMATE_ROTATE_TRANSLATE:
-            {
-                convertQuaternionByValues(from, by);
-                convertByValues(from + 4, by + 4, 3);
-                break;
-            }
-            case Transform::ANIMATE_SCALE_ROTATE_TRANSLATE:
-            {
-                convertScaleByValues(from, by, 3);
-                convertQuaternionByValues(from + 3, by + 3);
-                convertByValues(from + 7, by + 7, 3);
-                break;
-            }
-        }
-    }
-    else
-    {
-        convertByValues(from, by, componentCount);
-    }
-}
-
-void AnimationTarget::convertQuaternionByValues(float* from, float* by)
-{
-    Quaternion qFrom(from);
-    Quaternion qBy(by);
-    qBy.multiply(qFrom);
-    memcpy(by, (float*)&qBy, sizeof(float) * 4);
-}
-
-void AnimationTarget::convertScaleByValues(float* from, float* by, unsigned int componentCount)
-{
-    for (unsigned int i = 0; i < componentCount; i++)
-    {
-        by[i] *= from[i];
-    }
-}
-
-void AnimationTarget::convertByValues(float* from, float* by, unsigned int componentCount)
-{
-    for (unsigned int i = 0; i < componentCount; i++)
-    {
-        by[i] += from[i];
-    }
-}
-
-}
-
-
-

+ 0 - 248
gameplay/src/AnimationTarget.h

@@ -1,248 +0,0 @@
-#ifndef ANIMATIONTARGET_H_
-#define ANIMATIONTARGET_H_
-
-#include "Curve.h"
-#include "AnimationController.h"
-
-namespace gameplay
-{
-
-class Animation;
-class AnimationValue;
-class NodeCloneContext;
-
-/**
- * Defines an interface allowing animation to target
- * an object for changing its animation properties.
- */
-class AnimationTarget
-{
-    friend class Animation;
-    friend class AnimationClip;
-
-public:
-
-    /**
-     * Creates an animation on this target from a set of key value and key time pairs.
-     * Cannot use Curve::BEZIER or CURVE::HERMITE as the interpolation type since they require tangents/control points.
-     *
-     * @param id The ID of the animation.
-     * @param propertyId The property on this target to animate.
-     * @param keyCount The number of keyframes in the animation. Must be greater than one.
-     * @param keyTimes The list of key times for the animation (in milliseconds).
-     * @param keyValues The list of key values for the animation.
-     * @param type The curve interpolation type.
-     *
-     * @return The newly created animation.
-     */
-    Animation* createAnimation(const char* id, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, Curve::InterpolationType type);
-
-    /**
-     * Creates an animation on this target from a set of key value and key time pairs.
-     *
-     * @param id The ID of the animation.
-     * @param propertyId The property on this target to animate.
-     * @param keyCount The number of keyframes in the animation. Must be greater than one.
-     * @param keyTimes The list of key times for the animation (in milliseconds).
-     * @param keyValues The list of key values for the animation.
-     * @param keyInValue The list of key in values for the animation.
-     * @param keyOutValue The list of key out values for the animation.
-     * @param type The curve interpolation type.
-     *
-     * @return The newly created animation.
-     */
-    Animation* createAnimation(const char* id, int propertyId, unsigned int keyCount, unsigned int* keyTimes, float* keyValues, float* keyInValue, float* keyOutValue, Curve::InterpolationType type);
-
-    /**
-     * Creates an animation on this target using the data from the Properties object defined at the specified URL,
-     * where the URL is of the format "<file-path>.<extension>#<namespace-id>/<namespace-id>/.../<namespace-id>"
-     * (and "#<namespace-id>/<namespace-id>/.../<namespace-id>" is optional).
-     *
-     * @param id The ID of the animation.
-     * @param url The URL pointing to the Properties object defining the animation data.
-     *
-     * @return The newly created animation.
-     */
-    Animation* createAnimation(const char* id, const char* url);
-
-    /**
-     * Creates an animation on this target using the data from the given properties object.
-     *
-     * @param id The ID of the animation.
-     * @param animationProperties The properties object defining the animation data.
-     *
-     * @return The newly created animation.
-     */
-    Animation* createAnimation(const char* id, Properties* animationProperties);
-
-    /**
-     * Creates a simple two keyframe from-to animation.
-     * Cannot use Curve::BEZIER or CURVE::HERMITE as the interpolation type since they require tangents/control points.
-     *
-     * @param id The ID of the animation.
-     * @param propertyId The property on this target to animate.
-     * @param from The values to animate from.
-     * @param to The values to animate to.
-     * @param type The curve interpolation type.
-     * @param duration The duration of the animation (in milliseconds).
-     *
-     * @return The newly created animation.
-     */
-    Animation* createAnimationFromTo(const char* id, int propertyId, float* from, float* to, Curve::InterpolationType type, unsigned long duration);
-
-    /**
-     * Creates a simple two keyframe from-by animation.
-     * Cannot use Curve::BEZIER or CURVE::HERMITE as the interpolation type since they require tangents/control points.
-     *
-     * @param id The ID of the animation.
-     * @param propertyId The property on this target to animate.
-     * @param from The values to animate from.
-     * @param by The values to animate by.
-     * @param type The curve interpolation type.
-     * @param duration The duration of the animation (in milliseconds).
-     *
-     * @return The newly created animation.
-     */
-    Animation* createAnimationFromBy(const char* id, int propertyId, float* from, float* by, Curve::InterpolationType type, unsigned long duration);
-
-    /**
-     * Destroys the animation with the specified ID. Destroys the first animation if ID is NULL.
-     *
-     * @param id The ID of the animation to destroy.
-     */
-    void destroyAnimation(const char* id = NULL);
-
-    /**
-     * Abstract method to return the property component count of the given property ID on the AnimationTarget.
-     *
-     * @param propertyId The ID of the property on the AnimationTarget to obtain the component count for.
-     *
-     * @return The property component count of the given property.
-     */
-    virtual unsigned int getAnimationPropertyComponentCount(int propertyId) const = 0;
-
-    /**
-     * Abstract method for getting the animation property value for the given property ID on the AnimationTarget.
-     *
-     * @param propertyId The ID of the property on the AnimationTarget to get the animation property value for.
-     * @param value The container to get the animation property value in.
-     */
-    virtual void getAnimationPropertyValue(int propertyId, AnimationValue* value) = 0;
-
-    /**
-     * Abstract method for setting the animation property value for the given property ID on the AnimationTarget.
-     *
-     * @param propertyId The ID of the property on the AnimationTarget to set the animation property value on.
-     * @param value The container to set the animation property value in.
-     * @param blendWeight The blend weight.
-     */
-    virtual void setAnimationPropertyValue(int propertyId, AnimationValue* value, float blendWeight = 1.0f) = 0;
-
-    /**
-     * Gets the animation with the specified ID. If the ID is NULL, this function will return the first animation it finds.
-     *
-     * @param id The name of the animation to get.
-     */
-    Animation* getAnimation(const char* id = NULL) const;
-
-protected:
-
-    /**
-     * The type of animation target.
-     */
-    enum TargetType
-    {
-        SCALAR,
-        TRANSFORM
-    };
-
-    /**
-     * Constructor.
-     */
-    AnimationTarget();
-
-    /**
-     * Destructor.
-     */
-    virtual ~AnimationTarget();
-
-	/**
-     * Gets the TargetType's property ID value for the specified property ID string.
-     *
-     * @param type The TargetType of the AnimationTarget.
-     * @param propertyIdStr The property ID string.
-     * @return The property ID value for the property ID string; -1 if the propertyIdStr does not exist
-     *    for the TargetType.
-     */
-    virtual int getPropertyId(TargetType type, const char* propertyIdStr);
-
-    /**
-     * Adds the given animation channel to this animation target.
-     *
-     * @param channel The animation channel to add.
-     */
-    void addChannel(Animation::Channel* channel);
-
-    /**
-     * Removes the given animation channel from this animation target.
-     *
-     * @param channel The animation channel to delete.
-     */
-    void removeChannel(Animation::Channel* channel);
-
-    /**
-     * Gets the Animation::Channel that belongs to the Animation with the specified ID.
-     *
-     * @param id The ID of the Animation the Channel belongs to.
-     */
-    Animation::Channel* getChannel(const char* id) const;
-
-    /**
-     * Copies data from this animation target into the given target for the purpose of cloning.
-     *
-     * @param target The target to copy into.
-     * @param context The clone context.
-     */
-    void cloneInto(AnimationTarget* target, NodeCloneContext &context) const;
-
-    /**
-     * The target's type.
-     *
-     * @see TargetType::SCALAR
-     * @see TargetType::TRANSFORM
-     */
-    TargetType _targetType;
-
-private:
-
-    /**
-     * Constructor.
-     */
-    AnimationTarget(const AnimationTarget& copy);
-
-    /**
-     * Converts by-value animations to to-value animations.
-     */
-    void convertByValues(unsigned int propertyId, unsigned int componentCount, float* from, float* by);
-
-    /**
-     * Converts a Quaternion by-value into a to-value.
-     */
-    void convertQuaternionByValues(float* from, float* by);
-
-    /**
-     * Converts a Scale by-value into a to-value.
-     */
-    void convertScaleByValues(float* from, float* by, unsigned int componentCount);
-
-    /**
-     * Converts a by-value into a to-value.
-     */
-    void convertByValues(float* from, float* by, unsigned int componentCount);
-
-    std::vector<Animation::Channel*>* _animationChannels;   // Collection of all animation channels that target the AnimationTarget
-
-};
-}
-
-#endif

+ 0 - 73
gameplay/src/AnimationValue.cpp

@@ -1,73 +0,0 @@
-#include "Base.h"
-#include "AnimationValue.h"
-
-namespace gameplay
-{
-
-AnimationValue::AnimationValue(unsigned int componentCount)
-  : _componentCount(componentCount), _componentSize(componentCount * sizeof(float))
-{
-    GP_ASSERT(_componentCount > 0);
-    _value = new float[_componentCount];
-}
-
-AnimationValue::AnimationValue(const AnimationValue& copy)
-{
-    _value = new float[copy._componentCount];
-    _componentSize = copy._componentSize;
-    _componentCount = copy._componentCount;
-    memcpy(_value, copy._value, _componentSize);
-}
-
-AnimationValue::~AnimationValue()
-{
-    SAFE_DELETE_ARRAY(_value);
-}
-
-AnimationValue& AnimationValue::operator=(const AnimationValue& v)
-{
-    if (this != &v)
-    {
-        if (_value == NULL || _componentSize != v._componentSize || _componentCount != v._componentCount)
-        {
-            _componentSize = v._componentSize;
-            _componentCount = v._componentCount;
-            SAFE_DELETE_ARRAY(_value);
-            _value = new float[v._componentCount];
-        }
-        memcpy(_value, v._value, _componentSize);
-    }
-    return *this;
-}
-
-float AnimationValue::getFloat(unsigned int index) const
-{
-    GP_ASSERT(index < _componentCount);
-    GP_ASSERT(_value);
-
-    return _value[index];
-}
-
-void AnimationValue::setFloat(unsigned int index, float value)
-{
-    GP_ASSERT(index < _componentCount);
-    GP_ASSERT(_value);
-
-    _value[index] = value;
-}
-
-void AnimationValue::getFloats(unsigned int index, float* values, unsigned int count) const
-{
-    GP_ASSERT(_value && values && index < _componentCount && (index + count) <= _componentCount);
-
-    memcpy(values, &_value[index], count * sizeof(float));
-}
-
-void AnimationValue::setFloats(unsigned int index, float* values, unsigned int count)
-{
-    GP_ASSERT(_value && values && index < _componentCount && (index + count) <= _componentCount);
-
-    memcpy(&_value[index], values, count * sizeof(float));
-}
-
-}

+ 0 - 88
gameplay/src/AnimationValue.h

@@ -1,88 +0,0 @@
-#ifndef ANIMATIONVALUE_H_
-#define ANIMATIONVALUE_H_
-
-#include "Animation.h"
-
-namespace gameplay
-{
-
-/**
- * Defines a running animation value which can have one or more floats.
- */
-class AnimationValue
-{
-    friend class AnimationClip;
-
-public:
-
-    /**
-     * Gets the value at the specified index.
-     *
-     * @param index The index of the component to get the value for.
-     *
-     * @return The float value at the specified index.
-     */
-    float getFloat(unsigned int index) const;
-
-    /**
-     * Sets the value at the specified index.
-     *
-     * @param index The index of the component to set the value for.
-     * @param value The value to set the component to.
-     */
-    void setFloat(unsigned int index, float value);
-
-    /**
-     * Copies one or more float values from this AnimationValue into the specified array.
-     *
-     * @param index The index to start copying from.
-     * @param values Pointer to float array to copy values into.
-     * @param count Number of values to copy.
-     */
-    void getFloats(unsigned int index, float* values, unsigned int count) const;
-
-    /**
-     * Copies one or more float values into the AnimationValue.
-     *
-     * @param index The index of the first component to set the value for.
-     * @param values Array of values to copy into the AnimationValue.
-     * @param count Number of values to in the array to copy in.
-     */
-    void setFloats(unsigned int index, float* values, unsigned int count);
-
-private:
-
-    /**
-     * Constructor.
-     */
-    AnimationValue();
-
-    /**
-     * Constructor.
-     */
-    AnimationValue(unsigned int componentCount);
-
-    /**
-     * Constructor.
-     */
-    AnimationValue(const AnimationValue& copy);
-
-    /**
-     * Destructor.
-     */
-    ~AnimationValue();
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AnimationValue& operator=(const AnimationValue& v);
-
-    unsigned int _componentCount;   // The number of float values for the property.
-    unsigned int _componentSize;    // The number of bytes of memory the property is.
-    float* _value;                  // The current value of the property.
-
-};
-
-}
-
-#endif

+ 0 - 516
gameplay/src/AudioBuffer.cpp

@@ -1,516 +0,0 @@
-#include "Base.h"
-#include "AudioBuffer.h"
-#include "FileSystem.h"
-
-namespace gameplay
-{
-
-// Audio buffer cache
-static std::vector<AudioBuffer*> __buffers;
-
-// Callbacks for loading an ogg file using Stream
-static size_t readStream(void* ptr, size_t size, size_t nmemb, void* datasource)
-{
-    GP_ASSERT(datasource);
-    Stream* stream = reinterpret_cast<Stream*>(datasource);
-    return stream->read(ptr, size, nmemb);
-}
-
-static int seekStream(void *datasource, ogg_int64_t offset, int whence)
-{
-    GP_ASSERT(datasource);
-    Stream* stream = reinterpret_cast<Stream*>(datasource);
-    return !stream->seek(offset, whence);
-}
-
-static int closeStream(void *datasource)
-{
-    GP_ASSERT(datasource);
-    Stream* stream = reinterpret_cast<Stream*>(datasource);
-    stream->close();
-    return 0;
-}
-
-static long tellStream(void* datasource)
-{
-    GP_ASSERT(datasource);
-    Stream* stream = reinterpret_cast<Stream*>(datasource);
-    return stream->position();
-}
-
-AudioBuffer::AudioBuffer(const char* path, ALuint* buffer, bool streamed)
-: _filePath(path), _streamed(streamed), _buffersNeededCount(0)
-{
-    memcpy(_alBufferQueue, buffer, sizeof(_alBufferQueue));
-}
-
-AudioBuffer::~AudioBuffer()
-{
-    // Remove the buffer from the cache.
-    unsigned int bufferCount = (unsigned int)__buffers.size();
-
-    if (!_streamed)
-    {
-        unsigned int bufferCount = (unsigned int)__buffers.size();
-        for (unsigned int i = 0; i < bufferCount; i++)
-        {
-            if (this == __buffers[i])
-            {
-                __buffers.erase(__buffers.begin() + i);
-                break;
-            }
-        }
-    }
-    else if (_streamStateOgg.get())
-    {
-        ov_clear(&_streamStateOgg->oggFile);
-    }
-
-    for (int i = 0; i < STREAMING_BUFFER_QUEUE_SIZE; i++)
-    {
-        if (_alBufferQueue[i])
-        {
-            AL_CHECK(alDeleteBuffers(1, &_alBufferQueue[i]));
-            _alBufferQueue[i] = 0;
-        }
-    }
-}
-
-AudioBuffer* AudioBuffer::create(const char* path, bool streamed)
-{
-    GP_ASSERT(path);
-
-    AudioBuffer* buffer = NULL;
-    if (!streamed)
-    {
-        unsigned int bufferCount = (unsigned int)__buffers.size();
-        for (unsigned int i = 0; i < bufferCount; i++)
-        {
-            buffer = __buffers[i];
-            GP_ASSERT(buffer);
-            if (buffer->_filePath.compare(path) == 0)
-            {
-                buffer->addRef();
-                return buffer;
-            }
-        }
-    }
-    ALuint alBuffer[STREAMING_BUFFER_QUEUE_SIZE];
-    memset(alBuffer, 0, sizeof(alBuffer));
-
-    // Create 1 buffer for non-streamed sounds or full queue for streamed ones.
-    unsigned int queueSize = streamed ? STREAMING_BUFFER_QUEUE_SIZE : 1;
-    for (unsigned int i = 0; i < queueSize; i++)
-    {
-        // Load audio data into a buffer.
-        AL_CHECK(alGenBuffers(1, &alBuffer[i]));
-        if (AL_LAST_ERROR())
-        {
-            GP_ERROR("Failed to create OpenAL buffer; alGenBuffers error: %d", AL_LAST_ERROR());
-            AL_CHECK(alDeleteBuffers(1, &alBuffer[i]));
-            return NULL;
-        }
-    }
-    
-    std::unique_ptr<AudioStreamStateWav> streamStateWav;
-    std::unique_ptr<AudioStreamStateOgg> streamStateOgg;
-
-    // Load sound file.
-    std::unique_ptr<Stream> stream(FileSystem::open(path));
-    if (stream.get() == NULL || !stream->canRead())
-    {
-        GP_ERROR("Failed to load audio file %s.", path);
-        goto cleanup;
-    }
-    
-    // Read the file header
-    char header[12];
-    if (stream->read(header, 1, 12) != 12)
-    {
-        GP_ERROR("Invalid header for audio file %s.", path);
-        goto cleanup;
-    }
-    
-    // Check the file format
-    if (memcmp(header, "RIFF", 4) == 0)
-    {
-        // Fill at least one buffer with sound data.
-        streamStateWav.reset(new AudioStreamStateWav());
-        if (!AudioBuffer::loadWav(stream.get(), alBuffer[0], streamed, streamStateWav.get()))
-        {
-            GP_ERROR("Invalid wave file: %s", path);
-            goto cleanup;
-        }
-    }
-    else if (memcmp(header, "OggS", 4) == 0)
-    {
-        // Fill at least one buffer with sound data.
-        streamStateOgg.reset(new AudioStreamStateOgg());
-        if (!AudioBuffer::loadOgg(stream.get(), alBuffer[0], streamed, streamStateOgg.get()))
-        {
-            GP_ERROR("Invalid ogg file: %s", path);
-            goto cleanup;
-        }
-    }
-    else
-    {
-        GP_ERROR("Unsupported audio file: %s", path);
-        goto cleanup;
-    }
-
-    buffer = new AudioBuffer(path, alBuffer, streamed);
-
-    buffer->_fileStream.reset(stream.release());
-    buffer->_streamStateWav.reset(streamStateWav.release());
-    buffer->_streamStateOgg.reset(streamStateOgg.release());
-    if (buffer->_streamStateWav.get())
-        buffer->_buffersNeededCount = (buffer->_streamStateWav->dataSize + STREAMING_BUFFER_SIZE - 1) / STREAMING_BUFFER_SIZE;
-    else if (buffer->_streamStateOgg.get())
-        buffer->_buffersNeededCount = (buffer->_streamStateOgg->dataSize + STREAMING_BUFFER_SIZE - 1) / STREAMING_BUFFER_SIZE;
-
-    if (!streamed)
-        __buffers.push_back(buffer);
-
-    return buffer;
-    
-cleanup:
-    for (unsigned int i = 0; i < STREAMING_BUFFER_QUEUE_SIZE; i++)
-    {
-        if (alBuffer[i])
-            AL_CHECK(alDeleteBuffers(1, &alBuffer[i]));
-    }
-    return NULL;
-}
-
-bool AudioBuffer::loadWav(Stream* stream, ALuint buffer, bool streamed, AudioStreamStateWav* streamState)
-{
-    GP_ASSERT(stream);
-
-    unsigned char data[12];
-    
-    // Verify the wave fmt magic value meaning format.
-    if (stream->read(data, 1, 8) != 8 || memcmp(data, "fmt ", 4) != 0 )
-    {
-        GP_ERROR("Failed to verify the magic value for the wave file format.");
-        return false;
-    }
-    
-    unsigned int section_size;
-    section_size  = data[7]<<24;
-    section_size |= data[6]<<16;
-    section_size |= data[5]<<8;
-    section_size |= data[4];
-
-    // Check for a valid pcm format.
-    if (stream->read(data, 1, 2) != 2 || data[1] != 0 || data[0] != 1)
-    {
-        GP_ERROR("Unsupported audio file format (must be a valid PCM format).");
-        return false;
-    }
-    
-    // Get the channel count (16-bit little-endian).
-    int channels;
-    if (stream->read(data, 1, 2) != 2)
-    {
-        GP_ERROR("Failed to read the wave file's channel count.");
-        return false;
-    }
-    channels  = data[1]<<8;
-    channels |= data[0];
-    
-    // Get the sample frequency (32-bit little-endian).
-    ALuint frequency;
-    if (stream->read(data, 1, 4) != 4)
-    {
-        GP_ERROR("Failed to read the wave file's sample frequency.");
-        return false;
-    }
-
-    frequency  = data[3]<<24;
-    frequency |= data[2]<<16;
-    frequency |= data[1]<<8;
-    frequency |= data[0];
-    
-    // The next 6 bytes hold the block size and bytes-per-second. 
-    // We don't need that info, so just read and ignore it. 
-    // We could use this later if we need to know the duration.
-    if (stream->read(data, 1, 6) != 6)
-    {
-        GP_ERROR("Failed to read past the wave file's block size and bytes-per-second.");
-        return false;
-    }
-    
-    // Get the bit depth (16-bit little-endian).
-    int bits;
-    if (stream->read(data, 1, 2) != 2)
-    {
-        GP_ERROR("Failed to read the wave file's bit depth.");
-        return false;
-    }
-    bits  = data[1]<<8;
-    bits |= data[0];
-    
-    // Now convert the given channel count and bit depth into an OpenAL format. 
-    ALuint format = 0;
-    if (bits == 8)
-    {
-        if (channels == 1)
-            format = AL_FORMAT_MONO8;
-        else if (channels == 2)
-            format = AL_FORMAT_STEREO8;
-    }
-    else if (bits == 16)
-    {
-        if (channels == 1)
-            format = AL_FORMAT_MONO16;
-        else if (channels == 2)
-            format = AL_FORMAT_STEREO16;
-    }
-    else
-    {
-        GP_ERROR("Incompatible wave file format: (%d, %d)", channels, bits);
-        return false;
-    }
-    
-    // Check against the size of the format header as there may be more data that we need to read.
-    if (section_size > 16)
-    {
-        unsigned int length = section_size - 16;
-
-        // Extension size is 2 bytes.
-        if (stream->read(data, 1, length) != length)
-        {
-            GP_ERROR("Failed to read extension size from wave file.");
-            return false;
-        }
-    }
-
-    // Read in the rest of the file a chunk (section) at a time.
-    while (true)
-    {
-        // Check if we are at the end of the file without reading the data.
-        if (stream->eof())
-        {
-            GP_ERROR("Failed to load wave file; file appears to have no data.");
-            return false;
-        }
-
-        // Read in the type of the next section of the file.
-        if (stream->read(data, 1, 4) != 4)
-        {
-            GP_ERROR("Failed to read next section type from wave file.");
-            return false;
-        }
-
-        // Data chunk.
-        if (memcmp(data, "data", 4) == 0)
-        {
-            // Read how much data is remaining and buffer it up.
-            unsigned int dataSize;
-            if (stream->read(&dataSize, sizeof(int), 1) != 1)
-            {
-                GP_ERROR("Failed to read size of data section from wave file.");
-                return false;
-            }
-
-            if (streamed)
-            {
-                // Save streaming state for later use.
-                streamState->dataStart = stream->position();
-                streamState->dataSize = dataSize;
-                streamState->format = format;
-                streamState->frequency = frequency;
-            
-                // Limit data size to STREAMING_BUFFER_SIZE.
-                if (dataSize > STREAMING_BUFFER_SIZE)
-                    dataSize = STREAMING_BUFFER_SIZE;
-            }
-
-            char* data = new char[dataSize];
-            if (stream->read(data, sizeof(char), dataSize) != dataSize)
-            {
-                GP_ERROR("Failed to load wave file; file is missing data.");
-                SAFE_DELETE_ARRAY(data);
-                return false;
-            }
-
-            AL_CHECK( alBufferData(buffer, format, data, dataSize, frequency) );
-            SAFE_DELETE_ARRAY(data);
-
-            // We've read the data, so return now.
-            return true;
-        }
-        // Other chunk - could be any of the following:
-        // - Fact ("fact")
-        // - Wave List ("wavl")
-        // - Silent ("slnt")
-        // - Cue ("cue ")
-        // - Playlist ("plst")
-        // - Associated Data List ("list")
-        // - Label ("labl")
-        // - Note ("note")
-        // - Labeled Text ("ltxt")
-        // - Sampler ("smpl")
-        // - Instrument ("inst")
-        else
-        {
-            // Store the name of the chunk so we can report errors informatively.
-            char chunk[5] = { 0 };
-            memcpy(chunk, data, 4);
-
-            // Read the chunk size.
-            if (stream->read(data, 1, 4) != 4)
-            {
-                GP_ERROR("Failed to read size of '%s' chunk from wave file.", chunk);
-                return false;
-            }
-
-            section_size  = data[3]<<24;
-            section_size |= data[2]<<16;
-            section_size |= data[1]<<8;
-            section_size |= data[0];
-
-            // Seek past the chunk.
-            if (stream->seek(section_size, SEEK_CUR) == false)
-            {
-                GP_ERROR("Failed to seek past '%s' chunk in wave file.", chunk);
-                return false;
-            }
-        }
-    }
-    return false;
-}
-
-bool AudioBuffer::loadOgg(Stream* stream, ALuint buffer, bool streamed, AudioStreamStateOgg* streamState)
-{
-    GP_ASSERT(stream);
-
-    vorbis_info* info;
-    ALenum format;
-    long result;
-    int section;
-    long size = 0;
-
-    stream->rewind();
-
-    ov_callbacks callbacks;
-    callbacks.read_func = readStream;
-    callbacks.seek_func = seekStream;
-    callbacks.close_func = closeStream;
-    callbacks.tell_func = tellStream;
-
-    if ((result = ov_open_callbacks(stream, &streamState->oggFile, NULL, 0, callbacks)) < 0)
-    {
-        GP_ERROR("Failed to open ogg file.");
-        return false;
-    }
-
-    info = ov_info(&streamState->oggFile, -1);
-    GP_ASSERT(info);
-    if (info->channels == 1)
-        format = AL_FORMAT_MONO16;
-    else
-        format = AL_FORMAT_STEREO16;
-
-    // size = #samples * #channels * 2 (for 16 bit).
-    long data_size = ov_pcm_total(&streamState->oggFile, -1) * info->channels * 2;
-
-    if (streamed)
-    {
-        // Save streaming state for later use.
-        streamState->dataStart = ov_pcm_tell(&streamState->oggFile);
-        streamState->dataSize = data_size;
-        streamState->format = format;
-        streamState->frequency = info->rate;
-        
-        // Limit data size to STREAMING_BUFFER_SIZE.
-        if (data_size > STREAMING_BUFFER_SIZE)
-            data_size = STREAMING_BUFFER_SIZE;
-    }
-
-    char* data = new char[data_size];
-
-    while (size < data_size)
-    {
-        result = ov_read(&streamState->oggFile, data + size, data_size - size, 0, 2, 1, &section);
-        if (result > 0)
-        {
-            size += result;
-        }
-        else if (result < 0)
-        {
-            SAFE_DELETE_ARRAY(data);
-            GP_ERROR("Failed to read ogg file; file is missing data.");
-            return false;
-        }
-        else
-        {
-            break;
-        }
-    }
-    
-    if (size == 0)
-    {
-        SAFE_DELETE_ARRAY(data);
-        GP_ERROR("Filed to read ogg file; unable to read any data.");
-        return false;
-    }
-
-    AL_CHECK(alBufferData(buffer, format, data, size, info->rate));
-
-    SAFE_DELETE_ARRAY(data);
-
-    if (!streamed)
-        ov_clear(&streamState->oggFile);
-
-    return true;
-}
-
-bool AudioBuffer::streamData(ALuint buffer, bool looped)
-{
-    static char buffers[STREAMING_BUFFER_SIZE];
-    
-    if (_streamStateWav.get())
-    {
-        ALsizei bytesRead = _fileStream->read(buffers, sizeof(char), STREAMING_BUFFER_SIZE);
-        if (bytesRead != STREAMING_BUFFER_SIZE)
-        {
-            if (looped)
-                _fileStream->seek(_streamStateWav->dataStart, SEEK_SET);
-        }
-        if (bytesRead > 0)
-            AL_CHECK(alBufferData(buffer, _streamStateWav->format, buffers, bytesRead, _streamStateWav->frequency));
-        
-        return bytesRead > 0 || looped;
-    }
-    else if (_streamStateOgg.get())
-    {
-        int section;
-        int result = 0;
-        ALsizei bytesRead = 0;
-
-        while (bytesRead < STREAMING_BUFFER_SIZE)
-        {
-            result = ov_read(&_streamStateOgg->oggFile, buffers + bytesRead, STREAMING_BUFFER_SIZE - bytesRead, 0, 2, 1, &section);
-            if (result > 0)
-            {
-                bytesRead += result;
-            }
-            else
-            {
-                if (looped)
-                    ov_pcm_seek(&_streamStateOgg->oggFile, _streamStateOgg->dataStart);
-                break;
-            }
-        }
-
-        if (bytesRead > 0)
-            AL_CHECK(alBufferData(buffer, _streamStateOgg->format, buffers, bytesRead, _streamStateOgg->frequency));
-        
-        return (bytesRead > 0) || looped;
-    }
-    
-    return false;
-}
-
-}

+ 0 - 84
gameplay/src/AudioBuffer.h

@@ -1,84 +0,0 @@
-#ifndef AUDIOBUFFER_H_
-#define AUDIOBUFFER_H_
-
-#include "Ref.h"
-#include "Stream.h"
-
-namespace gameplay
-{
-
-class AudioSource;
-
-/**
- * Defines the actual audio buffer data.
- *
- * Currently only supports supported formats: .ogg, .wav, .au and .raw files.
- */
-class AudioBuffer : public Ref
-{
-    friend class AudioSource;
-
-private:
-    
-    /**
-     * Constructor.
-     */
-    AudioBuffer(const char* path, ALuint* buffers, bool streamed);
-
-    /**
-     * Destructor.
-     */
-    virtual ~AudioBuffer();
-
-    /**
-     * Hidden copy assignment operator.
-     */
-    AudioBuffer& operator=(const AudioBuffer&);
-
-    /**
-     * Creates an audio buffer from a file.
-     * 
-     * @param path The path to the audio buffer on the filesystem.
-     * 
-     * @return The buffer from a file.
-     */
-    static AudioBuffer* create(const char* path, bool streamed);
-
-    struct AudioStreamStateWav
-    {
-        long dataStart;
-        unsigned int dataSize;
-        ALuint format;
-        ALuint frequency;
-    };
-
-    struct AudioStreamStateOgg
-    {
-        long dataStart;
-        unsigned int dataSize;
-        ALuint format;
-        ALuint frequency;
-        OggVorbis_File oggFile;
-    };
-
-    enum { STREAMING_BUFFER_QUEUE_SIZE = 3 };
-    enum { STREAMING_BUFFER_SIZE = 48000 };
-
-    static bool loadWav(Stream* stream, ALuint buffer, bool streamed, AudioStreamStateWav* streamState);
-    
-    static bool loadOgg(Stream* stream, ALuint buffer, bool streamed, AudioStreamStateOgg* streamState);
-
-    bool streamData(ALuint buffer, bool looped);
-
-    ALuint _alBufferQueue[STREAMING_BUFFER_QUEUE_SIZE];
-    std::string _filePath;
-    bool _streamed;
-    std::unique_ptr<Stream> _fileStream;
-    std::unique_ptr<AudioStreamStateWav> _streamStateWav;
-    std::unique_ptr<AudioStreamStateOgg> _streamStateOgg;
-    int _buffersNeededCount;
-};
-
-}
-
-#endif

+ 0 - 177
gameplay/src/AudioController.cpp

@@ -1,177 +0,0 @@
-#include "Base.h"
-#include "AudioController.h"
-#include "AudioListener.h"
-#include "AudioBuffer.h"
-#include "AudioSource.h"
-
-namespace gameplay
-{
-
-AudioController::AudioController() 
-: _alcDevice(NULL), _alcContext(NULL), _pausingSource(NULL), _streamingThreadActive(true)
-{
-}
-
-AudioController::~AudioController()
-{
-}
-
-void AudioController::initialize()
-{
-    _alcDevice = alcOpenDevice(NULL);
-    if (!_alcDevice)
-    {
-        GP_ERROR("Unable to open OpenAL device.\n");
-        return;
-    }
-    
-    _alcContext = alcCreateContext(_alcDevice, NULL);
-    ALCenum alcErr = alcGetError(_alcDevice);
-    if (!_alcContext || alcErr != ALC_NO_ERROR)
-    {
-        alcCloseDevice(_alcDevice);
-        GP_ERROR("Unable to create OpenAL context. Error: %d\n", alcErr);
-        return;
-    }
-    
-    alcMakeContextCurrent(_alcContext);
-    alcErr = alcGetError(_alcDevice);
-    if (alcErr != ALC_NO_ERROR)
-    {
-        GP_ERROR("Unable to make OpenAL context current. Error: %d\n", alcErr);
-    }
-    _streamingMutex.reset(new std::mutex());
-}
-
-void AudioController::finalize()
-{
-    GP_ASSERT(_streamingSources.empty());
-    if (_streamingThread.get())
-    {
-        _streamingThreadActive = false;
-        _streamingThread->join();
-        _streamingThread.reset(NULL);
-    }
-
-    alcMakeContextCurrent(NULL);
-    if (_alcContext)
-    {
-        alcDestroyContext(_alcContext);
-        _alcContext = NULL;
-    }
-    if (_alcDevice)
-    {
-        alcCloseDevice(_alcDevice);
-        _alcDevice = NULL;
-    }
-}
-
-void AudioController::pause()
-{
-    std::set<AudioSource*>::iterator itr = _playingSources.begin();
-
-    // For each source that is playing, pause it.
-    AudioSource* source = NULL;
-    while (itr != _playingSources.end())
-    {
-        GP_ASSERT(*itr);
-        source = *itr;
-        _pausingSource = source;
-        source->pause();
-        _pausingSource = NULL;
-        itr++;
-    }
-#ifdef ALC_SOFT_pause_device
-    alcDevicePauseSOFT(_alcDevice);
-#endif
-}
-
-void AudioController::resume()
-{   
-    alcMakeContextCurrent(_alcContext);
-#ifdef ALC_SOFT_pause_device
-    alcDeviceResumeSOFT(_alcDevice);
-#endif
-
-    std::set<AudioSource*>::iterator itr = _playingSources.begin();
-
-    // For each source that is playing, resume it.
-    AudioSource* source = NULL;
-    while (itr != _playingSources.end())
-    {
-        GP_ASSERT(*itr);
-        source = *itr;
-        source->resume();
-        itr++;
-    }
-}
-
-void AudioController::update(float elapsedTime)
-{
-    AudioListener* listener = AudioListener::getInstance();
-    if (listener)
-    {
-        AL_CHECK( alListenerf(AL_GAIN, listener->getGain()) );
-        AL_CHECK( alListenerfv(AL_ORIENTATION, (ALfloat*)listener->getOrientation()) );
-        AL_CHECK( alListenerfv(AL_VELOCITY, (ALfloat*)&listener->getVelocity()) );
-        AL_CHECK( alListenerfv(AL_POSITION, (ALfloat*)&listener->getPosition()) );
-    }
-}
-
-void AudioController::addPlayingSource(AudioSource* source)
-{
-    if (_playingSources.find(source) == _playingSources.end())
-    {
-        _playingSources.insert(source);
-
-        if (source->isStreamed())
-        {
-            GP_ASSERT(_streamingSources.find(source) == _streamingSources.end());
-            bool startThread = _streamingSources.empty() && _streamingThread.get() == NULL;
-            _streamingMutex->lock();
-            _streamingSources.insert(source);
-            _streamingMutex->unlock();
-
-            if (startThread)
-                _streamingThread.reset(new std::thread(&streamingThreadProc, this));
-        }
-    }
-}
-
-void AudioController::removePlayingSource(AudioSource* source)
-{
-    if (_pausingSource != source)
-    {
-        std::set<AudioSource*>::iterator iter = _playingSources.find(source);
-        if (iter != _playingSources.end())
-        {
-            _playingSources.erase(iter);
- 
-            if (source->isStreamed())
-            {
-                GP_ASSERT(_streamingSources.find(source) != _streamingSources.end());
-                _streamingMutex->lock();
-                _streamingSources.erase(source);
-                _streamingMutex->unlock();
-            }
-        }
-    } 
-}
-
-void AudioController::streamingThreadProc(void* arg)
-{
-    AudioController* controller = (AudioController*)arg;
-
-    while (controller->_streamingThreadActive)
-    {
-        controller->_streamingMutex->lock();
-
-        std::for_each(controller->_streamingSources.begin(), controller->_streamingSources.end(), std::mem_fn(&AudioSource::streamDataIfNeeded));
-        
-        controller->_streamingMutex->unlock();
-   
-        std::this_thread::sleep_for(std::chrono::milliseconds(50));
-    }
-}
-
-}

+ 0 - 76
gameplay/src/AudioController.h

@@ -1,76 +0,0 @@
-#ifndef AUDIOCONTROLLER_H_
-#define AUDIOCONTROLLER_H_
-
-namespace gameplay
-{
-
-class AudioListener;
-class AudioSource;
-
-/**
- * Defines a class for controlling game audio.
- */
-class AudioController
-{
-    friend class Game;
-    friend class AudioSource;
-
-public:
-    
-    /**
-     * Destructor.
-     */
-    virtual ~AudioController();
-
-private:
-    
-    /**
-     * Constructor.
-     */
-    AudioController();
-
-    /**
-     * Controller initialize.
-     */
-    void initialize();
-
-    /**
-     * Controller finalize.
-     */
-    void finalize();
-
-    /**
-     * Controller pause.
-     */
-    void pause();
-
-    /**
-     * Controller resume.
-     */
-    void resume();
-
-    /**
-     * Controller update.
-     */
-    void update(float elapsedTime);
-
-    void addPlayingSource(AudioSource* source);
-    
-    void removePlayingSource(AudioSource* source);
-
-    static void streamingThreadProc(void* arg);
-
-    ALCdevice* _alcDevice;
-    ALCcontext* _alcContext;
-    std::set<AudioSource*> _playingSources;
-    std::set<AudioSource*> _streamingSources;
-    AudioSource* _pausingSource;
-
-    bool _streamingThreadActive;
-    std::unique_ptr<std::thread> _streamingThread;
-    std::unique_ptr<std::mutex> _streamingMutex;
-};
-
-}
-
-#endif

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