big ol update

This commit is contained in:
Garrett Dickinson 2024-07-31 00:06:54 -05:00
parent f4c9f1ad8c
commit bde5b90779
141 changed files with 3399 additions and 6053 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -1,14 +0,0 @@
{
"backtraceGraph" :
{
"commands" : [],
"files" : [],
"nodes" : []
},
"installers" : [],
"paths" :
{
"build" : ".",
"source" : "."
}
}

View File

@ -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
}
}
}
}

View File

@ -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"
}

View File

@ -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
}
}

12
.gitignore vendored
View File

@ -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/
testing/

8
.idea/.gitignore vendored
View File

@ -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

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CidrRootsConfiguration">
<sourceRoots>
<file path="$PROJECT_DIR$/include" />
<file path="$PROJECT_DIR$/src" />
</sourceRoots>
</component>
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Hydrangea.iml" filepath="$PROJECT_DIR$/.idea/Hydrangea.iml" />
</modules>
</component>
</project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -17,9 +17,9 @@ 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}
@ -29,7 +29,6 @@ add_executable( ${OUT_NAME}
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})

View File

@ -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

View File

@ -1 +0,0 @@
{"requests":[{"kind":"cache","version":2},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1},{"kind":"cmakeFiles","version":1}]}

File diff suppressed because it is too large Load Diff

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -1,14 +0,0 @@
{
"backtraceGraph" :
{
"commands" : [],
"files" : [],
"nodes" : []
},
"installers" : [],
"paths" :
{
"build" : ".",
"source" : "."
}
}

View File

@ -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
}
}
]
}
}
}
}

View File

@ -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"
}

View File

@ -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
}
}

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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"
}
]

View File

@ -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 <typename T>
void UpdatePairs(T* callback);

View File

@ -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);

View File

@ -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);

View File

@ -9,10 +9,9 @@ class InputManager
private:
public:
static std::vector<SDL_Event>& GetFrameEvents();
static void WindowEscape();
static bool key_down;
static std::vector<SDL_Event>& getFrameEvents();
static void windowEscape();
static bool keyDown;
};
#endif

View File

@ -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

View File

@ -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

View File

@ -966,7 +966,7 @@ class basic_memory_buffer final : public detail::buffer<T> {
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();

View File

@ -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

View File

@ -1,36 +0,0 @@
#include <iostream>
#include <strings.h>
#include <vector>
#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<Node*> children;
};
#endif

42
include/nodes/card.h Normal file
View File

@ -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

29
include/nodes/hand.h Normal file
View File

@ -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

44
include/nodes/node.h Normal file
View File

@ -0,0 +1,44 @@
#include <algorithm>
#include <iostream>
#include <strings.h>
#include <vector>
#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<Node *> children;
};
#endif

View File

@ -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

View File

@ -1,4 +1,5 @@
#include <vector>
#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*> node_tree;
std::vector<Node *> 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

44
include/nodes/sprite.h Normal file
View File

@ -0,0 +1,44 @@
#include <SDL2/SDL.h>
#include <SDL2/SDL_gpu.h>
#include <iostream>
#include <strings.h>
#include <math.h>
#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

View File

@ -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

View File

@ -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;
};

View File

@ -1,38 +0,0 @@
#include <SDL2/SDL.h>
#include <SDL2/SDL_gpu.h>
#include <iostream>
#include <strings.h>
#include <math.h>
#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

View File

@ -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 <tuple>
namespace tweeny {
namespace detail {
template<int ...> struct seq { };
template<int N, int ...S> struct gens : gens<N - 1, N - 1, S...> { };
template<int ...S> struct gens<0, S...> {
typedef seq<S...> type;
};
template<typename R, typename Func, typename TupleType, int ...S>
R dispatch(Func && f, TupleType && args, seq<S...>) {
return f(std::get<S>(args) ...);
}
template<typename R, typename Func, typename... Ts>
R call(Func && f, const std::tuple<Ts...> & args) {
return dispatch<R>(f, args, typename gens<sizeof...(Ts)>::type());
}
}
}
#endif //TWEENY_DISPATCHER_H

662
include/tweeny/easing.h Normal file
View File

@ -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 <cmath>
#include <type_traits>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
/**
* @defgroup easings Easings
* @brief Bundled easing functions based on
* <a href="http://robertpenner.com/easing/">Robert Penner's Easing Functions</a>
* @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<typename T>
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<class...> struct voidify { using type = void; };
template<class... Ts> using void_t = typename voidify<Ts...>::type;
template<class T, class = void>
struct supports_arithmetic_operations : std::false_type {};
template<class T>
struct supports_arithmetic_operations<T, void_t<
decltype(std::declval<T>() + std::declval<T>()),
decltype(std::declval<T>() - std::declval<T>()),
decltype(std::declval<T>() * std::declval<T>()),
decltype(std::declval<T>() * std::declval<float>()),
decltype(std::declval<float>() * std::declval<T>())
>> : std::true_type{};
template<typename T>
static typename std::enable_if<std::is_integral<T>::value, T>::type run(float position, T start, T end) {
return static_cast<T>(roundf((end - start) * position + start));
}
template<typename T>
static typename std::enable_if<supports_arithmetic_operations<T>::value && !std::is_integral<T>::value, T>::type run(float position, T start, T end) {
return static_cast<T>((end - start) * position + start);
}
template<typename T>
static typename std::enable_if<!supports_arithmetic_operations<T>::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<typename T>
static typename std::enable_if<std::is_integral<T>::value, T>::type run(float position, T start, T end) {
return static_cast<T>(roundf((end - start) * position + start));
}
template<typename T>
static typename std::enable_if<!std::is_integral<T>::value, T>::type run(float position, T start, T end) {
return static_cast<T>((end - start) * position + start);
}
} linear = linearEasing{};
/**
* @ingroup quadratic
* @brief Accelerate initial values with a quadratic equation.
*/
static constexpr struct quadraticInEasing {
template<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((end - start) * position * position + start);
}
} quadraticIn = quadraticInEasing{};
/**
* @ingroup quadratic
* @brief Deaccelerate ending values with a quadratic equation.
*/
static constexpr struct quadraticOutEasing {
template<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((-(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<typename T>
static T run(float position, T start, T end) {
position *= 2;
if (position < 1) {
return static_cast<T>(((end - start) / 2) * position * position + start);
}
--position;
return static_cast<T>((-(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<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((end - start) * position * position * position + start);
}
} cubicIn = cubicInEasing{};
/**
* @ingroup cubic
* @brief Deaccelerate ending values with a cubic equation.
*/
static constexpr struct cubicOutEasing {
template<typename T>
static T run(float position, T start, T end) {
--position;
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
position *= 2;
if (position < 1) {
return static_cast<T>(((end - start) / 2) * position * position * position + start);
}
position -= 2;
return static_cast<T>(((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<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((end - start) * position * position * position * position + start);
}
} quarticIn = quarticInEasing{};
/**
* @ingroup quartic
* @brief Deaccelerate ending values with a quartic equation.
*/
static constexpr struct quarticOutEasing {
template<typename T>
static T run(float position, T start, T end) {
--position;
return static_cast<T>( -(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<typename T>
static T run(float position, T start, T end) {
position *= 2;
if (position < 1) {
return static_cast<T>(((end - start) / 2) * (position * position * position * position) +
start);
}
position -= 2;
return static_cast<T>((-(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<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
position--;
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
position *= 2;
if (position < 1) {
return static_cast<T>(
((end - start) / 2) * (position * position * position * position * position) +
start);
}
position -= 2;
return static_cast<T>(
((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<typename T>
static T run(float position, T start, T end) {
return static_cast<T>(-(end - start) * cosf(position * static_cast<float>(M_PI) / 2) + (end - start) + start);
}
} sinusoidalIn = sinusoidalInEasing{};
/**
* @ingroup sinusoidal
* @brief Deaccelerate ending values with a sinusoidal equation.
*/
static constexpr struct sinusoidalOutEasing {
template<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((end - start) * sinf(position * static_cast<float>(M_PI) / 2) + start);
}
} sinusoidalOut = sinusoidalOutEasing{};
/**
* @ingroup sinusoidal
* @brief Acceelerate initial and deaccelerate ending values with a sinusoidal equation.
*/
static constexpr struct sinusoidalInOutEasing {
template<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((-(end - start) / 2) * (cosf(position * static_cast<float>(M_PI)) - 1) + start);
}
} sinusoidalInOut = sinusoidalInOutEasing{};
/**
* @ingroup exponential
* @brief Acceelerate initial values with an exponential equation.
*/
static constexpr struct exponentialInEasing {
template<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
position *= 2;
if (position < 1) {
return static_cast<T>(((end - start) / 2) * powf(2, 10 * (position - 1)) + start);
}
--position;
return static_cast<T>(((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<typename T>
static T run(float position, T start, T end) {
return static_cast<T>( -(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<typename T>
static T run(float position, T start, T end) {
--position;
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
position *= 2;
if (position < 1) {
return static_cast<T>((-(end - start) / 2) * (sqrtf(1 - position * position) - 1) + start);
}
position -= 2;
return static_cast<T>(((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<typename T>
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<typename T>
static T run(float position, T start, T end) {
T c = end - start;
if (position < (1 / 2.75f)) {
return static_cast<T>(c * (7.5625f * position * position) + start);
} else if (position < (2.0f / 2.75f)) {
float postFix = position -= (1.5f / 2.75f);
return static_cast<T>(c * (7.5625f * (postFix) * position + .75f) + start);
} else if (position < (2.5f / 2.75f)) {
float postFix = position -= (2.25f / 2.75f);
return static_cast<T>(c * (7.5625f * (postFix) * position + .9375f) + start);
} else {
float postFix = position -= (2.625f / 2.75f);
return static_cast<T>(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<typename T>
static T run(float position, T start, T end) {
if (position < 0.5f) return static_cast<T>(bounceIn.run(position * 2, T(), end) * .5f + start);
else return static_cast<T>(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<typename T>
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<T>(-(postFix * sinf((position - s) * (2 * static_cast<float>(M_PI)) / p)) + start);
}
} elasticIn = elasticInEasing{};
/**
* @ingroup elastic
* @brief Deaccelerate ending values with an "elastic" equation.
*/
static constexpr struct elasticOutEasing {
template<typename T>
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<T>(a * powf(2, -10 * position) * sinf((position - s) * (2 * static_cast<float>(M_PI)) / p) + end);
}
} elasticOut = elasticOutEasing{};
/**
* @ingroup elastic
* @brief Acceelerate initial and deaccelerate ending values with an "elastic" equation.
*/
static constexpr struct elasticInOutEasing {
template<typename T>
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<T>(-0.5f * (postFix * sinf((position - s) * (2 * static_cast<float>(M_PI)) / p)) + start);
}
postFix = a * powf(2, -10 * (position -= 1)); // postIncrement is evil
return static_cast<T>(postFix * sinf((position - s) * (2 * static_cast<float>(M_PI)) / p) * .5f + end);
}
} elasticInOut = elasticInOutEasing{};
/**
* @ingroup back
* @brief Acceelerate initial values with a "back" equation.
*/
static constexpr struct backInEasing {
template<typename T>
static T run(float position, T start, T end) {
float s = 1.70158f;
float postFix = position;
return static_cast<T>((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<typename T>
static T run(float position, T start, T end) {
float s = 1.70158f;
position -= 1;
return static_cast<T>((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<typename T>
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<T>(c / 2 * (t * t * (((s) + 1) * t - s)) + b);
float postFix = t -= 2;
return static_cast<T>(c / 2 * ((postFix) * t * (((s) + 1) * t + s) + 2) + b);
}
} backInOut = backInOutEasing{};
};
}
#endif //TWEENY_EASING_H

View File

@ -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 <tuple>
#include "easing.h"
namespace tweeny {
namespace detail {
using std::get;
template<int I, typename TypeTuple, typename FunctionTuple, typename... Fs>
struct easingresolve {
static void impl(FunctionTuple &b, Fs... fs) {
if (sizeof...(Fs) == 0) return;
easingresolve<I, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
}
};
template<int I, typename TypeTuple, typename FunctionTuple, typename F1, typename... Fs>
struct easingresolve<I, TypeTuple, FunctionTuple, F1, Fs...> {
static void impl(FunctionTuple &b, F1 f1, Fs... fs) {
get<I>(b) = f1;
easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
}
};
template<int I, typename TypeTuple, typename FunctionTuple, typename... Fs>
struct easingresolve<I, TypeTuple, FunctionTuple, easing::steppedEasing, Fs...> {
typedef typename std::tuple_element<I, TypeTuple>::type ArgType;
static void impl(FunctionTuple &b, easing::steppedEasing, Fs... fs) {
get<I>(b) = easing::stepped.run<ArgType>;
easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
}
};
template<int I, typename TypeTuple, typename FunctionTuple, typename... Fs>
struct easingresolve<I, TypeTuple, FunctionTuple, easing::linearEasing, Fs...> {
typedef typename std::tuple_element<I, TypeTuple>::type ArgType;
static void impl(FunctionTuple &b, easing::linearEasing, Fs... fs) {
get<I>(b) = easing::linear.run<ArgType>;
easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
}
};
template<int I, typename TypeTuple, typename FunctionTuple, typename... Fs>
struct easingresolve<I, TypeTuple, FunctionTuple, easing::defaultEasing, Fs...> {
typedef typename std::tuple_element<I, TypeTuple>::type ArgType;
static void impl(FunctionTuple &b, easing::defaultEasing, Fs... fs) {
get<I>(b) = easing::def.run<ArgType>;
easingresolve<I + 1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...);
}
};
#define DECLARE_EASING_RESOLVE(__EASING_TYPE__) \
template <int I, typename TypeTuple, typename FunctionTuple, typename... Fs> \
struct easingresolve<I, TypeTuple, FunctionTuple, easing::__EASING_TYPE__ ## InEasing, Fs...> { \
typedef typename std::tuple_element<I, TypeTuple>::type ArgType; \
static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## In), Fs... fs) { \
get<I>(b) = easing::__EASING_TYPE__ ## In.run<ArgType>; \
easingresolve<I+1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...); \
} \
}; \
\
template <int I, typename TypeTuple, typename FunctionTuple, typename... Fs> \
struct easingresolve<I, TypeTuple, FunctionTuple, easing::__EASING_TYPE__ ## OutEasing, Fs...> { \
typedef typename std::tuple_element<I, TypeTuple>::type ArgType; \
static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## Out), Fs... fs) { \
get<I>(b) = easing::__EASING_TYPE__ ## Out.run<ArgType>; \
easingresolve<I+1, TypeTuple, FunctionTuple, Fs...>::impl(b, fs...); \
} \
}; \
\
template <int I, typename TypeTuple, typename FunctionTuple, typename... Fs> \
struct easingresolve<I, TypeTuple, FunctionTuple, easing::__EASING_TYPE__ ## InOutEasing, Fs...> { \
typedef typename std::tuple_element<I, TypeTuple>::type ArgType; \
static void impl(FunctionTuple & b, decltype(easing::__EASING_TYPE__ ## InOut), Fs... fs) { \
get<I>(b) = easing::__EASING_TYPE__ ## InOut.run<ArgType>; \
easingresolve<I+1, TypeTuple, FunctionTuple, Fs...>::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

37
include/tweeny/int2type.h Normal file
View File

@ -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<std::size_t> struct int2type { };
}
}
#endif //TWEENY_INT2TYPE_H

656
include/tweeny/tween.h Normal file
View File

@ -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 <tuple>
#include <vector>
#include <functional>
#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<typename T, typename... Ts>
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<T, Ts...> 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<T, Ts...> & 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<typename... Fs> tween<T, Ts...> & 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<typename... Fs> tween<T, Ts...> & 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<typename... Fs> tween<T, Ts...> & 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<typename... Fs> tween<T, Ts...> & 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<typename... Fs> tween<T, Ts...> & 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<typename... Ds> tween<T, Ts...> & 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<Ts...> with the current tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
* @see duration
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
* @see duration
*/
const typename detail::tweentraits<T, Ts...>::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<int> & t, int v) { printf("%d ", v); return false; });
*
* // pass a functor instance
* struct ftor { void operator()(tweeny::tween<int> & 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<Ts...> & t, Ts...)`
*/
tween<T, Ts...> & onStep(typename detail::tweentraits<T, Ts...>::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<int> & t) { printf("%d ", t.value()); return false; });
*
* // pass a functor instance
* struct ftor { void operator()(tweeny::tween<int> & 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<Ts...> & t)`
*/
tween<T, Ts...> & onStep(typename detail::tweentraits<T, Ts...>::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<T, Ts...> & onStep(typename detail::tweentraits<T, Ts...>::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<int> & t, int v) { printf("%d ", v); });
*
* // pass a functor instance
* struct ftor { void operator()(tweeny::tween<int> & t, int v) { printf("%d ", v); } };
* t.onSeek(ftor());
* @endcode
* @param callback A callback in with the prototype `bool callback(tween<Ts...> & t, Ts...)`
*/
tween<T, Ts...> & onSeek(typename detail::tweentraits<T, Ts...>::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<T, Ts...> & onSeek(typename detail::tweentraits<T, Ts...>::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<int> & t) { printf("%d ", t.value()); return false; });
*
* // pass a functor instance
* struct ftor { void operator()(tweeny::tween<int> & t) { printf("%d ", t.value()); return false; } };
* t.onSeek(ftor());
* @endcode
* @param callback A callback in the form `bool f(tween<Ts...> & t)`
*/
tween<T, Ts...> & onSeek(typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the current tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<Ts...> with the calculated tween values.
*/
const typename detail::tweentraits<T, Ts...>::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<T, Ts...> & forward();
/**
* @brief Sets the direction of this tween backward.
*
* Note that this only affects tween::step() function.
* @returns *this
* @sa forward
*/
tween<T, Ts...> & 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<T, Ts...>::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<T, Ts...>;
private /* member variables */:
uint32_t total = 0; // total runtime
uint16_t currentPoint = 0; // current point
float currentProgress = 0; // current progress
std::vector<detail::tweenpoint<T, Ts...>> points;
typename traits::valuesType current;
std::vector<typename traits::callbackType> onStepCallbacks;
std::vector<typename traits::callbackType> onSeekCallbacks;
int8_t currentDirection = 1;
private:
/* member functions */
tween(T t, Ts... vs);
template<size_t I> void interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type<I>) const;
void interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type<0>) const;
void render(float p);
void dispatch(std::vector<typename traits::callbackType> & 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<typename T>
class tween<T> {
public:
static tween<T> from(T t);
public:
tween(); ///< @sa tween::tween
tween<T> & to(T t); ///< @sa tween::to
template<typename... Fs> tween<T> & via(Fs... fs); ///< @sa tween::via
template<typename... Fs> tween<T> & via(int index, Fs... fs); ///< @sa tween::via
template<typename... Fs> tween<T> & via(tweeny::easing::enumerated enumerated, Fs... fs); ///< @sa tween::via
template<typename... Fs> tween<T> & via(const std::string & easing, Fs... fs); ///< @sa tween::via
template<typename... Fs> tween<T> & via(const char * easing, Fs... fs); ///< @sa tween::via
template<typename... Ds> tween<T> & 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<T> & onStep(typename detail::tweentraits<T>::callbackType callback); ///< @sa tween::onStep
tween<T> & onStep(typename detail::tweentraits<T>::noValuesCallbackType callback); ///< @sa tween::onStep
tween<T> & onStep(typename detail::tweentraits<T>::noTweenCallbackType callback); ///< @sa tween::onStep
tween<T> & onSeek(typename detail::tweentraits<T>::callbackType callback); ///< @sa tween::onSeek
tween<T> & onSeek(typename detail::tweentraits<T>::noValuesCallbackType callback); ///< @sa tween::onSeek
tween<T> & onSeek(typename detail::tweentraits<T>::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<T> & forward(); ///< @sa tween::forward
tween<T> & 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<T>;
private /* member variables */:
uint32_t total = 0; // total runtime
uint16_t currentPoint = 0; // current point
float currentProgress = 0; // current progress
std::vector<detail::tweenpoint<T>> points;
T current;
std::vector<typename traits::callbackType> onStepCallbacks;
std::vector<typename traits::callbackType> 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<typename traits::callbackType> & cbVector);
uint16_t pointAt(float progress) const;
};
}
#include "tween.tcc"
#include "tweenone.tcc"
#endif //TWEENY_TWEEN_H

346
include/tweeny/tween.tcc Normal file
View File

@ -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<typename T>
T clip(const T & n, const T & lower, const T & upper) {
return std::max(lower, std::min(n, upper));
}
}
template<typename T, typename... Ts> inline tween<T, Ts...> tween<T, Ts...>::from(T t, Ts... vs) { return tween<T, Ts...>(t, vs...); }
template<typename T, typename... Ts> inline tween<T, Ts...>::tween() { }
template<typename T, typename... Ts> inline tween<T, Ts...>::tween(T t, Ts... vs) {
points.emplace_back(t, vs...);
}
template<typename T, typename... Ts> inline tween<T, Ts...> & tween<T, Ts...>::to(T t, Ts... vs) {
points.emplace_back(t, vs...);
return *this;
}
template<typename T, typename... Ts>
template<typename... Fs>
inline tween<T, Ts...> & tween<T, Ts...>::via(Fs... vs) {
points.at(points.size() - 2).via(vs...);
return *this;
}
template<typename T, typename... Ts>
template<typename... Fs>
inline tween<T, Ts...> & tween<T, Ts...>::via(int index, Fs... vs) {
points.at(static_cast<size_t>(index)).via(vs...);
return *this;
}
template<typename T, typename... Ts>
template<typename... Fs>
tween<T, Ts...> & tween<T, Ts...>::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<typename T, typename... Ts>
template<typename... Fs>
tween<T, Ts...> & tween<T, Ts...>::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<typename T, typename... Ts>
template<typename... Fs>
tween <T, Ts...> & tween<T, Ts...>::via(const char * easing, Fs... vs) {
return via(std::string(easing));
}
template<typename T, typename... Ts>
template<typename... Ds>
inline tween<T, Ts...> & tween<T, Ts...>::during(Ds... ds) {
total = 0;
points.at(points.size() - 2).during(ds...);
for (detail::tweenpoint<T, Ts...> & p : points) {
total += p.duration();
p.stacked = total;
}
return *this;
}
template<typename T, typename... Ts>
inline const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::step(int32_t dt, bool suppress) {
return step(static_cast<float>(dt)/static_cast<float>(total), suppress);
}
template<typename T, typename... Ts>
inline const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::step(uint32_t dt, bool suppress) {
return step(static_cast<int32_t>(dt), suppress);
}
template<typename T, typename... Ts>
inline const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::step(float dp, bool suppress) {
dp *= currentDirection;
seek(currentProgress + dp, true);
if (!suppress) dispatch(onStepCallbacks);
return current;
}
template<typename T, typename... Ts>
inline const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::seek(float p, bool suppress) {
p = detail::clip(p, 0.0f, 1.0f);
currentProgress = p;
render(p);
if (!suppress) dispatch(onSeekCallbacks);
return current;
}
template<typename T, typename... Ts>
inline const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::seek(int32_t t, bool suppress) {
return seek(static_cast<float>(t) / static_cast<float>(total), suppress);
}
template<typename T, typename... Ts>
inline uint32_t tween<T, Ts...>::duration() const {
return total;
}
template<typename T, typename... Ts>
template<size_t I>
inline void tween<T, Ts...>::interpolate(float prog, unsigned point, typename traits::valuesType & values, detail::int2type<I>) const {
auto & p = points.at(point);
auto pointDuration = uint32_t(p.duration() - (p.stacked - (prog * static_cast<float>(total))));
float pointTotal = static_cast<float>(pointDuration) / static_cast<float>(p.duration(I));
if (pointTotal > 1.0f) pointTotal = 1.0f;
auto easing = std::get<I>(p.easings);
std::get<I>(values) = easing(pointTotal, std::get<I>(p.values), std::get<I>(points.at(point+1).values));
interpolate(prog, point, values, detail::int2type<I-1>{ });
}
template<typename T, typename... Ts>
inline void tween<T, Ts...>::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<float>(total))));
float pointTotal = static_cast<float>(pointDuration) / static_cast<float>(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<typename T, typename... Ts>
inline void tween<T, Ts...>::render(float p) {
currentPoint = pointAt(p);
interpolate(p, currentPoint, current, detail::int2type<sizeof...(Ts) - 1 + 1 /* +1 for the T */>{ });
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::onStep(typename detail::tweentraits<T, Ts...>::callbackType callback) {
onStepCallbacks.push_back(callback);
return *this;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::onStep(typename detail::tweentraits<T, Ts...>::noValuesCallbackType callback) {
onStepCallbacks.push_back([callback](tween<T, Ts...> & t, T, Ts...) { return callback(t); });
return *this;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::onStep(typename detail::tweentraits<T, Ts...>::noTweenCallbackType callback) {
onStepCallbacks.push_back([callback](tween<T, Ts...> &, T t, Ts... vs) { return callback(t, vs...); });
return *this;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::onSeek(typename detail::tweentraits<T, Ts...>::callbackType callback) {
onSeekCallbacks.push_back(callback);
return *this;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::onSeek(typename detail::tweentraits<T, Ts...>::noValuesCallbackType callback) {
onSeekCallbacks.push_back([callback](tween<T, Ts...> & t, T, Ts...) { return callback(t); });
return *this;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::onSeek(typename detail::tweentraits<T, Ts...>::noTweenCallbackType callback) {
onSeekCallbacks.push_back([callback](tween<T, Ts...> &, T t, Ts... vs) { return callback(t, vs...); });
return *this;
}
template<typename T, typename... Ts>
void tween<T, Ts...>::dispatch(std::vector<typename traits::callbackType> & cbVector) {
std::vector<size_t> dismissed;
for (size_t i = 0; i < cbVector.size(); ++i) {
auto && cb = cbVector[i];
bool dismiss = detail::call<bool>(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<typename T, typename... Ts>
const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::peek() const {
return current;
}
template<typename T, typename... Ts>
const typename detail::tweentraits<T, Ts...>::valuesType tween<T, Ts...>::peek(float progress) const {
typename detail::tweentraits<T, Ts...>::valuesType values;
interpolate(progress, pointAt(progress), values, detail::int2type<sizeof...(Ts) - 1 + 1 /* +1 for the T */>{ });
return values;
}
template<typename T, typename... Ts>
const typename detail::tweentraits<T, Ts...>::valuesType tween<T, Ts...>::peek(uint32_t time) const {
typename detail::tweentraits<T, Ts...>::valuesType values;
float progress = static_cast<float>(time) / static_cast<float>(total);
interpolate(progress, pointAt(progress), values, detail::int2type<sizeof...(Ts) - 1 + 1 /* +1 for the T */>{ });
return values;
}
template<typename T, typename... Ts>
float tween<T, Ts...>::progress() const {
return currentProgress;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::forward() {
currentDirection = 1;
return *this;
}
template<typename T, typename... Ts>
tween<T, Ts...> & tween<T, Ts...>::backward() {
currentDirection = -1;
return *this;
}
template<typename T, typename... Ts>
int tween<T, Ts...>::direction() const {
return currentDirection;
}
template<typename T, typename... Ts>
inline const typename detail::tweentraits<T, Ts...>::valuesType & tween<T, Ts...>::jump(std::size_t p, bool suppress) {
p = detail::clip(p, static_cast<size_t>(0), points.size() -1);
return seek(static_cast<int32_t>(points.at(p).stacked), suppress);
}
template<typename T, typename... Ts> inline uint16_t tween<T, Ts...>::point() const {
return currentPoint;
}
template<typename T, typename... Ts> inline uint16_t tween<T, Ts...>::pointAt(float progress) const {
uint32_t t = static_cast<uint32_t>(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

334
include/tweeny/tweenone.tcc Normal file
View File

@ -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<typename T> inline tween<T> tween<T>::from(T t) { return tween<T>(t); }
template<typename T> inline tween<T>::tween() { }
template<typename T> inline tween<T>::tween(T t) {
points.emplace_back(t);
}
template<typename T> inline tween<T> & tween<T>::to(T t) {
points.emplace_back(t);
return *this;
}
template<typename T>
template<typename... Fs>
inline tween<T> & tween<T>::via(Fs... vs) {
points.at(points.size() - 2).via(vs...);
return *this;
}
template<typename T>
template<typename... Fs>
inline tween<T> & tween<T>::via(int index, Fs... vs) {
points.at(static_cast<size_t>(index)).via(vs...);
return *this;
}
template<typename T>
template<typename... Fs>
tween <T> & tween<T>::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<typename T>
template<typename... Fs>
tween <T> & tween<T>::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<typename T>
template<typename... Fs>
tween <T> & tween<T>::via(const char * easing, Fs... vs) {
return via(std::string(easing));
}
template<typename T>
template<typename... Ds>
inline tween<T> & tween<T>::during(Ds... ds) {
total = 0;
points.at(points.size() - 2).during(ds...);
for (detail::tweenpoint<T> & p : points) {
total += p.duration();
p.stacked = total;
}
return *this;
}
template<typename T>
inline const T & tween<T>::step(int32_t dt, bool suppress) {
return step(static_cast<float>(dt)/static_cast<float>(total), suppress);
}
template<typename T>
inline const T & tween<T>::step(uint32_t dt, bool suppress) {
return step(static_cast<int32_t>(dt), suppress);
}
template<typename T>
inline const T & tween<T>::step(float dp, bool suppress) {
dp *= currentDirection;
seek(currentProgress + dp, true);
if (!suppress) dispatch(onStepCallbacks);
return current;
}
template<typename T>
inline const T & tween<T>::seek(float p, bool suppress) {
p = detail::clip(p, 0.0f, 1.0f);
currentProgress = p;
render(p);
if (!suppress) dispatch(onSeekCallbacks);
return current;
}
template<typename T>
inline const T & tween<T>::seek(int32_t t, bool suppress) {
return seek(static_cast<float>(t) / static_cast<float>(total), suppress);
}
template<typename T>
inline const T & tween<T>::seek(uint32_t t, bool suppress) {
return seek(static_cast<float>(t) / static_cast<float>(total), suppress);
}
template<typename T>
inline uint32_t tween<T>::duration() const {
return total;
}
template<typename T>
inline void tween<T>::interpolate(float prog, unsigned point, T & value) const {
auto & p = points.at(point);
auto pointDuration = uint32_t(p.duration() - (p.stacked - (prog * static_cast<float>(total))));
float pointTotal = static_cast<float>(pointDuration) / static_cast<float>(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<typename T>
inline void tween<T>::render(float p) {
currentPoint = pointAt(p);
interpolate(p, currentPoint, current);
}
template<typename T>
tween<T> & tween<T>::onStep(typename detail::tweentraits<T>::callbackType callback) {
onStepCallbacks.push_back(callback);
return *this;
}
template<typename T>
tween<T> & tween<T>::onStep(typename detail::tweentraits<T>::noValuesCallbackType callback) {
onStepCallbacks.push_back([callback](tween<T> & tween, T) { return callback(tween); });
return *this;
}
template<typename T>
tween<T> & tween<T>::onStep(typename detail::tweentraits<T>::noTweenCallbackType callback) {
onStepCallbacks.push_back([callback](tween<T> &, T v) { return callback(v); });
return *this;
}
template<typename T>
tween<T> & tween<T>::onSeek(typename detail::tweentraits<T>::callbackType callback) {
onSeekCallbacks.push_back(callback);
return *this;
}
template<typename T>
tween<T> & tween<T>::onSeek(typename detail::tweentraits<T>::noValuesCallbackType callback) {
onSeekCallbacks.push_back([callback](tween<T> & t, T) { return callback(t); });
return *this;
}
template<typename T>
tween<T> & tween<T>::onSeek(typename detail::tweentraits<T>::noTweenCallbackType callback) {
onSeekCallbacks.push_back([callback](tween<T> &, T v) { return callback(v); });
return *this;
}
template<typename T>
void tween<T>::dispatch(std::vector<typename traits::callbackType> & cbVector) {
std::vector<size_t> 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<typename T>
const T & tween<T>::peek() const {
return current;
}
template<typename T>
T tween<T>::peek(float progress) const {
T value;
interpolate(progress, pointAt(progress), value);
return value;
}
template<typename T>
T tween<T>::peek(uint32_t time) const {
T value;
float progress = static_cast<float>(time) / static_cast<float>(total);
interpolate(progress, pointAt(progress), value);
return value;
}
template<typename T>
float tween<T>::progress() const {
return currentProgress;
}
template<typename T>
tween<T> & tween<T>::forward() {
currentDirection = 1;
return *this;
}
template<typename T>
tween<T> & tween<T>::backward() {
currentDirection = -1;
return *this;
}
template<typename T>
int tween<T>::direction() const {
return currentDirection;
}
template<typename T>
inline const T & tween<T>::jump(size_t p, bool suppress) {
p = detail::clip(p, static_cast<size_t>(0), points.size() -1);
return seek(points.at(p).stacked, suppress);
}
template<typename T> inline uint16_t tween<T>::point() const {
return currentPoint;
}
template<typename T> inline uint16_t tween<T>::pointAt(float progress) const {
auto t = static_cast<uint32_t>(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

View File

@ -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 <tuple>
#include <array>
#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<typename... Ts>
struct tweenpoint {
typedef detail::tweentraits<Ts...> 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<typename D> void during(D milis);
/* Sets the duration for each value in this point */
template<typename... Ds> void during(Ds... vs);
/* Sets the easing functions of each value */
template<typename... Fs> void via(Fs... fs);
/* Sets the same easing function for all values */
template<typename F> 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

View File

@ -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 <algorithm>
#include <type_traits>
#include "tweenpoint.h"
#include "tweentraits.h"
#include "easing.h"
#include "easingresolve.h"
#include "int2type.h"
namespace tweeny {
namespace detail {
template<typename TypeTupleT, typename EasingCollectionT, typename EasingT, size_t I> void easingfill(EasingCollectionT & f, EasingT easing, int2type<I>) {
easingresolve<I, TypeTupleT, EasingCollectionT, EasingT>::impl(f, easing);
easingfill<TypeTupleT, EasingCollectionT, EasingT>(f, easing, int2type<I - 1>{ });
}
template<typename TypeTupleT, typename EasingCollectionT, typename EasingT> void easingfill(EasingCollectionT & f, EasingT easing, int2type<0>) {
easingresolve<0, TypeTupleT, EasingCollectionT, EasingT>::impl(f, easing);
}
template <class ...T>
struct are_same;
template <class A, class B, class ...T>
struct are_same<A, B, T...>
{
static const bool value = std::is_same<A, B>::value && are_same<B, T...>::value;
};
template <class A>
struct are_same<A>
{
static const bool value = true;
};
template<typename... Ts>
inline tweenpoint<Ts...>::tweenpoint(Ts... vs) : values{vs...} {
during(static_cast<uint16_t>(0));
via(easing::def);
}
template<typename... Ts>
template<typename D>
inline void tweenpoint<Ts...>::during(D milis) {
for (uint16_t & t : durations) { t = static_cast<uint16_t>(milis); }
}
template<typename... Ts>
template<typename... Ds>
inline void tweenpoint<Ts...>::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<int, sizeof...(Ts)> list = {{ milis... }};
std::copy(list.begin(), list.end(), durations.begin());
}
template<typename... Ts>
template<typename... Fs>
inline void tweenpoint<Ts...>::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<Ts...>, typename traits::easingCollection, Fs...>::impl(easings, fs...);
}
template<typename... Ts>
template<typename F>
inline void tweenpoint<Ts...>::via(F f) {
easingfill<typename traits::valuesType>(easings, f, int2type<sizeof...(Ts) - 1>{ });
}
template<typename... Ts>
inline uint16_t tweenpoint<Ts...>::duration() const {
return *std::max_element(durations.begin(), durations.end());
}
template<typename... Ts>
inline uint16_t tweenpoint<Ts...>::duration(size_t i) const {
return durations.at(i);
}
}
}
#endif //TWEENY_TWEENPOINT_TCC

View File

@ -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 <tuple>
#include <functional>
#include <type_traits>
namespace tweeny {
template<typename T, typename... Ts> class tween;
namespace detail {
template<typename... Ts> struct equal {};
template<typename T> struct equal<T> { enum { value = true }; };
template <typename T, typename U, typename... Ts> struct equal<T, U, Ts...> {
enum { value = std::is_same<T, U>::value && equal<T, Ts...>::value && equal<U, Ts...>::value };
};
template<typename T, typename...> struct first { typedef T type; };
template<bool equal, typename... Ts>
struct valuetype { };
template<typename... Ts>
struct valuetype<false, Ts...> {
typedef std::tuple<Ts...> type;
};
template<typename... Ts>
struct valuetype<true, Ts...> {
typedef std::array<typename first<Ts...>::type, sizeof...(Ts)> type;
};
template<typename... Ts>
struct tweentraits {
typedef std::tuple<std::function<Ts(float, Ts, Ts)>...> easingCollection;
typedef std::function<bool(tween<Ts...> &, Ts...)> callbackType;
typedef std::function<bool(tween<Ts...> &)> noValuesCallbackType;
typedef std::function<bool(Ts...)> noTweenCallbackType;
typedef typename valuetype<equal<Ts...>::value, Ts...>::type valuesType;
typedef std::array<uint16_t, sizeof...(Ts)> durationsArrayType;
typedef tween<Ts...> type;
};
}
}
#endif //TWEENY_TWEENTRAITS_H

102
include/tweeny/tweeny.h Normal file
View File

@ -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 <a href="modules.html">modules page</a> 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 <a href="http://github.com/mobius3/tweeny-demos">tweeny-demos</a> repository to see demonstration code
*
* **Useful links and references**
* * <a href="http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm">Tim Groleau's easing function generator (requires flash)</a>
* * <a href="http://easings.net/">Easing cheat sheet (contains graphics!)</a>
*/
#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<typename... Ts> tween<Ts...> from(Ts... vs);
}
#include "tweeny.tcc"
#endif //TWEENY_TWEENY_H

40
include/tweeny/tweeny.tcc Normal file
View File

@ -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<typename... Ts> inline tween<Ts...> from(Ts... vs) {
return tween<Ts...>::from(vs...);
}
}
#endif //TWEENY_TWEENY_TCC

BIN
resources/img/cards/c1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
resources/img/cards/c10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
resources/img/cards/c11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

BIN
resources/img/cards/c12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

BIN
resources/img/cards/c13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

BIN
resources/img/cards/c2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
resources/img/cards/c3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
resources/img/cards/c4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
resources/img/cards/c5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
resources/img/cards/c6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
resources/img/cards/c7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
resources/img/cards/c8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
resources/img/cards/c9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 KiB

BIN
resources/img/cards/d1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
resources/img/cards/d10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
resources/img/cards/d11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

BIN
resources/img/cards/d12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
resources/img/cards/d13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

BIN
resources/img/cards/d2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
resources/img/cards/d3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
resources/img/cards/d4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
resources/img/cards/d5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
resources/img/cards/d6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
resources/img/cards/d7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
resources/img/cards/d8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
resources/img/cards/d9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
resources/img/cards/h1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
resources/img/cards/h10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
resources/img/cards/h11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

BIN
resources/img/cards/h12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

BIN
resources/img/cards/h13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

BIN
resources/img/cards/h2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
resources/img/cards/h3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
resources/img/cards/h4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
resources/img/cards/h5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
resources/img/cards/h6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
resources/img/cards/h7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
resources/img/cards/h8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

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