From 868ec3eb563b3fc9feb0bf7ee3c902885bd5cc49 Mon Sep 17 00:00:00 2001 From: Ethan Adams Date: Tue, 28 Jan 2025 16:07:58 -0500 Subject: [PATCH] optimization --- Resources/animations/shot_gun_anim.xml | 14 + Resources/maps/debugmap.tmx | 61 +- Resources/maps/newmap.tmx | 100 +++ Resources/maps/tilesets/shooterWorldOne.tsx | 3 +- Resources/maps/tilesets/wOne.tsx | 570 ++++++++++++++++++ Resources/maps/tilesets/worldOne.png | Bin 0 -> 12355 bytes Resources/maps/yupple.tiled-session | 62 +- Resources/scenes/debugScene.xml | 2 +- Resources/scripts/ai/grunt_behaviour.lua | 52 +- Resources/shaders/GL_bubble.vert | 6 +- Resources/shaders/GL_pistol.vert | 6 +- Resources/shaders/GL_player.vert | 6 +- Resources/shaders/GL_tile.frag | 5 +- Resources/shaders/GL_tile.vert | 23 +- Resources/sprites/shotGunFire128.png | Bin 0 -> 6183 bytes Resources/sprites/shotGunIdle128.png | Bin 0 -> 1882 bytes Resources/sprites/shotGunReload128.png | Bin 0 -> 6518 bytes Resources/weapons/bubblegun.xml | 4 +- YuppleMayham/CMakeLists.txt | 2 +- YuppleMayham/include/gameplay/ai.h | 8 + YuppleMayham/include/gameplay/entity.h | 1 + YuppleMayham/include/gameplay/map.h | 4 +- YuppleMayham/include/graphics/animation.h | 3 + YuppleMayham/include/graphics/instancedraw.h | 12 +- YuppleMayham/include/graphics/shader.h | 1 + YuppleMayham/include/graphics/texture.h | 43 ++ YuppleMayham/include/utility/events.h | 8 + YuppleMayham/include/utility/logger.h | 60 ++ .../include/utility/resourcemanager.h | 2 + YuppleMayham/include/utility/script.h | 6 + YuppleMayham/include/utility/xmlloader.h | 8 +- YuppleMayham/src/gameplay/ai.cpp | 23 +- YuppleMayham/src/gameplay/camera.cpp | 6 +- YuppleMayham/src/gameplay/entity.cpp | 8 +- YuppleMayham/src/gameplay/game.cpp | 7 + YuppleMayham/src/gameplay/map.cpp | 62 +- YuppleMayham/src/gameplay/physics.cpp | 4 +- YuppleMayham/src/gameplay/weapons/bullet.cpp | 3 +- .../src/gameplay/weapons/bulletmanager.cpp | 1 + YuppleMayham/src/gameplay/weapons/weapon.cpp | 33 +- YuppleMayham/src/graphics/animation.cpp | 26 + YuppleMayham/src/graphics/instancedraw.cpp | 58 +- YuppleMayham/src/graphics/shader.cpp | 5 + YuppleMayham/src/graphics/texture.cpp | 122 +++- YuppleMayham/src/main.cpp | 2 +- YuppleMayham/src/utility/logger.cpp | 14 + YuppleMayham/src/utility/resourcemanager.cpp | 7 + YuppleMayham/src/utility/script.cpp | 1 + YuppleMayham/src/utility/xmlloader.cpp | 79 ++- 49 files changed, 1385 insertions(+), 148 deletions(-) create mode 100644 Resources/animations/shot_gun_anim.xml create mode 100644 Resources/maps/newmap.tmx create mode 100644 Resources/maps/tilesets/wOne.tsx create mode 100644 Resources/maps/tilesets/worldOne.png create mode 100644 Resources/sprites/shotGunFire128.png create mode 100644 Resources/sprites/shotGunIdle128.png create mode 100644 Resources/sprites/shotGunReload128.png create mode 100644 YuppleMayham/include/utility/logger.h create mode 100644 YuppleMayham/src/utility/logger.cpp diff --git a/Resources/animations/shot_gun_anim.xml b/Resources/animations/shot_gun_anim.xml new file mode 100644 index 0000000..55c75c1 --- /dev/null +++ b/Resources/animations/shot_gun_anim.xml @@ -0,0 +1,14 @@ + + + 4 + + + + 8 + + + + 8 + + + \ No newline at end of file diff --git a/Resources/maps/debugmap.tmx b/Resources/maps/debugmap.tmx index ea7b84c..1478888 100644 --- a/Resources/maps/debugmap.tmx +++ b/Resources/maps/debugmap.tmx @@ -1,20 +1,21 @@ - + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,28,28,29,25,28,28,29,27,31,28,28,31,28,32,26,29,30,27,25,27,32,28,31,26,29,25,29,32,0, 0,32,27,22,16,16,23,31,26,30,31,31,29,28,30,25,28,26,26,25,29,26,25,32,28,28,31,32,25,0, 0,30,24,11,4,8,14,26,28,31,26,24,16,16,16,16,23,27,25,25,30,26,29,29,30,29,25,29,27,0, -0,25,15,6,1,2,14,28,32,30,24,11,8,7,3,8,12,23,28,27,25,32,30,32,30,28,27,27,26,0, -0,28,20,13,13,13,19,32,28,29,15,5,2,5,3,5,2,14,25,32,31,32,24,16,16,16,23,29,27,0, -0,31,29,31,27,26,27,30,29,27,15,8,7,5,2,3,6,14,27,32,32,29,15,8,4,2,14,26,27,0, -0,30,30,30,25,32,29,31,30,29,20,10,1,3,5,3,9,19,27,25,29,31,20,13,13,13,19,31,26,0, -0,28,30,30,28,24,23,27,31,28,29,20,13,13,13,13,19,27,31,28,27,26,29,26,32,25,31,25,32,0, -0,26,26,31,29,20,19,30,25,29,25,25,25,28,30,27,28,25,31,30,27,26,26,28,25,29,25,32,31,0, -0,30,32,29,29,32,31,27,25,31,31,31,26,30,31,27,29,25,29,32,0,0,0,0,30,26,31,0,0,0, -0,30,27,31,31,28,25,25,28,26,30,27,26,28,30,29,30,25,30,32,0,0,0,0,0,0,0,0,0,0, +0,25,15,6,1,2,14,28,32,30,24,11,0,0,0,8,12,23,28,27,25,32,30,32,30,28,27,27,26,0, +0,28,20,13,13,13,19,32,28,29,15,0,0,0,0,0,0,14,25,32,91,32,24,16,16,16,23,29,27,0, +0,31,29,31,27,26,27,30,29,27,0,0,0,0,0,0,0,0,27,32,32,29,15,8,4,2,14,26,27,0, +0,30,30,30,25,32,29,30,27,28,32,32,30,0,0,0,0,0,27,25,29,31,20,13,13,13,19,31,26,0, +0,28,30,30,28,31,26,29,31,29,26,20,31,0,0,0,0,31,31,28,27,26,29,26,32,25,31,25,32,0, +0,26,26,31,29,20,29,31,25,32,28,25,25,28,30,27,28,25,31,30,27,26,26,28,25,29,25,32,31,0, +0,30,32,29,29,32,31,28,25,31,31,31,26,30,31,27,29,25,29,32,0,0,0,0,30,26,31,0,0,0, +0,30,27,31,31,28,25,32,28,26,30,27,26,28,30,29,30,25,30,32,0,0,0,0,0,0,0,0,0,0, 0,27,29,22,21,30,29,29,32,0,0,0,0,32,30,30,31,32,26,28,0,0,0,0,0,0,0,0,0,0, 0,27,25,18,17,30,28,30,0,0,0,0,0,26,31,26,25,30,27,29,26,0,0,0,0,0,0,0,0,0, 0,32,30,31,30,30,28,0,0,0,0,0,0,32,27,31,30,28,26,31,26,0,0,0,0,0,0,0,0,0, @@ -43,20 +44,44 @@ + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,56,156,155,156,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + 35,36,34,35,33,38,38,34,35,34,34,39,38,39,35,39,38,37,39,39,33,33,38,34,34,34,33,37,34,40, 37,41,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,42,34, 38,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,33, -36,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,39, -37,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,36, -35,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,34, -37,46,0,28,28,30,25,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,39, -34,46,0,30,30,29,25,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,34, -40,46,0,29,26,31,29,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,35, -33,46,0,30,31,32,27,27,0,0,0,0,0,0,0,0,0,0,0,56,48,48,48,48,55,0,56,48,43,33, -35,46,0,25,30,32,31,28,0,0,0,0,0,0,0,0,0,0,0,47,34,36,34,39,44,48,43,34,36,40, -40,46,0,0,0,0,0,0,56,48,48,48,48,55,0,0,0,0,0,47,36,36,34,39,38,36,36,38,36,37, +36,46,0,0,0,0,0,0,0,0,0,31,32,27,31,30,29,0,0,0,0,0,0,0,0,0,0,0,47,39, +37,46,0,0,0,0,0,0,0,0,25,25,28,27,25,27,32,27,0,126,127,128,0,0,0,0,0,0,47,36, +35,46,0,176,149,150,150,144,0,0,30,28,31,30,32,29,31,32,0,117,141,131,0,0,0,0,0,0,47,34, +37,46,0,177,182,181,180,169,0,0,27,29,28,30,27,26,26,30,0,124,125,132,0,0,0,0,0,0,47,39, +34,46,0,153,180,146,156,175,149,164,176,149,144,25,27,25,31,32,0,0,0,0,0,0,0,0,0,0,47,34, +40,46,0,151,180,167,164,177,161,145,177,166,145,27,25,31,32,0,0,0,0,0,0,0,0,0,0,0,47,35, +33,46,0,153,180,181,145,151,180,167,165,159,169,0,0,0,0,0,0,56,48,48,48,48,55,0,56,48,43,33, +35,46,0,151,152,146,147,177,166,161,180,161,169,0,0,0,0,0,0,47,34,36,34,39,44,48,43,34,36,40, +40,46,0,154,155,157,0,178,155,48,48,48,48,55,0,0,0,0,0,47,36,36,34,39,38,36,36,38,36,37, 35,46,0,0,0,0,0,56,43,36,38,38,39,46,0,0,0,0,0,47,40,39,38,36,38,40,40,34,38,37, 38,46,0,0,0,0,56,43,37,39,36,36,33,46,0,0,0,0,0,0,42,39,35,36,33,34,33,38,40,39, 34,46,0,0,0,0,47,35,34,40,39,38,36,46,0,0,0,0,0,0,47,38,36,34,34,33,36,40,35,40, diff --git a/Resources/maps/newmap.tmx b/Resources/maps/newmap.tmx new file mode 100644 index 0000000..ccb3c95 --- /dev/null +++ b/Resources/maps/newmap.tmx @@ -0,0 +1,100 @@ + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,34,31,31,30,70,72,30,34,29,34,73,33,29,71,72,30,33,31,71,29,70,34,0,0,0,0,0,0,0, +0,31,29,54,33,27,29,32,31,28,29,71,54,72,27,71,71,31,33,70,70,73,31,0,0,0,0,0,0,0, +0,72,70,34,73,31,0,0,30,31,33,32,29,34,70,71,33,27,32,30,31,30,29,0,0,0,0,0,0,0, +0,27,28,31,29,0,0,0,0,34,32,30,28,32,31,27,34,31,54,33,27,27,29,0,0,0,0,0,0,0, +0,54,27,54,28,0,0,0,0,54,31,72,71,34,27,72,70,29,71,73,30,30,71,70,0,0,0,0,0,0, +0,32,27,29,54,70,0,0,71,32,54,70,71,72,34,70,54,70,32,34,72,33,72,32,34,0,0,0,0,0, +0,70,27,54,34,31,27,33,31,28,31,33,54,71,29,33,73,28,34,34,34,71,32,33,30,73,0,0,0,0, +0,29,71,27,31,34,30,71,70,32,72,54,29,31,29,29,54,28,73,33,72,30,30,31,72,31,32,0,0,0, +0,34,72,29,72,29,71,34,31,33,27,70,70,29,71,27,33,28,34,73,54,72,70,73,71,31,54,0,0,0, +0,31,73,27,27,33,34,29,54,73,54,54,70,73,30,73,73,54,34,30,54,34,30,29,34,70,54,0,0,0, +0,28,72,28,28,33,33,29,31,32,30,27,73,27,31,34,73,54,31,32,28,34,70,73,72,33,28,0,0,0, +0,0,73,34,54,32,33,34,33,54,30,29,70,72,73,70,70,54,29,29,34,27,70,71,72,28,70,0,0,0, +0,0,0,29,30,32,27,32,31,28,73,27,72,28,73,71,31,28,71,30,28,34,72,73,54,27,32,0,0,0, +0,0,0,32,27,31,33,33,27,27,30,31,71,28,29,32,31,27,34,34,31,32,27,30,72,54,31,0,0,0, +0,0,0,0,0,34,32,31,29,70,33,32,0,34,34,33,72,70,70,28,30,70,29,30,30,30,34,0,0,0, +0,0,0,0,0,0,0,28,30,27,73,0,0,0,0,70,28,30,34,54,33,32,34,54,27,71,28,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,54,32,32,27,31,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,14,16,16,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,50,51,22,20,43,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,21,20,38,38,19,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,21,1,3,19,22,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,40,37,6,2,39,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,36,41,41,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,77,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +88,94,102,97,116,102,96,102,117,88,116,116,118,118,117,95,117,96,115,116,115,116,115,115,97,116,115,116,96,102, +88,106,91,92,92,91,91,92,92,92,91,92,92,91,91,92,92,92,92,91,91,92,108,116,115,97,117,94,94,115, +95,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,88,118,95,117,116,116,95, +118,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,88,116,94,96,95,102,102, +88,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,115,95,115,94,115,88,118, +94,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,108,96,96,88,116,97,102, +117,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,108,117,115,117,94,95, +116,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,108,118,95,118,118, +88,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,108,102,115,94, +118,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,97,118,117, +115,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,115,88,95, +97,103,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,116,96,88, +97,116,103,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,95,96,96, +88,96,97,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,97,102,88, +118,94,115,103,86,100,0,0,0,0,0,112,86,100,0,0,0,0,0,0,0,0,0,0,0,0,89,88,117,118, +95,97,96,97,118,103,85,100,0,0,112,101,88,103,86,100,0,0,0,0,0,0,0,0,0,0,87,102,94,88, +115,94,97,115,115,96,96,103,86,86,101,94,96,116,96,103,85,86,100,0,0,0,0,84,85,86,101,97,116,97, +95,88,116,96,115,116,97,97,96,115,97,117,115,102,102,97,115,118,103,85,86,85,86,101,94,115,97,118,117,115, +102,116,118,88,102,97,102,102,88,97,117,116,88,102,95,94,117,97,117,116,88,96,116,94,115,96,94,97,115,117, +88,95,96,115,94,97,117,116,96,94,94,94,116,96,88,102,97,115,94,94,117,97,116,88,88,88,96,118,118,116 + + + diff --git a/Resources/maps/tilesets/shooterWorldOne.tsx b/Resources/maps/tilesets/shooterWorldOne.tsx index 6b26e74..07bbb89 100644 --- a/Resources/maps/tilesets/shooterWorldOne.tsx +++ b/Resources/maps/tilesets/shooterWorldOne.tsx @@ -1,5 +1,6 @@ - + + diff --git a/Resources/maps/tilesets/wOne.tsx b/Resources/maps/tilesets/wOne.tsx new file mode 100644 index 0000000..3aabe30 --- /dev/null +++ b/Resources/maps/tilesets/wOne.tsx @@ -0,0 +1,570 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/maps/tilesets/worldOne.png b/Resources/maps/tilesets/worldOne.png new file mode 100644 index 0000000000000000000000000000000000000000..0db14983ff02da95f0d2105405617594ab937fe7 GIT binary patch literal 12355 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 BpS%D7 literal 0 HcmV?d00001 diff --git a/Resources/maps/yupple.tiled-session b/Resources/maps/yupple.tiled-session index c555e9b..85a7072 100644 --- a/Resources/maps/yupple.tiled-session +++ b/Resources/maps/yupple.tiled-session @@ -1,6 +1,13 @@ { - "activeFile": "", + "Map/SizeTest": { + "height": 4300, + "width": 2 + }, + "activeFile": "debugmap.tmx", "expandedProjectPaths": [ + "tilesets", + "C:/Users/Ethan/source/repos/YuppleMayham/Resources", + "." ], "fileStates": { "": { @@ -22,33 +29,76 @@ "scaleInEditor": 1 }, "debugmap.tmx": { - "scale": 0.45125, - "selectedLayer": 0, + "scale": 0.75, + "selectedLayer": 2, "viewCenter": { - "x": 959.5567867036011, - "y": 955.1246537396123 + "x": 989.3333333333334, + "y": 665.3333333333334 + } + }, + "newmap.tmx": { + "scale": 0.5, + "selectedLayer": 1, + "viewCenter": { + "x": 930, + "y": 621 } }, "shooterWorldOneAtlas.tsx": { "scaleInDock": 0.5, "scaleInEditor": 1 }, + "tilesets/shooterWorldOne.tsx": { + "scaleInDock": 0.5, + "scaleInEditor": 1 + }, "tilesets/shooterWorldOneAtlas.tsx": { "scaleInDock": 0.5, "scaleInEditor": 1 + }, + "tilesets/wOne.tsx": { + "scaleInDock": 0.33, + "scaleInEditor": 1 + }, + "tilesets/was.tsx": { + "scaleInDock": 1, + "scaleInEditor": 1 + }, + "tilesets/wsa.tsx": { + "dynamicWrapping": false, + "scaleInDock": 0.5, + "scaleInEditor": 1 } }, "last.externalTilesetPath": "C:/Users/Ethan/source/repos/YuppleMayham/Resources/maps/tilesets", "last.imagePath": "C:/Users/Ethan/source/repos/YuppleMayham/Resources/maps/tilesets", + "map.lastUsedFormat": "tmx", "openFiles": [ + "debugmap.tmx", + "tilesets/shooterWorldOne.tsx", + "newmap.tmx", + "tilesets/wOne.tsx" ], "project": "yupple.tiled-project", "property.type": "bool", "recentFiles": [ + "tilesets/wOne.tsx", + "newmap.tmx", + "tilesets/shooterWorldOne.tsx", + "debugmap.tmx", + "tilesets/wsa.tsx", + "tilesets/was.tsx", "tilesets/shooterWorldOneAtlas.tsx", "shooterWorldOneAtlas.tsx", "C:/Users/Ethan/Documents/yupplemayham/shooterWorldOneAtlas.tsx", "C:/Users/Ethan/Documents/yupplemayham/debugmap.tmx" ], - "tileset.lastUsedFilter": "Tiled tileset files (*.tsx *.xml)" + "tileset.lastUsedFilter": "Tiled tileset files (*.tsx *.xml)", + "tileset.lastUsedFormat": "tsx", + "tileset.margin": 0, + "tileset.spacing": 2, + "tileset.tileSize": { + "height": 62, + "width": 62 + } } diff --git a/Resources/scenes/debugScene.xml b/Resources/scenes/debugScene.xml index ec2d95f..737d164 100644 --- a/Resources/scenes/debugScene.xml +++ b/Resources/scenes/debugScene.xml @@ -1,7 +1,7 @@ - + diff --git a/Resources/scripts/ai/grunt_behaviour.lua b/Resources/scripts/ai/grunt_behaviour.lua index dd76acc..a63f233 100644 --- a/Resources/scripts/ai/grunt_behaviour.lua +++ b/Resources/scripts/ai/grunt_behaviour.lua @@ -3,22 +3,26 @@ patrolDestination = { x=500.0, y=500.0, z=0.0 } moveLeft = true -- helper functions function watchPosition(actor, pos) - y = pos.y - actor.position.y - x = pos.x - actor.position.x - rotation = math.atan(y, x) + local y = pos.y - actor.position.y + local x = pos.x - actor.position.x + local rotation = math.atan(y, x) actor.rotation = math.deg(rotation) end function distance(a, b) - return math.sqrt((math.abs(a.x - b.x)^2) + (math.abs(a.y - b.y)^2)) + local dx = a.x - b.x + local dy = a.y - b.y + return math.sqrt(dx * dx + dy * dy) end function moveTo(actor, pos) - watchPosition(actor, pos) - if distance(actor.position, pos) < 50 then + local a = actor + local p = pos + watchPosition(a, p) + if distance(a.position, p) < 50 then return true end - actor:moveForward() + a:moveForward() return false end @@ -28,19 +32,23 @@ end -- The AI will be spawned in idle mode, so if you want to put the bot into patrol mode -- It's on you to do that in this function. function idle(actor, target) - if target ~= nil then + local a = actor + local t = target + if t ~= nil then -- print("target is at " .. target.position.x) -- watchPosition(actor, target.position) ai.state = AIState.Patrol - actor.rotation = 180 + a.rotation = 180 end - actor:shoot() + a:shoot() --print("actor is idling at " .. actor.position.x) end -- It is most appropriate to put any patrolling behaviour into this function of course function patrol(actor, target) - if target ~= nil then + local a = actor + local t = target + if t ~= nil then -- print("target is at " .. target.position.x) end --if moveTo(actor, patrolDestination) == true then @@ -52,7 +60,7 @@ function patrol(actor, target) --if raycaster:performRaycast(actor.position, actor.rotation, target.position) == true then --ai.state = AIState.Alert --end - if raycaster:bresenhamRaycast(actor.position, actor.rotation, target.position) == true then + if raycaster:bresenhamRaycast(a.position, a.rotation, t.position) == true then --target hit! ai.state = AIState.Alert end @@ -60,32 +68,34 @@ function patrol(actor, target) upOrDown = math.random(2) if moveLeft == true then if upOrDown == 1 then - actor.rotation = 180 + a.rotation = 180 else - actor.rotation = 270 + a.rotation = 270 end moveLeft = false else if upOrDown == 1 then - actor.rotation = 0 + a.rotation = 0 else - actor.rotation = 90 + a.rotation = 90 end moveLeft = true end end - actor:moveForward() + a:moveForward() end -- the ai has found the player, this is what function is called function alert(actor, target) + local a = actor + local t = target if target ~= nil then -- print("target is at " .. target.position.x) - watchPosition(actor, target.position) + watchPosition(a, t.position) end --print("actor is alert at " .. actor.position.x) - if distance(actor.position, target.position) > 300 then - actor:moveForward() + if distance(a.position, t.position) > 300 then + a:moveForward() end - actor:shoot() + a:shoot() end diff --git a/Resources/shaders/GL_bubble.vert b/Resources/shaders/GL_bubble.vert index 2c111c4..429aa86 100644 --- a/Resources/shaders/GL_bubble.vert +++ b/Resources/shaders/GL_bubble.vert @@ -6,8 +6,12 @@ out vec2 texCoord; uniform mat4 MVP; +uniform mat4 model; +uniform mat4 projection; +uniform mat4 view; + void main() { texCoord = aTexCoord; - gl_Position = MVP * vec4(aPos, 1.0); + gl_Position = projection * view * model * vec4(aPos, 1.0); } \ No newline at end of file diff --git a/Resources/shaders/GL_pistol.vert b/Resources/shaders/GL_pistol.vert index 92b7dc7..63e4dc2 100644 --- a/Resources/shaders/GL_pistol.vert +++ b/Resources/shaders/GL_pistol.vert @@ -5,12 +5,16 @@ layout (location = 1) in vec2 aTexCoord; out vec2 texCoord; uniform mat4 MVP; + +uniform mat4 projection; +uniform mat4 view; +uniform mat4 model; uniform bool flip; void main() { texCoord = aTexCoord; - gl_Position = MVP * vec4(aPos, 1.0); + gl_Position = projection * view * model * vec4(aPos, 1.0); if (flip) { texCoord = vec2(aTexCoord.x, 1.0 - aTexCoord.y); diff --git a/Resources/shaders/GL_player.vert b/Resources/shaders/GL_player.vert index 5d614e4..141aab7 100644 --- a/Resources/shaders/GL_player.vert +++ b/Resources/shaders/GL_player.vert @@ -7,9 +7,13 @@ out vec2 texPos; uniform mat4 MVP; +uniform mat4 model; +uniform mat4 projection; +uniform mat4 view; + void main() { pos = aPos; texPos = aTexPos; - gl_Position = MVP * vec4(aPos, 1.0); + gl_Position = projection * view * model * vec4(aPos, 1.0); } \ No newline at end of file diff --git a/Resources/shaders/GL_tile.frag b/Resources/shaders/GL_tile.frag index f53e7bd..7fdc9da 100644 --- a/Resources/shaders/GL_tile.frag +++ b/Resources/shaders/GL_tile.frag @@ -1,8 +1,9 @@ #version 330 core out vec4 FragColor; in vec2 texCoord; +flat in int textureIndex; -uniform sampler2D tileTexture; +uniform sampler2DArray tileTexture; void main() { @@ -12,7 +13,7 @@ void main() } else { - FragColor = texture(tileTexture, texCoord); + FragColor = texture(tileTexture, vec3(texCoord.xy, textureIndex)); } //FragColor = vec4(mod(tileindex / float(tilesperrow), 1.0), mod(tileindex / float(tilesperrow), 1.0), 0.0, 1.0); } \ No newline at end of file diff --git a/Resources/shaders/GL_tile.vert b/Resources/shaders/GL_tile.vert index 7e1ddbd..039f99a 100644 --- a/Resources/shaders/GL_tile.vert +++ b/Resources/shaders/GL_tile.vert @@ -2,32 +2,37 @@ layout (location = 0) in vec3 aPos; layout (location = 1) in vec2 aTexCoord; layout (location = 2) in int aTileIndex; -layout (location = 3) in mat4 aModel; +layout (location = 3) in int aTextureIndex; +layout (location = 4) in int aTilesPerRow; +layout (location = 5) in int aStartIndex; +layout (location = 6) in vec2 aOriginalSize; +layout (location = 7) in mat4 aModel; -uniform int tilesPerRow; +uniform vec2 uCanvasSize; uniform mat4 proj; uniform mat4 view; out vec2 texCoord; -out int tileIndex; +flat out int textureIndex; void main() { - tileIndex = aTileIndex; + int tilesPerRow = aTilesPerRow; gl_Position = proj * view * aModel * vec4(aPos, 1.0); - if (tileIndex != 0) + textureIndex = aTextureIndex; + if (aTileIndex != 0) { - int index = tileIndex - 1; + vec2 scale = vec2(aOriginalSize.x / uCanvasSize.x, aOriginalSize.y / uCanvasSize.y); + + int index = aTileIndex - aStartIndex; float tileSize = 1.0 / float(tilesPerRow); int row = index / tilesPerRow; int col = index % tilesPerRow; - float offsetX = float(col) * tileSize; - float offsetY = float(row) * tileSize; - texCoord.x = (aTexCoord.x + col) * tileSize; texCoord.y = (aTexCoord.y + row) * tileSize; + texCoord = texCoord * scale; } else { diff --git a/Resources/sprites/shotGunFire128.png b/Resources/sprites/shotGunFire128.png new file mode 100644 index 0000000000000000000000000000000000000000..9402104b79014980e16f9b605c9d4daf491908c9 GIT binary patch literal 6183 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 NVPMDM5_AdL($Nxc zv=o);Ln2KrQG^+_OPCIcTH=X_J*q_z$$0<5JMaE*@8^emKA+DypL@>D@%8b5Xc=n( z008mwbiV=sAo2kwYk&{BN`3nm2LqIF#lsDtb76}BpbqtNzYvg8x;oYNXv!T5%&;h@ ztvsPn@{_E41`s_6h3~0rjUcO;wrX4}*id=g*o!Nte4_`^f_O%vDp2qWuUpm~Cm4KW zn2>qCk%P$4l{?XtN|a$7y-ig+YI*(3Jn5lm-w2{mq%k#xyzN$KV0)_^07I1LtEkOKaLnSBn-F z-XR-?pC$&y&*RtH?X4vLxR>P^fwRsT9-XF+*m;;(uf7z-OUz96=sx!1X8wdLzWT}Q zeE$h=W{QNjP->9}V@CAzFT&_ag`DoV5W9sLjMP*5VY-yQ+6Rz)9dQ_UMUcB?d{D^l&Q0#-q zxQdg|Z2zuRfpSwK)g8$QYH=Q-il)c51kFheg>UQJH%nFwL(N9?m4Ahu5<6k5=Y6my z?CnMEa0KX?5AA)NFu41^a9>YXX@MGD+@5_#5ME3ZQk7E8KEHn+b8?d(|1;re#d#e& zsOra%k+UB$&jQWodSlMo?%0$I+uH`&X77yjWrXPr#MvExykSF?6FL)JZltUvD3JD^qF7wXZT}hou08DL=DM+GxG1cAuwxW;5M>g$0e=Eakt1K@K zWP0x>6_PWIa+P{X<;L3c{n>qx{oNrC8l^c{^_-+abKjUnhUb!H2oHG<)lz4=cSPe; zRH9AO)K?E=`lonDab0@D6A03QA>p=b=`Bou!+kNCH=8fp5hL*p#}vA^W@H{PM|I=Z zbEq*M=<`Egc9z+#6}8_CGOuWLScj%0!xgDeLuFOF*<(kAZu|@hFF}o2lv`pkxVY#6 zQ@I`zl9KrSN-<>!HW3&lB+Rz}o2G9k_secakPL?pZh&RkA;LFFyMJqZ3g4!Yivwm4 zbuQ#&gb&(<Gs$sZqy@cCQz&_HbYk<3 z_`|W3Yz9ts`b~R!FY9N+ zX3a2H!t13u9#9~xHM`>nI9QzB;sONAmr@4thZ_JnsV-Q}$wn1`&h_%x$d)sqae!5C zVGT{IBl9ZQna*VL8lW+N)pvi|bu42M^V2$G#}qwhqBLy@hmQabZW7w;rOY60z{J-; z=|VtYr}f9ycSrM5_LtC;?DX*TTbQlaxE7KLum8`!lgekK) zUs4xuzT>3QFg*k}_tM9zztFz*LZd)}x=vZ%K0S%(cj+1zR)7*4vFIm=dxgd%rm&33 xPvmkzUIEoFIRRO(FYN|{k~`J@$Il~RkU$b|15{VawaNcdc%gmV>2BAv{sw(%g{1%h literal 0 HcmV?d00001 diff --git a/Resources/sprites/shotGunReload128.png b/Resources/sprites/shotGunReload128.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce815edb72aa1d91b1d11c873a32166b16d0506 GIT binary patch literal 6518 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 - +