From 1421b90c6667cb50c5a019f93c8394b26facb00b Mon Sep 17 00:00:00 2001 From: Wojtek Date: Thu, 8 Feb 2024 04:44:22 +0100 Subject: [PATCH] Opis projektu --- Opis_Projektu.pdf | Bin 0 -> 30887 bytes grk/project/Bullet.h | 1 - grk/project/Enemy.h | 3 ++ grk/project/GameEntity.h | 4 +- grk/project/Heart.h | 55 ++++++++++++++++++++++ grk/project/Nitro.h | 52 +++++++++++++++++++++ grk/project/Spaceship.h | 5 ++ grk/project/grk-project.vcxproj | 2 + grk/project/grk-project.vcxproj.filters | 28 +++++++----- grk/project/src/ex_9_1.hpp | 58 ++++++++++++++++++++++-- grk/project/textures/boooster.png | Bin 0 -> 13414 bytes grk/project/textures/heart.png | Bin 0 -> 1843 bytes 12 files changed, 192 insertions(+), 16 deletions(-) create mode 100644 Opis_Projektu.pdf create mode 100644 grk/project/Heart.h create mode 100644 grk/project/Nitro.h create mode 100644 grk/project/textures/boooster.png create mode 100644 grk/project/textures/heart.png diff --git a/Opis_Projektu.pdf b/Opis_Projektu.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0cb45fe1e8db9d4b78a8b66693c757b31dc7670 GIT binary patch literal 30887 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 Hh$H?Vk8%?+ literal 0 HcmV?d00001 diff --git a/grk/project/Bullet.h b/grk/project/Bullet.h index 0d92cec..bfa5306 100644 --- a/grk/project/Bullet.h +++ b/grk/project/Bullet.h @@ -61,7 +61,6 @@ public: bool checkCollisionWithGameEntities(std::vector& gameEntities, glm::mat4 bulletModelMatrix, float attackerDmg) { for (const auto& entity : gameEntities) { glm::mat4 entityModelMatrix = entity->getModelMatrix(); - if (checkAABBCollision(bulletModelMatrix, entityModelMatrix)) { entity->applyDamage(attackerDmg); return true; diff --git a/grk/project/Enemy.h b/grk/project/Enemy.h index 8d0eda4..6e8a288 100644 --- a/grk/project/Enemy.h +++ b/grk/project/Enemy.h @@ -82,6 +82,9 @@ public: this->dmg = this->initDMG; return; } + void heal() override { + this->currentHP = this->currentHP + 5.0f; + } private: void requestShoot(float time) { if (canShoot(time)) { diff --git a/grk/project/GameEntity.h b/grk/project/GameEntity.h index 0715193..79feb55 100644 --- a/grk/project/GameEntity.h +++ b/grk/project/GameEntity.h @@ -10,11 +10,12 @@ public: float initDMG; GameEntity(float currentHP, float maxHP, float initialDmg) - : currentHP(currentHP), maxHP(maxHP), dmg(initialDmg),initDMG(initialDmg) + : currentHP(currentHP), maxHP(maxHP), dmg(initialDmg), initDMG(initialDmg) { } + virtual void applyDamage(float attackerDmg) { currentHP = currentHP - attackerDmg; }; @@ -27,5 +28,6 @@ public: return true; }; virtual void respawn() = 0; + virtual void heal() = 0; }; diff --git a/grk/project/Heart.h b/grk/project/Heart.h new file mode 100644 index 0000000..9d4bb02 --- /dev/null +++ b/grk/project/Heart.h @@ -0,0 +1,55 @@ +#include "glm.hpp" +#include "ext.hpp" +#include "src/Render_Utils.h" +#include "./GameEntity.h" +#include "Spaceship.h" + +#pragma once +class Heart : public GameEntity +{ +public: + glm::mat4 modelMatrix; + glm::mat4 initialModelMatrix; + float healAmount = 10; + bool isCollected; + + + Heart(glm::mat4 initialModelMatrix, float healAmount) + : + modelMatrix(initialModelMatrix), + initialModelMatrix(initialModelMatrix), + healAmount(healAmount), + isCollected(false), + GameEntity(1, 1, 0) + {} + + + virtual ~Heart() = default; + + virtual bool isAlive() { + if (this->currentHP <= 0) { + isCollected = true; + return false; + } + return true; + } + + glm::vec3 getPosition() const override + { + return modelMatrix[3]; + } + glm::mat4 getModelMatrix() override + { + return modelMatrix; + } + void respawn() override { + this->currentHP = this->maxHP; + this->modelMatrix = this->initialModelMatrix; + return; + } + void heal() override { + this->currentHP = this->currentHP + 5.0f; + } + +}; + diff --git a/grk/project/Nitro.h b/grk/project/Nitro.h new file mode 100644 index 0000000..b684197 --- /dev/null +++ b/grk/project/Nitro.h @@ -0,0 +1,52 @@ +#include "glm.hpp" +#include "ext.hpp" +#include "src/Render_Utils.h" +#include "./GameEntity.h" +#include "Spaceship.h" + +#pragma once +class Nitro : public GameEntity +{ +public: + glm::mat4 modelMatrix; + glm::mat4 initialModelMatrix; + float healAmount = 10; + + + Nitro(glm::mat4 initialModelMatrix, float healAmount) + : + modelMatrix(initialModelMatrix), + initialModelMatrix(initialModelMatrix), + healAmount(healAmount), + GameEntity(1, 1, 0) + {} + + + virtual ~Nitro() = default; + + virtual bool isAlive() const { + if (this->currentHP <= 0) { + return false; + } + return true; + } + + glm::vec3 getPosition() const override + { + return modelMatrix[3]; + } + glm::mat4 getModelMatrix() override + { + return modelMatrix; + } + void respawn() override { + this->currentHP = this->maxHP; + this->modelMatrix = this->initialModelMatrix; + return; + } + void heal() override { + this->currentHP = this->currentHP + 5.0f; + } + +}; + diff --git a/grk/project/Spaceship.h b/grk/project/Spaceship.h index 28d5653..7332954 100644 --- a/grk/project/Spaceship.h +++ b/grk/project/Spaceship.h @@ -394,4 +394,9 @@ public: return; } + + void heal() override { + this->currentHP = this->currentHP + 3.f; + } + }; \ No newline at end of file diff --git a/grk/project/grk-project.vcxproj b/grk/project/grk-project.vcxproj index e1e7e9f..7479210 100644 --- a/grk/project/grk-project.vcxproj +++ b/grk/project/grk-project.vcxproj @@ -32,6 +32,8 @@ + + diff --git a/grk/project/grk-project.vcxproj.filters b/grk/project/grk-project.vcxproj.filters index d489eb7..6fb47a3 100644 --- a/grk/project/grk-project.vcxproj.filters +++ b/grk/project/grk-project.vcxproj.filters @@ -59,7 +59,7 @@ Source Files - + Shader Files @@ -123,14 +123,20 @@ Header Files - Header Files - + Header Files + Header Files Header Files + + Header Files + + + Header Files + @@ -163,14 +169,14 @@ Shader Files - Shader Files - - - Shader Files - - - Shader Files - + Shader Files + + + Shader Files + + + Shader Files + Shader Files diff --git a/grk/project/src/ex_9_1.hpp b/grk/project/src/ex_9_1.hpp index 04864bb..68ada14 100644 --- a/grk/project/src/ex_9_1.hpp +++ b/grk/project/src/ex_9_1.hpp @@ -22,6 +22,8 @@ #include "../GameUtils.h" #include "../SpriteRenderer.h" #include "../Enemy.h" +#include "../Heart.h" +#include "../Nitro.h" #include "../ParticleSystem.h" #include "Camera.h" @@ -54,6 +56,8 @@ namespace texture { GLuint earthTexture; GLuint asteroidTexture; GLuint asteroidNormal; + GLuint heartTexture; + GLuint boosterTexture; } struct TextureTuple { @@ -82,6 +86,8 @@ std::list planets; Sun* sun; GLuint VAO,VBO; +std::vector nitros; +std::vector hearts; std::vector enemies; std::vector gameEntities; @@ -236,6 +242,35 @@ void renderEnemies() { } } + +void renderHeartsAndNitro() { + glUseProgram(programSprite); + for (const auto & heart : hearts) { + + //if (heart->isAlive()) { + //spriteRenderer->DrawSprite(texture::heartTexture, heart->modelMatrix, programSprite); + //} + + glUseProgram(programSprite); + for (auto it = hearts.begin(); it != hearts.end();) { + Heart* heart = *it; + if (heart->isAlive()) { + spriteRenderer->DrawSprite(texture::heartTexture, heart->modelMatrix, programSprite); + } + + if (heart->isCollected) { + spaceship->heal(); + it = hearts.erase(it); + } + else { + ++it; + } + } + } +} + + + TextureTuple getRandomPlanetTexture() { int textureIndex = rand() % planetTextures.size(); TextureTuple selectedTextures = planetTextures[textureIndex]; @@ -280,8 +315,13 @@ void renderScene(GLFWwindow* window) glUseProgram(program); std::vector gameEntities(enemies.begin(), enemies.end()); + //spaceship->renderBullets(glfwGetTime(), program, gameEntities); + + gameEntities.insert(gameEntities.end(), hearts.begin(), hearts.end()); + gameEntities.insert(gameEntities.end(), nitros.begin(), nitros.end()); spaceship->renderBullets(glfwGetTime(), program, gameEntities); + drawObjectPBR(models::sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(0.1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::eulerAngleY(time) * glm::translate(glm::vec3(1.f, 0, 0)) * glm::scale(glm::vec3(0.1f)), glm::vec3(0.5, 0.5, 0.5), 0.7, 0.0, program); @@ -333,7 +373,7 @@ void renderScene(GLFWwindow* window) renderHUD(window); renderEnemies(); - + renderHeartsAndNitro(); //drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(10.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0, program); @@ -365,7 +405,7 @@ void createAsteroids() { float maxDistanceFromCenter = 26.f; float rotationSpeed = 0.05f; float scale = 0.002f; - int numAsteroids = 160; + int numAsteroids = 80; float distanceIncrement = 2.f / (minDistanceFromCenter + 1); for (int j = -1; j < 2; j++) { @@ -413,20 +453,30 @@ void createEnemies() { //enemies.push_back(new Enemy(100.0f,100.0f, glm::mat4(1.0f), 1.0f, 5.0f)); //enemies.push_back(new Enemy(100.0f,100.0f, glm::translate(glm::mat4(1.0f) , glm::vec3(1.f,1.f,1.f)), 1.0f, 5.0f)); //enemies.push_back(new Enemy(100.0f,100.0f, glm::translate(glm::mat4(1.0f), glm::vec3(-1.f, 2.f, -0.9f)), 1.0f, 5.0f)); - + int j = 0; enemies.push_back(new Enemy(100.0f, 100.0f, glm::translate(glm::translate(glm::mat4(1.0f), spaceship->getPosition()), glm::vec3(1.f, 1.f, 2.f)), 1.0f, 5.0f)); for (int i = 0; i < ENEMY_COUNT; ++i) { glm::mat4 randomModelMatrix = generateRandomMatrix(glm::mat4(1.0f)); enemies.push_back(new Enemy(100.0f, 100.0f, randomModelMatrix, 1.0f, 8.0f)); + + if (j % 4 == 0) { + hearts.push_back(new Heart(glm::translate(randomModelMatrix, glm::vec3(6.f, 5.f, 25.f)), -5.0f)); + } + j = j + 1; } + hearts.push_back(new Heart(glm::translate(glm::mat4(1.0f), glm::vec3(25.f, 20.f, 25.f)), 10.0f)); + //obiekty do ktorych bedzie sprawdzana kolizja dla pociskow enemy gameEntities.push_back(spaceship); } + + + void loadPlanetsAndSunTextures() { planetTextures.clear(); @@ -504,6 +554,8 @@ void init(GLFWwindow* window) texture::earthTexture = Core::LoadTexture("./textures/planets/8k_earth_daymap.jpg"); texture::asteroidTexture = Core::LoadTexture("./textures/asteroids/asteroidtx.jpg"); texture::asteroidNormal = Core::LoadTexture("./textures/asteroids/asteroidnn.png"); + texture::heartTexture = Core::LoadTexture("textures/heart.png"); + texture::boosterTexture = Core::LoadTexture("textures/boooster.png"); spaceship->createParticles(); createSuns(); diff --git a/grk/project/textures/boooster.png b/grk/project/textures/boooster.png new file mode 100644 index 0000000000000000000000000000000000000000..4d697c9ee76d14080e79b95c0755960d791db624 GIT binary patch literal 13414 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 literal 0 HcmV?d00001 diff --git a/grk/project/textures/heart.png b/grk/project/textures/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..2f68f4af981e8fb70cb32733a6086831422746cd GIT binary patch literal 1843 zcmeAS@N?(olHy`uVBq!ia0y~yVB7-4b2ylQB6ceec>yWL;vjb?hIQv;UIIBR>5jgR z3=A9lx&I`x0{NT;9+AZi419+{nDKc2iWCM0wiBK%jv*CsZ|`pGyBi|naIsO}W#uRK zB@3I>mdu!`w4||%?Vm#E5%o(u3QD%G`>GPXOKSbqBfb4b?^Cz+U7905Z~pxG3_tGm z-=5F#rbF35z`fza-T#*R_Uy^=@4vl2``n2+mc`G`%-o&ScUDjVqClaK!BK{>$%2Wc zkcHzBhrkhn5)blB9X43P)ZbZax1s*~*RQ43Rd@as$K{^On*TYgxaR$0ZM)}JpWPtM zXcWi13u9)P4fX_3_@P+&>hrrk|Nc0C|Mum_Ykz(?{cX#=Ioqq)f3BJT`uYBSKo9=@ ze!c(p<*MR4`{mx=-wJmiVGp6$3JiifYuPx=+#4Xmhc1<`4&QD5_vP*DZ(kP9zrXkX zymP;6&i(qmrtE*!*7twco-6!cwWa?0Gh%`c-6n|J3bsorAOdRoowa58AQNq$PP8lz zKV$hi@2h|Pzm2xG@AluXyFc&R?)uzfBBKh6eLJFg1#)0<-VzOrzSqx-*eg@c-8of! zXDwAjPWN3{{jYDJgz>!m{dV>83Eh^(+UE9K4&=kN}Ug9nrN1 zY@Y&i;<_1+^S-|5`iF>oqB0;#h@j+>#Fx9Trk@2SNMLk|7T*Cn`{VDrYcf=G`JG33 zUn4;o>~3OT_2tFdb^F6+C&T?kdVzwH7+K0!^T!w-|NDAk_2uF^|L5ywP}S%)HqY1I z+YiiIB}ezm7rXr~&xPdzqDwwRz@sFV2YFu`t%3PeZ!;)N_URY9g`e3-t@5X7_f_^Y zGjH#&zBV`G`!e@uXJQSHQ?0Cd7bb6zehySAgw3N`VDrqI_m4g0(AlVuvkP>96&-`8 LtDnm{r-UW|rWAUT literal 0 HcmV?d00001