From 2a5dc76b35d661807c884103a2841859a4a06554 Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Thu, 8 May 2025 10:15:32 -0500 Subject: [PATCH] Made Path follower Component --- imgui.ini | 72 +- remake.yaml | 1 + remake/.remake_cache.json | 4 +- remake/build.log | 5 +- src/assets/scenes/pathing_test.cene | 1197 ++++++++++++++++++ src/src/Components/PathFollowerComponent.cpp | 135 ++ src/src/Components/PathFollowerComponent.h | 53 + src/src/Engine.cpp | 28 +- src/src/Engine.h | 3 + src/src/Entitys/Object.cpp | 4 + src/src/editor/windows/Inspector.cpp | 58 +- 11 files changed, 1505 insertions(+), 55 deletions(-) create mode 100644 src/assets/scenes/pathing_test.cene create mode 100644 src/src/Components/PathFollowerComponent.cpp create mode 100644 src/src/Components/PathFollowerComponent.h diff --git a/imgui.ini b/imgui.ini index 67b429e..0538e3e 100644 --- a/imgui.ini +++ b/imgui.ini @@ -21,9 +21,9 @@ DockId=0x00000018,0 [Window][Scene Tree] Pos=0,19 -Size=388,461 +Size=388,579 Collapsed=0 -DockId=0x0000001B,0 +DockId=0x0000000F,0 [Window][Viewport] Pos=390,19 @@ -43,9 +43,9 @@ DockId=0x00000019,0 [Window][Console] Pos=390,680 -Size=1185,497 +Size=880,273 Collapsed=0 -DockId=0x00000013,0 +DockId=0x0000001B,0 [Window][Tilemap Editor] Pos=265,19 @@ -132,12 +132,12 @@ DockId=0x00000010,0 [Window][Import Preview] Pos=584,22 -Size=536,391 +Size=550,1152 Collapsed=0 [Window][Lua Globals] -Pos=0,482 -Size=388,116 +Pos=1272,680 +Size=303,273 Collapsed=0 DockId=0x0000001C,0 @@ -153,33 +153,33 @@ Column 1 Width=50 Column 2 Weight=1.0000 [Docking][Data] -DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X - DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X - DockNode ID=0x00000001 Parent=0x00000005 SizeRef=388,701 Split=Y Selected=0x12EF0F59 - DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59 - DockNode ID=0x0000000F Parent=0x00000003 SizeRef=342,579 Split=Y Selected=0x12EF0F59 - DockNode ID=0x0000001B Parent=0x0000000F SizeRef=335,461 HiddenTabBar=1 Selected=0x12EF0F59 - DockNode ID=0x0000001C Parent=0x0000000F SizeRef=335,116 HiddenTabBar=1 Selected=0x8CFF897F - DockNode ID=0x00000010 Parent=0x00000003 SizeRef=342,577 HiddenTabBar=1 Selected=0x30401527 - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=342,519 HiddenTabBar=1 Selected=0x36AF052B - DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1530,701 Split=Y Selected=0xC450F867 - DockNode ID=0x00000007 Parent=0x00000002 SizeRef=606,659 Split=X Selected=0xC450F867 - DockNode ID=0x00000017 Parent=0x00000007 SizeRef=1161,860 CentralNode=1 HiddenTabBar=1 Selected=0xC450F867 - DockNode ID=0x00000018 Parent=0x00000007 SizeRef=367,860 HiddenTabBar=1 Selected=0x36DC96AB - DockNode ID=0x00000008 Parent=0x00000002 SizeRef=606,497 Split=X Selected=0xEA83D666 - DockNode ID=0x00000015 Parent=0x00000008 SizeRef=1236,172 Split=X Selected=0xEA83D666 - DockNode ID=0x00000011 Parent=0x00000015 SizeRef=1185,168 Split=Y Selected=0x9B5D3198 - DockNode ID=0x00000013 Parent=0x00000011 SizeRef=1449,273 HiddenTabBar=1 Selected=0xEA83D666 - DockNode ID=0x00000014 Parent=0x00000011 SizeRef=1449,222 HiddenTabBar=1 Selected=0x9B5D3198 - DockNode ID=0x00000012 Parent=0x00000015 SizeRef=49,168 HiddenTabBar=1 Selected=0x56009A08 - DockNode ID=0x00000016 Parent=0x00000008 SizeRef=292,172 Split=Y Selected=0x3FC1A724 - DockNode ID=0x00000019 Parent=0x00000016 SizeRef=314,268 HiddenTabBar=1 Selected=0x3FC1A724 - DockNode ID=0x0000001A Parent=0x00000016 SizeRef=314,227 HiddenTabBar=1 Selected=0xA873C17F - DockNode ID=0x00000006 Parent=0x11111111 SizeRef=289,1158 Split=Y Selected=0x36DC96AB - DockNode ID=0x00000009 Parent=0x00000006 SizeRef=449,488 Split=Y Selected=0x36DC96AB - DockNode ID=0x0000000B Parent=0x00000009 SizeRef=449,556 Split=Y Selected=0x36DC96AB - DockNode ID=0x0000000D Parent=0x0000000B SizeRef=449,860 Selected=0x36DC96AB - DockNode ID=0x0000000E Parent=0x0000000B SizeRef=449,296 HiddenTabBar=1 Selected=0x9D7E7171 - DockNode ID=0x0000000C Parent=0x00000009 SizeRef=449,143 HiddenTabBar=1 Selected=0xB6C74292 - DockNode ID=0x0000000A Parent=0x00000006 SizeRef=449,211 HiddenTabBar=1 Selected=0xD83E5DD3 +DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X + DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X + DockNode ID=0x00000001 Parent=0x00000005 SizeRef=388,701 Split=Y Selected=0x12EF0F59 + DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59 + DockNode ID=0x0000000F Parent=0x00000003 SizeRef=342,579 HiddenTabBar=1 Selected=0x12EF0F59 + DockNode ID=0x00000010 Parent=0x00000003 SizeRef=342,577 HiddenTabBar=1 Selected=0x30401527 + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=342,519 HiddenTabBar=1 Selected=0x36AF052B + DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1530,701 Split=Y Selected=0xC450F867 + DockNode ID=0x00000007 Parent=0x00000002 SizeRef=606,659 Split=X Selected=0xC450F867 + DockNode ID=0x00000017 Parent=0x00000007 SizeRef=1161,860 CentralNode=1 HiddenTabBar=1 Selected=0xC450F867 + DockNode ID=0x00000018 Parent=0x00000007 SizeRef=367,860 HiddenTabBar=1 Selected=0x36DC96AB + DockNode ID=0x00000008 Parent=0x00000002 SizeRef=606,497 Split=X Selected=0xEA83D666 + DockNode ID=0x00000015 Parent=0x00000008 SizeRef=1236,172 Split=X Selected=0xEA83D666 + DockNode ID=0x00000011 Parent=0x00000015 SizeRef=1185,168 Split=Y Selected=0x9B5D3198 + DockNode ID=0x00000013 Parent=0x00000011 SizeRef=1449,273 Split=X Selected=0xEA83D666 + DockNode ID=0x0000001B Parent=0x00000013 SizeRef=880,497 HiddenTabBar=1 Selected=0xEA83D666 + DockNode ID=0x0000001C Parent=0x00000013 SizeRef=303,497 HiddenTabBar=1 Selected=0x8CFF897F + DockNode ID=0x00000014 Parent=0x00000011 SizeRef=1449,222 HiddenTabBar=1 Selected=0x9B5D3198 + DockNode ID=0x00000012 Parent=0x00000015 SizeRef=49,168 HiddenTabBar=1 Selected=0x56009A08 + DockNode ID=0x00000016 Parent=0x00000008 SizeRef=292,172 Split=Y Selected=0x3FC1A724 + DockNode ID=0x00000019 Parent=0x00000016 SizeRef=314,268 HiddenTabBar=1 Selected=0x3FC1A724 + DockNode ID=0x0000001A Parent=0x00000016 SizeRef=314,227 HiddenTabBar=1 Selected=0xA873C17F + DockNode ID=0x00000006 Parent=0x11111111 SizeRef=289,1158 Split=Y Selected=0x36DC96AB + DockNode ID=0x00000009 Parent=0x00000006 SizeRef=449,488 Split=Y Selected=0x36DC96AB + DockNode ID=0x0000000B Parent=0x00000009 SizeRef=449,556 Split=Y Selected=0x36DC96AB + DockNode ID=0x0000000D Parent=0x0000000B SizeRef=449,860 Selected=0x36DC96AB + DockNode ID=0x0000000E Parent=0x0000000B SizeRef=449,296 HiddenTabBar=1 Selected=0x9D7E7171 + DockNode ID=0x0000000C Parent=0x00000009 SizeRef=449,143 HiddenTabBar=1 Selected=0xB6C74292 + DockNode ID=0x0000000A Parent=0x00000006 SizeRef=449,211 HiddenTabBar=1 Selected=0xD83E5DD3 diff --git a/remake.yaml b/remake.yaml index edac2c0..0bfaa06 100644 --- a/remake.yaml +++ b/remake.yaml @@ -53,6 +53,7 @@ cxxflags: - -Wall - -g # - -DDISABLE_DEEP_PROFILING + - -DGLM_ENABLE_EXPERIMENTAL # Auto-detect libraries and headers auto_libs: diff --git a/remake/.remake_cache.json b/remake/.remake_cache.json index f11791e..d8ed90c 100644 --- a/remake/.remake_cache.json +++ b/remake/.remake_cache.json @@ -8,6 +8,6 @@ "ssl": "C:\\msys64\\mingw64\\lib\\libssl.a", "crypto": "C:\\msys64\\mingw64\\lib\\libcrypto.a", "dbghelp": "C:\\msys64\\mingw64\\lib\\libdbghelp.a", - "imgui": "src\\vendor\\imgui", - "z": "C:\\msys64\\mingw64\\lib\\libz.a" + "z": "C:\\msys64\\mingw64\\lib\\libz.a", + "imgui": "src\\vendor\\imgui" } \ No newline at end of file diff --git a/remake/build.log b/remake/build.log index 2704412..167bf69 100644 --- a/remake/build.log +++ b/remake/build.log @@ -1,2 +1,3 @@ -[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o -[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\scripts\ScriptCore.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz +[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\Components\PathFollowerComponent.cpp -o src\build\Components\PathFollowerComponent.o +[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PathFollowerComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\scripts\ScriptCore.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz +[RUN] Executed app.exe successfully. diff --git a/src/assets/scenes/pathing_test.cene b/src/assets/scenes/pathing_test.cene new file mode 100644 index 0000000..070a21f --- /dev/null +++ b/src/assets/scenes/pathing_test.cene @@ -0,0 +1,1197 @@ +engine_version: 0.8.4 +scene_name: pathing_test +scene_hash: 60a90c6dffd10c58d953b35f6966e684c9e8bda3307e15f5c8b1dadd34c10b5f +format_version: 1 +objects: + - name: Hello, Create + uid: 5b00865dc5e446e5a95476e362c461ca + id: 0 + position: [0.0751896873, 9.0133009] + rotation: 0 + layer: 0 + visable: true + components: + - type: PathFollowerComponent + speed: 100 + easing: 2 + targets: + - x: 100 + y: 0 + - x: 100 + y: 100 + - x: 0 + y: 100 + - x: 0 + y: 0 + - type: SpriteComponent + texture: 1 + normalMap: 0 + renderType: Lit + children: [] + - name: NewObject + uid: 4402368da7e4464d81c627d452d44e71 + id: 2 + position: [0, 0] + rotation: 0 + layer: 0 + visable: true + components: [] + children: [] +color_correction: + brightness: 1 + saturation: 1 + gamma: 1 + bloom: false + intensity: 1.20000005 + threshold: 1 +Assets: + - uaid: 115 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_114.png + filename: tile_114.png + filetype: png + type: 0 + hash: bffbedcad0c620c7 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 114 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_113.png + filename: tile_113.png + filetype: png + type: 0 + hash: 5d615b590fe9431a + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 113 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_112.png + filename: tile_112.png + filetype: png + type: 0 + hash: ea99517d8b684ab8 + lastModified: 1728871746 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 112 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_111.png + filename: tile_111.png + filetype: png + type: 0 + hash: a5a090079e1eb3b5 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 111 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_110.png + filename: tile_110.png + filetype: png + type: 0 + hash: a97225d051b0be0f + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 110 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_109.png + filename: tile_109.png + filetype: png + type: 0 + hash: 8f7568ef2b75f210 + lastModified: 1728871746 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 109 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_108.png + filename: tile_108.png + filetype: png + type: 0 + hash: dc8c15964e615c28 + lastModified: 1728871746 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 108 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_107.png + filename: tile_107.png + filetype: png + type: 0 + hash: a0843e8681231325 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 107 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_106.png + filename: tile_106.png + filetype: png + type: 0 + hash: 9559b168bb797f61 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 106 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_105.png + filename: tile_105.png + filetype: png + type: 0 + hash: 893cb7a825c3def2 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 105 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_104.png + filename: tile_104.png + filetype: png + type: 0 + hash: 2d73577cfe2985f8 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 104 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_103.png + filename: tile_103.png + filetype: png + type: 0 + hash: 93be22329a97f13a + lastModified: 1728871746 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 103 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_102.png + filename: tile_102.png + filetype: png + type: 0 + hash: ee4893b0b0e389b0 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 102 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_101.png + filename: tile_101.png + filetype: png + type: 0 + hash: e5a269d460d00e69 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 101 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_100.png + filename: tile_100.png + filetype: png + type: 0 + hash: bce6842fe9a78d1e + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 100 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_099.png + filename: tile_099.png + filetype: png + type: 0 + hash: 64bc27961c23a597 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 99 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_098.png + filename: tile_098.png + filetype: png + type: 0 + hash: f505363f6721ed43 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 98 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_097.png + filename: tile_097.png + filetype: png + type: 0 + hash: 4140eb0e01c42458 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 97 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_096.png + filename: tile_096.png + filetype: png + type: 0 + hash: 61e5ba2ec5cc2e03 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 96 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_095.png + filename: tile_095.png + filetype: png + type: 0 + hash: 2c4018746bda7639 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 95 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_094.png + filename: tile_094.png + filetype: png + type: 0 + hash: 26efe00187d8dde5 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 94 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_093.png + filename: tile_093.png + filetype: png + type: 0 + hash: fecc9a1f3e9802d8 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 93 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_092.png + filename: tile_092.png + filetype: png + type: 0 + hash: d546c3d4f31aa5a0 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 92 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_091.png + filename: tile_091.png + filetype: png + type: 0 + hash: 2c31a5fc8d71be6e + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 91 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_090.png + filename: tile_090.png + filetype: png + type: 0 + hash: 49ac491580bfc4f8 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 90 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_089.png + filename: tile_089.png + filetype: png + type: 0 + hash: 7f30d8350216f6bb + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 89 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_088.png + filename: tile_088.png + filetype: png + type: 0 + hash: a052591c3e581551 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 88 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_087.png + filename: tile_087.png + filetype: png + type: 0 + hash: b5be37e278b5a0e8 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 87 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_086.png + filename: tile_086.png + filetype: png + type: 0 + hash: 405549c9596a8b02 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 86 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_085.png + filename: tile_085.png + filetype: png + type: 0 + hash: c921026208aff689 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 85 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_084.png + filename: tile_084.png + filetype: png + type: 0 + hash: a720f40abed06305 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 84 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_083.png + filename: tile_083.png + filetype: png + type: 0 + hash: 7e26027e93ae8665 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 83 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_082.png + filename: tile_082.png + filetype: png + type: 0 + hash: a7d389b57649b8c1 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 82 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_081.png + filename: tile_081.png + filetype: png + type: 0 + hash: e37d943f98df117c + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 81 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_080.png + filename: tile_080.png + filetype: png + type: 0 + hash: 24af11a711c4a405 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 80 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_079.png + filename: tile_079.png + filetype: png + type: 0 + hash: 6a517ee8c8a504b3 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 79 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_078.png + filename: tile_078.png + filetype: png + type: 0 + hash: 0c75dd1dfcb324e2 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 78 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_077.png + filename: tile_077.png + filetype: png + type: 0 + hash: 51e120ce40647450 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 77 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_076.png + filename: tile_076.png + filetype: png + type: 0 + hash: 414a4fc402bf8d9a + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 76 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_075.png + filename: tile_075.png + filetype: png + type: 0 + hash: 077768331bb39105 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 75 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_074.png + filename: tile_074.png + filetype: png + type: 0 + hash: 42121b492147d8fb + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 74 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_073.png + filename: tile_073.png + filetype: png + type: 0 + hash: 75748e5776001213 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 73 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_072.png + filename: tile_072.png + filetype: png + type: 0 + hash: cda73d6cbd54d108 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 72 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_071.png + filename: tile_071.png + filetype: png + type: 0 + hash: 07cff9b3939795f5 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 71 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_070.png + filename: tile_070.png + filetype: png + type: 0 + hash: ee1ef8567b8a3df0 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 70 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_069.png + filename: tile_069.png + filetype: png + type: 0 + hash: 6cc14afc186ec771 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 69 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_068.png + filename: tile_068.png + filetype: png + type: 0 + hash: be2caa45ef20fd82 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 68 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_067.png + filename: tile_067.png + filetype: png + type: 0 + hash: fb3139953ea9d8d1 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 67 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_066.png + filename: tile_066.png + filetype: png + type: 0 + hash: 7fcc1e121b9c475a + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 66 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_065.png + filename: tile_065.png + filetype: png + type: 0 + hash: 70dd4177ac2aacd3 + lastModified: 1728871745 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 65 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_064.png + filename: tile_064.png + filetype: png + type: 0 + hash: dc1ce13185d6f9dd + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 64 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_063.png + filename: tile_063.png + filetype: png + type: 0 + hash: 3f62dcdb053f6abe + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 63 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_062.png + filename: tile_062.png + filetype: png + type: 0 + hash: 54ba3afbbf9a9b9d + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 62 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_061.png + filename: tile_061.png + filetype: png + type: 0 + hash: c8a1b22d67f32e16 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 61 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_060.png + filename: tile_060.png + filetype: png + type: 0 + hash: 5871fcecf1d47e1c + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 60 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_059.png + filename: tile_059.png + filetype: png + type: 0 + hash: 8deb3108a6f2fd67 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 29 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_028.png + filename: tile_028.png + filetype: png + type: 0 + hash: e7beb61a6e9cabf5 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 28 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_027.png + filename: tile_027.png + filetype: png + type: 0 + hash: 82735e0fe1556323 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 27 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_026.png + filename: tile_026.png + filetype: png + type: 0 + hash: 455f9cc034a4e240 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 26 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_025.png + filename: tile_025.png + filetype: png + type: 0 + hash: 59f5a825963b4b58 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 25 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_024.png + filename: tile_024.png + filetype: png + type: 0 + hash: 52d6f7a1f1aaf096 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 24 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_023.png + filename: tile_023.png + filetype: png + type: 0 + hash: ca52dd2852403677 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 23 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_022.png + filename: tile_022.png + filetype: png + type: 0 + hash: 2217b4ba2738d800 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 22 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_021.png + filename: tile_021.png + filetype: png + type: 0 + hash: a2b2f33d53eafbe1 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 21 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_020.png + filename: tile_020.png + filetype: png + type: 0 + hash: 9ab8e82f77ecda85 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 20 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_019.png + filename: tile_019.png + filetype: png + type: 0 + hash: f4d73b8ef85ddfbf + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 19 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_018.png + filename: tile_018.png + filetype: png + type: 0 + hash: 2f4aa3d6c9a88136 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 18 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_017.png + filename: tile_017.png + filetype: png + type: 0 + hash: 32c7b5c15559556f + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 17 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_016.png + filename: tile_016.png + filetype: png + type: 0 + hash: d66738b42167c25b + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 16 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_015.png + filename: tile_015.png + filetype: png + type: 0 + hash: dfbb87d88e7b361a + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 15 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_014.png + filename: tile_014.png + filetype: png + type: 0 + hash: e9c9d0a81a34e191 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 14 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_013.png + filename: tile_013.png + filetype: png + type: 0 + hash: be9b2566c79ca9e3 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 1 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_000.png + filename: tile_000.png + filetype: png + type: 0 + hash: 43b1a791b2f610aa + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 2 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_001.png + filename: tile_001.png + filetype: png + type: 0 + hash: 58e2a6949c806ed4 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 3 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_002.png + filename: tile_002.png + filetype: png + type: 0 + hash: 9d00d31c498403a5 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 4 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_003.png + filename: tile_003.png + filetype: png + type: 0 + hash: 2ce62d3fa5f83a85 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 5 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_004.png + filename: tile_004.png + filetype: png + type: 0 + hash: 15054cba03033497 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 6 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_005.png + filename: tile_005.png + filetype: png + type: 0 + hash: 75d134cdb99c01b0 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 7 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_006.png + filename: tile_006.png + filetype: png + type: 0 + hash: 977d38606f54ec1a + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 8 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_007.png + filename: tile_007.png + filetype: png + type: 0 + hash: acc98f6bf6af4471 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 9 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_008.png + filename: tile_008.png + filetype: png + type: 0 + hash: e38d301f66207712 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 10 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_009.png + filename: tile_009.png + filetype: png + type: 0 + hash: 0ea909aad0cb11d5 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 11 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_010.png + filename: tile_010.png + filetype: png + type: 0 + hash: 027bca2fa1b70126 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 12 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_011.png + filename: tile_011.png + filetype: png + type: 0 + hash: 0c92bd2b1322d0e7 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 13 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_012.png + filename: tile_012.png + filetype: png + type: 0 + hash: 32bf6597d4a096f7 + lastModified: 1728871741 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 30 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_029.png + filename: tile_029.png + filetype: png + type: 0 + hash: 3d1f20d336f5a0e4 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 31 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_030.png + filename: tile_030.png + filetype: png + type: 0 + hash: 2f6e1c7bd159e049 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 32 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_031.png + filename: tile_031.png + filetype: png + type: 0 + hash: 551fe37520f82310 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 33 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_032.png + filename: tile_032.png + filetype: png + type: 0 + hash: ab38b324f6e3068e + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 34 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_033.png + filename: tile_033.png + filetype: png + type: 0 + hash: 9bc4f952ca3d6104 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 35 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_034.png + filename: tile_034.png + filetype: png + type: 0 + hash: 4c68d41935c4c205 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 36 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_035.png + filename: tile_035.png + filetype: png + type: 0 + hash: 4bf836f83d492422 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 37 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_036.png + filename: tile_036.png + filetype: png + type: 0 + hash: 9b60a4c308beee86 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 38 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_037.png + filename: tile_037.png + filetype: png + type: 0 + hash: b02749d8ee945f27 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 39 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_038.png + filename: tile_038.png + filetype: png + type: 0 + hash: 835f3dbf895d2518 + lastModified: 1728871742 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 40 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_039.png + filename: tile_039.png + filetype: png + type: 0 + hash: d35fb51aa3acdc47 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 41 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_040.png + filename: tile_040.png + filetype: png + type: 0 + hash: 56430e898f7e9789 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 42 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_041.png + filename: tile_041.png + filetype: png + type: 0 + hash: 279113f5a4cbbc98 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 43 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_042.png + filename: tile_042.png + filetype: png + type: 0 + hash: 00a8e91ac50d0582 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 44 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_043.png + filename: tile_043.png + filetype: png + type: 0 + hash: 49e0ee588a2d510c + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 45 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_044.png + filename: tile_044.png + filetype: png + type: 0 + hash: cc99aeb78832013d + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 46 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_045.png + filename: tile_045.png + filetype: png + type: 0 + hash: a42f65407bd8d9c8 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 47 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_046.png + filename: tile_046.png + filetype: png + type: 0 + hash: a6ce3c9db850be68 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 48 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_047.png + filename: tile_047.png + filetype: png + type: 0 + hash: 6398a4447dcb5e13 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 49 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_048.png + filename: tile_048.png + filetype: png + type: 0 + hash: 7d5264eea52a6006 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 50 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_049.png + filename: tile_049.png + filetype: png + type: 0 + hash: 1f1918a8c669d3c1 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 51 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_050.png + filename: tile_050.png + filetype: png + type: 0 + hash: b34445e878281be8 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 52 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_051.png + filename: tile_051.png + filetype: png + type: 0 + hash: 7bd2a717963c5a74 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 53 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_052.png + filename: tile_052.png + filetype: png + type: 0 + hash: ce606e9690950052 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 54 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_053.png + filename: tile_053.png + filetype: png + type: 0 + hash: 7b09d94969ebc484 + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 55 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_054.png + filename: tile_054.png + filetype: png + type: 0 + hash: f4cb8b97cee3bb7c + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 56 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_055.png + filename: tile_055.png + filetype: png + type: 0 + hash: 7456f3530ede598b + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 57 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_056.png + filename: tile_056.png + filetype: png + type: 0 + hash: 54c17c59498db1fc + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 58 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_057.png + filename: tile_057.png + filetype: png + type: 0 + hash: 62e0d421dc1b94ca + lastModified: 1728871744 + size: [32, 32] + channels: 4 + format: GL_RGBA + - uaid: 59 + path: C:\Users\spenc\OneDrive\Pictures\isometric tileset\separated images\tile_058.png + filename: tile_058.png + filetype: png + type: 0 + hash: d7e53d66d6608e44 + lastModified: 1728871743 + size: [32, 32] + channels: 4 + format: GL_RGBA \ No newline at end of file diff --git a/src/src/Components/PathFollowerComponent.cpp b/src/src/Components/PathFollowerComponent.cpp new file mode 100644 index 0000000..a46be1b --- /dev/null +++ b/src/src/Components/PathFollowerComponent.cpp @@ -0,0 +1,135 @@ +#include "PathFollowerComponent.h" +#include "../Renderer.h" +#define GLM_ENABLE_EXPERIMENTAL +#include +#include +#include +#include "../Entitys/Object.h" +#include "../core/utils/ExceptionHandler.h" + + +using core::types::Vec2; + +PathFollowerComponent::PathFollowerComponent(Object* owner) + : Component(owner) {} + + + + +void PathFollowerComponent::AddTarget(const Vec2& point) +{ + m_targets.push_back(point); +} + +void PathFollowerComponent::ClearPath() +{ + m_targets.clear(); + m_currentTarget = 0; +} + +float PathFollowerComponent::Ease(float t) const +{ + switch (m_easing) + { + case EasingFunction::EaseInOut: return t * t * (3 - 2 * t); + case EasingFunction::EaseOutCubic: return 1 - std::pow(1 - t, 3); + default: return t; + } +} + +float PathFollowerComponent::GetCornerSharpness(const Vec2& a, const Vec2& b, const Vec2& c) const +{ + glm::vec2 d1 = glm::normalize(glm::vec2(b - a)); + glm::vec2 d2 = glm::normalize(glm::vec2(c - b)); + float angle = glm::degrees(glm::angle(d1, d2)); + return glm::clamp(angle / 180.0f, 0.1f, 1.0f); +} + +void PathFollowerComponent::Update(float dt) +{ + if (m_targets.empty()) return; + + if (!m_initialized) + { + m_currentPosition = owner->GetLocalPosition(); + m_initialized = true; + } + + Vec2 target = m_targets[m_currentTarget]; + Vec2 delta = target - m_currentPosition; + float dist = delta.Length(); + + if (dist < 1.0f) + { + m_currentTarget++; + if (m_currentTarget >= m_targets.size()) + { + m_currentTarget = 0; + } + return; + } + + Vec2 direction = delta.Normalized(); + float slowdownFactor = 1.0f; + + if (m_currentTarget > 0 && m_currentTarget < m_targets.size() - 1) + { + slowdownFactor = GetCornerSharpness( + m_targets[m_currentTarget - 1], + m_targets[m_currentTarget], + m_targets[m_currentTarget + 1] + ); + } + + float easedSpeed = Ease(slowdownFactor) * m_speed; + m_currentPosition += direction * easedSpeed * dt; + owner->SetLocalPosition(m_currentPosition); +} + + + +void PathFollowerComponent::Save(YAML::Emitter& out) const +{ + out << YAML::BeginMap; + out << YAML::Key << "type" << YAML::Value << GetName(); + out << YAML::Key << "speed" << YAML::Value << m_speed; + out << YAML::Key << "easing" << YAML::Value << static_cast(m_easing); + + out << YAML::Key << "targets" << YAML::Value << YAML::BeginSeq; + for (const auto& pt : m_targets) + { + out << YAML::BeginMap; + out << YAML::Key << "x" << YAML::Value << pt.x; + out << YAML::Key << "y" << YAML::Value << pt.y; + out << YAML::EndMap; + } + out << YAML::EndSeq; + out << YAML::EndMap; +} + +void PathFollowerComponent::Load(const YAML::Node& node) +{ + try + { + m_speed = node["speed"] ? node["speed"].as() : 100.0f; + m_easing = node["easing"] ? static_cast(node["easing"].as()) : EasingFunction::Linear; + m_targets.clear(); + + if (node["targets"]) + { + for (const auto& pt : node["targets"]) + { + float x = pt["x"] ? pt["x"].as() : 0.0f; + float y = pt["y"] ? pt["y"].as() : 0.0f; + m_targets.emplace_back(x, y); + } + } + + m_currentTarget = 0; + m_initialized = false; + } + catch (const std::exception& e) + { + RecoverableError("Failed to load PathFollowerComponent: " + std::string(e.what()), Create::Exceptions::ComponentLoad).Handle(); + } +} diff --git a/src/src/Components/PathFollowerComponent.h b/src/src/Components/PathFollowerComponent.h new file mode 100644 index 0000000..ac717a4 --- /dev/null +++ b/src/src/Components/PathFollowerComponent.h @@ -0,0 +1,53 @@ +#pragma once +#include "Component.h" +#include "../core/types/vec2.h" +#include "../core/types/color.h" +#include + +enum class EasingFunction +{ + Linear, + EaseInOut, + EaseOutCubic +}; + +class PathFollowerComponent : public Component +{ +public: + PathFollowerComponent(Object *owner); + + void Update(float dt); + + void AddTarget(const core::types::Vec2 &point); + void ClearPath(); + + void Save(YAML::Emitter &out) const override; + void Load(const YAML::Node &node) override; + std::string GetName() const override { return "PathFollowerComponent"; } + + float GetSpeed() const { return m_speed; } + void SetSpeed(float s) { m_speed = s; } + + EasingFunction GetEasing() const { return m_easing; } + void SetEasing(EasingFunction easing) { m_easing = easing; } + + std::vector &GetTargets() { return m_targets; } + + void RemoveTarget(size_t index) + { + if (index < m_targets.size()) + m_targets.erase(m_targets.begin() + index); + } + +private: + std::vector m_targets; + size_t m_currentTarget = 0; + float m_speed = 100.0f; + EasingFunction m_easing = EasingFunction::Linear; + + core::types::Vec2 m_currentPosition; + bool m_initialized = false; + + float Ease(float t) const; + float GetCornerSharpness(const core::types::Vec2 &a, const core::types::Vec2 &b, const core::types::Vec2 &c) const; +}; diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp index 08527a8..9fa8f3c 100644 --- a/src/src/Engine.cpp +++ b/src/src/Engine.cpp @@ -9,6 +9,7 @@ #include "components/PhysicsComponent.h" #include "components/ParticleComponent.h" #include "components/AnimationComponent.h" +#include "components/PathFollowerComponent.h" #include "core/utils/FileDialog.h" #include "core/utils/Logging.h" @@ -586,6 +587,7 @@ void Engine::Init() m_physicsUpdates.reserve(512); // 256-512 physics bodies/entities with Box2D m_particleUpdates.reserve(24); // ~1K particle systems active is fair in effects-heavy scenes m_animationsUpdates.reserve(512); // ~500 animated objects (characters, FX, etc.) + m_PathUpdates.reserve(16); Logger::LogOk("Engine Core"); } @@ -606,6 +608,7 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom m_collectStack.clear(); m_physicsUpdates.clear(); m_particleUpdates.clear(); + m_PathUpdates.clear(); const glm::vec2 screenSize = glm::vec2(Renderer::GetSize()); @@ -649,6 +652,9 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom if (auto *particle = raw->GetComponent().get()) m_particleUpdates.push_back(particle); + if (auto *follower = raw->GetComponent().get()) + m_PathUpdates.push_back(follower); + if (auto *animator = raw->GetComponent().get()) m_animationsUpdates.push_back(animator); @@ -715,7 +721,6 @@ void Engine::Run() Logger::Draw(); profiler.EndEngineSection(); - { if (ImGui::BeginPopupModal("ConfirmClearScene", nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -738,7 +743,6 @@ void Engine::Run() } } - profiler.BeginEngineSection("BeginMainMenuBar"); if (ImGui::BeginMainMenuBar()) @@ -859,8 +863,6 @@ void Engine::Run() DrawAudioPlayingList(); DrawImGuiWindow(); - - { PROFILE_ENGINE_SCOPE("Engine::DrawSceneTree"); @@ -1060,14 +1062,22 @@ void Engine::Run() } profiler.BeginSection("Updates"); - profiler.BeginSection("Scripts"); - if (playing) { - ScriptCore::CallAllUpdates(deltaTime); - } + profiler.BeginSection("Scripts"); - profiler.EndSection(); + ScriptCore::CallAllUpdates(deltaTime); + profiler.EndSection(); + + profiler.BeginSection("Pathing"); + for (auto *follower : m_PathUpdates) + { + profiler.BeginSection("Object: " + follower->GetOwner()->GetName()); + follower->Update(deltaTime); + profiler.EndSection(); + } + profiler.EndSection(); + } profiler.BeginSection("Particles"); for (auto *script : m_particleUpdates) diff --git a/src/src/Engine.h b/src/src/Engine.h index 4c920ad..752b932 100644 --- a/src/src/Engine.h +++ b/src/src/Engine.h @@ -12,6 +12,7 @@ class PhysicsComponent; class ParticleComponent; class AnimationComponent; class TilemapComponent; +class PathFollowerComponent; class Engine { @@ -46,5 +47,7 @@ private: std::vector> m_collectStack; std::vector m_physicsUpdates; std::vector m_particleUpdates; + std::vector m_PathUpdates; + }; diff --git a/src/src/Entitys/Object.cpp b/src/src/Entitys/Object.cpp index 9466fcd..093d012 100644 --- a/src/src/Entitys/Object.cpp +++ b/src/src/Entitys/Object.cpp @@ -9,6 +9,8 @@ #include "../Components/ParticleComponent.h" #include "../Components/AnimationComponent.h" #include "../Components/AudioPlayerComponent.h" +#include "../Components/PathFollowerComponent.h" + #include "../core/utils/Logging.h" #include "../utils/UID.h" @@ -264,6 +266,8 @@ void Object::Load(const YAML::Node &node) AddComponent()->Load(compNode); else if (type == "AudioPlayerComponent") AddComponent()->Load(compNode); + else if (type == "PathFollowerComponent") + AddComponent()->Load(compNode); else { Logger::LogError("Invalid Componenet type '%s' found in component '%s'(%d)", type.c_str(), name.c_str(), uid.id); diff --git a/src/src/editor/windows/Inspector.cpp b/src/src/editor/windows/Inspector.cpp index def2735..cc6fe9b 100644 --- a/src/src/editor/windows/Inspector.cpp +++ b/src/src/editor/windows/Inspector.cpp @@ -10,14 +10,13 @@ #include "../../components/ParticleComponent.h" #include "../../components/AnimationComponent.h" #include "../../components/AudioPlayerComponent.h" +#include "../../components/PathFollowerComponent.h" #include "imgui.h" #include "imgui_internal.h" #include - - void DrawInspectorUI(std::shared_ptr selected) { @@ -84,7 +83,8 @@ void DrawInspectorUI(std::shared_ptr selected) "Tilemap", "Particle", "Animation", - "Audio Player"}; + "Audio Player", + "Path Follower"}; static int selectedIndex = -1; @@ -122,7 +122,8 @@ void DrawInspectorUI(std::shared_ptr selected) selected->AddComponent(); else if (type == "Audio Player" && !selected->GetComponent()) selected->AddComponent(); - + else if (type == "Path Follower" && !selected->GetComponent()) + selected->AddComponent(); } if (auto sprite = selected->GetComponent()) @@ -748,17 +749,62 @@ void DrawInspectorUI(std::shared_ptr selected) { audio->SetLooping(loop); } - // Volume static float volume = 1.0f; if (ImGui::SliderFloat("Volume", &volume, 0.0f, 1.0f)) audio->SetVolume(volume); - if (ImGui::Button("Remove AudioPlayerComponent")) selected->RemoveComponent(); } + if (auto pathfollower = selected->GetComponent()) + { + ImGui::SeparatorText("PathFollower"); + + // Speed + float speed = pathfollower->GetSpeed(); + if (ImGui::DragFloat("Speed", &speed, 1.0f, 0.0f, 1000.0f)) + pathfollower->SetSpeed(speed); + + // Easing + const char *easingNames[] = {"Linear", "EaseInOut", "EaseOutCubic"}; + int currentEasing = static_cast(pathfollower->GetEasing()); + if (ImGui::Combo("Easing", ¤tEasing, easingNames, IM_ARRAYSIZE(easingNames))) + pathfollower->SetEasing(static_cast(currentEasing)); + + ImGui::SeparatorText("Path Points"); + + // Path points + auto &targets = pathfollower->GetTargets(); // Must return a reference! + for (int i = 0; i < static_cast(targets.size()); ++i) + { + ImGui::PushID(i); + + core::types::Vec2 &pt = targets[i]; + ImGui::DragFloat2("Point", &pt.x, 1.0f); + + ImGui::SameLine(); + if (ImGui::Button("X")) + { + pathfollower->RemoveTarget(i); + ImGui::PopID(); + break; + } + + ImGui::PopID(); + } + + if (ImGui::Button("Add Point")) + { + core::types::Vec2 last = targets.empty() ? core::types::Vec2(0, 0) : targets.back(); + pathfollower->AddTarget(last + core::types::Vec2(50.0f, 0.0f)); + } + + if (ImGui::Button("Remove PathFollowerComponent")) + selected->RemoveComponent(); + } + ImGui::End(); } \ No newline at end of file