From 1579e92b358d3aab481b0b31bce6bdc41972fb32 Mon Sep 17 00:00:00 2001 From: s473577 Date: Wed, 7 Feb 2024 22:46:33 +0100 Subject: [PATCH] Add random location enemy generator --- grk/project/src/ex_9_1.hpp | 57 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/grk/project/src/ex_9_1.hpp b/grk/project/src/ex_9_1.hpp index 4505308..0ba59a6 100644 --- a/grk/project/src/ex_9_1.hpp +++ b/grk/project/src/ex_9_1.hpp @@ -26,6 +26,8 @@ #include "../ParticleSystem.h" #include "Camera.h" +#include + #ifndef EX_9_1_HPP #define EX_9_1_HPP @@ -309,12 +311,61 @@ void createSolarSystem(glm::vec3 sunPos, GLuint sunTexId, float sunScale, float* planets.push_back(planet); } } +bool isFarFromReferencePoints(float x, float y, float z, const std::vector& referencePoints) { + float minDistance = 10.0f; + + glm::vec3 currentPoint(x, y, z); + + auto checkDistance = [currentPoint, minDistance](const glm::vec3& referencePoint) { + return glm::distance(currentPoint, referencePoint) > minDistance; + }; + + for (const auto& referencePoint : referencePoints) { + if (!checkDistance(referencePoint)) { + return false; // Jeśli choć jeden punkt jest zbyt blisko, zwracamy false + } + } + + return true; // Jeśli wszystkie punkty są wystarczająco daleko, zwracamy true +} 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)); + //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)); + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_real_distribution disX(-30.0f, 180.0f); + std::uniform_real_distribution disY(-50.0f, 60.0f); + std::uniform_real_distribution disZ(-30.0f, 210.0f); + + + std::vector referencePoints = { + glm::vec3(0, 2, 0), + glm::vec3(150, 5, 0), + glm::vec3(-20, -30, 50), + glm::vec3(100, 20, -50), + glm::vec3(0, 52, 200), + glm::vec3(150, 55, 200), + glm::vec3(-20, 20, 250), + glm::vec3(100, 70, 150) + }; + for (int i = 0; i < 20; ++i) { + float randomX, randomY, randomZ; + + do { + randomX = disX(gen); + randomY = disY(gen); + randomZ = disZ(gen); + } while (!isFarFromReferencePoints(randomX, randomY, randomZ, referencePoints)); + + glm::mat4 randomModelMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(randomX, randomY, randomZ)); + + enemies.push_back(new Enemy(100.0f, 100.0f, randomModelMatrix, 1.0f, 5.0f)); + } + //obiekty do ktorych bedzie sprawdzana kolizja dla pociskow enemy gameEntities.push_back(spaceship);