From bde5b9077903c536336a03de0d631ddb9accc988 Mon Sep 17 00:00:00 2001 From: Garrett Dickinson Date: Wed, 31 Jul 2024 00:06:54 -0500 Subject: [PATCH] big ol update --- .cmake/api/v1/query/cache-v2 | 0 .cmake/api/v1/query/cmakeFiles-v1 | 0 .cmake/api/v1/query/codemodel-v2 | 0 .cmake/api/v1/query/toolchains-v1 | 0 .../reply/cache-v2-f48b714d1e4412ccc47b.json | 1263 ----------------- .../cmakeFiles-v1-13576cbc081bae598543.json | 141 -- .../codemodel-v2-330b5f213693ec063c5e.json | 60 - .../directory-.-f5ebdc15457944623624.json | 14 - .../reply/index-2023-10-03T05-15-15-0196.json | 108 -- .../target-game-c928b7f21fd872f316af.json | 598 -------- .../toolchains-v1-99265b04de7ada3aac9e.json | 107 -- .gitignore | 14 +- .idea/.gitignore | 8 - .idea/Hydrangea.iml | 2 - .idea/misc.xml | 10 - .idea/modules.xml | 8 - .idea/vcs.xml | 6 - CMakeLists.txt | 9 +- build.sh | 9 - .../api/v1/query/client-vscode/query.json | 1 - .../reply/cache-v2-5b5f3a9c60370adcf8ab.json | 1159 --------------- .../cmakeFiles-v1-cef2c3de0490094bf669.json | 144 -- .../codemodel-v2-3dd0101c350a8d407562.json | 60 - ...irectory-.-Debug-f5ebdc15457944623624.json | 14 - .../reply/index-2023-12-09T22-09-46-0659.json | 132 -- ...arget-game-Debug-9df99ffdcc4bbe325dba.json | 613 -------- .../toolchains-v1-50db6e0713f69d932e1c.json | 107 -- build/.ninja_deps | Bin 67260 -> 0 bytes build/.ninja_log | 58 - build/build.ninja | 537 ------- build/compile_commands.json | 287 ---- include/box2d/b2_broad_phase.h | 2 +- include/box2d/b2_dynamic_tree.h | 4 +- include/box2d/b2_world.h | 3 - include/{ => engine}/input_manager.h | 7 +- include/{ => engine}/util.h | 6 +- include/{ => engine}/window.h | 13 +- include/fmt/format.h | 2 +- include/game.h | 24 - include/node.h | 36 - include/nodes/card.h | 42 + include/nodes/hand.h | 29 + include/nodes/node.h | 44 + include/{ => nodes}/player.h | 13 +- include/{ => nodes}/scene.h | 24 +- include/nodes/sprite.h | 44 + include/{ => physics}/dynamic_body.h | 21 +- include/{ => physics}/static_body.h | 17 +- include/sprite.h | 38 - include/tweeny/dispatcher.h | 53 + include/tweeny/easing.h | 662 +++++++++ include/tweeny/easingresolve.h | 127 ++ include/tweeny/int2type.h | 37 + include/tweeny/tween.h | 656 +++++++++ include/tweeny/tween.tcc | 346 +++++ include/tweeny/tweenone.tcc | 334 +++++ include/tweeny/tweenpoint.h | 82 ++ include/tweeny/tweenpoint.tcc | 115 ++ include/tweeny/tweentraits.h | 75 + include/tweeny/tweeny.h | 102 ++ include/tweeny/tweeny.tcc | 40 + resources/img/cards/c1.png | Bin 0 -> 42481 bytes resources/img/cards/c10.png | Bin 0 -> 54676 bytes resources/img/cards/c11.png | Bin 0 -> 208118 bytes resources/img/cards/c12.png | Bin 0 -> 285495 bytes resources/img/cards/c13.png | Bin 0 -> 263133 bytes resources/img/cards/c2.png | Bin 0 -> 23590 bytes resources/img/cards/c3.png | Bin 0 -> 29161 bytes resources/img/cards/c4.png | Bin 0 -> 28623 bytes resources/img/cards/c5.png | Bin 0 -> 34857 bytes resources/img/cards/c6.png | Bin 0 -> 39972 bytes resources/img/cards/c7.png | Bin 0 -> 41174 bytes resources/img/cards/c8.png | Bin 0 -> 48468 bytes resources/img/cards/c9.png | Bin 0 -> 51028 bytes resources/img/cards/cardback.png | Bin 0 -> 511344 bytes resources/img/cards/d1.png | Bin 0 -> 36810 bytes resources/img/cards/d10.png | Bin 0 -> 46241 bytes resources/img/cards/d11.png | Bin 0 -> 215482 bytes resources/img/cards/d12.png | Bin 0 -> 195223 bytes resources/img/cards/d13.png | Bin 0 -> 266252 bytes resources/img/cards/d2.png | Bin 0 -> 19815 bytes resources/img/cards/d3.png | Bin 0 -> 24257 bytes resources/img/cards/d4.png | Bin 0 -> 24212 bytes resources/img/cards/d5.png | Bin 0 -> 29319 bytes resources/img/cards/d6.png | Bin 0 -> 33692 bytes resources/img/cards/d7.png | Bin 0 -> 34168 bytes resources/img/cards/d8.png | Bin 0 -> 40441 bytes resources/img/cards/d9.png | Bin 0 -> 42981 bytes resources/img/cards/h1.png | Bin 0 -> 44136 bytes resources/img/cards/h10.png | Bin 0 -> 46328 bytes resources/img/cards/h11.png | Bin 0 -> 260725 bytes resources/img/cards/h12.png | Bin 0 -> 243233 bytes resources/img/cards/h13.png | Bin 0 -> 279570 bytes resources/img/cards/h2.png | Bin 0 -> 20136 bytes resources/img/cards/h3.png | Bin 0 -> 24757 bytes resources/img/cards/h4.png | Bin 0 -> 24681 bytes resources/img/cards/h5.png | Bin 0 -> 29804 bytes resources/img/cards/h6.png | Bin 0 -> 33457 bytes resources/img/cards/h7.png | Bin 0 -> 34474 bytes resources/img/cards/h8.png | Bin 0 -> 40849 bytes resources/img/cards/h9.png | Bin 0 -> 43085 bytes resources/img/cards/s1.png | Bin 0 -> 61075 bytes resources/img/cards/s10.png | Bin 0 -> 50453 bytes resources/img/cards/s11.png | Bin 0 -> 247507 bytes resources/img/cards/s12.png | Bin 0 -> 205872 bytes resources/img/cards/s13.png | Bin 0 -> 201544 bytes resources/img/cards/s2.png | Bin 0 -> 21863 bytes resources/img/cards/s3.png | Bin 0 -> 26922 bytes resources/img/cards/s4.png | Bin 0 -> 26409 bytes resources/img/cards/s5.png | Bin 0 -> 32219 bytes resources/img/cards/s6.png | Bin 0 -> 36854 bytes resources/img/cards/s7.png | Bin 0 -> 37167 bytes resources/img/cards/s8.png | Bin 0 -> 44015 bytes resources/img/cards/s9.png | Bin 0 -> 46943 bytes resources/img/cards/shadow.png | Bin 0 -> 12317 bytes resources/img/cards/testface.png | Bin 0 -> 18438 bytes src/box2d/dynamics/b2_body.cpp | 8 +- src/box2d/dynamics/b2_contact.cpp | 2 +- src/box2d/dynamics/b2_contact_manager.cpp | 2 +- src/box2d/dynamics/b2_world.cpp | 6 +- src/box2d/rope/b2_rope.cpp | 2 +- src/dynamic_body.cpp | 28 - src/engine/input_manager.cpp | 19 + src/{ => engine}/util.cpp | 30 +- src/engine/window.cpp | 91 ++ src/game.cpp | 90 -- src/input_manager.cpp | 24 - src/main.cpp | 9 +- src/node.cpp | 41 - src/nodes/card.cpp | 39 + src/nodes/hand.cpp | 58 + src/nodes/node.cpp | 49 + src/{ => nodes}/player.cpp | 48 +- src/nodes/scene.cpp | 40 + src/nodes/sprite.cpp | 76 + src/physics/dynamic_body.cpp | 57 + src/physics/static_body.cpp | 48 + src/scene.cpp | 25 - src/sprite.cpp | 51 - src/static_body.cpp | 49 - src/window.cpp | 93 -- 141 files changed, 3399 insertions(+), 6053 deletions(-) delete mode 100644 .cmake/api/v1/query/cache-v2 delete mode 100644 .cmake/api/v1/query/cmakeFiles-v1 delete mode 100644 .cmake/api/v1/query/codemodel-v2 delete mode 100644 .cmake/api/v1/query/toolchains-v1 delete mode 100644 .cmake/api/v1/reply/cache-v2-f48b714d1e4412ccc47b.json delete mode 100644 .cmake/api/v1/reply/cmakeFiles-v1-13576cbc081bae598543.json delete mode 100644 .cmake/api/v1/reply/codemodel-v2-330b5f213693ec063c5e.json delete mode 100644 .cmake/api/v1/reply/directory-.-f5ebdc15457944623624.json delete mode 100644 .cmake/api/v1/reply/index-2023-10-03T05-15-15-0196.json delete mode 100644 .cmake/api/v1/reply/target-game-c928b7f21fd872f316af.json delete mode 100644 .cmake/api/v1/reply/toolchains-v1-99265b04de7ada3aac9e.json delete mode 100644 .idea/.gitignore delete mode 100644 .idea/Hydrangea.iml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100755 build.sh delete mode 100644 build/.cmake/api/v1/query/client-vscode/query.json delete mode 100644 build/.cmake/api/v1/reply/cache-v2-5b5f3a9c60370adcf8ab.json delete mode 100644 build/.cmake/api/v1/reply/cmakeFiles-v1-cef2c3de0490094bf669.json delete mode 100644 build/.cmake/api/v1/reply/codemodel-v2-3dd0101c350a8d407562.json delete mode 100644 build/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json delete mode 100644 build/.cmake/api/v1/reply/index-2023-12-09T22-09-46-0659.json delete mode 100644 build/.cmake/api/v1/reply/target-game-Debug-9df99ffdcc4bbe325dba.json delete mode 100644 build/.cmake/api/v1/reply/toolchains-v1-50db6e0713f69d932e1c.json delete mode 100644 build/.ninja_deps delete mode 100644 build/.ninja_log delete mode 100644 build/build.ninja delete mode 100644 build/compile_commands.json rename include/{ => engine}/input_manager.h (51%) rename include/{ => engine}/util.h (58%) rename include/{ => engine}/window.h (58%) delete mode 100644 include/game.h delete mode 100644 include/node.h create mode 100644 include/nodes/card.h create mode 100644 include/nodes/hand.h create mode 100644 include/nodes/node.h rename include/{ => nodes}/player.h (65%) rename include/{ => nodes}/scene.h (51%) create mode 100644 include/nodes/sprite.h rename include/{ => physics}/dynamic_body.h (58%) rename include/{ => physics}/static_body.h (62%) delete mode 100644 include/sprite.h create mode 100644 include/tweeny/dispatcher.h create mode 100644 include/tweeny/easing.h create mode 100644 include/tweeny/easingresolve.h create mode 100644 include/tweeny/int2type.h create mode 100644 include/tweeny/tween.h create mode 100644 include/tweeny/tween.tcc create mode 100644 include/tweeny/tweenone.tcc create mode 100644 include/tweeny/tweenpoint.h create mode 100644 include/tweeny/tweenpoint.tcc create mode 100644 include/tweeny/tweentraits.h create mode 100644 include/tweeny/tweeny.h create mode 100644 include/tweeny/tweeny.tcc create mode 100644 resources/img/cards/c1.png create mode 100644 resources/img/cards/c10.png create mode 100644 resources/img/cards/c11.png create mode 100644 resources/img/cards/c12.png create mode 100644 resources/img/cards/c13.png create mode 100644 resources/img/cards/c2.png create mode 100644 resources/img/cards/c3.png create mode 100644 resources/img/cards/c4.png create mode 100644 resources/img/cards/c5.png create mode 100644 resources/img/cards/c6.png create mode 100644 resources/img/cards/c7.png create mode 100644 resources/img/cards/c8.png create mode 100644 resources/img/cards/c9.png create mode 100644 resources/img/cards/cardback.png create mode 100644 resources/img/cards/d1.png create mode 100644 resources/img/cards/d10.png create mode 100644 resources/img/cards/d11.png create mode 100644 resources/img/cards/d12.png create mode 100644 resources/img/cards/d13.png create mode 100644 resources/img/cards/d2.png create mode 100644 resources/img/cards/d3.png create mode 100644 resources/img/cards/d4.png create mode 100644 resources/img/cards/d5.png create mode 100644 resources/img/cards/d6.png create mode 100644 resources/img/cards/d7.png create mode 100644 resources/img/cards/d8.png create mode 100644 resources/img/cards/d9.png create mode 100644 resources/img/cards/h1.png create mode 100644 resources/img/cards/h10.png create mode 100644 resources/img/cards/h11.png create mode 100644 resources/img/cards/h12.png create mode 100644 resources/img/cards/h13.png create mode 100644 resources/img/cards/h2.png create mode 100644 resources/img/cards/h3.png create mode 100644 resources/img/cards/h4.png create mode 100644 resources/img/cards/h5.png create mode 100644 resources/img/cards/h6.png create mode 100644 resources/img/cards/h7.png create mode 100644 resources/img/cards/h8.png create mode 100644 resources/img/cards/h9.png create mode 100644 resources/img/cards/s1.png create mode 100644 resources/img/cards/s10.png create mode 100644 resources/img/cards/s11.png create mode 100644 resources/img/cards/s12.png create mode 100644 resources/img/cards/s13.png create mode 100644 resources/img/cards/s2.png create mode 100644 resources/img/cards/s3.png create mode 100644 resources/img/cards/s4.png create mode 100644 resources/img/cards/s5.png create mode 100644 resources/img/cards/s6.png create mode 100644 resources/img/cards/s7.png create mode 100644 resources/img/cards/s8.png create mode 100644 resources/img/cards/s9.png create mode 100644 resources/img/cards/shadow.png create mode 100644 resources/img/cards/testface.png delete mode 100644 src/dynamic_body.cpp create mode 100644 src/engine/input_manager.cpp rename src/{ => engine}/util.cpp (55%) create mode 100644 src/engine/window.cpp delete mode 100644 src/game.cpp delete mode 100644 src/input_manager.cpp delete mode 100644 src/node.cpp create mode 100644 src/nodes/card.cpp create mode 100644 src/nodes/hand.cpp create mode 100644 src/nodes/node.cpp rename src/{ => nodes}/player.cpp (56%) create mode 100644 src/nodes/scene.cpp create mode 100644 src/nodes/sprite.cpp create mode 100644 src/physics/dynamic_body.cpp create mode 100644 src/physics/static_body.cpp delete mode 100644 src/scene.cpp delete mode 100644 src/sprite.cpp delete mode 100644 src/static_body.cpp delete mode 100644 src/window.cpp diff --git a/.cmake/api/v1/query/cache-v2 b/.cmake/api/v1/query/cache-v2 deleted file mode 100644 index e69de29..0000000 diff --git a/.cmake/api/v1/query/cmakeFiles-v1 b/.cmake/api/v1/query/cmakeFiles-v1 deleted file mode 100644 index e69de29..0000000 diff --git a/.cmake/api/v1/query/codemodel-v2 b/.cmake/api/v1/query/codemodel-v2 deleted file mode 100644 index e69de29..0000000 diff --git a/.cmake/api/v1/query/toolchains-v1 b/.cmake/api/v1/query/toolchains-v1 deleted file mode 100644 index e69de29..0000000 diff --git a/.cmake/api/v1/reply/cache-v2-f48b714d1e4412ccc47b.json b/.cmake/api/v1/reply/cache-v2-f48b714d1e4412ccc47b.json deleted file mode 100644 index fe5103e..0000000 --- a/.cmake/api/v1/reply/cache-v2-f48b714d1e4412ccc47b.json +++ /dev/null @@ -1,1263 +0,0 @@ -{ - "entries" : - [ - { - "name" : "CMAKE_ADDR2LINE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/addr2line" - }, - { - "name" : "CMAKE_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/ar" - }, - { - "name" : "CMAKE_BUILD_TYPE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ..." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_CACHEFILE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "This is the directory where this CMakeCache.txt was created" - } - ], - "type" : "INTERNAL", - "value" : "/media/garrett/Storage/Projects/Hydrangea" - }, - { - "name" : "CMAKE_CACHE_MAJOR_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Major version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "3" - }, - { - "name" : "CMAKE_CACHE_MINOR_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Minor version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "26" - }, - { - "name" : "CMAKE_CACHE_PATCH_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Patch version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "4" - }, - { - "name" : "CMAKE_COLOR_DIAGNOSTICS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Enable colored diagnostics throughout." - } - ], - "type" : "BOOL", - "value" : "ON" - }, - { - "name" : "CMAKE_COLOR_MAKEFILE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Enable/Disable color output during build." - } - ], - "type" : "BOOL", - "value" : "ON" - }, - { - "name" : "CMAKE_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to CMake executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/bin/cmake" - }, - { - "name" : "CMAKE_CPACK_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to cpack program executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/bin/cpack" - }, - { - "name" : "CMAKE_CTEST_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to ctest program executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/bin/ctest" - }, - { - "name" : "CMAKE_CXX_COMPILER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "CXX compiler" - } - ], - "type" : "STRING", - "value" : "/usr/bin/c++" - }, - { - "name" : "CMAKE_CXX_COMPILER_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/gcc-ar-11" - }, - { - "name" : "CMAKE_CXX_COMPILER_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/gcc-ranlib-11" - }, - { - "name" : "CMAKE_CXX_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_CXX_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "-g" - }, - { - "name" : "CMAKE_CXX_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "-Os -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "-O3 -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "-O2 -g -DNDEBUG" - }, - { - "name" : "CMAKE_C_COMPILER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "C compiler" - } - ], - "type" : "STRING", - "value" : "/usr/bin/cc" - }, - { - "name" : "CMAKE_C_COMPILER_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/gcc-ar-11" - }, - { - "name" : "CMAKE_C_COMPILER_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/gcc-ranlib-11" - }, - { - "name" : "CMAKE_C_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_C_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "-g" - }, - { - "name" : "CMAKE_C_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "-Os -DNDEBUG" - }, - { - "name" : "CMAKE_C_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "-O3 -DNDEBUG" - }, - { - "name" : "CMAKE_C_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "-O2 -g -DNDEBUG" - }, - { - "name" : "CMAKE_DLLTOOL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "CMAKE_DLLTOOL-NOTFOUND" - }, - { - "name" : "CMAKE_EXECUTABLE_FORMAT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Executable file format" - } - ], - "type" : "INTERNAL", - "value" : "ELF" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXPORT_COMPILE_COMMANDS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Enable/Disable output of compile commands during generation." - } - ], - "type" : "BOOL", - "value" : "" - }, - { - "name" : "CMAKE_EXTRA_GENERATOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of external makefile project generator." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_FIND_PACKAGE_REDIRECTS_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake." - } - ], - "type" : "STATIC", - "value" : "/media/garrett/Storage/Projects/Hydrangea/CMakeFiles/pkgRedirects" - }, - { - "name" : "CMAKE_GENERATOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator." - } - ], - "type" : "INTERNAL", - "value" : "Unix Makefiles" - }, - { - "name" : "CMAKE_GENERATOR_INSTANCE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Generator instance identifier." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR_PLATFORM", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator platform." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR_TOOLSET", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator toolset." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_HOME_DIRECTORY", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Source directory with the top level CMakeLists.txt file for this project" - } - ], - "type" : "INTERNAL", - "value" : "/media/garrett/Storage/Projects/Hydrangea" - }, - { - "name" : "CMAKE_INSTALL_PREFIX", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Install path prefix, prepended onto install directories." - } - ], - "type" : "PATH", - "value" : "/usr/local" - }, - { - "name" : "CMAKE_INSTALL_SO_NO_EXE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Install .so files without execute permission." - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_LINKER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/ld" - }, - { - "name" : "CMAKE_MAKE_PROGRAM", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/gmake" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_NM", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/nm" - }, - { - "name" : "CMAKE_NUMBER_OF_MAKEFILES", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "number of local generators" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_OBJCOPY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/objcopy" - }, - { - "name" : "CMAKE_OBJDUMP", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/objdump" - }, - { - "name" : "CMAKE_PLATFORM_INFO_INITIALIZED", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Platform information initialized" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_PROJECT_DESCRIPTION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_HOMEPAGE_URL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_NAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "Hydrangea" - }, - { - "name" : "CMAKE_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/ranlib" - }, - { - "name" : "CMAKE_READELF", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/readelf" - }, - { - "name" : "CMAKE_ROOT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to CMake installation." - } - ], - "type" : "INTERNAL", - "value" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SKIP_INSTALL_RPATH", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If set, runtime paths are not added when installing shared libraries, but are added when building." - } - ], - "type" : "BOOL", - "value" : "NO" - }, - { - "name" : "CMAKE_SKIP_RPATH", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If set, runtime paths are not added when using shared libraries." - } - ], - "type" : "BOOL", - "value" : "NO" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STRIP", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/strip" - }, - { - "name" : "CMAKE_UNAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "uname command" - } - ], - "type" : "INTERNAL", - "value" : "/usr/bin/uname" - }, - { - "name" : "CMAKE_VERBOSE_MAKEFILE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo." - } - ], - "type" : "BOOL", - "value" : "FALSE" - }, - { - "name" : "Hydrangea_BINARY_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "/media/garrett/Storage/Projects/Hydrangea" - }, - { - "name" : "Hydrangea_IS_TOP_LEVEL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "ON" - }, - { - "name" : "Hydrangea_SOURCE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "/media/garrett/Storage/Projects/Hydrangea" - }, - { - "name" : "SDL2_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for SDL2." - } - ], - "type" : "PATH", - "value" : "/usr/lib/x86_64-linux-gnu/cmake/SDL2" - }, - { - "name" : "SDL2_GPU_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for SDL2_GPU." - } - ], - "type" : "PATH", - "value" : "SDL2_GPU_DIR-NOTFOUND" - }, - { - "name" : "SDL2_LIBRARY", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "SDL2_LIBRARY-NOTFOUND" - }, - { - "name" : "SDL2_gpu_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for SDL2_gpu." - } - ], - "type" : "PATH", - "value" : "SDL2_gpu_DIR-NOTFOUND" - }, - { - "name" : "SDL_GPU_LIBRARY", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/local/lib/libSDL2_gpu.so" - }, - { - "name" : "_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "linker supports push/pop state" - } - ], - "type" : "INTERNAL", - "value" : "TRUE" - } - ], - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } -} diff --git a/.cmake/api/v1/reply/cmakeFiles-v1-13576cbc081bae598543.json b/.cmake/api/v1/reply/cmakeFiles-v1-13576cbc081bae598543.json deleted file mode 100644 index 1ebb327..0000000 --- a/.cmake/api/v1/reply/cmakeFiles-v1-13576cbc081bae598543.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "inputs" : - [ - { - "path" : "CMakeLists.txt" - }, - { - "path" : "CMakeFiles/3.26.4/CMakeSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeSystemSpecificInitialize.cmake" - }, - { - "path" : "CMakeFiles/3.26.4/CMakeCCompiler.cmake" - }, - { - "path" : "CMakeFiles/3.26.4/CMakeCXXCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeSystemSpecificInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeGenericSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeInitializeConfigs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Platform/Linux.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Platform/UnixPaths.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeCInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeLanguageInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Compiler/GNU-C.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Compiler/GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Compiler/CMakeCommonCompilerMacros.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Platform/Linux-GNU-C.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Platform/Linux-GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeCommonLanguageInclude.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeCXXInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeLanguageInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Compiler/GNU-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Compiler/GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Platform/Linux-GNU-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/Platform/Linux-GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26/Modules/CMakeCommonLanguageInclude.cmake" - }, - { - "isExternal" : true, - "path" : "/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config-version.cmake" - }, - { - "isExternal" : true, - "path" : "/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake" - } - ], - "kind" : "cmakeFiles", - "paths" : - { - "build" : "/media/garrett/Storage/Projects/Hydrangea", - "source" : "/media/garrett/Storage/Projects/Hydrangea" - }, - "version" : - { - "major" : 1, - "minor" : 0 - } -} diff --git a/.cmake/api/v1/reply/codemodel-v2-330b5f213693ec063c5e.json b/.cmake/api/v1/reply/codemodel-v2-330b5f213693ec063c5e.json deleted file mode 100644 index 23a41ae..0000000 --- a/.cmake/api/v1/reply/codemodel-v2-330b5f213693ec063c5e.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "configurations" : - [ - { - "directories" : - [ - { - "build" : ".", - "jsonFile" : "directory-.-f5ebdc15457944623624.json", - "minimumCMakeVersion" : - { - "string" : "3.22.1" - }, - "projectIndex" : 0, - "source" : ".", - "targetIndexes" : - [ - 0 - ] - } - ], - "name" : "", - "projects" : - [ - { - "directoryIndexes" : - [ - 0 - ], - "name" : "Hydrangea", - "targetIndexes" : - [ - 0 - ] - } - ], - "targets" : - [ - { - "directoryIndex" : 0, - "id" : "game::@6890427a1f51a3e7e1df", - "jsonFile" : "target-game-c928b7f21fd872f316af.json", - "name" : "game", - "projectIndex" : 0 - } - ] - } - ], - "kind" : "codemodel", - "paths" : - { - "build" : "/media/garrett/Storage/Projects/Hydrangea", - "source" : "/media/garrett/Storage/Projects/Hydrangea" - }, - "version" : - { - "major" : 2, - "minor" : 5 - } -} diff --git a/.cmake/api/v1/reply/directory-.-f5ebdc15457944623624.json b/.cmake/api/v1/reply/directory-.-f5ebdc15457944623624.json deleted file mode 100644 index 3a67af9..0000000 --- a/.cmake/api/v1/reply/directory-.-f5ebdc15457944623624.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "backtraceGraph" : - { - "commands" : [], - "files" : [], - "nodes" : [] - }, - "installers" : [], - "paths" : - { - "build" : ".", - "source" : "." - } -} diff --git a/.cmake/api/v1/reply/index-2023-10-03T05-15-15-0196.json b/.cmake/api/v1/reply/index-2023-10-03T05-15-15-0196.json deleted file mode 100644 index 46d2421..0000000 --- a/.cmake/api/v1/reply/index-2023-10-03T05-15-15-0196.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "cmake" : - { - "generator" : - { - "multiConfig" : false, - "name" : "Unix Makefiles" - }, - "paths" : - { - "cmake" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/bin/cmake", - "cpack" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/bin/cpack", - "ctest" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/bin/ctest", - "root" : "/home/garrett/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/232.9921.42/bin/cmake/linux/x64/share/cmake-3.26" - }, - "version" : - { - "isDirty" : false, - "major" : 3, - "minor" : 26, - "patch" : 4, - "string" : "3.26.4", - "suffix" : "" - } - }, - "objects" : - [ - { - "jsonFile" : "codemodel-v2-330b5f213693ec063c5e.json", - "kind" : "codemodel", - "version" : - { - "major" : 2, - "minor" : 5 - } - }, - { - "jsonFile" : "cache-v2-f48b714d1e4412ccc47b.json", - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } - }, - { - "jsonFile" : "cmakeFiles-v1-13576cbc081bae598543.json", - "kind" : "cmakeFiles", - "version" : - { - "major" : 1, - "minor" : 0 - } - }, - { - "jsonFile" : "toolchains-v1-99265b04de7ada3aac9e.json", - "kind" : "toolchains", - "version" : - { - "major" : 1, - "minor" : 0 - } - } - ], - "reply" : - { - "cache-v2" : - { - "jsonFile" : "cache-v2-f48b714d1e4412ccc47b.json", - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } - }, - "cmakeFiles-v1" : - { - "jsonFile" : "cmakeFiles-v1-13576cbc081bae598543.json", - "kind" : "cmakeFiles", - "version" : - { - "major" : 1, - "minor" : 0 - } - }, - "codemodel-v2" : - { - "jsonFile" : "codemodel-v2-330b5f213693ec063c5e.json", - "kind" : "codemodel", - "version" : - { - "major" : 2, - "minor" : 5 - } - }, - "toolchains-v1" : - { - "jsonFile" : "toolchains-v1-99265b04de7ada3aac9e.json", - "kind" : "toolchains", - "version" : - { - "major" : 1, - "minor" : 0 - } - } - } -} diff --git a/.cmake/api/v1/reply/target-game-c928b7f21fd872f316af.json b/.cmake/api/v1/reply/target-game-c928b7f21fd872f316af.json deleted file mode 100644 index 790a3aa..0000000 --- a/.cmake/api/v1/reply/target-game-c928b7f21fd872f316af.json +++ /dev/null @@ -1,598 +0,0 @@ -{ - "artifacts" : - [ - { - "path" : "game" - } - ], - "backtrace" : 1, - "backtraceGraph" : - { - "commands" : - [ - "add_executable", - "link_directories", - "target_link_libraries", - "include_directories" - ], - "files" : - [ - "CMakeLists.txt" - ], - "nodes" : - [ - { - "file" : 0 - }, - { - "command" : 0, - "file" : 0, - "line" : 24, - "parent" : 0 - }, - { - "command" : 1, - "file" : 0, - "line" : 14, - "parent" : 0 - }, - { - "command" : 2, - "file" : 0, - "line" : 30, - "parent" : 0 - }, - { - "command" : 2, - "file" : 0, - "line" : 31, - "parent" : 0 - }, - { - "command" : 3, - "file" : 0, - "line" : 10, - "parent" : 0 - }, - { - "command" : 3, - "file" : 0, - "line" : 18, - "parent" : 0 - } - ] - }, - "compileGroups" : - [ - { - "compileCommandFragments" : - [ - { - "fragment" : "-std=gnu++14 -fdiagnostics-color=always" - } - ], - "includes" : - [ - { - "backtrace" : 5, - "path" : "/usr/include/SDL2" - }, - { - "backtrace" : 6, - "path" : "/media/garrett/Storage/Projects/Hydrangea/include" - } - ], - "language" : "CXX", - "languageStandard" : - { - "backtraces" : - [ - 1 - ], - "standard" : "14" - }, - "sourceIndexes" : - [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55 - ] - } - ], - "id" : "game::@6890427a1f51a3e7e1df", - "link" : - { - "commandFragments" : - [ - { - "fragment" : "", - "role" : "flags" - }, - { - "backtrace" : 2, - "fragment" : "-L/src", - "role" : "libraryPath" - }, - { - "fragment" : "-Wl,-rpath,/src", - "role" : "libraries" - }, - { - "backtrace" : 3, - "fragment" : "-L/usr/lib/x86_64-linux-gnu -lSDL2", - "role" : "libraries" - }, - { - "backtrace" : 4, - "fragment" : "-lSDL2_gpu", - "role" : "libraries" - } - ], - "language" : "CXX" - }, - "name" : "game", - "nameOnDisk" : "game", - "paths" : - { - "build" : ".", - "source" : "." - }, - "sourceGroups" : - [ - { - "name" : "Source Files", - "sourceIndexes" : - [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55 - ] - } - ], - "sources" : - [ - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/game.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/input_manager.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/main.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/node.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/player.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/scene.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/sprite.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/static_body.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/util.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/window.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_broad_phase.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_chain_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_circle_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collide_circle.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collide_edge.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collide_polygon.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collision.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_distance.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_dynamic_tree.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_edge_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_polygon_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_time_of_impact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_block_allocator.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_draw.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_math.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_settings.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_stack_allocator.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_timer.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_body.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_chain_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_chain_polygon_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_contact_manager.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_contact_solver.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_distance_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_edge_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_edge_polygon_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_fixture.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_friction_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_gear_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_island.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_motor_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_mouse_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_polygon_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_polygon_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_prismatic_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_pulley_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_revolute_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_weld_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_wheel_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_world.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_world_callbacks.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/rope/b2_rope.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/fmt/format.cc", - "sourceGroupIndex" : 0 - } - ], - "type" : "EXECUTABLE" -} diff --git a/.cmake/api/v1/reply/toolchains-v1-99265b04de7ada3aac9e.json b/.cmake/api/v1/reply/toolchains-v1-99265b04de7ada3aac9e.json deleted file mode 100644 index ae326b1..0000000 --- a/.cmake/api/v1/reply/toolchains-v1-99265b04de7ada3aac9e.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "kind" : "toolchains", - "toolchains" : - [ - { - "compiler" : - { - "id" : "GNU", - "implicit" : - { - "includeDirectories" : - [ - "/usr/lib/gcc/x86_64-linux-gnu/11/include", - "/usr/local/include", - "/usr/include/x86_64-linux-gnu", - "/usr/include" - ], - "linkDirectories" : - [ - "/usr/lib/gcc/x86_64-linux-gnu/11", - "/usr/lib/x86_64-linux-gnu", - "/usr/lib", - "/lib/x86_64-linux-gnu", - "/lib" - ], - "linkFrameworkDirectories" : [], - "linkLibraries" : - [ - "gcc", - "gcc_s", - "c", - "gcc", - "gcc_s" - ] - }, - "path" : "/usr/bin/cc", - "version" : "11.4.0" - }, - "language" : "C", - "sourceFileExtensions" : - [ - "c", - "m" - ] - }, - { - "compiler" : - { - "id" : "GNU", - "implicit" : - { - "includeDirectories" : - [ - "/usr/include/c++/11", - "/usr/include/x86_64-linux-gnu/c++/11", - "/usr/include/c++/11/backward", - "/usr/lib/gcc/x86_64-linux-gnu/11/include", - "/usr/local/include", - "/usr/include/x86_64-linux-gnu", - "/usr/include" - ], - "linkDirectories" : - [ - "/usr/lib/gcc/x86_64-linux-gnu/11", - "/usr/lib/x86_64-linux-gnu", - "/usr/lib", - "/lib/x86_64-linux-gnu", - "/lib" - ], - "linkFrameworkDirectories" : [], - "linkLibraries" : - [ - "stdc++", - "m", - "gcc_s", - "gcc", - "c", - "gcc_s", - "gcc" - ] - }, - "path" : "/usr/bin/c++", - "version" : "11.4.0" - }, - "language" : "CXX", - "sourceFileExtensions" : - [ - "C", - "M", - "c++", - "cc", - "cpp", - "cxx", - "mm", - "mpp", - "CPP", - "ixx", - "cppm" - ] - } - ], - "version" : - { - "major" : 1, - "minor" : 0 - } -} diff --git a/.gitignore b/.gitignore index 23b589a..b434c2a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,20 @@ +# CMake and make files cmake_install.cmake CMakeCache.txt CMakeFiles/ CMakeTmp/ Makefile +build/ + +# .folders .vscode/ -compile.sh +.cmake/ +.idea/ + +# scripts, execs, etc +build.sh +test.cpp game notes/ -Testing/ \ No newline at end of file +Testing/ +testing/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/Hydrangea.iml b/.idea/Hydrangea.iml deleted file mode 100644 index f08604b..0000000 --- a/.idea/Hydrangea.iml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index efbbd35..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 8651fbb..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 54206b4..5a543a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,19 +17,18 @@ set(SDL_GPU_LIBS SDL2_gpu ${GL_LIBRARIES}) # Then bring in the local source files and headers into the project include_directories(include) -file(GLOB SOURCES "src/*.cpp") # Base engine source files -file(GLOB BOX2D_SOURCES "src/box2d/*/*.cpp") # box2d Physics engine -file(GLOB FMT_SOURCES "src/fmt/*.cc") # fmt String formatter lib +file(GLOB_RECURSE SOURCES "src/*.cpp") # Base engine source files +file(GLOB_RECURSE BOX2D_SOURCES "src/box2d/*.cpp") # box2d Physics engine +file(GLOB_RECURSE FMT_SOURCES "src/fmt/*.cc") # fmt String formatter lib add_executable( ${OUT_NAME} ${SOURCES} ${BOX2D_SOURCES} ${FMT_SOURCES} - ) +) target_link_libraries(${OUT_NAME} ${SDL2_LIBRARIES}) target_link_libraries(${OUT_NAME} ${SDL_GPU_LIBS}) -#target_link_libraries(${OUT_NAME} box2d) get_target_property(OUT ${OUT_NAME} LINK_LIBRARIES) message(STATUS ${OUT}) diff --git a/build.sh b/build.sh deleted file mode 100755 index dc8d919..0000000 --- a/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -export LD_LIBRARY_PATH="/usr/local/lib" -cmake CMakeLists.txt -make -j 5 - -if [ "$1" == "play" ]; then - ./game -fi \ No newline at end of file diff --git a/build/.cmake/api/v1/query/client-vscode/query.json b/build/.cmake/api/v1/query/client-vscode/query.json deleted file mode 100644 index 82bb964..0000000 --- a/build/.cmake/api/v1/query/client-vscode/query.json +++ /dev/null @@ -1 +0,0 @@ -{"requests":[{"kind":"cache","version":2},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1},{"kind":"cmakeFiles","version":1}]} \ No newline at end of file diff --git a/build/.cmake/api/v1/reply/cache-v2-5b5f3a9c60370adcf8ab.json b/build/.cmake/api/v1/reply/cache-v2-5b5f3a9c60370adcf8ab.json deleted file mode 100644 index eb903e9..0000000 --- a/build/.cmake/api/v1/reply/cache-v2-5b5f3a9c60370adcf8ab.json +++ /dev/null @@ -1,1159 +0,0 @@ -{ - "entries" : - [ - { - "name" : "CMAKE_ADDR2LINE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-addr2line" - }, - { - "name" : "CMAKE_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-ar" - }, - { - "name" : "CMAKE_BUILD_TYPE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "STRING", - "value" : "Debug" - }, - { - "name" : "CMAKE_CACHEFILE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "This is the directory where this CMakeCache.txt was created" - } - ], - "type" : "INTERNAL", - "value" : "/media/garrett/Storage/Projects/Hydrangea/build" - }, - { - "name" : "CMAKE_CACHE_MAJOR_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Major version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "3" - }, - { - "name" : "CMAKE_CACHE_MINOR_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Minor version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "22" - }, - { - "name" : "CMAKE_CACHE_PATCH_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Patch version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to CMake executable." - } - ], - "type" : "INTERNAL", - "value" : "/usr/bin/cmake" - }, - { - "name" : "CMAKE_CPACK_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to cpack program executable." - } - ], - "type" : "INTERNAL", - "value" : "/usr/bin/cpack" - }, - { - "name" : "CMAKE_CTEST_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to ctest program executable." - } - ], - "type" : "INTERNAL", - "value" : "/usr/bin/ctest" - }, - { - "name" : "CMAKE_CXX_COMPILER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-g++-11" - }, - { - "name" : "CMAKE_CXX_COMPILER_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-gcc-ar-11" - }, - { - "name" : "CMAKE_CXX_COMPILER_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-gcc-ranlib-11" - }, - { - "name" : "CMAKE_CXX_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_CXX_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "-g" - }, - { - "name" : "CMAKE_CXX_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "-Os -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "-O3 -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "-O2 -g -DNDEBUG" - }, - { - "name" : "CMAKE_C_COMPILER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-gcc-11" - }, - { - "name" : "CMAKE_C_COMPILER_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-gcc-ar-11" - }, - { - "name" : "CMAKE_C_COMPILER_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-gcc-ranlib-11" - }, - { - "name" : "CMAKE_C_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_C_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "-g" - }, - { - "name" : "CMAKE_C_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "-Os -DNDEBUG" - }, - { - "name" : "CMAKE_C_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "-O3 -DNDEBUG" - }, - { - "name" : "CMAKE_C_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the C compiler during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "-O2 -g -DNDEBUG" - }, - { - "name" : "CMAKE_DLLTOOL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "CMAKE_DLLTOOL-NOTFOUND" - }, - { - "name" : "CMAKE_EXECUTABLE_FORMAT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Executable file format" - } - ], - "type" : "INTERNAL", - "value" : "ELF" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXPORT_COMPILE_COMMANDS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "BOOL", - "value" : "TRUE" - }, - { - "name" : "CMAKE_EXTRA_GENERATOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of external makefile project generator." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator." - } - ], - "type" : "INTERNAL", - "value" : "Ninja" - }, - { - "name" : "CMAKE_GENERATOR_INSTANCE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Generator instance identifier." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR_PLATFORM", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator platform." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR_TOOLSET", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator toolset." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_HOME_DIRECTORY", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Source directory with the top level CMakeLists.txt file for this project" - } - ], - "type" : "INTERNAL", - "value" : "/media/garrett/Storage/Projects/Hydrangea" - }, - { - "name" : "CMAKE_INSTALL_PREFIX", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Install path prefix, prepended onto install directories." - } - ], - "type" : "PATH", - "value" : "/usr/local" - }, - { - "name" : "CMAKE_INSTALL_SO_NO_EXE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Install .so files without execute permission." - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_LINKER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-ld" - }, - { - "name" : "CMAKE_MAKE_PROGRAM", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Program used to build from build.ninja files." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/ninja" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_NM", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-nm" - }, - { - "name" : "CMAKE_NUMBER_OF_MAKEFILES", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "number of local generators" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_OBJCOPY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-objcopy" - }, - { - "name" : "CMAKE_OBJDUMP", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-objdump" - }, - { - "name" : "CMAKE_PLATFORM_INFO_INITIALIZED", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Platform information initialized" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_PROJECT_DESCRIPTION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_HOMEPAGE_URL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_NAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "Hydrangea" - }, - { - "name" : "CMAKE_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-ranlib" - }, - { - "name" : "CMAKE_READELF", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-readelf" - }, - { - "name" : "CMAKE_ROOT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to CMake installation." - } - ], - "type" : "INTERNAL", - "value" : "/usr/share/cmake-3.22" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SKIP_INSTALL_RPATH", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If set, runtime paths are not added when installing shared libraries, but are added when building." - } - ], - "type" : "BOOL", - "value" : "NO" - }, - { - "name" : "CMAKE_SKIP_RPATH", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If set, runtime paths are not added when using shared libraries." - } - ], - "type" : "BOOL", - "value" : "NO" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STRIP", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/bin/x86_64-linux-gnu-strip" - }, - { - "name" : "CMAKE_UNAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "uname command" - } - ], - "type" : "INTERNAL", - "value" : "/usr/bin/uname" - }, - { - "name" : "CMAKE_VERBOSE_MAKEFILE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo." - } - ], - "type" : "BOOL", - "value" : "FALSE" - }, - { - "name" : "Hydrangea_BINARY_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "/media/garrett/Storage/Projects/Hydrangea/build" - }, - { - "name" : "Hydrangea_IS_TOP_LEVEL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "ON" - }, - { - "name" : "Hydrangea_SOURCE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "/media/garrett/Storage/Projects/Hydrangea" - }, - { - "name" : "SDL2_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for SDL2." - } - ], - "type" : "PATH", - "value" : "/usr/lib/x86_64-linux-gnu/cmake/SDL2" - } - ], - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } -} diff --git a/build/.cmake/api/v1/reply/cmakeFiles-v1-cef2c3de0490094bf669.json b/build/.cmake/api/v1/reply/cmakeFiles-v1-cef2c3de0490094bf669.json deleted file mode 100644 index f5b4330..0000000 --- a/build/.cmake/api/v1/reply/cmakeFiles-v1-cef2c3de0490094bf669.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "inputs" : - [ - { - "path" : "CMakeLists.txt" - }, - { - "isGenerated" : true, - "path" : "build/CMakeFiles/3.22.1/CMakeSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeSystemSpecificInitialize.cmake" - }, - { - "isGenerated" : true, - "path" : "build/CMakeFiles/3.22.1/CMakeCCompiler.cmake" - }, - { - "isGenerated" : true, - "path" : "build/CMakeFiles/3.22.1/CMakeCXXCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeSystemSpecificInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeGenericSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeInitializeConfigs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Platform/Linux.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Platform/UnixPaths.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeCInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeLanguageInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Compiler/GNU-C.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Compiler/GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Compiler/CMakeCommonCompilerMacros.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Platform/Linux-GNU-C.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Platform/Linux-GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeCommonLanguageInclude.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeCXXInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeLanguageInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Compiler/GNU-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Compiler/GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Platform/Linux-GNU-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/Platform/Linux-GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/usr/share/cmake-3.22/Modules/CMakeCommonLanguageInclude.cmake" - }, - { - "isExternal" : true, - "path" : "/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config-version.cmake" - }, - { - "isExternal" : true, - "path" : "/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake" - } - ], - "kind" : "cmakeFiles", - "paths" : - { - "build" : "/media/garrett/Storage/Projects/Hydrangea/build", - "source" : "/media/garrett/Storage/Projects/Hydrangea" - }, - "version" : - { - "major" : 1, - "minor" : 0 - } -} diff --git a/build/.cmake/api/v1/reply/codemodel-v2-3dd0101c350a8d407562.json b/build/.cmake/api/v1/reply/codemodel-v2-3dd0101c350a8d407562.json deleted file mode 100644 index c6ede3f..0000000 --- a/build/.cmake/api/v1/reply/codemodel-v2-3dd0101c350a8d407562.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "configurations" : - [ - { - "directories" : - [ - { - "build" : ".", - "jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json", - "minimumCMakeVersion" : - { - "string" : "3.22.1" - }, - "projectIndex" : 0, - "source" : ".", - "targetIndexes" : - [ - 0 - ] - } - ], - "name" : "Debug", - "projects" : - [ - { - "directoryIndexes" : - [ - 0 - ], - "name" : "Hydrangea", - "targetIndexes" : - [ - 0 - ] - } - ], - "targets" : - [ - { - "directoryIndex" : 0, - "id" : "game::@6890427a1f51a3e7e1df", - "jsonFile" : "target-game-Debug-9df99ffdcc4bbe325dba.json", - "name" : "game", - "projectIndex" : 0 - } - ] - } - ], - "kind" : "codemodel", - "paths" : - { - "build" : "/media/garrett/Storage/Projects/Hydrangea/build", - "source" : "/media/garrett/Storage/Projects/Hydrangea" - }, - "version" : - { - "major" : 2, - "minor" : 3 - } -} diff --git a/build/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json b/build/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json deleted file mode 100644 index 3a67af9..0000000 --- a/build/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "backtraceGraph" : - { - "commands" : [], - "files" : [], - "nodes" : [] - }, - "installers" : [], - "paths" : - { - "build" : ".", - "source" : "." - } -} diff --git a/build/.cmake/api/v1/reply/index-2023-12-09T22-09-46-0659.json b/build/.cmake/api/v1/reply/index-2023-12-09T22-09-46-0659.json deleted file mode 100644 index 308dc39..0000000 --- a/build/.cmake/api/v1/reply/index-2023-12-09T22-09-46-0659.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "cmake" : - { - "generator" : - { - "multiConfig" : false, - "name" : "Ninja" - }, - "paths" : - { - "cmake" : "/usr/bin/cmake", - "cpack" : "/usr/bin/cpack", - "ctest" : "/usr/bin/ctest", - "root" : "/usr/share/cmake-3.22" - }, - "version" : - { - "isDirty" : false, - "major" : 3, - "minor" : 22, - "patch" : 1, - "string" : "3.22.1", - "suffix" : "" - } - }, - "objects" : - [ - { - "jsonFile" : "codemodel-v2-3dd0101c350a8d407562.json", - "kind" : "codemodel", - "version" : - { - "major" : 2, - "minor" : 3 - } - }, - { - "jsonFile" : "cache-v2-5b5f3a9c60370adcf8ab.json", - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } - }, - { - "jsonFile" : "cmakeFiles-v1-cef2c3de0490094bf669.json", - "kind" : "cmakeFiles", - "version" : - { - "major" : 1, - "minor" : 0 - } - }, - { - "jsonFile" : "toolchains-v1-50db6e0713f69d932e1c.json", - "kind" : "toolchains", - "version" : - { - "major" : 1, - "minor" : 0 - } - } - ], - "reply" : - { - "client-vscode" : - { - "query.json" : - { - "requests" : - [ - { - "kind" : "cache", - "version" : 2 - }, - { - "kind" : "codemodel", - "version" : 2 - }, - { - "kind" : "toolchains", - "version" : 1 - }, - { - "kind" : "cmakeFiles", - "version" : 1 - } - ], - "responses" : - [ - { - "jsonFile" : "cache-v2-5b5f3a9c60370adcf8ab.json", - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } - }, - { - "jsonFile" : "codemodel-v2-3dd0101c350a8d407562.json", - "kind" : "codemodel", - "version" : - { - "major" : 2, - "minor" : 3 - } - }, - { - "jsonFile" : "toolchains-v1-50db6e0713f69d932e1c.json", - "kind" : "toolchains", - "version" : - { - "major" : 1, - "minor" : 0 - } - }, - { - "jsonFile" : "cmakeFiles-v1-cef2c3de0490094bf669.json", - "kind" : "cmakeFiles", - "version" : - { - "major" : 1, - "minor" : 0 - } - } - ] - } - } - } -} diff --git a/build/.cmake/api/v1/reply/target-game-Debug-9df99ffdcc4bbe325dba.json b/build/.cmake/api/v1/reply/target-game-Debug-9df99ffdcc4bbe325dba.json deleted file mode 100644 index 4c0a179..0000000 --- a/build/.cmake/api/v1/reply/target-game-Debug-9df99ffdcc4bbe325dba.json +++ /dev/null @@ -1,613 +0,0 @@ -{ - "artifacts" : - [ - { - "path" : "game" - } - ], - "backtrace" : 1, - "backtraceGraph" : - { - "commands" : - [ - "add_executable", - "link_directories", - "target_link_libraries", - "include_directories" - ], - "files" : - [ - "CMakeLists.txt" - ], - "nodes" : - [ - { - "file" : 0 - }, - { - "command" : 0, - "file" : 0, - "line" : 24, - "parent" : 0 - }, - { - "command" : 1, - "file" : 0, - "line" : 14, - "parent" : 0 - }, - { - "command" : 2, - "file" : 0, - "line" : 30, - "parent" : 0 - }, - { - "command" : 2, - "file" : 0, - "line" : 31, - "parent" : 0 - }, - { - "command" : 3, - "file" : 0, - "line" : 10, - "parent" : 0 - }, - { - "command" : 3, - "file" : 0, - "line" : 18, - "parent" : 0 - } - ] - }, - "compileGroups" : - [ - { - "compileCommandFragments" : - [ - { - "fragment" : "-g" - }, - { - "fragment" : "-std=gnu++14" - } - ], - "includes" : - [ - { - "backtrace" : 5, - "path" : "/usr/include/SDL2" - }, - { - "backtrace" : 6, - "path" : "/media/garrett/Storage/Projects/Hydrangea/include" - } - ], - "language" : "CXX", - "languageStandard" : - { - "backtraces" : - [ - 1 - ], - "standard" : "14" - }, - "sourceIndexes" : - [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56 - ] - } - ], - "id" : "game::@6890427a1f51a3e7e1df", - "link" : - { - "commandFragments" : - [ - { - "fragment" : "-g", - "role" : "flags" - }, - { - "fragment" : "", - "role" : "flags" - }, - { - "backtrace" : 2, - "fragment" : "-L/src", - "role" : "libraryPath" - }, - { - "fragment" : "-Wl,-rpath,/src", - "role" : "libraries" - }, - { - "backtrace" : 3, - "fragment" : "-L/usr/lib/x86_64-linux-gnu -lSDL2", - "role" : "libraries" - }, - { - "backtrace" : 4, - "fragment" : "-lSDL2_gpu", - "role" : "libraries" - } - ], - "language" : "CXX" - }, - "name" : "game", - "nameOnDisk" : "game", - "paths" : - { - "build" : ".", - "source" : "." - }, - "sourceGroups" : - [ - { - "name" : "Source Files", - "sourceIndexes" : - [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56 - ] - } - ], - "sources" : - [ - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/dynamic_body.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/game.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/input_manager.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/main.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/node.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/player.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/scene.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/sprite.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/static_body.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/util.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/window.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_broad_phase.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_chain_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_circle_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collide_circle.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collide_edge.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collide_polygon.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_collision.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_distance.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_dynamic_tree.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_edge_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_polygon_shape.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/collision/b2_time_of_impact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_block_allocator.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_draw.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_math.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_settings.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_stack_allocator.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/common/b2_timer.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_body.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_chain_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_chain_polygon_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_contact_manager.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_contact_solver.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_distance_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_edge_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_edge_polygon_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_fixture.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_friction_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_gear_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_island.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_motor_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_mouse_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_polygon_circle_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_polygon_contact.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_prismatic_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_pulley_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_revolute_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_weld_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_wheel_joint.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_world.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/dynamics/b2_world_callbacks.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/box2d/rope/b2_rope.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 1, - "compileGroupIndex" : 0, - "path" : "src/fmt/format.cc", - "sourceGroupIndex" : 0 - } - ], - "type" : "EXECUTABLE" -} diff --git a/build/.cmake/api/v1/reply/toolchains-v1-50db6e0713f69d932e1c.json b/build/.cmake/api/v1/reply/toolchains-v1-50db6e0713f69d932e1c.json deleted file mode 100644 index 40e951d..0000000 --- a/build/.cmake/api/v1/reply/toolchains-v1-50db6e0713f69d932e1c.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "kind" : "toolchains", - "toolchains" : - [ - { - "compiler" : - { - "id" : "GNU", - "implicit" : - { - "includeDirectories" : - [ - "/usr/lib/gcc/x86_64-linux-gnu/11/include", - "/usr/local/include", - "/usr/include/x86_64-linux-gnu", - "/usr/include" - ], - "linkDirectories" : - [ - "/usr/lib/gcc/x86_64-linux-gnu/11", - "/usr/lib/x86_64-linux-gnu", - "/usr/lib", - "/lib/x86_64-linux-gnu", - "/lib" - ], - "linkFrameworkDirectories" : [], - "linkLibraries" : - [ - "gcc", - "gcc_s", - "c", - "gcc", - "gcc_s" - ] - }, - "path" : "/bin/x86_64-linux-gnu-gcc-11", - "version" : "11.4.0" - }, - "language" : "C", - "sourceFileExtensions" : - [ - "c", - "m" - ] - }, - { - "compiler" : - { - "id" : "GNU", - "implicit" : - { - "includeDirectories" : - [ - "/usr/include/c++/11", - "/usr/include/x86_64-linux-gnu/c++/11", - "/usr/include/c++/11/backward", - "/usr/lib/gcc/x86_64-linux-gnu/11/include", - "/usr/local/include", - "/usr/include/x86_64-linux-gnu", - "/usr/include" - ], - "linkDirectories" : - [ - "/usr/lib/gcc/x86_64-linux-gnu/11", - "/usr/lib/x86_64-linux-gnu", - "/usr/lib", - "/lib/x86_64-linux-gnu", - "/lib" - ], - "linkFrameworkDirectories" : [], - "linkLibraries" : - [ - "stdc++", - "m", - "gcc_s", - "gcc", - "c", - "gcc_s", - "gcc" - ] - }, - "path" : "/bin/x86_64-linux-gnu-g++-11", - "version" : "11.4.0" - }, - "language" : "CXX", - "sourceFileExtensions" : - [ - "C", - "M", - "c++", - "cc", - "cpp", - "cxx", - "mm", - "mpp", - "CPP", - "ixx", - "cppm" - ] - } - ], - "version" : - { - "major" : 1, - "minor" : 0 - } -} diff --git a/build/.ninja_deps b/build/.ninja_deps deleted file mode 100644 index 2841b411a038dce7227b4359e50c10df86ed445f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67260 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 diff --git a/build/.ninja_log b/build/.ninja_log deleted file mode 100644 index 9f43853..0000000 --- a/build/.ninja_log +++ /dev/null @@ -1,58 +0,0 @@ -# ninja log v5 -4 247 1702159838973791840 CMakeFiles/game.dir/src/box2d/collision/b2_broad_phase.cpp.o 2584c67db79bc7f6 -7 253 1702159838981791836 CMakeFiles/game.dir/src/box2d/collision/b2_circle_shape.cpp.o f0cd7e99d5f1b2f6 -6 303 1702159839029791810 CMakeFiles/game.dir/src/box2d/collision/b2_chain_shape.cpp.o f16c4b982bdb0256 -248 550 1702159839277791678 CMakeFiles/game.dir/src/box2d/collision/b2_collide_circle.cpp.o 5018c314eb6f805c -3 571 1702159839289791672 CMakeFiles/game.dir/src/util.cpp.o c1bdceb11ac46020 -303 607 1702159839333791648 CMakeFiles/game.dir/src/box2d/collision/b2_collide_polygon.cpp.o ee45cc40c07de0d1 -253 614 1702159839337791647 CMakeFiles/game.dir/src/box2d/collision/b2_collide_edge.cpp.o e62a6fcf34355c52 -0 708 1702159839433791596 CMakeFiles/game.dir/src/dynamic_body.cpp.o 190c439dcd7ca4c8 -550 867 1702159839593791509 CMakeFiles/game.dir/src/box2d/collision/b2_collision.cpp.o 11276083ca1c7f45 -572 877 1702159839601791506 CMakeFiles/game.dir/src/box2d/collision/b2_distance.cpp.o 64b29720677838bf -614 965 1702159839693791457 CMakeFiles/game.dir/src/box2d/collision/b2_edge_shape.cpp.o f55ea97c9fc7b9c -708 1027 1702159839753791424 CMakeFiles/game.dir/src/box2d/collision/b2_polygon_shape.cpp.o 864d525ee344138f -877 1037 1702159839765791419 CMakeFiles/game.dir/src/box2d/common/b2_block_allocator.cpp.o aa2fe16437d0eab1 -608 1050 1702159839777791412 CMakeFiles/game.dir/src/box2d/collision/b2_dynamic_tree.cpp.o 3190c0909911317a -966 1137 1702159839865791364 CMakeFiles/game.dir/src/box2d/common/b2_draw.cpp.o 460ab1093b305604 -1037 1211 1702159839933791329 CMakeFiles/game.dir/src/box2d/common/b2_settings.cpp.o 35f60214dc2f6162 -1027 1216 1702159839941791325 CMakeFiles/game.dir/src/box2d/common/b2_math.cpp.o 59e10962e30bc3b -1137 1237 1702159839953791318 CMakeFiles/game.dir/src/box2d/common/b2_timer.cpp.o e624a175973223a8 -867 1276 1702159840001791292 CMakeFiles/game.dir/src/box2d/collision/b2_time_of_impact.cpp.o fb4c74b917d01306 -2 1312 1702159840037791273 CMakeFiles/game.dir/src/player.cpp.o f70983e79251fd0c -1050 1349 1702159840077791251 CMakeFiles/game.dir/src/box2d/common/b2_stack_allocator.cpp.o 48c6e36f3e22d80 -1 1391 1702159840117791231 CMakeFiles/game.dir/src/node.cpp.o 2d6c346af5ab59d3 -1 1449 1702159840177791198 CMakeFiles/game.dir/src/input_manager.cpp.o 9679f5afa764ce3c -0 1455 1702159840173791201 CMakeFiles/game.dir/src/game.cpp.o afcd93a026538e93 -1216 1492 1702159840221791175 CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_circle_contact.cpp.o deee820bad566c5 -2 1506 1702159840233791168 CMakeFiles/game.dir/src/scene.cpp.o 498f0987c94048bf -1237 1523 1702159840249791160 CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_polygon_contact.cpp.o 4c1ba6cb10da1c61 -1 1525 1702159840253791157 CMakeFiles/game.dir/src/main.cpp.o 8fb557ab0446f19b -1211 1541 1702159840269791149 CMakeFiles/game.dir/src/box2d/dynamics/b2_body.cpp.o f169fb3d58f132d0 -2 1549 1702159840269791149 CMakeFiles/game.dir/src/static_body.cpp.o 5165020241c22f35 -1276 1555 1702159840269791149 CMakeFiles/game.dir/src/box2d/dynamics/b2_circle_contact.cpp.o 99e893b9aa634d3 -1313 1629 1702159840357791101 CMakeFiles/game.dir/src/box2d/dynamics/b2_contact.cpp.o 6c051ad305d37510 -1349 1631 1702159840357791101 CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_manager.cpp.o c5694e44f070976a -1493 1673 1702159840401791078 CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_polygon_contact.cpp.o 16d0b786bd2dc1d9 -4 1690 1702159840417791070 CMakeFiles/game.dir/src/window.cpp.o e4a06dd3638cc981 -1391 1729 1702159840457791048 CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_solver.cpp.o e0b634d3fd058f04 -1455 1743 1702159840461791047 CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_circle_contact.cpp.o f41b104f0d0c983 -1449 1757 1702159840485791033 CMakeFiles/game.dir/src/box2d/dynamics/b2_distance_joint.cpp.o dd432ab62a7d1f2b -1507 1788 1702159840513791018 CMakeFiles/game.dir/src/box2d/dynamics/b2_fixture.cpp.o adfb8903d9117b02 -1523 1809 1702159840533791007 CMakeFiles/game.dir/src/box2d/dynamics/b2_friction_joint.cpp.o c1b927d3db50eebb -1555 1828 1702159840553790998 CMakeFiles/game.dir/src/box2d/dynamics/b2_motor_joint.cpp.o 3c6d8922105990a4 -1631 1850 1702159840573790987 CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_circle_contact.cpp.o d6e6909dd17c6116 -2 1869 1702159840597790973 CMakeFiles/game.dir/src/sprite.cpp.o 22e50b55e4ffbce5 -1526 1881 1702159840609790968 CMakeFiles/game.dir/src/box2d/dynamics/b2_gear_joint.cpp.o 8bb6a6dbe697ca52 -1549 1884 1702159840613790965 CMakeFiles/game.dir/src/box2d/dynamics/b2_joint.cpp.o 13c5d3d8f7aa6391 -1541 1888 1702159840617790964 CMakeFiles/game.dir/src/box2d/dynamics/b2_island.cpp.o bdc166afff2a791 -1673 1918 1702159840645790949 CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_contact.cpp.o 58c5e8e6356c2b80 -1629 1928 1702159840653790943 CMakeFiles/game.dir/src/box2d/dynamics/b2_mouse_joint.cpp.o f93c6bed3a465154 -1690 1959 1702159840685790927 CMakeFiles/game.dir/src/box2d/dynamics/b2_prismatic_joint.cpp.o 42c5027973f19a4c -1743 1982 1702159840709790913 CMakeFiles/game.dir/src/box2d/dynamics/b2_revolute_joint.cpp.o df2e4d5aadff477d -1828 1996 1702159840725790905 CMakeFiles/game.dir/src/box2d/dynamics/b2_world_callbacks.cpp.o 35a49da1a277caec -1729 2015 1702159840741790897 CMakeFiles/game.dir/src/box2d/dynamics/b2_pulley_joint.cpp.o 2cf2b9e124e22cef -1757 2036 1702159840765790883 CMakeFiles/game.dir/src/box2d/dynamics/b2_weld_joint.cpp.o e8740d4966159ce4 -1788 2050 1702159840777790878 CMakeFiles/game.dir/src/box2d/dynamics/b2_wheel_joint.cpp.o 377e9725ac313a2 -1850 2094 1702159840821790855 CMakeFiles/game.dir/src/box2d/rope/b2_rope.cpp.o 2e9bc545012f9006 -1809 2141 1702159840869790829 CMakeFiles/game.dir/src/box2d/dynamics/b2_world.cpp.o e01b3ad075abccc5 -1869 3636 1702159842361790032 CMakeFiles/game.dir/src/fmt/format.cc.o eb44cdfe74bad47a diff --git a/build/build.ninja b/build/build.ninja deleted file mode 100644 index 7dad06c..0000000 --- a/build/build.ninja +++ /dev/null @@ -1,537 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Ninja" Generator, CMake Version 3.22 - -# This file contains all the build statements describing the -# compilation DAG. - -# ============================================================================= -# Write statements declared in CMakeLists.txt: -# -# Which is the root file. -# ============================================================================= - -# ============================================================================= -# Project: Hydrangea -# Configurations: Debug -# ============================================================================= - -############################################# -# Minimal version of Ninja required by this file - -ninja_required_version = 1.5 - - -############################################# -# Set configuration variable for custom commands. - -CONFIGURATION = Debug -# ============================================================================= -# Include auxiliary files. - - -############################################# -# Include rules file. - -include CMakeFiles/rules.ninja - -# ============================================================================= - -############################################# -# Logical path to working directory; prefix for absolute paths. - -cmake_ninja_workdir = /media/garrett/Storage/Projects/Hydrangea/build/ -# ============================================================================= -# Object build statements for EXECUTABLE target game - - -############################################# -# Order-only phony target for game - -build cmake_object_order_depends_target_game: phony || CMakeFiles/game.dir - -build CMakeFiles/game.dir/src/dynamic_body.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/dynamic_body.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/dynamic_body.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/game.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/game.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/game.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/input_manager.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/input_manager.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/input_manager.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/main.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/main.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/main.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/node.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/node.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/node.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/player.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/player.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/player.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/scene.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/scene.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/scene.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/sprite.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/sprite.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/sprite.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/static_body.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/static_body.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/static_body.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/util.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/util.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/util.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/window.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/window.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/window.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src - -build CMakeFiles/game.dir/src/box2d/collision/b2_broad_phase.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_broad_phase.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_broad_phase.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_chain_shape.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_chain_shape.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_chain_shape.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_circle_shape.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_circle_shape.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_circle_shape.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_collide_circle.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_circle.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_collide_circle.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_collide_edge.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_edge.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_collide_edge.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_collide_polygon.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_polygon.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_collide_polygon.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_collision.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collision.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_collision.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_distance.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_distance.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_distance.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_dynamic_tree.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_dynamic_tree.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_dynamic_tree.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_edge_shape.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_edge_shape.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_edge_shape.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_polygon_shape.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_polygon_shape.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_polygon_shape.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/collision/b2_time_of_impact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_time_of_impact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/collision/b2_time_of_impact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/collision - -build CMakeFiles/game.dir/src/box2d/common/b2_block_allocator.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_block_allocator.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/common/b2_block_allocator.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/common - -build CMakeFiles/game.dir/src/box2d/common/b2_draw.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_draw.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/common/b2_draw.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/common - -build CMakeFiles/game.dir/src/box2d/common/b2_math.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_math.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/common/b2_math.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/common - -build CMakeFiles/game.dir/src/box2d/common/b2_settings.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_settings.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/common/b2_settings.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/common - -build CMakeFiles/game.dir/src/box2d/common/b2_stack_allocator.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_stack_allocator.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/common/b2_stack_allocator.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/common - -build CMakeFiles/game.dir/src/box2d/common/b2_timer.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_timer.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/common/b2_timer.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/common - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_body.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_body.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_body.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_circle_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_chain_circle_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_circle_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_polygon_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_chain_polygon_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_polygon_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_circle_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_circle_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_circle_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_manager.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact_manager.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_manager.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_solver.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact_solver.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_solver.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_distance_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_distance_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_distance_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_circle_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_edge_circle_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_circle_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_polygon_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_edge_polygon_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_polygon_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_fixture.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_fixture.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_fixture.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_friction_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_friction_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_friction_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_gear_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_gear_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_gear_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_island.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_island.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_island.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_motor_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_motor_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_motor_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_mouse_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_mouse_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_mouse_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_circle_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_polygon_circle_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_circle_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_contact.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_polygon_contact.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_contact.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_prismatic_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_prismatic_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_prismatic_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_pulley_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_pulley_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_pulley_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_revolute_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_revolute_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_revolute_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_weld_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_weld_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_weld_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_wheel_joint.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_wheel_joint.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_wheel_joint.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_world.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_world.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_world.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/dynamics/b2_world_callbacks.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_world_callbacks.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/dynamics/b2_world_callbacks.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/dynamics - -build CMakeFiles/game.dir/src/box2d/rope/b2_rope.cpp.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/box2d/rope/b2_rope.cpp || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/box2d/rope/b2_rope.cpp.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/box2d/rope - -build CMakeFiles/game.dir/src/fmt/format.cc.o: CXX_COMPILER__game_Debug /media/garrett/Storage/Projects/Hydrangea/src/fmt/format.cc || cmake_object_order_depends_target_game - DEP_FILE = CMakeFiles/game.dir/src/fmt/format.cc.o.d - FLAGS = -g -std=gnu++14 - INCLUDES = -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include - OBJECT_DIR = CMakeFiles/game.dir - OBJECT_FILE_DIR = CMakeFiles/game.dir/src/fmt - - -# ============================================================================= -# Link build statements for EXECUTABLE target game - - -############################################# -# Link the executable game - -build game: CXX_EXECUTABLE_LINKER__game_Debug CMakeFiles/game.dir/src/dynamic_body.cpp.o CMakeFiles/game.dir/src/game.cpp.o CMakeFiles/game.dir/src/input_manager.cpp.o CMakeFiles/game.dir/src/main.cpp.o CMakeFiles/game.dir/src/node.cpp.o CMakeFiles/game.dir/src/player.cpp.o CMakeFiles/game.dir/src/scene.cpp.o CMakeFiles/game.dir/src/sprite.cpp.o CMakeFiles/game.dir/src/static_body.cpp.o CMakeFiles/game.dir/src/util.cpp.o CMakeFiles/game.dir/src/window.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_broad_phase.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_chain_shape.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_circle_shape.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_collide_circle.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_collide_edge.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_collide_polygon.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_collision.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_distance.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_dynamic_tree.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_edge_shape.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_polygon_shape.cpp.o CMakeFiles/game.dir/src/box2d/collision/b2_time_of_impact.cpp.o CMakeFiles/game.dir/src/box2d/common/b2_block_allocator.cpp.o CMakeFiles/game.dir/src/box2d/common/b2_draw.cpp.o CMakeFiles/game.dir/src/box2d/common/b2_math.cpp.o CMakeFiles/game.dir/src/box2d/common/b2_settings.cpp.o CMakeFiles/game.dir/src/box2d/common/b2_stack_allocator.cpp.o CMakeFiles/game.dir/src/box2d/common/b2_timer.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_body.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_circle_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_polygon_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_circle_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_manager.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_solver.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_distance_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_circle_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_polygon_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_fixture.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_friction_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_gear_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_island.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_motor_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_mouse_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_circle_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_contact.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_prismatic_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_pulley_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_revolute_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_weld_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_wheel_joint.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_world.cpp.o CMakeFiles/game.dir/src/box2d/dynamics/b2_world_callbacks.cpp.o CMakeFiles/game.dir/src/box2d/rope/b2_rope.cpp.o CMakeFiles/game.dir/src/fmt/format.cc.o - FLAGS = -g - LINK_LIBRARIES = -Wl,-rpath,/src -L/usr/lib/x86_64-linux-gnu -lSDL2 -lSDL2_gpu - LINK_PATH = -L/src - OBJECT_DIR = CMakeFiles/game.dir - POST_BUILD = : - PRE_LINK = : - TARGET_FILE = game - TARGET_PDB = game.dbg - - -############################################# -# Utility command for edit_cache - -build CMakeFiles/edit_cache.util: CUSTOM_COMMAND - COMMAND = cd /media/garrett/Storage/Projects/Hydrangea/build && /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. - DESC = No interactive CMake dialog available... - restat = 1 - -build edit_cache: phony CMakeFiles/edit_cache.util - - -############################################# -# Utility command for rebuild_cache - -build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND - COMMAND = cd /media/garrett/Storage/Projects/Hydrangea/build && /usr/bin/cmake --regenerate-during-build -S/media/garrett/Storage/Projects/Hydrangea -B/media/garrett/Storage/Projects/Hydrangea/build - DESC = Running CMake to regenerate build system... - pool = console - restat = 1 - -build rebuild_cache: phony CMakeFiles/rebuild_cache.util - -# ============================================================================= -# Target aliases. - -# ============================================================================= -# Folder targets. - -# ============================================================================= - -############################################# -# Folder: /media/garrett/Storage/Projects/Hydrangea/build - -build all: phony game - -# ============================================================================= -# Built-in targets - - -############################################# -# Re-run CMake if any of its inputs changed. - -build build.ninja: RERUN_CMAKE | ../CMakeLists.txt /usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config-version.cmake /usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake /usr/share/cmake-3.22/Modules/CMakeCInformation.cmake /usr/share/cmake-3.22/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.22/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.22/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.22/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake-3.22/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.22/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.22/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.22/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.22/Modules/Compiler/GNU-C.cmake /usr/share/cmake-3.22/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.22/Modules/Compiler/GNU.cmake /usr/share/cmake-3.22/Modules/Platform/Linux-GNU-C.cmake /usr/share/cmake-3.22/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.22/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.22/Modules/Platform/Linux.cmake /usr/share/cmake-3.22/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.22.1/CMakeCCompiler.cmake CMakeFiles/3.22.1/CMakeCXXCompiler.cmake CMakeFiles/3.22.1/CMakeSystem.cmake - pool = console - - -############################################# -# A missing CMake input file is not an error. - -build ../CMakeLists.txt /usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config-version.cmake /usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake /usr/share/cmake-3.22/Modules/CMakeCInformation.cmake /usr/share/cmake-3.22/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.22/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.22/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.22/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake-3.22/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.22/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.22/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.22/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.22/Modules/Compiler/GNU-C.cmake /usr/share/cmake-3.22/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.22/Modules/Compiler/GNU.cmake /usr/share/cmake-3.22/Modules/Platform/Linux-GNU-C.cmake /usr/share/cmake-3.22/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.22/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.22/Modules/Platform/Linux.cmake /usr/share/cmake-3.22/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.22.1/CMakeCCompiler.cmake CMakeFiles/3.22.1/CMakeCXXCompiler.cmake CMakeFiles/3.22.1/CMakeSystem.cmake: phony - - -############################################# -# Clean all the built files. - -build clean: CLEAN - - -############################################# -# Print all primary targets available. - -build help: HELP - - -############################################# -# Make the all target the default. - -default all diff --git a/build/compile_commands.json b/build/compile_commands.json deleted file mode 100644 index 559f6e0..0000000 --- a/build/compile_commands.json +++ /dev/null @@ -1,287 +0,0 @@ -[ -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/dynamic_body.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/dynamic_body.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/dynamic_body.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/game.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/game.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/game.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/input_manager.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/input_manager.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/input_manager.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/main.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/main.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/main.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/node.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/node.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/node.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/player.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/player.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/player.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/scene.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/scene.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/scene.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/sprite.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/sprite.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/sprite.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/static_body.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/static_body.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/static_body.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/util.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/util.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/util.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/window.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/window.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/window.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_broad_phase.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_broad_phase.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_broad_phase.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_chain_shape.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_chain_shape.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_chain_shape.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_circle_shape.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_circle_shape.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_circle_shape.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_collide_circle.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_circle.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_circle.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_collide_edge.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_edge.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_edge.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_collide_polygon.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_polygon.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collide_polygon.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_collision.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collision.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_collision.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_distance.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_distance.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_distance.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_dynamic_tree.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_dynamic_tree.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_dynamic_tree.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_edge_shape.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_edge_shape.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_edge_shape.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_polygon_shape.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_polygon_shape.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_polygon_shape.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/collision/b2_time_of_impact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_time_of_impact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/collision/b2_time_of_impact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/common/b2_block_allocator.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_block_allocator.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_block_allocator.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/common/b2_draw.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_draw.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_draw.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/common/b2_math.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_math.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_math.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/common/b2_settings.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_settings.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_settings.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/common/b2_stack_allocator.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_stack_allocator.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_stack_allocator.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/common/b2_timer.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_timer.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/common/b2_timer.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_body.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_body.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_body.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_circle_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_chain_circle_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_chain_circle_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_chain_polygon_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_chain_polygon_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_chain_polygon_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_circle_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_circle_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_circle_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_manager.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact_manager.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact_manager.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_contact_solver.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact_solver.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_contact_solver.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_distance_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_distance_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_distance_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_circle_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_edge_circle_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_edge_circle_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_edge_polygon_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_edge_polygon_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_edge_polygon_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_fixture.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_fixture.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_fixture.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_friction_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_friction_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_friction_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_gear_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_gear_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_gear_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_island.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_island.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_island.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_motor_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_motor_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_motor_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_mouse_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_mouse_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_mouse_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_circle_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_polygon_circle_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_polygon_circle_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_polygon_contact.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_polygon_contact.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_polygon_contact.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_prismatic_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_prismatic_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_prismatic_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_pulley_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_pulley_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_pulley_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_revolute_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_revolute_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_revolute_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_weld_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_weld_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_weld_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_wheel_joint.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_wheel_joint.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_wheel_joint.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_world.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_world.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_world.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/dynamics/b2_world_callbacks.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_world_callbacks.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/dynamics/b2_world_callbacks.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/box2d/rope/b2_rope.cpp.o -c /media/garrett/Storage/Projects/Hydrangea/src/box2d/rope/b2_rope.cpp", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/box2d/rope/b2_rope.cpp" -}, -{ - "directory": "/media/garrett/Storage/Projects/Hydrangea/build", - "command": "/bin/x86_64-linux-gnu-g++-11 -I/usr/include/SDL2 -I/media/garrett/Storage/Projects/Hydrangea/include -g -std=gnu++14 -o CMakeFiles/game.dir/src/fmt/format.cc.o -c /media/garrett/Storage/Projects/Hydrangea/src/fmt/format.cc", - "file": "/media/garrett/Storage/Projects/Hydrangea/src/fmt/format.cc" -} -] \ No newline at end of file diff --git a/include/box2d/b2_broad_phase.h b/include/box2d/b2_broad_phase.h index cc882ab..396f526 100644 --- a/include/box2d/b2_broad_phase.h +++ b/include/box2d/b2_broad_phase.h @@ -75,7 +75,7 @@ public: /// Get the number of proxies. int32 GetProxyCount() const; - /// Update the pairs. This results in pair callbacks. This can only add pairs. + /// update the pairs. This results in pair callbacks. This can only add pairs. template void UpdatePairs(T* callback); diff --git a/include/box2d/b2_dynamic_tree.h b/include/box2d/b2_dynamic_tree.h index b854919..3df69ab 100644 --- a/include/box2d/b2_dynamic_tree.h +++ b/include/box2d/b2_dynamic_tree.h @@ -80,7 +80,7 @@ public: /// Destroy a proxy. This asserts if the id is invalid. void DestroyProxy(int32 proxyId); - /// Move a proxy with a swepted AABB. If the proxy has moved outside of its fattened AABB, + /// move a proxy with a swepted AABB. If the proxy has moved outside of its fattened AABB, /// then the proxy is removed from the tree and re-inserted. Otherwise /// the function returns immediately. /// @return true if the proxy was re-inserted. @@ -290,7 +290,7 @@ inline void b2DynamicTree::RayCast(T* callback, const b2RayCastInput& input) con if (value > 0.0f) { - // Update segment bounding box. + // update segment bounding box. maxFraction = value; b2Vec2 t = p1 + maxFraction * (p2 - p1); segmentAABB.lowerBound = b2Min(p1, t); diff --git a/include/box2d/b2_world.h b/include/box2d/b2_world.h index afd73bd..57d3709 100644 --- a/include/box2d/b2_world.h +++ b/include/box2d/b2_world.h @@ -221,9 +221,6 @@ private: friend class b2ContactManager; friend class b2Controller; - b2World(const b2World&) = delete; - void operator=(const b2World&) = delete; - void Solve(const b2TimeStep& step); void SolveTOI(const b2TimeStep& step); diff --git a/include/input_manager.h b/include/engine/input_manager.h similarity index 51% rename from include/input_manager.h rename to include/engine/input_manager.h index 4552b88..f7928ea 100644 --- a/include/input_manager.h +++ b/include/engine/input_manager.h @@ -9,10 +9,9 @@ class InputManager private: public: - static std::vector& GetFrameEvents(); - static void WindowEscape(); - - static bool key_down; + static std::vector& getFrameEvents(); + static void windowEscape(); + static bool keyDown; }; #endif \ No newline at end of file diff --git a/include/util.h b/include/engine/util.h similarity index 58% rename from include/util.h rename to include/engine/util.h index 9d6f860..73b4a14 100644 --- a/include/util.h +++ b/include/engine/util.h @@ -18,9 +18,9 @@ class Util private: public: - static void Log(LogType type, std::string msg, std::string file, int line); - static std::string GenerateUUID(); - static std::string LogTypeToStr(LogType type); + static void log(LogType type, std::string msg, std::string file, int line); + static std::string generateUuid(); + static std::string logTypeToStr(LogType type); }; #endif \ No newline at end of file diff --git a/include/window.h b/include/engine/window.h similarity index 58% rename from include/window.h rename to include/engine/window.h index 9492f99..38531aa 100644 --- a/include/window.h +++ b/include/engine/window.h @@ -20,13 +20,14 @@ public: void Close(); static SDL_Window *window; - static GPU_Target *window_target; - static int window_id; - static bool is_running; + static GPU_Target *windowTarget; + static int windowId; + static bool isRunning; - int window_height = 480; - int window_width = 640; - std::string window_title = "Window"; + int windowHeight = 480; + int windowWidth = 640; + std::string windowTitle = "Window"; + int windowTargetFramerate = 60; }; #endif \ No newline at end of file diff --git a/include/fmt/format.h b/include/fmt/format.h index e5bd8b1..450686a 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -966,7 +966,7 @@ class basic_memory_buffer final : public detail::buffer { FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); } private: - // Move data from other to this buffer. + // move data from other to this buffer. FMT_CONSTEXPR20 void move(basic_memory_buffer& other) { alloc_ = std::move(other.alloc_); T* data = other.data(); diff --git a/include/game.h b/include/game.h deleted file mode 100644 index f452e7e..0000000 --- a/include/game.h +++ /dev/null @@ -1,24 +0,0 @@ -#include "scene.h" -#include "window.h" - -#ifndef GAME_H -#define GAME_H - -class Game -{ -private: - -public: - // Constructor and Destructor - Game(); - ~Game(); - - // Methods - int Init(); - - // Members - static Scene *scene; - Window *window = NULL; -}; - -#endif \ No newline at end of file diff --git a/include/node.h b/include/node.h deleted file mode 100644 index abca718..0000000 --- a/include/node.h +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include -#include - -#include "math/vec2.h" -#include "scene.h" -#include "util.h" - -#ifndef NODE_H -#define NODE_H - -class Node -{ -private: - // Methods - void UpdateChildren(); - -public: - // Constructor and Destructor - Node(); - ~Node(); - - // Methods - virtual void Update(); - void AddChild(Node* child); - - // Member Variables - std::string name; - Vec2 world_position = Vec2(0, 0); - Vec2 local_position = Vec2(0, 0); - Scene* scene = NULL; - Node* parent = NULL; - std::vector children; -}; - -#endif \ No newline at end of file diff --git a/include/nodes/card.h b/include/nodes/card.h new file mode 100644 index 0000000..8cd7ea2 --- /dev/null +++ b/include/nodes/card.h @@ -0,0 +1,42 @@ +#ifndef HYDRANGEA_CARD_H +#define HYDRANGEA_CARD_H + +#include "node.h" +#include "sprite.h" + +typedef enum CardSuite { + HEART = 0, + CLUB, + SPADE, + DIAMOND, +} CARD_SUITE_t; + +enum CardSpecialValue { + ACE = 1, + JACK = 11, + QUEEN = 12, + KING = 13, +}; + +class Card : public Node { +public: + Card(); + + ~Card(); + + void flip(); + + void update() override; + + void pollInputs() override; + + void free() override; + +private: + CARD_SUITE_t suite; + int value; + Sprite *face = new Sprite("./resources/img/cards/c11.png"); + Sprite *back = new Sprite("./resources/img/cards/cardback.png"); +}; + +#endif //HYDRANGEA_CARD_H diff --git a/include/nodes/hand.h b/include/nodes/hand.h new file mode 100644 index 0000000..b0e8c71 --- /dev/null +++ b/include/nodes/hand.h @@ -0,0 +1,29 @@ +#ifndef HYDRANGEA_HAND_H +#define HYDRANGEA_HAND_H + +#include "engine/input_manager.h" +#include "node.h" +#include "card.h" + +class Hand : public Node { +public: + Hand(); + + ~Hand(); + + void free() override; + + void update() override; + + void pollInputs() override; + + void drawCard(); + + void removeCard(); + +private: + + void organizeDeck(); +}; + +#endif //HYDRANGEA_HAND_H diff --git a/include/nodes/node.h b/include/nodes/node.h new file mode 100644 index 0000000..76987d2 --- /dev/null +++ b/include/nodes/node.h @@ -0,0 +1,44 @@ +#include +#include +#include +#include + +#include "math/vec2.h" +#include "scene.h" +#include "engine/util.h" + +#ifndef NODE_H +#define NODE_H + +class Node { +private: + // Methods + void updateChildren(); + + void pollChildInputs(); + +public: + // Constructor and Destructor + Node(); + + ~Node(); + + // Methods + virtual void update(); + + virtual void pollInputs(); + + virtual void free(); + + void addChild(Node *child); + + // Member Variables + std::string name; + Vec2 worldPosition = Vec2(0, 0); + Vec2 localPosition = Vec2(0, 0); + Scene *scene = nullptr; + Node *parent = nullptr; + std::vector children; +}; + +#endif \ No newline at end of file diff --git a/include/player.h b/include/nodes/player.h similarity index 65% rename from include/player.h rename to include/nodes/player.h index 7513622..cbbec8c 100644 --- a/include/player.h +++ b/include/nodes/player.h @@ -5,16 +5,21 @@ #define PLAYER_H class Player : public Node { -private: - void Update() override; - void Move(); - public: Player(); + ~Player(); + void update() override; + + void pollInputs() override; + + void free() override; + Sprite *sprite; Sprite *hammer; +private: + void move(); }; #endif diff --git a/include/scene.h b/include/nodes/scene.h similarity index 51% rename from include/scene.h rename to include/nodes/scene.h index c8bf527..731167c 100644 --- a/include/scene.h +++ b/include/nodes/scene.h @@ -1,4 +1,5 @@ #include +#include "engine/window.h" #include "box2d/b2_math.h" #include "box2d/b2_world.h" @@ -7,26 +8,33 @@ #define HYDRANGEA_SCENE_H class Node; -class Scene -{ + +class Scene { private: // Members - std::vector node_tree; + std::vector nodeTree; public: // Constructor and Destructor Scene(); + ~Scene(); // Methods - void Update(); - void AppendNode(Node* node); + void update(); + + void pollInputs(); + + void freeSceneData(); + + void appendNode(Node *node); // Members b2Vec2 b_gravity = b2Vec2(0, -10); - b2World *b_world; - int velocity_iterations = 6; - int position_iterations = 2; + b2World b_world = b2World(b_gravity); + float timeStep = 1.0f / 60.0f; + int velocityIterations = 6; + int positionIterations = 2; }; #endif //HYDRANGEA_SCENE_H diff --git a/include/nodes/sprite.h b/include/nodes/sprite.h new file mode 100644 index 0000000..b9d45c6 --- /dev/null +++ b/include/nodes/sprite.h @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include + +#include "math/vec2.h" +#include "node.h" + +#ifndef SPRITE_H +#define SPRITE_H + +class Sprite : public Node { +public: + // Constructor and Destructor + explicit Sprite(const std::string &resource_path); + + ~Sprite(); + + // Methods + void update() override; + + void pollInputs() override; + + void free() override; + + void setImage(GPU_Image *img); + + void setImage(char *img_path); + + void getImage(GPU_Image *image); + + // Member Variables + double angle = 0; + Vec2 scale = Vec2(1, 1); + bool visible = true; +private: + GPU_Image *gpuImage; + GPU_Target *target_; + + void render(); +}; + +#endif \ No newline at end of file diff --git a/include/dynamic_body.h b/include/physics/dynamic_body.h similarity index 58% rename from include/dynamic_body.h rename to include/physics/dynamic_body.h index 5026a00..4d43e96 100644 --- a/include/dynamic_body.h +++ b/include/physics/dynamic_body.h @@ -1,4 +1,4 @@ -#include "node.h" +#include "nodes/node.h" #include "box2d/b2_body.h" #include "box2d/b2_polygon_shape.h" #include "box2d/b2_fixture.h" @@ -6,24 +6,27 @@ #ifndef HYDRANGEA_DYNAMIC_BODY_H #define HYDRANGEA_DYNAMIC_BODY_H -class DynamicBody : public Node -{ +class DynamicBody : public Node { public: explicit DynamicBody(float size_x = 10.0f, float size_y = 10.0f); + ~DynamicBody(); - void Update() override; + void update() override; + + void render(); + + void SetWorldPosition(float pos_x, float pos_y); Vec2 size; float friction; float density; private: - b2BodyDef b_body_def; - b2Body *b_body; - b2PolygonShape b_shape; - b2FixtureDef b_fixture_def; - + b2BodyDef bBodyDef; + b2Body *bBody; + b2PolygonShape bShape; + b2FixtureDef bFixtureDef; }; #endif //HYDRANGEA_DYNAMIC_BODY_H diff --git a/include/static_body.h b/include/physics/static_body.h similarity index 62% rename from include/static_body.h rename to include/physics/static_body.h index 29f8268..a6f1990 100644 --- a/include/static_body.h +++ b/include/physics/static_body.h @@ -1,23 +1,24 @@ -#include "node.h" +#include "nodes/node.h" #include "box2d/b2_body.h" #include "box2d/b2_polygon_shape.h" #ifndef HYDRANGEA_STATIC_BODY_H #define HYDRANGEA_STATIC_BODY_H -class StaticBody : public Node -{ +class StaticBody : public Node { public: explicit StaticBody(float size_x = 10.0f, float size_y = 10.0f); + ~StaticBody(); - void Update() override; - void Render(); + void update() override; + + void render(); private: - b2BodyDef b_body_def; - b2Body *b_body; - b2PolygonShape b_shape; + b2BodyDef bBodyDef; + b2Body *bBody; + b2PolygonShape bShape; Vec2 size; }; diff --git a/include/sprite.h b/include/sprite.h deleted file mode 100644 index 0579094..0000000 --- a/include/sprite.h +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include -#include -#include - -#include "math/vec2.h" -#include "node.h" - -#ifndef SPRITE_H -#define SPRITE_H - -class Sprite : public Node -{ -private: - GPU_Image* image; - GPU_Target* target; - - void Render(); - -public: - // Constructor and Deconstructor - explicit Sprite(std::string resource_path); - ~Sprite(); - - // Methods - void Update() override; - - void SetImage( GPU_Image img ); - void SetImage( char* img_path ); - GPU_Image GetImage(); - - // Member Variables - float angle = 0; - Vec2 scale = Vec2(1, 1); -}; - -#endif \ No newline at end of file diff --git a/include/tweeny/dispatcher.h b/include/tweeny/dispatcher.h new file mode 100644 index 0000000..17f9a75 --- /dev/null +++ b/include/tweeny/dispatcher.h @@ -0,0 +1,53 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* This file contains code to help call a function applying a tuple as its arguments. + * This code is private and not documented. */ + +#ifndef TWEENY_DISPATCHER_H +#define TWEENY_DISPATCHER_H + +#include + +namespace tweeny { + namespace detail { + template struct seq { }; + template struct gens : gens { }; + template struct gens<0, S...> { + typedef seq type; + }; + + template + R dispatch(Func && f, TupleType && args, seq) { + return f(std::get(args) ...); + } + + template + R call(Func && f, const std::tuple & args) { + return dispatch(f, args, typename gens::type()); + } + } +} + +#endif //TWEENY_DISPATCHER_H diff --git a/include/tweeny/easing.h b/include/tweeny/easing.h new file mode 100644 index 0000000..81ea227 --- /dev/null +++ b/include/tweeny/easing.h @@ -0,0 +1,662 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** + * @file easing.h + * The purpose of this file is to list all bundled easings. All easings are based on Robert Penner's easing + * functions: http://robertpenner.com/easing/ + */ + +#ifndef TWEENY_EASING_H +#define TWEENY_EASING_H + +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/** + * @defgroup easings Easings + * @brief Bundled easing functions based on + * Robert Penner's Easing Functions + * @details You should plug these functions into @ref tweeny::tween::via function to specify the easing used in a tween. + * @sa tweeny::easing + * @{ + *//** + * @defgroup stepped Stepped + * @{ + * @brief The value does not change. No interpolation is used. + * @} + *//** + * @defgroup default Default + * @{ + * @brief A default mode for arithmetic values it will change in constant speed, for non-arithmetic value will be constant. + * @} + *//** + * @defgroup linear Linear + * @{ + * @brief The most boring ever easing function. It has no acceleration and change values in constant speed. + * @} + *//** + * @defgroup quadratic Quadratic + * @{ + * @brief The most commonly used easing functions. + * @} + *//** + * @defgroup cubic Cubic + * @{ + * @brief A bit curvier than the quadratic easing. + * @} + *//** + * @defgroup quartic Quartic + * @{ + * @brief A steeper curve. Acceleration changes faster than Cubic. + * @} + *//** + * @defgroup quintic Quintic + * @{ + * @brief An even steeper curve. Acceleration changes really fast. + * @} + *//** + * @defgroup sinuisodal Sinuisodal + * @{ + * @brief A very gentle curve, gentlier than quadratic. + * @} + *//** + * @defgroup exponential Exponential + * @{ + * @brief A very steep curve, based on the `p(t) = 2^(10*(t-1))` equation. + * @} + *//** + * @defgroup circular Circular + * @{ + * @brief A smooth, circular slope that resembles the arc of an circle. + * @} + *//** + * @defgroup back Back + * @{ + * @brief An easing function that has a "cute" natural coming back effect. + * @} + *//** + * @defgroup elastic Elastic + * @{ + * @brief An elastic easing function. Values go a little past the maximum/minimum in an elastic effect. + * @} + *//** + * @defgroup bounce Bounce + * @{ + * @brief A bouncing easing function. Values "bounce" around the maximum/minumum. + * @} + *//** + * @} + */ + +namespace tweeny { + /** + * @brief The easing class holds all the bundled easings. + * + * You should pass the easing function to the @p tweeny::tween::via method, to set the easing function that will + * be used to interpolate values in a tween point. + * + * **Example**: + * + * @code + * auto tween = tweeny::from(0).to(100).via(tweeny::easing::linear); + * @endcode + */ + class easing { + public: + /** + * @brief Enumerates all easings to aid in runtime when adding easins to a tween using tween::via + * + * The aim of this enum is to help in situations where the easing doesn't come straight from the C++ + * code but rather from a configuration file or some sort of external paramenter. + */ + enum class enumerated { + def, + linear, + stepped, + quadraticIn, + quadraticOut, + quadraticInOut, + cubicIn, + cubicOut, + cubicInOut, + quarticIn, + quarticOut, + quarticInOut, + quinticIn, + quinticOut, + quinticInOut, + sinusoidalIn, + sinusoidalOut, + sinusoidalInOut, + exponentialIn, + exponentialOut, + exponentialInOut, + circularIn, + circularOut, + circularInOut, + bounceIn, + bounceOut, + bounceInOut, + elasticIn, + elasticOut, + elasticInOut, + backIn, + backOut, + backInOut + }; + + /** + * @ingroup stepped + * @brief Value is constant. + */ + static constexpr struct steppedEasing { + template + static T run(float position, T start, T end) { + return start; + } + } stepped = steppedEasing{}; + + /** + * @ingroup default + * @brief Values change with constant speed for arithmetic type only. The non-arithmetic it will be constant. + */ + static constexpr struct defaultEasing { + template struct voidify { using type = void; }; + template using void_t = typename voidify::type; + + template + struct supports_arithmetic_operations : std::false_type {}; + + template + struct supports_arithmetic_operations() + std::declval()), + decltype(std::declval() - std::declval()), + decltype(std::declval() * std::declval()), + decltype(std::declval() * std::declval()), + decltype(std::declval() * std::declval()) + >> : std::true_type{}; + + + template + static typename std::enable_if::value, T>::type run(float position, T start, T end) { + return static_cast(roundf((end - start) * position + start)); + } + + template + static typename std::enable_if::value && !std::is_integral::value, T>::type run(float position, T start, T end) { + return static_cast((end - start) * position + start); + } + + template + static typename std::enable_if::value, T>::type run(float position, T start, T end) { + return start; + } + } def = defaultEasing{}; + + /** + * @ingroup linear + * @brief Values change with constant speed. + */ + static constexpr struct linearEasing { + template + static typename std::enable_if::value, T>::type run(float position, T start, T end) { + return static_cast(roundf((end - start) * position + start)); + } + + template + static typename std::enable_if::value, T>::type run(float position, T start, T end) { + return static_cast((end - start) * position + start); + } + } linear = linearEasing{}; + + /** + * @ingroup quadratic + * @brief Accelerate initial values with a quadratic equation. + */ + static constexpr struct quadraticInEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * position * position + start); + } + } quadraticIn = quadraticInEasing{}; + + /** + * @ingroup quadratic + * @brief Deaccelerate ending values with a quadratic equation. + */ + static constexpr struct quadraticOutEasing { + template + static T run(float position, T start, T end) { + return static_cast((-(end - start)) * position * (position - 2) + start); + } + } quadraticOut = quadraticOutEasing{}; + + /** + * @ingroup quadratic + * @brief Acceelerate initial and deaccelerate ending values with a quadratic equation. + */ + static constexpr struct quadraticInOutEasing { + template + static T run(float position, T start, T end) { + position *= 2; + if (position < 1) { + return static_cast(((end - start) / 2) * position * position + start); + } + + --position; + return static_cast((-(end - start) / 2) * (position * (position - 2) - 1) + start); + } + } quadraticInOut = quadraticInOutEasing{}; + + /** + * @ingroup cubic + * @brief Aaccelerate initial values with a cubic equation. + */ + static constexpr struct cubicInEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * position * position * position + start); + } + } cubicIn = cubicInEasing{}; + + /** + * @ingroup cubic + * @brief Deaccelerate ending values with a cubic equation. + */ + static constexpr struct cubicOutEasing { + template + static T run(float position, T start, T end) { + --position; + return static_cast((end - start) * (position * position * position + 1) + start); + } + } cubicOut = cubicOutEasing{}; + + /** + * @ingroup cubic + * @brief Acceelerate initial and deaccelerate ending values with a cubic equation. + */ + static constexpr struct cubicInOutEasing { + template + static T run(float position, T start, T end) { + position *= 2; + if (position < 1) { + return static_cast(((end - start) / 2) * position * position * position + start); + } + position -= 2; + return static_cast(((end - start) / 2) * (position * position * position + 2) + start); + } + } cubicInOut = cubicInOutEasing{}; + + /** + * @ingroup quartic + * @brief Acceelerate initial values with a quartic equation. + */ + static constexpr struct quarticInEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * position * position * position * position + start); + } + } quarticIn = quarticInEasing{}; + + /** + * @ingroup quartic + * @brief Deaccelerate ending values with a quartic equation. + */ + static constexpr struct quarticOutEasing { + template + static T run(float position, T start, T end) { + --position; + return static_cast( -(end - start) * (position * position * position * position - 1) + start); + } + } quarticOut = quarticOutEasing{}; + + /** + * @ingroup quartic + * @brief Acceelerate initial and deaccelerate ending values with a quartic equation. + */ + static constexpr struct quarticInOutEasing { + template + static T run(float position, T start, T end) { + position *= 2; + if (position < 1) { + return static_cast(((end - start) / 2) * (position * position * position * position) + + start); + } + position -= 2; + return static_cast((-(end - start) / 2) * (position * position * position * position - 2) + + start); + } + } quarticInOut = quarticInOutEasing{}; + + /** + * @ingroup quintic + * @brief Acceelerate initial values with a quintic equation. + */ + static constexpr struct quinticInEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * position * position * position * position * position + start); + } + } quinticIn = quinticInEasing{}; + + /** + * @ingroup quintic + * @brief Deaccelerate ending values with a quintic equation. + */ + static constexpr struct quinticOutEasing { + template + static T run(float position, T start, T end) { + position--; + return static_cast((end - start) * (position * position * position * position * position + 1) + + start); + } + } quinticOut = quinticOutEasing{}; + + /** + * @ingroup quintic + * @brief Acceelerate initial and deaccelerate ending values with a quintic equation. + */ + static constexpr struct quinticInOutEasing { + template + static T run(float position, T start, T end) { + position *= 2; + if (position < 1) { + return static_cast( + ((end - start) / 2) * (position * position * position * position * position) + + start); + } + position -= 2; + return static_cast( + ((end - start) / 2) * (position * position * position * position * position + 2) + + start); + } + } quinticInOut = quinticInOutEasing{}; + + /** + * @ingroup sinusoidal + * @brief Acceelerate initial values with a sinusoidal equation. + */ + static constexpr struct sinusoidalInEasing { + template + static T run(float position, T start, T end) { + return static_cast(-(end - start) * cosf(position * static_cast(M_PI) / 2) + (end - start) + start); + } + } sinusoidalIn = sinusoidalInEasing{}; + + /** + * @ingroup sinusoidal + * @brief Deaccelerate ending values with a sinusoidal equation. + */ + static constexpr struct sinusoidalOutEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * sinf(position * static_cast(M_PI) / 2) + start); + } + } sinusoidalOut = sinusoidalOutEasing{}; + + /** + * @ingroup sinusoidal + * @brief Acceelerate initial and deaccelerate ending values with a sinusoidal equation. + */ + static constexpr struct sinusoidalInOutEasing { + template + static T run(float position, T start, T end) { + return static_cast((-(end - start) / 2) * (cosf(position * static_cast(M_PI)) - 1) + start); + } + } sinusoidalInOut = sinusoidalInOutEasing{}; + + /** + * @ingroup exponential + * @brief Acceelerate initial values with an exponential equation. + */ + static constexpr struct exponentialInEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * powf(2, 10 * (position - 1)) + start); + } + } exponentialIn = exponentialInEasing{}; + + /** + * @ingroup exponential + * @brief Deaccelerate ending values with an exponential equation. + */ + static constexpr struct exponentialOutEasing { + template + static T run(float position, T start, T end) { + return static_cast((end - start) * (-powf(2, -10 * position) + 1) + start); + } + } exponentialOut = exponentialOutEasing{}; + + /** + * @ingroup exponential + * @brief Acceelerate initial and deaccelerate ending values with an exponential equation. + */ + static constexpr struct exponentialInOutEasing { + template + static T run(float position, T start, T end) { + position *= 2; + if (position < 1) { + return static_cast(((end - start) / 2) * powf(2, 10 * (position - 1)) + start); + } + --position; + return static_cast(((end - start) / 2) * (-powf(2, -10 * position) + 2) + start); + } + } exponentialInOut = exponentialInOutEasing{}; + + /** + * @ingroup circular + * @brief Acceelerate initial values with a circular equation. + */ + static constexpr struct circularInEasing { + template + static T run(float position, T start, T end) { + return static_cast( -(end - start) * (sqrtf(1 - position * position) - 1) + start ); + } + } circularIn = circularInEasing{}; + + /** + * @ingroup circular + * @brief Deaccelerate ending values with a circular equation. + */ + static constexpr struct circularOutEasing { + template + static T run(float position, T start, T end) { + --position; + return static_cast((end - start) * (sqrtf(1 - position * position)) + start); + } + } circularOut = circularOutEasing{}; + + /** + * @ingroup circular + * @brief Acceelerate initial and deaccelerate ending values with a circular equation. + */ + static constexpr struct circularInOutEasing { + template + static T run(float position, T start, T end) { + position *= 2; + if (position < 1) { + return static_cast((-(end - start) / 2) * (sqrtf(1 - position * position) - 1) + start); + } + + position -= 2; + return static_cast(((end - start) / 2) * (sqrtf(1 - position * position) + 1) + start); + } + } circularInOut = circularInOutEasing{}; + + /** + * @ingroup bounce + * @brief Acceelerate initial values with a "bounce" equation. + */ + static constexpr struct bounceInEasing { + template + static T run(float position, T start, T end) { + return (end - start) - bounceOut.run((1 - position), T(), end) + start; + } + } bounceIn = bounceInEasing{}; + + /** + * @ingroup bounce + * @brief Deaccelerate ending values with a "bounce" equation. + */ + static constexpr struct bounceOutEasing { + template + static T run(float position, T start, T end) { + T c = end - start; + if (position < (1 / 2.75f)) { + return static_cast(c * (7.5625f * position * position) + start); + } else if (position < (2.0f / 2.75f)) { + float postFix = position -= (1.5f / 2.75f); + return static_cast(c * (7.5625f * (postFix) * position + .75f) + start); + } else if (position < (2.5f / 2.75f)) { + float postFix = position -= (2.25f / 2.75f); + return static_cast(c * (7.5625f * (postFix) * position + .9375f) + start); + } else { + float postFix = position -= (2.625f / 2.75f); + return static_cast(c * (7.5625f * (postFix) * position + .984375f) + start); + } + } + } bounceOut = bounceOutEasing{}; + + /** + * @ingroup bounce + * @brief Acceelerate initial and deaccelerate ending values with a "bounce" equation. + */ + static constexpr struct bounceInOutEasing { + template + static T run(float position, T start, T end) { + if (position < 0.5f) return static_cast(bounceIn.run(position * 2, T(), end) * .5f + start); + else return static_cast(bounceOut.run((position * 2 - 1), T(), end) * .5f + (end - start) * .5f + start); + } + } bounceInOut = bounceInOutEasing{}; + + /** + * @ingroup elastic + * @brief Acceelerate initial values with an "elastic" equation. + */ + static constexpr struct elasticInEasing { + template + static T run(float position, T start, T end) { + if (position <= 0.00001f) return start; + if (position >= 0.999f) return end; + float p = .3f; + auto a = end - start; + float s = p / 4; + float postFix = + a * powf(2, 10 * (position -= 1)); // this is a fix, again, with post-increment operators + return static_cast(-(postFix * sinf((position - s) * (2 * static_cast(M_PI)) / p)) + start); + } + } elasticIn = elasticInEasing{}; + + /** + * @ingroup elastic + * @brief Deaccelerate ending values with an "elastic" equation. + */ + static constexpr struct elasticOutEasing { + template + static T run(float position, T start, T end) { + if (position <= 0.00001f) return start; + if (position >= 0.999f) return end; + float p = .3f; + auto a = end - start; + float s = p / 4; + return static_cast(a * powf(2, -10 * position) * sinf((position - s) * (2 * static_cast(M_PI)) / p) + end); + } + } elasticOut = elasticOutEasing{}; + + /** + * @ingroup elastic + * @brief Acceelerate initial and deaccelerate ending values with an "elastic" equation. + */ + static constexpr struct elasticInOutEasing { + template + static T run(float position, T start, T end) { + if (position <= 0.00001f) return start; + if (position >= 0.999f) return end; + position *= 2; + float p = (.3f * 1.5f); + auto a = end - start; + float s = p / 4; + float postFix; + + if (position < 1) { + postFix = a * powf(2, 10 * (position -= 1)); // postIncrement is evil + return static_cast(-0.5f * (postFix * sinf((position - s) * (2 * static_cast(M_PI)) / p)) + start); + } + postFix = a * powf(2, -10 * (position -= 1)); // postIncrement is evil + return static_cast(postFix * sinf((position - s) * (2 * static_cast(M_PI)) / p) * .5f + end); + } + } elasticInOut = elasticInOutEasing{}; + + /** + * @ingroup back + * @brief Acceelerate initial values with a "back" equation. + */ + static constexpr struct backInEasing { + template + static T run(float position, T start, T end) { + float s = 1.70158f; + float postFix = position; + return static_cast((end - start) * (postFix) * position * ((s + 1) * position - s) + start); + } + } backIn = backInEasing{}; + + /** + * @ingroup back + * @brief Deaccelerate ending values with a "back" equation. + */ + static constexpr struct backOutEasing { + template + static T run(float position, T start, T end) { + float s = 1.70158f; + position -= 1; + return static_cast((end - start) * ((position) * position * ((s + 1) * position + s) + 1) + start); + } + } backOut = backOutEasing{}; + + /** + * @ingroup back + * @brief Acceelerate initial and deaccelerate ending values with a "back" equation. + */ + static constexpr struct backInOutEasing { + template + static T run(float position, T start, T end) { + float s = 1.70158f; + float t = position; + auto b = start; + auto c = end - start; + float d = 1; + s *= (1.525f); + if ((t /= d / 2) < 1) return static_cast(c / 2 * (t * t * (((s) + 1) * t - s)) + b); + float postFix = t -= 2; + return static_cast(c / 2 * ((postFix) * t * (((s) + 1) * t + s) + 2) + b); + } + } backInOut = backInOutEasing{}; + }; +} +#endif //TWEENY_EASING_H diff --git a/include/tweeny/easingresolve.h b/include/tweeny/easingresolve.h new file mode 100644 index 0000000..f7d266e --- /dev/null +++ b/include/tweeny/easingresolve.h @@ -0,0 +1,127 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * This file provides the easing resolution mechanism so that the library user can mix lambdas and the bundled + * pre-defined easing functions. It shall not be used directly. + * This file is private. + */ + +#ifndef TWEENY_EASINGRESOLVE_H +#define TWEENY_EASINGRESOLVE_H + +#include +#include "easing.h" + +namespace tweeny { + namespace detail { + using std::get; + + template + struct easingresolve { + static void impl(FunctionTuple &b, Fs... fs) { + if (sizeof...(Fs) == 0) return; + easingresolve::impl(b, fs...); + } + }; + + template + struct easingresolve { + static void impl(FunctionTuple &b, F1 f1, Fs... fs) { + get(b) = f1; + easingresolve::impl(b, fs...); + } + }; + + template + struct easingresolve { + typedef typename std::tuple_element::type ArgType; + + static void impl(FunctionTuple &b, easing::steppedEasing, Fs... fs) { + get(b) = easing::stepped.run; + easingresolve::impl(b, fs...); + } + }; + + template + struct easingresolve { + typedef typename std::tuple_element::type ArgType; + + static void impl(FunctionTuple &b, easing::linearEasing, Fs... fs) { + get(b) = easing::linear.run; + easingresolve::impl(b, fs...); + } + }; + template + struct easingresolve { + typedef typename std::tuple_element::type ArgType; + + static void impl(FunctionTuple &b, easing::defaultEasing, Fs... fs) { + get(b) = easing::def.run; + easingresolve::impl(b, fs...); + } + }; + + #define DECLARE_EASING_RESOLVE(__EASING_TYPE__) \ + template \ + struct easingresolve { \ + typedef typename std::tuple_element::type ArgType; \ + static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## In), Fs... fs) { \ + get(b) = easing::__EASING_TYPE__ ## In.run; \ + easingresolve::impl(b, fs...); \ + } \ + }; \ + \ + template \ + struct easingresolve { \ + typedef typename std::tuple_element::type ArgType; \ + static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## Out), Fs... fs) { \ + get(b) = easing::__EASING_TYPE__ ## Out.run; \ + easingresolve::impl(b, fs...); \ + } \ + }; \ + \ + template \ + struct easingresolve { \ + typedef typename std::tuple_element::type ArgType; \ + static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## InOut), Fs... fs) { \ + get(b) = easing::__EASING_TYPE__ ## InOut.run; \ + easingresolve::impl(b, fs...); \ + } \ + } + + DECLARE_EASING_RESOLVE(quadratic); + DECLARE_EASING_RESOLVE(cubic); + DECLARE_EASING_RESOLVE(quartic); + DECLARE_EASING_RESOLVE(quintic); + DECLARE_EASING_RESOLVE(sinusoidal); + DECLARE_EASING_RESOLVE(exponential); + DECLARE_EASING_RESOLVE(circular); + DECLARE_EASING_RESOLVE(bounce); + DECLARE_EASING_RESOLVE(elastic); + DECLARE_EASING_RESOLVE(back); + } +} + +#endif //TWEENY_EASINGRESOLVE_H diff --git a/include/tweeny/int2type.h b/include/tweeny/int2type.h new file mode 100644 index 0000000..a0d8f17 --- /dev/null +++ b/include/tweeny/int2type.h @@ -0,0 +1,37 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * This file declares a helper struct to create a type from a integer value, to aid in template tricks. + * This file is private. + */ +#ifndef TWEENY_INT2TYPE_H +#define TWEENY_INT2TYPE_H + +namespace tweeny { + namespace detail { + template struct int2type { }; + } +} +#endif //TWEENY_INT2TYPE_H diff --git a/include/tweeny/tween.h b/include/tweeny/tween.h new file mode 100644 index 0000000..3872496 --- /dev/null +++ b/include/tweeny/tween.h @@ -0,0 +1,656 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** + * @file tween.h + * This file contains the core of tweeny: the main tween class. + */ + +#ifndef TWEENY_TWEEN_H +#define TWEENY_TWEEN_H + +#include +#include +#include + +#include "tweentraits.h" +#include "tweenpoint.h" + +namespace tweeny { + /** + * @brief The tween class is the core class of tweeny. It controls the interpolation steps, easings and durations. + * + * It should not be constructed manually but rather from @p tweeny::from, to facilitate template argument + * deduction (and also to keep your code clean). + */ + template + class tween { + public: + /** + * @brief Instantiates a tween from a starting point. + * + * This is a static factory helper function to be used by @p tweeny::from. You should not use this directly. + * @p t The first value in the point + * @p vs The remaining values + */ + static tween from(T t, Ts... vs); + + public: + /** + * @brief Default constructor for a tween + * + * This constructor is provided to facilitate the usage of containers of tweens (e.g, std::vector). It + * should not be used manually as the tweening created by it is invalid. + */ + tween(); + + /** + * @brief Adds a new point in this tweening. + * + * This will add a new tweening point with the specified values. Next calls to @p via and @p during + * will refer to this point. + * + * **Example** + * + * @code + * auto t = tweeny::from(0).to(100).to(200); + * @endcode + * + * @param t, vs Point values + * @returns *this + */ + tween & to(T t, Ts... vs); + + /** + * @brief Specifies the easing function for the last added point. + * + * This will specify the easing between the last tween point added by @p to and its previous step. You can + * use any callable object. Additionally, you can use the easing objects specified in the class @p easing. + * + * If it is a multi-value point, you can either specify a single easing function that will be used for + * every value or you can specify an easing function for each value. You can mix and match callable objects, + * lambdas and bundled easing objects. + * + * **Example**: + * + * @code + * // use bundled linear easing + * auto tween1 = tweeny::from(0).to(100).via(tweeny::easing::linear); + * + * // use custom lambda easing + * auto tween2 = tweeny::from(0).to(100).via([](float p, int a, int b) { return (b-a) * p + a; }); + * @endcode + * + * @param fs The functions + * @returns *this + * @see tweeny::easing + */ + template tween & via(Fs... fs); + + + /** + * @brief Specifies the easing function for the last added point, accepting an enumeration. + * + * This will specify the easing between the last tween point added by @p to and its previous step. You can + * use a value from the @p tweeny::easing::enumerated enum. You can then have an enumeration of your own + * poiting to this enumerated enums, or use it directly. You can mix-and-match enumerated easings, functions + * and easing names. + * + * **Example**: + * + * @code + * auto tween1 = tweeny::from(0).to(100).via(tweeny::easing::enumerated::linear); + * auto tween2 = tweeny::from(0.0f, 100.0f).to(100.0f, 0.0f).via(tweeny::easing::linear, "backOut"); + * + * @param fs The functions + * @returns *this + * @see tweeny::easing + */ + template tween & via(easing::enumerated enumerated, Fs... fs); + + /** + * @brief Specifies the easing function for the last added point, accepting an easing name as a `std::string` value. + * + * This will specify the easing between the last tween point added by @p to and its previous step. + * You can mix-and-match enumerated easings, functions and easing names. + * + * **Example**: + * + * @code + * auto tween = tweeny::from(0.0f, 100.0f).to(100.0f, 0.0f).via(tweeny::easing::linear, "backOut"); + * + * @param fs The functions + * @returns *this + * @see tweeny::easing + */ + template tween & via(const std::string & easing, Fs... fs); + + /** + * @brief Specifies the easing function for the last added point, accepting an easing name as a `const char *` value. + * + * This will specify the easing between the last tween point added by @p to and its previous step. + * You can mix-and-match enumerated easings, functions and easing names. + * + * **Example**: + * + * @code + * auto tween = tweeny::from(0.0f, 100.0f).to(100.0f, 0.0f).via(tweeny::easing::linear, "backOut"); + * + * @param fs The functions + * @returns *this + * @see tweeny::easing + */ + template tween & via(const char * easing, Fs... fs); + + /** + * @brief Specifies the easing function for a specific point. + * + * Points starts at index 0. The index 0 refers to the first @p to call. + * Using this function without adding a point with @p to leads to undefined + * behaviour. + * + * @param index The tween point index + * @param fs The functions + * @returns *this + * @see tweeny::easing + */ + template tween & via(int index, Fs... fs); + + /** + * @brief Specifies the duration, typically in milliseconds, for the tweening of values in last point. + * + * You can either specify a single duration for all values or give every value its own duration. Value types + * must be convertible to the uint16_t type. + * + * **Example**: + * + * @code + * // Specify that the first point will be reached in 100 milliseconds and the first value in the second + * // point in 100, whereas the second value will be reached in 500. + * auto tween = tweeny::from(0, 0).to(100, 200).during(100).to(200, 300).during(100, 500); + * @endcode + * + * @param ds Duration values + * @returns *this + */ + template tween & during(Ds... ds); + + /** + * @brief Steps the animation by the designated delta amount. + * + * You should call this every frame of your application, passing in the amount of delta time that + * you want to animate. + * + * **Example**: + * + * @code + * // tween duration is 100ms + * auto tween = tweeny::from(0).to(100).during(100); + * + * // steps for 16ms + * tween.step(16); + * @endcode + * + * @param dt Delta duration + * @param suppressCallbacks (Optional) Suppress callbacks registered with tween::onStep() + * @returns std::tuple with the current tween values. + */ + const typename detail::tweentraits::valuesType & step(int32_t dt, bool suppressCallbacks = false); + + /** + * @brief Steps the animation by the designated delta amount. + * + * You should call this every frame of your application, passing in the amount of delta time that + * you want to animate. This overload exists to match unsigned int arguments. + * + * @param dt Delta duration + * @param suppressCallbacks (Optional) Suppress callbacks registered with tween::onStep() + * @returns std::tuple with the current tween values. + */ + const typename detail::tweentraits::valuesType & step(uint32_t dt, bool suppressCallbacks = false); + + /** + * @brief Steps the animation by the designated percentage amount. + * + * You can use this function to step the tweening by a specified percentage delta. + + * **Example**: + * + * @code + * // tween duration is 100ms + * auto tween = tweeny::from(0).to(100).during(100); + * + * // steps for 16ms + * tween.step(0.001f); + * @endcode + * + * @param dp Delta percentage, between `0.0f` and `1.0f` + * @param suppressCallbacks (Optional) Suppress callbacks registered with tween::onStep() + * @returns std::tuple with the current tween values. + */ + const typename detail::tweentraits::valuesType & step(float dp, bool suppressCallbacks = false); + + /** + * @brief Seeks to a specified point in time based on the currentProgress. + * + * This function sets the current animation time and currentProgress. Callbacks set by @p call will be triggered. + * + * @param p The percentage to seek to, between 0.0f and 1.0f, inclusive. + * @param suppressCallbacks (Optional) Suppress callbacks registered with tween::onSeek() + * @returns std::tuple with the current tween values. + */ + const typename detail::tweentraits::valuesType & seek(float p, bool suppressCallbacks = false); + + /** + * @brief Seeks to a specified point in time. + * + * This function sets the current animation time and currentProgress. Callbacks set by @p call will be triggered. + * + * @param d The duration to seek to, between 0 and the total duration. + * @param suppressCallbacks (Optional) Suppress callbacks registered with tween::onSeek() + * @returns std::tuple with the current tween values. + * @see duration + */ + const typename detail::tweentraits::valuesType & seek(int32_t d, bool suppressCallbacks = false); + + /** + * @brief Seeks to a specified point in time. + * + * This function sets the current animation time and currentProgress. Callbacks set by @p call will be triggered. + * + * @param d The duration to seek to, between 0 and the total duration. + * @param suppressCallbacks (Optional) Suppress callbacks registered with tween::onSeek() + * @returns std::tuple with the current tween values. + * @see duration + */ + const typename detail::tweentraits::valuesType & seek(uint32_t d, bool suppressCallbacks = false); + + /** + * @brief Adds a callback that will be called when stepping occurs, accepting both the tween and + * its values. + * + * You can add as many callbacks as you want. Its arguments types must be equal to the argument types + * of a tween instance, preceded by a variable of the tween type. Callbacks can be of any callable type. It will only be called + * via tween::step() functions. For seek callbacks, see tween::onSeek(). + * + * Keep in mind that the function will be *copied* into an array, so any variable captured by value + * will also be copied with it. + * + * If the callback returns false, it will be called next time. If it returns true, it will be removed from + * the callback queue. + * + * **Example**: + * + * @code + * auto t = tweeny:from(0).to(100).during(100); + * + * // pass a lambda + * t.onStep([](tweeny::tween & t, int v) { printf("%d ", v); return false; }); + * + * // pass a functor instance + * struct ftor { void operator()(tweeny::tween & t, int v) { printf("%d ", v); return false; } }; + * t.onStep(ftor()); + * @endcode + * @sa step + * @sa seek + * @sa onSeek + * @param callback A callback in with the prototype `bool callback(tween & t, Ts...)` + */ + tween & onStep(typename detail::tweentraits::callbackType callback); + + /** + * @brief Adds a callback that will be called when stepping occurs, accepting only the tween. + * + * You can add as many callbacks as you want. It must receive the tween as an argument. + * Callbacks can be of any callable type. It will only be called + * via tween::step() functions. For seek callbacks, see tween::onSeek(). + * + * Keep in mind that the function will be *copied* into an array, so any variable captured by value + * will also be copied with it. + * + * If the callback returns false, it will be called next time. If it returns true, it will be removed from + * the callback queue. + * + * **Example**: + * + * @code + * auto t = tweeny:from(0).to(100).during(100); + * + * // pass a lambda + * t.onStep([](tweeny::tween & t) { printf("%d ", t.value()); return false; }); + * + * // pass a functor instance + * struct ftor { void operator()(tweeny::tween & t) { printf("%d ", t.values()); return false; } }; + * t.onStep(ftor()); + * @endcode + * @sa step + * @sa seek + * @sa onSeek + * @param callback A callback in the form `bool f(tween & t)` + */ + tween & onStep(typename detail::tweentraits::noValuesCallbackType callback); + + /** + * @brief Adds a callback that will be called when stepping occurs, accepting only the tween values. + * + * You can add as many callbacks as you want. It must receive the tween values as an argument. + * Callbacks can be of any callable type. It will only be called + * via tween::step() functions. For seek callbacks, see tween::onSeek(). + * + * Keep in mind that the function will be *copied* into an array, so any variable captured by value + * will also be copied with it. + * + * If the callback returns false, it will be called next time. If it returns true, it will be removed from + * the callback queue. + * + * **Example**: + * + * @code + * auto t = tweeny:from(0).to(100).during(100); + * + * // pass a lambda + * t.onStep([](int v) { printf("%d ", v); return false; }); + * + * // pass a functor instance + * struct ftor { void operator()(int x) { printf("%d ", x); return false; } }; + * t.onStep(ftor()); + * @endcode + * @sa step + * @sa seek + * @sa onSeek + * @param callback A callback in the form `bool f(Ts...)` + */ + tween & onStep(typename detail::tweentraits::noTweenCallbackType callback); + + /** + * @brief Adds a callback for that will be called when seeking occurs + * + * You can add as many callbacks as you want. Its arguments types must be equal to the argument types + * of a tween instance, preceded by a variable of the tween typve. Callbacks can be of any callable type. It will be called + * via tween::seek() functions. For step callbacks, see tween::onStep(). + * + * Keep in mind that the function will be *copied* into an array, so any variable captured by value + * will also be copied with it. + * + * If the callback returns false, it will be called next time. If it returns true, it will be removed from + * the callback queue. + * + * **Example**: + * + * @code + * auto t = t:from(0).to(100).during(100); + * + * // pass a lambda + * t.onSeek([](tweeny::tween & t, int v) { printf("%d ", v); }); + * + * // pass a functor instance + * struct ftor { void operator()(tweeny::tween & t, int v) { printf("%d ", v); } }; + * t.onSeek(ftor()); + * @endcode + * @param callback A callback in with the prototype `bool callback(tween & t, Ts...)` + */ + tween & onSeek(typename detail::tweentraits::callbackType callback); + + /** + * @brief Adds a callback for that will be called when seeking occurs, accepting only the tween values. + * + * You can add as many callbacks as you want. It must receive the tween as an argument. + * Callbacks can be of any callable type. It will be called + * via tween::seek() functions. For step callbacks, see tween::onStep(). + * + * Keep in mind that the function will be *copied* into an array, so any variable captured by value + * will also be copied again. + * + * If the callback returns false, it will be called next time. If it returns true, it will be removed from + * the callback queue. + * + * **Example**: + * + * @code + * auto t = t:from(0).to(100).during(100); + * + * // pass a lambda + * t.onSeek([](int v) { printf("%d ", v); }); + * + * // pass a functor instance + * struct ftor { void operator()(int v) { printf("%d ", v); return false; } }; + * t.onSeek(ftor()); + * @endcode + * @param callback A callback in the form `bool f(Ts...)` + */ + tween & onSeek(typename detail::tweentraits::noTweenCallbackType callback); + + /** + * @brief Adds a callback for that will be called when seeking occurs, accepting only the tween. + * + * You can add as many callbacks as you want. It must receive the tween as an argument. + * Callbacks can be of any callable type. It will be called + * via tween::seek() functions. For step callbacks, see tween::onStep(). + * + * Keep in mind that the function will be *copied* into an array, so any variable captured by value + * will also be copied again. + * + * If the callback returns false, it will be called next time. If it returns true, it will be removed from + * the callback queue. + * + * **Example**: + * + * @code + * auto t = t:from(0).to(100).during(100); + * + * // pass a lambda + * t.onSeek([](tweeny::tween & t) { printf("%d ", t.value()); return false; }); + * + * // pass a functor instance + * struct ftor { void operator()(tweeny::tween & t) { printf("%d ", t.value()); return false; } }; + * t.onSeek(ftor()); + * @endcode + * @param callback A callback in the form `bool f(tween & t)` + */ + tween & onSeek(typename detail::tweentraits::noValuesCallbackType callback); + + /** + * @brief Returns the total duration of this tween + * + * @returns The duration of all the tween points. + */ + uint32_t duration() const; + + /** + * @brief Returns the current tween values + * + * This returns the current tween value as returned by the + * tween::step() function, except that it does not perform a step. + * @returns std::tuple with the current tween values. + */ + const typename detail::tweentraits::valuesType & peek() const; + + /** + * @brief Calculates and returns the tween values at a given progress + * + * This returns the tween value at the requested progress, without stepping + * or seeking. + * @returns std::tuple with the current tween values. + */ + const typename detail::tweentraits::valuesType peek(float progress) const; + + + /** + * @brief Calculates and return the tween values at a given time + * + * This returns the tween values at the requested time, without stepping + * or seeking. + * @returns std::tuple with the calculated tween values. + */ + const typename detail::tweentraits::valuesType peek(uint32_t time) const; + + /** + * @brief Returns the current currentProgress of the interpolation. + * + * 0 means its at the values passed in the construction, 1 means the last step. + * @returns the current currentProgress between 0 and 1 (inclusive) + */ + float progress() const; + + /** + * @brief Sets the direction of this tween forward. + * + * Note that this only affects tween::step() function. + * @returns *this + * @sa backward + */ + tween & forward(); + + /** + * @brief Sets the direction of this tween backward. + * + * Note that this only affects tween::step() function. + * @returns *this + * @sa forward + */ + tween & backward(); + + /** + * @brief Returns the current direction of this tween + * + * @returns -1 If it is mobin backwards in time, 1 if it is moving forward in time + */ + int direction() const; + + /** + * @brief Jumps to a specific tween point + * + * This will seek the tween to a percentage matching the beginning of that step. + * + * @param point The point to seek to. 0 means the point passed in tweeny::from + * @param suppressCallbacks (optional) set to true to suppress seek() callbacks + * @returns current values + * @sa seek + */ + const typename detail::tweentraits::valuesType & jump(size_t point, bool suppressCallbacks = false); + + /** + * @brief Returns the current tween point + * + * @returns Current tween point + */ + uint16_t point() const; + + private /* member types */: + using traits = detail::tweentraits; + + private /* member variables */: + uint32_t total = 0; // total runtime + uint16_t currentPoint = 0; // current point + float currentProgress = 0; // current progress + std::vector> points; + typename traits::valuesType current; + std::vector onStepCallbacks; + std::vector onSeekCallbacks; + int8_t currentDirection = 1; + + private: + /* member functions */ + tween(T t, Ts... vs); + template void interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type) const; + void interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type<0>) const; + void render(float p); + void dispatch(std::vector & cbVector); + uint16_t pointAt(float progress) const; + }; + + /** + * @brief Class specialization when a tween has a single value + * + * This class is preferred automatically by your compiler when your tween has only one value. It exists mainly + * so that you dont need to use std::get<0> to obtain a single value when using tween::step, tween::seek or any other + * value returning function. Other than that, you should look at the + * tweeny::tween documentation. + * + * Except for this little detail, this class methods and behaviours are exactly the same. + */ + template + class tween { + public: + static tween from(T t); + + public: + tween(); ///< @sa tween::tween + tween & to(T t); ///< @sa tween::to + template tween & via(Fs... fs); ///< @sa tween::via + template tween & via(int index, Fs... fs); ///< @sa tween::via + template tween & via(tweeny::easing::enumerated enumerated, Fs... fs); ///< @sa tween::via + template tween & via(const std::string & easing, Fs... fs); ///< @sa tween::via + template tween & via(const char * easing, Fs... fs); ///< @sa tween::via + template tween & during(Ds... ds); ///< @sa tween::during + const T & step(int32_t dt, bool suppressCallbacks = false); ///< @sa tween::step(int32_t dt, bool suppressCallbacks) + const T & step(uint32_t dt, bool suppressCallbacks = false); ///< @sa tween::step(uint32_t dt, bool suppressCallbacks) + const T & step(float dp, bool suppressCallbacks = false); ///< @sa tween::step(float dp, bool suppressCallbacks) + const T & seek(float p, bool suppressCallbacks = false); ///< @sa tween::seek(float p, bool suppressCallbacks) + const T & seek(int32_t d, bool suppressCallbacks = false); ///< @sa tween::seek(int32_t d, bool suppressCallbacks) + const T & seek(uint32_t d, bool suppressCallbacks = false); ///< @sa tween::seek(uint32_t d, bool suppressCallbacks) + tween & onStep(typename detail::tweentraits::callbackType callback); ///< @sa tween::onStep + tween & onStep(typename detail::tweentraits::noValuesCallbackType callback); ///< @sa tween::onStep + tween & onStep(typename detail::tweentraits::noTweenCallbackType callback); ///< @sa tween::onStep + tween & onSeek(typename detail::tweentraits::callbackType callback); ///< @sa tween::onSeek + tween & onSeek(typename detail::tweentraits::noValuesCallbackType callback); ///< @sa tween::onSeek + tween & onSeek(typename detail::tweentraits::noTweenCallbackType callback); ///< @sa tween::onSeek + const T & peek() const; ///< @sa tween::peek + T peek(float progress) const; ///< @sa tween::peek + T peek(uint32_t time) const; ///< @sa tween::peek + uint32_t duration() const; ///< @sa tween::duration + float progress() const; ///< @sa tween::progress + tween & forward(); ///< @sa tween::forward + tween & backward(); ///< @sa tween::backward + int direction() const; ///< @sa tween::direction + const T & jump(size_t point, bool suppressCallbacks = false); ///< @sa tween::jump + uint16_t point() const; ///< @sa tween::point + + private /* member types */: + using traits = detail::tweentraits; + + private /* member variables */: + uint32_t total = 0; // total runtime + uint16_t currentPoint = 0; // current point + float currentProgress = 0; // current progress + std::vector> points; + T current; + std::vector onStepCallbacks; + std::vector onSeekCallbacks; + int8_t currentDirection = 1; + + private: + /* member functions */ + tween(T t); + void interpolate(float prog, unsigned point, T & value) const; + void render(float p); + void dispatch(std::vector & cbVector); + uint16_t pointAt(float progress) const; + }; +} + +#include "tween.tcc" +#include "tweenone.tcc" + +#endif //TWEENY_TWEEN_H diff --git a/include/tweeny/tween.tcc b/include/tweeny/tween.tcc new file mode 100644 index 0000000..4523936 --- /dev/null +++ b/include/tweeny/tween.tcc @@ -0,0 +1,346 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * The purpose of this file is to hold implementations for the tween.h file. + */ + +#ifndef TWEENY_TWEEN_TCC +#define TWEENY_TWEEN_TCC + +#include "tween.h" +#include "dispatcher.h" + +namespace tweeny { + + namespace detail { + template + T clip(const T & n, const T & lower, const T & upper) { + return std::max(lower, std::min(n, upper)); + } + } + + template inline tween tween::from(T t, Ts... vs) { return tween(t, vs...); } + template inline tween::tween() { } + template inline tween::tween(T t, Ts... vs) { + points.emplace_back(t, vs...); + } + + template inline tween & tween::to(T t, Ts... vs) { + points.emplace_back(t, vs...); + return *this; + } + + template + template + inline tween & tween::via(Fs... vs) { + points.at(points.size() - 2).via(vs...); + return *this; + } + + template + template + inline tween & tween::via(int index, Fs... vs) { + points.at(static_cast(index)).via(vs...); + return *this; + } + + template + template + tween & tween::via(easing::enumerated enumerated, Fs... vs) { + switch (enumerated) { + case easing::enumerated::def: return via(easing::def, vs...); + case easing::enumerated::linear: return via(easing::linear, vs...); + case easing::enumerated::stepped: return via(easing::stepped, vs...); + case easing::enumerated::quadraticIn: return via(easing::quadraticIn, vs...); + case easing::enumerated::quadraticOut: return via(easing::quadraticOut, vs...); + case easing::enumerated::quadraticInOut: return via(easing::quadraticInOut, vs...); + case easing::enumerated::cubicIn: return via(easing::cubicIn, vs...); + case easing::enumerated::cubicOut: return via(easing::cubicOut, vs...); + case easing::enumerated::cubicInOut: return via(easing::cubicInOut, vs...); + case easing::enumerated::quarticIn: return via(easing::quarticIn, vs...); + case easing::enumerated::quarticOut: return via(easing::quarticOut, vs...); + case easing::enumerated::quarticInOut: return via(easing::quarticInOut, vs...); + case easing::enumerated::quinticIn: return via(easing::quinticIn, vs...); + case easing::enumerated::quinticOut: return via(easing::quinticOut, vs...); + case easing::enumerated::quinticInOut: return via(easing::quinticInOut, vs...); + case easing::enumerated::sinusoidalIn: return via(easing::sinusoidalIn, vs...); + case easing::enumerated::sinusoidalOut: return via(easing::sinusoidalOut, vs...); + case easing::enumerated::sinusoidalInOut: return via(easing::sinusoidalInOut, vs...); + case easing::enumerated::exponentialIn: return via(easing::exponentialIn, vs...); + case easing::enumerated::exponentialOut: return via(easing::exponentialOut, vs...); + case easing::enumerated::exponentialInOut: return via(easing::exponentialInOut, vs...); + case easing::enumerated::circularIn: return via(easing::circularIn, vs...); + case easing::enumerated::circularOut: return via(easing::circularOut, vs...); + case easing::enumerated::circularInOut: return via(easing::circularInOut, vs...); + case easing::enumerated::bounceIn: return via(easing::bounceIn, vs...); + case easing::enumerated::bounceOut: return via(easing::bounceOut, vs...); + case easing::enumerated::bounceInOut: return via(easing::bounceInOut, vs...); + case easing::enumerated::elasticIn: return via(easing::elasticIn, vs...); + case easing::enumerated::elasticOut: return via(easing::elasticOut, vs...); + case easing::enumerated::elasticInOut: return via(easing::elasticInOut, vs...); + case easing::enumerated::backIn: return via(easing::backIn, vs...); + case easing::enumerated::backOut: return via(easing::backOut, vs...); + case easing::enumerated::backInOut: return via(easing::backInOut, vs...); + default: return via(easing::def, vs...); + } + } + + template + template + tween & tween::via(const std::string & easing, Fs... vs) { + if (easing == "stepped") return via(easing::stepped, vs...); + if (easing == "linear") return via(easing::linear, vs...); + if (easing == "quadraticIn") return via(easing::quadraticIn, vs...); + if (easing == "quadraticOut") return via(easing::quadraticOut, vs...); + if (easing == "quadraticInOut") return via(easing::quadraticInOut, vs...); + if (easing == "cubicIn") return via(easing::cubicIn, vs...); + if (easing == "cubicOut") return via(easing::cubicOut, vs...); + if (easing == "cubicInOut") return via(easing::cubicInOut, vs...); + if (easing == "quarticIn") return via(easing::quarticIn, vs...); + if (easing == "quarticOut") return via(easing::quarticOut, vs...); + if (easing == "quarticInOut") return via(easing::quarticInOut, vs...); + if (easing == "quinticIn") return via(easing::quinticIn, vs...); + if (easing == "quinticOut") return via(easing::quinticOut, vs...); + if (easing == "quinticInOut") return via(easing::quinticInOut, vs...); + if (easing == "sinusoidalIn") return via(easing::sinusoidalIn, vs...); + if (easing == "sinusoidalOut") return via(easing::sinusoidalOut, vs...); + if (easing == "sinusoidalInOut") return via(easing::sinusoidalInOut, vs...); + if (easing == "exponentialIn") return via(easing::exponentialIn, vs...); + if (easing == "exponentialOut") return via(easing::exponentialOut, vs...); + if (easing == "exponentialInOut") return via(easing::exponentialInOut, vs...); + if (easing == "circularIn") return via(easing::circularIn, vs...); + if (easing == "circularOut") return via(easing::circularOut, vs...); + if (easing == "circularInOut") return via(easing::circularInOut, vs...); + if (easing == "bounceIn") return via(easing::bounceIn, vs...); + if (easing == "bounceOut") return via(easing::bounceOut, vs...); + if (easing == "bounceInOut") return via(easing::bounceInOut, vs...); + if (easing == "elasticIn") return via(easing::elasticIn, vs...); + if (easing == "elasticOut") return via(easing::elasticOut, vs...); + if (easing == "elasticInOut") return via(easing::elasticInOut, vs...); + if (easing == "backIn") return via(easing::backIn, vs...); + if (easing == "backOut") return via(easing::backOut, vs...); + if (easing == "backInOut") return via(easing::backInOut, vs...); + return via(easing::def, vs...); + } + + template + template + tween & tween::via(const char * easing, Fs... vs) { + return via(std::string(easing)); + } + + template + template + inline tween & tween::during(Ds... ds) { + total = 0; + points.at(points.size() - 2).during(ds...); + for (detail::tweenpoint & p : points) { + total += p.duration(); + p.stacked = total; + } + return *this; + } + + template + inline const typename detail::tweentraits::valuesType & tween::step(int32_t dt, bool suppress) { + return step(static_cast(dt)/static_cast(total), suppress); + } + + template + inline const typename detail::tweentraits::valuesType & tween::step(uint32_t dt, bool suppress) { + return step(static_cast(dt), suppress); + } + + template + inline const typename detail::tweentraits::valuesType & tween::step(float dp, bool suppress) { + dp *= currentDirection; + seek(currentProgress + dp, true); + if (!suppress) dispatch(onStepCallbacks); + return current; + } + + template + inline const typename detail::tweentraits::valuesType & tween::seek(float p, bool suppress) { + p = detail::clip(p, 0.0f, 1.0f); + currentProgress = p; + render(p); + if (!suppress) dispatch(onSeekCallbacks); + return current; + } + + template + inline const typename detail::tweentraits::valuesType & tween::seek(int32_t t, bool suppress) { + return seek(static_cast(t) / static_cast(total), suppress); + } + + template + inline uint32_t tween::duration() const { + return total; + } + + template + template + inline void tween::interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type) const { + auto & p = points.at(point); + auto pointDuration = uint32_t(p.duration() - (p.stacked - (prog * static_cast(total)))); + float pointTotal = static_cast(pointDuration) / static_cast(p.duration(I)); + if (pointTotal > 1.0f) pointTotal = 1.0f; + auto easing = std::get(p.easings); + std::get(values) = easing(pointTotal, std::get(p.values), std::get(points.at(point+1).values)); + interpolate(prog, point, values, detail::int2type{ }); + } + + template + inline void tween::interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type<0>) const { + auto & p = points.at(point); + auto pointDuration = uint32_t(p.duration() - (p.stacked - (prog * static_cast(total)))); + float pointTotal = static_cast(pointDuration) / static_cast(p.duration(0)); + if (pointTotal > 1.0f) pointTotal = 1.0f; + auto easing = std::get<0>(p.easings); + std::get<0>(values) = easing(pointTotal, std::get<0>(p.values), std::get<0>(points.at(point+1).values)); + } + + template + inline void tween::render(float p) { + currentPoint = pointAt(p); + interpolate(p, currentPoint, current, detail::int2type{ }); + } + + template + tween & tween::onStep(typename detail::tweentraits::callbackType callback) { + onStepCallbacks.push_back(callback); + return *this; + } + + template + tween & tween::onStep(typename detail::tweentraits::noValuesCallbackType callback) { + onStepCallbacks.push_back([callback](tween & t, T, Ts...) { return callback(t); }); + return *this; + } + + template + tween & tween::onStep(typename detail::tweentraits::noTweenCallbackType callback) { + onStepCallbacks.push_back([callback](tween &, T t, Ts... vs) { return callback(t, vs...); }); + return *this; + } + + template + tween & tween::onSeek(typename detail::tweentraits::callbackType callback) { + onSeekCallbacks.push_back(callback); + return *this; + } + + template + tween & tween::onSeek(typename detail::tweentraits::noValuesCallbackType callback) { + onSeekCallbacks.push_back([callback](tween & t, T, Ts...) { return callback(t); }); + return *this; + } + + template + tween & tween::onSeek(typename detail::tweentraits::noTweenCallbackType callback) { + onSeekCallbacks.push_back([callback](tween &, T t, Ts... vs) { return callback(t, vs...); }); + return *this; + } + + template + void tween::dispatch(std::vector & cbVector) { + std::vector dismissed; + for (size_t i = 0; i < cbVector.size(); ++i) { + auto && cb = cbVector[i]; + bool dismiss = detail::call(cb, std::tuple_cat(std::make_tuple(std::ref(*this)), current)); + if (dismiss) dismissed.push_back(i); + } + + if (dismissed.size() > 0) { + for (size_t i = 0; i < dismissed.size(); ++i) { + size_t index = dismissed[i]; + cbVector[index] = cbVector.at(cbVector.size() - 1 - i); + } + cbVector.resize(cbVector.size() - dismissed.size()); + } + } + + template + const typename detail::tweentraits::valuesType & tween::peek() const { + return current; + } + + template + const typename detail::tweentraits::valuesType tween::peek(float progress) const { + typename detail::tweentraits::valuesType values; + interpolate(progress, pointAt(progress), values, detail::int2type{ }); + return values; + } + + template + const typename detail::tweentraits::valuesType tween::peek(uint32_t time) const { + typename detail::tweentraits::valuesType values; + float progress = static_cast(time) / static_cast(total); + interpolate(progress, pointAt(progress), values, detail::int2type{ }); + return values; + } + + template + float tween::progress() const { + return currentProgress; + } + + template + tween & tween::forward() { + currentDirection = 1; + return *this; + } + + template + tween & tween::backward() { + currentDirection = -1; + return *this; + } + + template + int tween::direction() const { + return currentDirection; + } + + template + inline const typename detail::tweentraits::valuesType & tween::jump(std::size_t p, bool suppress) { + p = detail::clip(p, static_cast(0), points.size() -1); + return seek(static_cast(points.at(p).stacked), suppress); + } + + template inline uint16_t tween::point() const { + return currentPoint; + } + + template inline uint16_t tween::pointAt(float progress) const { + uint32_t t = static_cast(progress * total); + uint16_t point = 0; + while (t > points.at(point).stacked) point++; + if (point > 0 && t <= points.at(point - 1u).stacked) point--; + return point; + } +} + +#endif //TWEENY_TWEEN_TCC diff --git a/include/tweeny/tweenone.tcc b/include/tweeny/tweenone.tcc new file mode 100644 index 0000000..2967518 --- /dev/null +++ b/include/tweeny/tweenone.tcc @@ -0,0 +1,334 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * The purpose of this file is to hold implementations for the tween.h file, s + * pecializing on the single value case. + */ +#ifndef TWEENY_TWEENONE_TCC +#define TWEENY_TWEENONE_TCC + +#include "tween.h" +#include "dispatcher.h" + +namespace tweeny { + template inline tween tween::from(T t) { return tween(t); } + template inline tween::tween() { } + template inline tween::tween(T t) { + points.emplace_back(t); + } + + template inline tween & tween::to(T t) { + points.emplace_back(t); + return *this; + } + + template + template + inline tween & tween::via(Fs... vs) { + points.at(points.size() - 2).via(vs...); + return *this; + } + + template + template + inline tween & tween::via(int index, Fs... vs) { + points.at(static_cast(index)).via(vs...); + return *this; + } + + template + template + tween & tween::via(easing::enumerated enumerated, Fs... vs) { + switch (enumerated) { + case easing::enumerated::def: return via(easing::def, vs...); + case easing::enumerated::linear: return via(easing::linear, vs...); + case easing::enumerated::stepped: return via(easing::stepped, vs...); + case easing::enumerated::quadraticIn: return via(easing::quadraticIn, vs...); + case easing::enumerated::quadraticOut: return via(easing::quadraticOut, vs...); + case easing::enumerated::quadraticInOut: return via(easing::quadraticInOut, vs...); + case easing::enumerated::cubicIn: return via(easing::cubicIn, vs...); + case easing::enumerated::cubicOut: return via(easing::cubicOut, vs...); + case easing::enumerated::cubicInOut: return via(easing::cubicInOut, vs...); + case easing::enumerated::quarticIn: return via(easing::quarticIn, vs...); + case easing::enumerated::quarticOut: return via(easing::quarticOut, vs...); + case easing::enumerated::quarticInOut: return via(easing::quarticInOut, vs...); + case easing::enumerated::quinticIn: return via(easing::quinticIn, vs...); + case easing::enumerated::quinticOut: return via(easing::quinticOut, vs...); + case easing::enumerated::quinticInOut: return via(easing::quinticInOut, vs...); + case easing::enumerated::sinusoidalIn: return via(easing::sinusoidalIn, vs...); + case easing::enumerated::sinusoidalOut: return via(easing::sinusoidalOut, vs...); + case easing::enumerated::sinusoidalInOut: return via(easing::sinusoidalInOut, vs...); + case easing::enumerated::exponentialIn: return via(easing::exponentialIn, vs...); + case easing::enumerated::exponentialOut: return via(easing::exponentialOut, vs...); + case easing::enumerated::exponentialInOut: return via(easing::exponentialInOut, vs...); + case easing::enumerated::circularIn: return via(easing::circularIn, vs...); + case easing::enumerated::circularOut: return via(easing::circularOut, vs...); + case easing::enumerated::circularInOut: return via(easing::circularInOut, vs...); + case easing::enumerated::bounceIn: return via(easing::bounceIn, vs...); + case easing::enumerated::bounceOut: return via(easing::bounceOut, vs...); + case easing::enumerated::bounceInOut: return via(easing::bounceInOut, vs...); + case easing::enumerated::elasticIn: return via(easing::elasticIn, vs...); + case easing::enumerated::elasticOut: return via(easing::elasticOut, vs...); + case easing::enumerated::elasticInOut: return via(easing::elasticInOut, vs...); + case easing::enumerated::backIn: return via(easing::backIn, vs...); + case easing::enumerated::backOut: return via(easing::backOut, vs...); + case easing::enumerated::backInOut: return via(easing::backInOut, vs...); + default: return via(easing::def, vs...); + } + } + + template + template + tween & tween::via(const std::string & easing, Fs... vs) { + if (easing == "stepped") return via(easing::stepped, vs...); + if (easing == "linear") return via(easing::linear, vs...); + if (easing == "quadraticIn") return via(easing::quadraticIn, vs...); + if (easing == "quadraticOut") return via(easing::quadraticOut, vs...); + if (easing == "quadraticInOut") return via(easing::quadraticInOut, vs...); + if (easing == "cubicIn") return via(easing::cubicIn, vs...); + if (easing == "cubicOut") return via(easing::cubicOut, vs...); + if (easing == "cubicInOut") return via(easing::cubicInOut, vs...); + if (easing == "quarticIn") return via(easing::quarticIn, vs...); + if (easing == "quarticOut") return via(easing::quarticOut, vs...); + if (easing == "quarticInOut") return via(easing::quarticInOut, vs...); + if (easing == "quinticIn") return via(easing::quinticIn, vs...); + if (easing == "quinticOut") return via(easing::quinticOut, vs...); + if (easing == "quinticInOut") return via(easing::quinticInOut, vs...); + if (easing == "sinusoidalIn") return via(easing::sinusoidalIn, vs...); + if (easing == "sinusoidalOut") return via(easing::sinusoidalOut, vs...); + if (easing == "sinusoidalInOut") return via(easing::sinusoidalInOut, vs...); + if (easing == "exponentialIn") return via(easing::exponentialIn, vs...); + if (easing == "exponentialOut") return via(easing::exponentialOut, vs...); + if (easing == "exponentialInOut") return via(easing::exponentialInOut, vs...); + if (easing == "circularIn") return via(easing::circularIn, vs...); + if (easing == "circularOut") return via(easing::circularOut, vs...); + if (easing == "circularInOut") return via(easing::circularInOut, vs...); + if (easing == "bounceIn") return via(easing::bounceIn, vs...); + if (easing == "bounceOut") return via(easing::bounceOut, vs...); + if (easing == "bounceInOut") return via(easing::bounceInOut, vs...); + if (easing == "elasticIn") return via(easing::elasticIn, vs...); + if (easing == "elasticOut") return via(easing::elasticOut, vs...); + if (easing == "elasticInOut") return via(easing::elasticInOut, vs...); + if (easing == "backIn") return via(easing::backIn, vs...); + if (easing == "backOut") return via(easing::backOut, vs...); + if (easing == "backInOut") return via(easing::backInOut, vs...); + return via(easing::def, vs...); + } + + template + template + tween & tween::via(const char * easing, Fs... vs) { + return via(std::string(easing)); + } + + template + template + inline tween & tween::during(Ds... ds) { + total = 0; + points.at(points.size() - 2).during(ds...); + for (detail::tweenpoint & p : points) { + total += p.duration(); + p.stacked = total; + } + return *this; + } + + template + inline const T & tween::step(int32_t dt, bool suppress) { + return step(static_cast(dt)/static_cast(total), suppress); + } + + template + inline const T & tween::step(uint32_t dt, bool suppress) { + return step(static_cast(dt), suppress); + } + + template + inline const T & tween::step(float dp, bool suppress) { + dp *= currentDirection; + seek(currentProgress + dp, true); + if (!suppress) dispatch(onStepCallbacks); + return current; + } + + template + inline const T & tween::seek(float p, bool suppress) { + p = detail::clip(p, 0.0f, 1.0f); + currentProgress = p; + render(p); + if (!suppress) dispatch(onSeekCallbacks); + return current; + } + + template + inline const T & tween::seek(int32_t t, bool suppress) { + return seek(static_cast(t) / static_cast(total), suppress); + } + + template + inline const T & tween::seek(uint32_t t, bool suppress) { + return seek(static_cast(t) / static_cast(total), suppress); + } + + template + inline uint32_t tween::duration() const { + return total; + } + + template + inline void tween::interpolate(float prog, unsigned point, T & value) const { + auto & p = points.at(point); + auto pointDuration = uint32_t(p.duration() - (p.stacked - (prog * static_cast(total)))); + float pointTotal = static_cast(pointDuration) / static_cast(p.duration()); + if (pointTotal > 1.0f) pointTotal = 1.0f; + auto easing = std::get<0>(p.easings); + value = easing(pointTotal, std::get<0>(p.values), std::get<0>(points.at(point+1).values)); + } + + template + inline void tween::render(float p) { + currentPoint = pointAt(p); + interpolate(p, currentPoint, current); + } + + template + tween & tween::onStep(typename detail::tweentraits::callbackType callback) { + onStepCallbacks.push_back(callback); + return *this; + } + + template + tween & tween::onStep(typename detail::tweentraits::noValuesCallbackType callback) { + onStepCallbacks.push_back([callback](tween & tween, T) { return callback(tween); }); + return *this; + } + + template + tween & tween::onStep(typename detail::tweentraits::noTweenCallbackType callback) { + onStepCallbacks.push_back([callback](tween &, T v) { return callback(v); }); + return *this; + } + + template + tween & tween::onSeek(typename detail::tweentraits::callbackType callback) { + onSeekCallbacks.push_back(callback); + return *this; + } + + template + tween & tween::onSeek(typename detail::tweentraits::noValuesCallbackType callback) { + onSeekCallbacks.push_back([callback](tween & t, T) { return callback(t); }); + return *this; + } + + template + tween & tween::onSeek(typename detail::tweentraits::noTweenCallbackType callback) { + onSeekCallbacks.push_back([callback](tween &, T v) { return callback(v); }); + return *this; + } + + template + void tween::dispatch(std::vector & cbVector) { + std::vector dismissed; + for (size_t i = 0; i < cbVector.size(); ++i) { + auto && cb = cbVector[i]; + bool dismiss = cb(*this, current); + if (dismiss) dismissed.push_back(i); + } + + if (dismissed.size() > 0) { + for (size_t i = 0; i < dismissed.size(); ++i) { + size_t index = dismissed[i]; + cbVector[index] = cbVector.at(cbVector.size() - 1 - i); + } + cbVector.resize(cbVector.size() - dismissed.size()); + } + } + + template + const T & tween::peek() const { + return current; + } + + + template + T tween::peek(float progress) const { + T value; + interpolate(progress, pointAt(progress), value); + return value; + } + + template + T tween::peek(uint32_t time) const { + T value; + float progress = static_cast(time) / static_cast(total); + interpolate(progress, pointAt(progress), value); + return value; + } + + + template + float tween::progress() const { + return currentProgress; + } + + template + tween & tween::forward() { + currentDirection = 1; + return *this; + } + + template + tween & tween::backward() { + currentDirection = -1; + return *this; + } + + template + int tween::direction() const { + return currentDirection; + } + + template + inline const T & tween::jump(size_t p, bool suppress) { + p = detail::clip(p, static_cast(0), points.size() -1); + return seek(points.at(p).stacked, suppress); + } + + template inline uint16_t tween::point() const { + return currentPoint; + } + + + + template inline uint16_t tween::pointAt(float progress) const { + auto t = static_cast(progress * total); + uint16_t point = 0; + while (t > points.at(point).stacked) point++; + if (point > 0 && t <= points.at(point - 1u).stacked) point--; + return point; + } +} +#endif //TWEENY_TWEENONE_TCC diff --git a/include/tweeny/tweenpoint.h b/include/tweeny/tweenpoint.h new file mode 100644 index 0000000..732446c --- /dev/null +++ b/include/tweeny/tweenpoint.h @@ -0,0 +1,82 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * This file provides the declarations for a tween point utility class. A tweenpoint holds the tween values, + * easings and durations. + */ + + +#ifndef TWEENY_TWEENPOINT_H +#define TWEENY_TWEENPOINT_H + + +#include +#include + +#include "tweentraits.h" + +namespace tweeny { + namespace detail { + /* + * The tweenpoint class aids in the management of a tweening point by the tween class. + * This class is private. + */ + template + struct tweenpoint { + typedef detail::tweentraits traits; + + typename traits::valuesType values; + typename traits::durationsArrayType durations; + typename traits::easingCollection easings; + typename traits::callbackType onEnterCallbacks; + uint32_t stacked; + + /* Constructs a tweenpoint from a set of values, filling their durations and easings */ + tweenpoint(Ts... vs); + + /* Set the duration for all the values in this point */ + template void during(D milis); + + /* Sets the duration for each value in this point */ + template void during(Ds... vs); + + /* Sets the easing functions of each value */ + template void via(Fs... fs); + + /* Sets the same easing function for all values */ + template void via(F f); + + /* Returns the highest value in duration array */ + uint16_t duration() const; + + /* Returns the value of that specific value */ + uint16_t duration(size_t i) const; + }; + } +} + +#include "tweenpoint.tcc" + +#endif //TWEENY_TWEENPOINT_H diff --git a/include/tweeny/tweenpoint.tcc b/include/tweeny/tweenpoint.tcc new file mode 100644 index 0000000..c5cda0e --- /dev/null +++ b/include/tweeny/tweenpoint.tcc @@ -0,0 +1,115 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * This file implements the tweenpoint class + */ + +#ifndef TWEENY_TWEENPOINT_TCC +#define TWEENY_TWEENPOINT_TCC + +#include +#include + +#include "tweenpoint.h" +#include "tweentraits.h" +#include "easing.h" +#include "easingresolve.h" +#include "int2type.h" + +namespace tweeny { + namespace detail { + template void easingfill(EasingCollectionT & f, EasingT easing, int2type) { + easingresolve::impl(f, easing); + easingfill(f, easing, int2type{ }); + } + + template void easingfill(EasingCollectionT & f, EasingT easing, int2type<0>) { + easingresolve<0, TypeTupleT, EasingCollectionT, EasingT>::impl(f, easing); + } + + + template + struct are_same; + + template + struct are_same + { + static const bool value = std::is_same::value && are_same::value; + }; + + template + struct are_same + { + static const bool value = true; + }; + + + template + inline tweenpoint::tweenpoint(Ts... vs) : values{vs...} { + during(static_cast(0)); + via(easing::def); + } + + template + template + inline void tweenpoint::during(D milis) { + for (uint16_t & t : durations) { t = static_cast(milis); } + } + + template + template + inline void tweenpoint::during(Ds... milis) { + static_assert(sizeof...(Ds) == sizeof...(Ts), + "Amount of durations should be equal to the amount of values in a point"); + std::array list = {{ milis... }}; + std::copy(list.begin(), list.end(), durations.begin()); + } + + template + template + inline void tweenpoint::via(Fs... fs) { + static_assert(sizeof...(Fs) == sizeof...(Ts), + "Number of functions passed to via() must be equal the number of values."); + detail::easingresolve<0, std::tuple, typename traits::easingCollection, Fs...>::impl(easings, fs...); + } + + template + template + inline void tweenpoint::via(F f) { + easingfill(easings, f, int2type{ }); + } + + template + inline uint16_t tweenpoint::duration() const { + return *std::max_element(durations.begin(), durations.end()); + } + + template + inline uint16_t tweenpoint::duration(size_t i) const { + return durations.at(i); + } + } +} +#endif //TWEENY_TWEENPOINT_TCC diff --git a/include/tweeny/tweentraits.h b/include/tweeny/tweentraits.h new file mode 100644 index 0000000..f9c7905 --- /dev/null +++ b/include/tweeny/tweentraits.h @@ -0,0 +1,75 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * This file provides useful typedefs and traits for a tween. + */ + +#ifndef TWEENY_TWEENTRAITS_H +#define TWEENY_TWEENTRAITS_H + +#include +#include +#include + +namespace tweeny { + template class tween; + + namespace detail { + + template struct equal {}; + template struct equal { enum { value = true }; }; + template struct equal { + enum { value = std::is_same::value && equal::value && equal::value }; + }; + + template struct first { typedef T type; }; + + template + struct valuetype { }; + + template + struct valuetype { + typedef std::tuple type; + }; + + template + struct valuetype { + typedef std::array::type, sizeof...(Ts)> type; + }; + + template + struct tweentraits { + typedef std::tuple...> easingCollection; + typedef std::function &, Ts...)> callbackType; + typedef std::function &)> noValuesCallbackType; + typedef std::function noTweenCallbackType; + typedef typename valuetype::value, Ts...>::type valuesType; + typedef std::array durationsArrayType; + typedef tween type; + }; + } +} + +#endif //TWEENY_TWEENTRAITS_H diff --git a/include/tweeny/tweeny.h b/include/tweeny/tweeny.h new file mode 100644 index 0000000..3c7ba44 --- /dev/null +++ b/include/tweeny/tweeny.h @@ -0,0 +1,102 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** + * @file tweeny.h + * This file is the main header file for Tweeny. You should not need to include anything else. + */ + +/** + * @mainpage Tweeny + * + * Tweeny is an inbetweening library designed for the creation of complex animations for games and other beautiful + * interactive software. It leverages features of modern C++ to empower developers with an intuitive API for + * declaring tweenings of any type of value, as long as they support arithmetic operations. + * + * This document contains Tweeny's API reference. The most interesting parts are: + * + * * The Fine @ref manual + * * The tweeny::from global function, to start a new tween. + * * The tweeny::tween class itself, that has all the interesting methods for a tween. + * * The modules page has a list of type of easings. + * + * This is how the API looks like: + * + * @code + * + * #include "tweeny.h" + * + * using tweeny::easing; + * + * int main() { + * // steps 1% each iteration + * auto tween = tweeny::from(0).to(100).during(100).via(easing::linear); + * while (tween.progress() < 1.0f) tween.step(0.01f); + * + * // a tween with multiple values + * auto tween2 = tweeny::from(0, 1.0f).to(1200, 7.0f).during(1000).via(easing::backInOut, easing::linear); + * + * // a tween with multiple points, different easings and durations + * auto tween3 = tweeny::from(0, 0) + * .to(100, 100).during(100).via(easing::backOut, easing::backOut) + * .to(200, 200).during(500).via(easing::linear); + * return 0; + * } + * + * @endcode + * + * **Examples** + * + * * Check tweeny-demos repository to see demonstration code + * + * **Useful links and references** + * * Tim Groleau's easing function generator (requires flash) + * * Easing cheat sheet (contains graphics!) + */ + +#ifndef TWEENY_H +#define TWEENY_H + +#include "tween.h" +#include "easing.h" + +/** + * @brief The tweeny namespace contains all symbols and names for the Tweeny library. + */ +namespace tweeny { + /** + * @brief Creates a tween starting from the values defined in the arguments. + * + * Starting values can have heterogeneous types, even user-defined types, provided they implement the + * four arithmetic operators (+, -, * and /). The types used will also define the type of each next step, the type + * of the callback and the type of arguments the passed easing functions must have. + * + * @sa tweeny::tween + */ + template tween from(Ts... vs); +} + +#include "tweeny.tcc" + +#endif //TWEENY_TWEENY_H diff --git a/include/tweeny/tweeny.tcc b/include/tweeny/tweeny.tcc new file mode 100644 index 0000000..e2defac --- /dev/null +++ b/include/tweeny/tweeny.tcc @@ -0,0 +1,40 @@ +/* + This file is part of the Tweeny library. + + Copyright (c) 2016-2021 Leonardo Guilherme Lucena de Freitas + Copyright (c) 2016 Guilherme R. Costa + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + 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 PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* + * This file provides the implementation for tweeny.h + */ + +#ifndef TWEENY_TWEENY_TCC +#define TWEENY_TWEENY_TCC + +#include "tween.h" + +namespace tweeny { + template inline tween from(Ts... vs) { + return tween::from(vs...); + } +} + +#endif //TWEENY_TWEENY_TCC diff --git a/resources/img/cards/c1.png b/resources/img/cards/c1.png new file mode 100644 index 0000000000000000000000000000000000000000..42bf5ec94d627831e095c53dd5480521f771f97d GIT binary patch literal 42481 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 literal 0 HcmV?d00001 diff --git a/resources/img/cards/c10.png b/resources/img/cards/c10.png new file mode 100644 index 0000000000000000000000000000000000000000..18af741dbd2d8eb0f8ac494065d50ee8b7bc326a GIT binary patch literal 54676 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/img/cards/c11.png b/resources/img/cards/c11.png new file mode 100644 index 0000000000000000000000000000000000000000..5e003be2d4c3fc8e67a0f63979c6b9054cd37fd6 GIT binary patch literal 208118 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