diff --git a/imgui.ini b/imgui.ini
index d13de6b..0f93657 100644
--- a/imgui.ini
+++ b/imgui.ini
@@ -14,14 +14,14 @@ Size=1920,1158
 Collapsed=0
 
 [Window][Inspector]
-Pos=0,358
-Size=385,819
+Pos=0,644
+Size=385,533
 Collapsed=0
 DockId=0x0000000A,0
 
 [Window][Scene Tree]
 Pos=0,19
-Size=385,337
+Size=385,623
 Collapsed=0
 DockId=0x00000009,0
 
@@ -86,8 +86,8 @@ DockId=0x00000004,0
 [Docking][Data]
 DockSpace         ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X
   DockNode        ID=0x00000001 Parent=0x11111111 SizeRef=385,701 Split=Y Selected=0x12EF0F59
-    DockNode      ID=0x00000009 Parent=0x00000001 SizeRef=385,337 HiddenTabBar=1 Selected=0x12EF0F59
-    DockNode      ID=0x0000000A Parent=0x00000001 SizeRef=385,819 HiddenTabBar=1 Selected=0x36DC96AB
+    DockNode      ID=0x00000009 Parent=0x00000001 SizeRef=385,623 HiddenTabBar=1 Selected=0x12EF0F59
+    DockNode      ID=0x0000000A Parent=0x00000001 SizeRef=385,533 HiddenTabBar=1 Selected=0x36DC96AB
   DockNode        ID=0x00000002 Parent=0x11111111 SizeRef=1533,701 Split=Y Selected=0xC450F867
     DockNode      ID=0x00000007 Parent=0x00000002 SizeRef=606,675 CentralNode=1 HiddenTabBar=1 Selected=0xC450F867
     DockNode      ID=0x00000008 Parent=0x00000002 SizeRef=606,481 Split=X Selected=0x9B5D3198
diff --git a/remake/build.log b/remake/build.log
index 5e624f6..8af518a 100644
--- a/remake/build.log
+++ b/remake/build.log
@@ -1,97 +1,2 @@
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lctype.c -o src\build\lctype.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lcorolib.c -o src\build\lcorolib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lbaselib.c -o src\build\lbaselib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lauxlib.c -o src\build\lauxlib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lapi.c -o src\build\lapi.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldblib.c -o src\build\ldblib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lcode.c -o src\build\lcode.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldump.c -o src\build\ldump.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldebug.c -o src\build\ldebug.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lfunc.c -o src\build\lfunc.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ldo.c -o src\build\ldo.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\linit.c -o src\build\linit.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lgc.c -o src\build\lgc.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lmem.c -o src\build\lmem.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\liolib.c -o src\build\liolib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\llex.c -o src\build\llex.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lmathlib.c -o src\build\lmathlib.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\main.cpp -o src\build\main.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\ExceptionHandler.cpp -o src\build\utils\ExceptionHandler.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lopcodes.c -o src\build\lopcodes.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lobject.c -o src\build\lobject.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\loslib.c -o src\build\loslib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lstate.c -o src\build\lstate.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lstring.c -o src\build\lstring.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\UID.cpp -o src\build\utils\UID.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lparser.c -o src\build\lparser.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ltable.c -o src\build\ltable.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ltablib.c -o src\build\ltablib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lstrlib.c -o src\build\lstrlib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lzio.c -o src\build\lzio.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\ltm.c -o src\build\ltm.o
-tf8lib.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\luac.c -o src\build\luac.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lundump.c -o src\build\lundump.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lvm.c -o src\build\lvm.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\loadlib.c -o src\build\loadlib.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\GameObjectsList.cpp -o src\build\utils\GameObjectsList.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Shader.cpp -o src\build\utils\Shader.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\TextComonent.cpp -o src\build\Components\TextComonent.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\PhysicsComponent.cpp -o src\build\Components\PhysicsComponent.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\arena_allocator.c -o src\build\arena_allocator.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Profiler.cpp -o src\build\utils\Profiler.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\include\lua\lua.c -o src\build\lua.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\aabb.c -o src\build\aabb.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\array.c -o src\build\array.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\bitset.c -o src\build\bitset.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\body.c -o src\build\body.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\broad_phase.c -o src\build\broad_phase.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\contact.c -o src\build\contact.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\constraint_graph.c -o src\build\constraint_graph.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\core.c -o src\build\core.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\distance_joint.c -o src\build\distance_joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\geometry.c -o src\build\geometry.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\id_pool.c -o src\build\id_pool.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\contact_solver.c -o src\build\contact_solver.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\hull.c -o src\build\hull.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\distance.c -o src\build\distance.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\dynamic_tree.c -o src\build\dynamic_tree.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\math_functions.c -o src\build\math_functions.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\TilemapComponent.cpp -o src\build\Components\TilemapComponent.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\FileDialog.cpp -o src\build\utils\FileDialog.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\motor_joint.c -o src\build\motor_joint.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Renderer.cpp -o src\build\Renderer.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\island.c -o src\build\island.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_impl_opengl3.cpp -o src\build\imgui_impl_opengl3.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\mover.c -o src\build\mover.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_impl_glfw.cpp -o src\build\imgui_impl_glfw.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\mouse_joint.c -o src\build\mouse_joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\joint.c -o src\build\joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\manifold.c -o src\build\manifold.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\CameraComponent.cpp -o src\build\Components\CameraComponent.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\sensor.c -o src\build\sensor.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\LightComponent.cpp -o src\build\Components\LightComponent.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\prismatic_joint.c -o src\build\prismatic_joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\revolute_joint.c -o src\build\revolute_joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\types.c -o src\build\types.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\timer.c -o src\build\timer.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\table.c -o src\build\table.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\Logging.cpp -o src\build\utils\Logging.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\wheel_joint.c -o src\build\wheel_joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\weld_joint.c -o src\build\weld_joint.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\solver_set.c -o src\build\solver_set.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\shape.c -o src\build\shape.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\solver.c -o src\build\solver.o
-[COMPILE] gcc -std=c99 -Wall -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\box2d\world.c -o src\build\world.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\utils.cpp -o src\build\utils\utils.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\ScriptComponent.cpp -o src\build\Components\ScriptComponent.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_tables.cpp -o src\build\imgui_tables.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_demo.cpp -o src\build\imgui_demo.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_draw.cpp -o src\build\imgui_draw.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Components\SpriteComponent.cpp -o src\build\Components\SpriteComponent.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Entitys\Object.cpp -o src\build\Entitys\Object.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\utils\EngineConfig.cpp -o src\build\utils\EngineConfig.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui_widgets.cpp -o src\build\imgui_widgets.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o
-[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\vendor\imgui\imgui.cpp -o src\build\imgui.o
+[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -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\CameraComponent.o src\build\Components\LightComponent.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\Entitys\Object.o src\build\utils\EngineConfig.o src\build\utils\ExceptionHandler.o src\build\utils\FileDialog.o src\build\utils\GameObjectsList.o src\build\utils\Logging.o src\build\utils\Profiler.o src\build\utils\Shader.o src\build\utils\UID.o src\build\utils\utils.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 -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto
diff --git a/src/assets/shaders/sprite.frag b/src/assets/shaders/sprite.frag
index 8ce3527..457cc98 100644
--- a/src/assets/shaders/sprite.frag
+++ b/src/assets/shaders/sprite.frag
@@ -1,4 +1,4 @@
-#version 330 core
+#version 430 core
 
 in vec2 vUV;
 in vec2 vFragScreenPos;
@@ -6,25 +6,31 @@ out vec4 FragColor;
 
 uniform sampler2D uTex;
 uniform sampler2D uNormalMap;
-uniform float uRotation;
 
+uniform float uRotation;
 uniform float uBrightness;
 uniform float uSaturation;
 uniform float uGamma;
 
-#define MAX_LIGHTS 512
+uniform int uLightCount;
+uniform int uClusterWidth;
+uniform int uClusterHeight;
+uniform int uClusterCols;
+uniform int uMaxLightsPerCluster;
 
-uniform int   uLightCount;
+#define MAX_LIGHTS 512
 uniform vec2  uLightPos[MAX_LIGHTS];
 uniform vec3  uLightColor[MAX_LIGHTS];
 uniform float uLightIntensity[MAX_LIGHTS];
 uniform float uLightRadius[MAX_LIGHTS];
 
+layout(std430, binding = 1) readonly buffer ClusterLightBuffer {
+    int clusterLightIndices[];
+};
+
 void main()
 {
-    // Rotate UV 90° clockwise
     vec2 rotatedUV = vec2(vUV.y, 1.0 - vUV.x);
-
     vec4 texColor = texture(uTex, rotatedUV);
     if (texColor.a < 0.1)
         discard;
@@ -40,18 +46,23 @@ void main()
     vec3 normal = normalize(n);
     vec3 finalLight = vec3(0.0);
 
-    for (int i = 0; i < uLightCount; ++i)
-    {
-        vec2 lightVec = uLightPos[i] - vFragScreenPos;
-        float dist = length(lightVec);
+    int cx = int(vFragScreenPos.x) / uClusterWidth;
+    int cy = int(vFragScreenPos.y) / uClusterHeight;
+    int clusterIndex = cy * uClusterCols + cx;
 
-        if (dist < uLightRadius[i])
-        {
+    for (int i = 0; i < uMaxLightsPerCluster; ++i) {
+        int lightIndex = clusterLightIndices[clusterIndex * uMaxLightsPerCluster + i];
+        if (lightIndex < 0 || lightIndex >= uLightCount)
+            break;
+
+        vec2 lightVec = uLightPos[lightIndex] - vFragScreenPos;
+        float dist = length(lightVec);
+        if (dist < uLightRadius[lightIndex]) {
             vec2 lightDir2D = normalize(lightVec);
             vec3 lightDir = normalize(vec3(lightDir2D, 1.0));
-            float attenuation = smoothstep(uLightRadius[i], 0.0, dist);
+            float attenuation = smoothstep(uLightRadius[lightIndex], 0.0, dist);
             float diff = max(dot(normal, lightDir), 0.0);
-            vec3 light = uLightColor[i] * diff * attenuation * uLightIntensity[i];
+            vec3 light = uLightColor[lightIndex] * diff * attenuation * uLightIntensity[lightIndex];
             finalLight += light;
         }
     }
@@ -64,8 +75,5 @@ void main()
     result = mix(vec3(gray), result, uSaturation);
 
     result = pow(result, vec3(1.0 / uGamma));
-
-    result = clamp(result, 0.0, 1.0);
-
-    FragColor = vec4(result, texColor.a);
+    FragColor = vec4(clamp(result, 0.0, 1.0), texColor.a);
 }
diff --git a/src/src/Engine.cpp b/src/src/Engine.cpp
index 07b32de..65626d8 100644
--- a/src/src/Engine.cpp
+++ b/src/src/Engine.cpp
@@ -30,6 +30,7 @@
 #include <cmath>
 #include <cstdio>
 #include <algorithm>
+#include <random>
 #include <format>
 #include <memory>
 #include <filesystem>
@@ -96,7 +97,7 @@ void DrawProfilerTimelineBars(const ProfileNode &node,
     // draw the bar
     size_t hash = std::hash<std::string>{}(node.name);
     ImU32 color = ImColor::HSV(((hash ^ SEED) % 1000) / 1000.0f, 0.6f, 0.85f);
-    
+
     ImDrawList *draw = ImGui::GetWindowDrawList();
     draw->AddRectFilled(barMin, barMax, color, 3.0f);
     draw->AddRect(barMin, barMax, IM_COL32_BLACK, 3.0f);
@@ -352,10 +353,57 @@ void Engine::Init()
 
     Renderer::Init();
 
-    auto obj = std::make_shared<Object>("Hello, Create");
+    // auto obj = std::make_shared<Object>("Hello, Create");
+    //
+    // objects.push_back(obj);
+    // selected = obj;
+
+    {
+        std::random_device rd;
+        std::mt19937 rng(rd());
+        std::uniform_real_distribution<float> lightRadius(1000.0f, 2000.0f);
+        std::uniform_real_distribution<float> lightIntensity(1.0f, 3.0f);
+        std::uniform_real_distribution<float> hueDist(0.0f, 1.0f);
+    
+        const float tileSize = 1024.0f; // approximate texture size
+        const int gridSize = 10;
+    
+        // 10x10 grid of pebble sprites
+        for (int y = 0; y < gridSize; ++y)
+        {
+            for (int x = 0; x < gridSize; ++x)
+            {
+                int index = y * gridSize + x;
+                auto obj = std::make_shared<Object>("Pebble_" + std::to_string(index));
+                obj->SetLocalPosition(glm::vec2(x * tileSize, y * tileSize));
+    
+                auto sprite = obj->AddComponent<SpriteComponent>();
+                sprite->SetTexture("C:/Users/spenc/OneDrive/Pictures/textures/ganges_river_pebbles_diff_1k.png");
+                sprite->SetNormalMap("C:/Users/spenc/OneDrive/Pictures/textures/ganges_river_pebbles_nor_gl_1k.png");
+                sprite->SetRenderType(SpriteComponent::RenderType::Lit);
+    
+                objects.push_back(obj);
+            }
+        }
+    
+        // 100 random lights
+        std::uniform_real_distribution<float> posDist(0.0f, tileSize * gridSize);
+    
+        for (int i = 0; i < 100; ++i)
+        {
+            auto obj = std::make_shared<Object>("Light_" + std::to_string(i));
+            obj->SetLocalPosition(glm::vec2(posDist(rng), posDist(rng)));
+    
+            auto light = obj->AddComponent<LightComponent>();
+            light->SetRadius(lightRadius(rng));
+            light->SetIntensity(lightIntensity(rng));
+            light->SetColor(HSVtoRGB(hueDist(rng), 0.8f, 1.0f));
+    
+            objects.push_back(obj);
+        }
+    }
+    
 
-    objects.push_back(obj);
-    selected = obj;
     Logger::LogVerbose("Resverving Objects");
 
     m_toDraw.reserve(1024);
@@ -618,6 +666,8 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom
     m_activeCamera = nullptr;
     m_physicsUpdates.clear();
 
+    const glm::vec2 screenSize = glm::vec2(Renderer::GetSize());
+
     for (auto &root : objects)
         if (!root->GetParent())
             m_collectStack.push_back(root);
@@ -635,7 +685,7 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom
         if (auto light = obj->GetComponent<LightComponent>())
         {
             glm::vec2 world = obj->GetWorldPosition();
-            glm::vec2 screen = (world - camPos) * camZoom + glm::vec2(Renderer::GetSize()) * 0.5f;
+            glm::vec2 screen = (world - camPos) * camZoom + screenSize * 0.5f;
             Renderer::AddLight(screen, light->GetColor(), light->GetIntensity(), light->GetRadius() * camZoom);
         }
 
@@ -647,7 +697,6 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom
                     m_activeCamera = camera;
             }
         }
-        
 
         if (playing)
         {
@@ -663,7 +712,6 @@ void Engine::collectObjects(bool playing, const glm::vec2 &camPos, float camZoom
     }
 }
 
-
 void Engine::Run()
 {
     while (!glfwWindowShouldClose(window))
@@ -777,7 +825,6 @@ void Engine::Run()
                     {
                         ImGui::Checkbox("Profile Engine", &g_engineConfig.settings.profile_editor);
                         ImGui::Checkbox("Deep Profileing", &g_engineConfig.settings.profile_deep);
-
                     }
                     ImGui::EndMenu();
                 }
@@ -952,6 +999,11 @@ void Engine::Run()
         collectObjects(playing, cameraPos, cameraZoom);
         profiler.EndEngineSection();
 
+        profiler.BeginEngineSection("Renderer::UpdateClusterLights");
+
+        Renderer::UpdateClusterLights();
+        profiler.EndEngineSection();
+
         // Sort Objects
         profiler.BeginEngineSection("Sort Objects");
         if (m_toDraw.size() > 1)
diff --git a/src/src/Renderer.cpp b/src/src/Renderer.cpp
index e10adf6..2060e93 100644
--- a/src/src/Renderer.cpp
+++ b/src/src/Renderer.cpp
@@ -12,6 +12,7 @@
 #include <GL/glew.h>
 #include <glm/glm.hpp>
 #include <iostream>
+#include <algorithm>
 #include <map>
 
 static Shader spriteShader;
@@ -31,6 +32,11 @@ std::unique_ptr<ColorCorrection> Renderer::s_ColorCorrection = nullptr;
 
 std::vector<Light> Renderer::s_Lights;
 
+std::vector<Renderer::Cluster> Renderer::s_Clusters;
+GLuint Renderer::s_ClusterSSBO = 0;
+int Renderer::s_ClusterCols = 0;
+int Renderer::s_ClusterRows = 0;
+
 static Shader tilemapShader;
 
 void Renderer::InitQuad()
@@ -89,6 +95,8 @@ void Renderer::Init()
 
     SetColorCorrection(std::make_unique<ColorCorrection>());
 
+    glGenBuffers(1, &s_ClusterSSBO);
+
     // Create a 1x1 flat normal map (RGB: 128,128,255)
     unsigned char flatNormal[3] = {128, 128, 255};
     glGenTextures(1, &defaultNormalMap);
@@ -100,6 +108,51 @@ void Renderer::Init()
     s_DrawCalls = 0;
 }
 
+void Renderer::UpdateClusterLights()
+{
+    PROFILE_ENGINE_SCOPE("Renderer::UpdateClusterLights");
+
+    s_ClusterCols = (width + CLUSTER_SIZE - 1) / CLUSTER_SIZE;
+    s_ClusterRows = (height + CLUSTER_SIZE - 1) / CLUSTER_SIZE;
+    int totalClusters = s_ClusterCols * s_ClusterRows;
+
+    s_Clusters.resize(totalClusters);
+    for (auto &c : s_Clusters)
+        c.lightIndices.clear();
+
+    for (int i = 0; i < s_Lights.size(); ++i)
+    {
+        const Light &light = s_Lights[i];
+        glm::vec2 min = light.screenPos - glm::vec2(light.radius);
+        glm::vec2 max = light.screenPos + glm::vec2(light.radius);
+
+        int minX = glm::clamp(int(min.x) / CLUSTER_SIZE, 0, s_ClusterCols - 1);
+        int maxX = glm::clamp(int(max.x) / CLUSTER_SIZE, 0, s_ClusterCols - 1);
+        int minY = glm::clamp(int(min.y) / CLUSTER_SIZE, 0, s_ClusterRows - 1);
+        int maxY = glm::clamp(int(max.y) / CLUSTER_SIZE, 0, s_ClusterRows - 1);
+
+        for (int y = minY; y <= maxY; ++y)
+            for (int x = minX; x <= maxX; ++x)
+            {
+                Cluster &cluster = s_Clusters[y * s_ClusterCols + x];
+                if (cluster.lightIndices.size() < MAX_LIGHTS_PER_CLUSTER)
+                    cluster.lightIndices.push_back(i);
+            }
+    }
+
+    std::vector<int> packed;
+    packed.resize(totalClusters * MAX_LIGHTS_PER_CLUSTER, -1);
+    for (int i = 0; i < totalClusters; ++i)
+    {
+        for (int j = 0; j < s_Clusters[i].lightIndices.size(); ++j)
+            packed[i * MAX_LIGHTS_PER_CLUSTER + j] = s_Clusters[i].lightIndices[j];
+    }
+
+    glBindBuffer(GL_SHADER_STORAGE_BUFFER, s_ClusterSSBO);
+    glBufferData(GL_SHADER_STORAGE_BUFFER, packed.size() * sizeof(int), packed.data(), GL_DYNAMIC_DRAW);
+    glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, s_ClusterSSBO);
+}
+
 void Renderer::Resize(int w, int h)
 {
 
@@ -213,10 +266,6 @@ void Renderer::DrawTilemap(TilemapComponent *tilemap, const glm::vec2 &worldPos,
     glBindVertexArray(0);
 }
 
-
-
-
-
 void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float zoom, glm::vec2 &CameraPos)
 {
     PROFILE_DEEP_SCOPE("DrawSprite");
@@ -286,6 +335,10 @@ void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float z
         }
 
         shader->SetInt("uLightCount", static_cast<int>(s_Lights.size()));
+        shader->SetInt("uClusterWidth", CLUSTER_SIZE);
+        shader->SetInt("uClusterHeight", CLUSTER_SIZE);
+        shader->SetInt("uClusterCols", s_ClusterCols);
+        shader->SetInt("uMaxLightsPerCluster", MAX_LIGHTS_PER_CLUSTER);
 
         for (size_t i = 0; i < s_Lights.size(); ++i)
         {
@@ -303,6 +356,8 @@ void Renderer::DrawSprite(SpriteComponent *sprite, const glm::vec2 &pos, float z
             glActiveTexture(GL_TEXTURE1);
             glBindTexture(GL_TEXTURE_2D, sprite->GetNormalMapID() ? sprite->GetNormalMapID() : defaultNormalMap);
         }
+
+        glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, s_ClusterSSBO);
     }
 
     {
diff --git a/src/src/Renderer.h b/src/src/Renderer.h
index bb48863..e0efe4c 100644
--- a/src/src/Renderer.h
+++ b/src/src/Renderer.h
@@ -2,6 +2,7 @@
 #include <GL/glew.h>
 #include <glm/glm.hpp>
 #include <vector>
+#include <memory>
 
 #include "Components/TilemapComponent.h"
 #include "Components/SpriteComponent.h"
@@ -9,12 +10,10 @@
 #include "utils/Shader.h"
 #include "utils/Profiler.h"
 
-
 struct ColorCorrection {
     float brightness = 1.0f;
     float saturation = 1.0f;
     float gamma = 1.0f;
-    
 
     void Upload(Shader& shader) const {
         shader.SetFloat("uBrightness", brightness);
@@ -23,17 +22,14 @@ struct ColorCorrection {
     }
 };
 
-
-struct Light
-{
+struct Light {
     glm::vec2 screenPos;
     glm::vec3 color;
     float intensity;
     float radius;
 };
 
-class Renderer
-{
+class Renderer {
 public:
     static void Init();
     static void Resize(int w, int h);
@@ -47,7 +43,6 @@ public:
     static void ClearLights();
 
     static void DrawEditorGrid(const glm::vec2 &cameraPos, float zoom);
-
     static void DrawGizmoLine(const glm::vec2 &worldStart, const glm::vec2 &worldEnd, const glm::vec3 &color, const glm::vec2 &cameraPos, float zoom);
     static void DrawGizmoRect(const glm::vec2 &worldPos, const glm::vec2 &size, const glm::vec3 &color, const glm::vec2 &cameraPos, float zoom);
     static void DrawGizmoCircle(const glm::vec2 &worldCenter, float radius, int segments, const glm::vec3 &color, const glm::vec2 &cameraPos, float zoom);
@@ -58,11 +53,14 @@ public:
     static int GetLightsCount();
 
     static void SetColorCorrection(std::unique_ptr<ColorCorrection> correction);
-
     static ColorCorrection *GetColorCorrection();
 
+    // Clustered lighting
+    static void UpdateClusterLights(); // Call once per frame after all lights added
+
 private:
     static std::vector<Light> s_Lights;
+
     static GLuint fbo, textureColorBuffer, rbo;
     static GLuint defaultNormalMap;
     static int width, height;
@@ -74,4 +72,19 @@ private:
     static GLuint LoadShader(const char *vertexSrc, const char *fragmentSrc);
 
     static std::unique_ptr<ColorCorrection> s_ColorCorrection;
+
+    // --- Clustered Lighting ---
+    static constexpr int CLUSTER_SIZE = 16;
+    static constexpr int MAX_LIGHTS_PER_CLUSTER = 32;
+
+    struct Cluster {
+        std::vector<int> lightIndices;
+    };
+
+    static std::vector<Cluster> s_Clusters;
+    static GLuint s_ClusterSSBO;
+    static int s_ClusterCols;
+    static int s_ClusterRows;
+
+    
 };
diff --git a/src/src/utils/utils.h b/src/src/utils/utils.h
index c0b75d0..326a6d7 100644
--- a/src/src/utils/utils.h
+++ b/src/src/utils/utils.h
@@ -2,6 +2,7 @@
 
 #include <string>
 #include <GL/glew.h>
+#include <glm/glm.hpp>
 
 // Returns filename from a full path (e.g., "C:/foo/bar.png" → "bar.png")
 std::string GetFilenameFromPath(const std::string& path);
@@ -10,3 +11,28 @@ std::string GetFilenameFromPath(const std::string& path);
 GLuint LoadTextureIfNeeded(const std::string& path);
 
 bool DeleteLatestLogFile();
+
+
+// HSV → RGB helper
+inline glm::vec3 HSVtoRGB(float h, float s, float v)
+{
+    float r, g, b;
+
+    int i = int(h * 6);
+    float f = h * 6 - i;
+    float p = v * (1 - s);
+    float q = v * (1 - f * s);
+    float t = v * (1 - (1 - f) * s);
+
+    switch (i % 6)
+    {
+        case 0: r = v; g = t; b = p; break;
+        case 1: r = q; g = v; b = p; break;
+        case 2: r = p; g = v; b = t; break;
+        case 3: r = p; g = q; b = v; break;
+        case 4: r = t; g = p; b = v; break;
+        case 5: r = v; g = p; b = q; break;
+    }
+
+    return glm::vec3(r, g, b);
+}
\ No newline at end of file