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
-
-# 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
-
-# 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
-*.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/>
 
-## 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/)
-- [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
-- [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
 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
 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 

+ 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