void updateParticle(ParticleManager& sourceManager, int sourceId, ParticleManager& destinationManager, int destinationId) { destinationManager.getParticleMass(destinationId) = sourceManager.getParticleMass(sourceId); destinationManager.getParticlePosition(destinationId) = sourceManager.getParticlePosition(sourceId); destinationManager.getParticleVelocity(destinationId) = sourceManager.getParticleVelocity(sourceId); destinationManager.getParticleForce(destinationId) = sourceManager.getParticleForce(sourceId); destinationManager.getParticleColor(destinationId) = sourceManager.getParticleColor(sourceId); }
// Add a particle to the Snake void addParticletoSnake(ParticleGraph& graph, int id, ParticleManager& foodManager, ParticleManager& snakeManager) { id = snakeManager.addParticleToHead(foodManager.getParticleMass(id), foodManager.getParticlePosition(id), foodManager.getParticleVelocity(id), foodManager.getParticleForce(id), snakeManager.getHeadColor()); foodManager.clear(); std::pair<unsigned int, unsigned int> pair (id, snakeManager.getCount() - 2); graph.push_back(pair); snakeManager.getParticleColor(1) = snakeManager.getParticleColor(2); }
// Create a particleGraph ParticleGraph createString(glm::vec2 A, glm::vec2 B, glm::vec3 color, glm::vec3 headColor, uint32_t discFactor, ParticleManager& particleManager) { glm::vec2 AB = B - A; glm::vec2 step = glm::vec2(AB[0]/discFactor, AB[1]/discFactor); glm::vec2 position = A; float mass = 1.f; ParticleGraph graph; unsigned int id = 0; for(int i = 0; i < discFactor + 1; ++i) { id = particleManager.addParticle(mass, position, glm::vec2(0.f, 0.f), glm::vec2(0.f, 0.f), color, ParticleManager::Type::P_SNAKE); if(id != 0) { std::pair<unsigned int, unsigned int> pair (id, id - 1); graph.push_back(pair); } else if(id == discFactor) { std::pair<unsigned int, unsigned int> pair (id, 0); graph.push_back(pair); } position += step; } particleManager.getParticleColor(0) = headColor; return graph; }
// Copy a particle int copyParticle(ParticleManager& sourceManager, ParticleManager& destinationManager, int id) { int newId = destinationManager.addParticle(sourceManager.getParticleMass(id), sourceManager.getParticlePosition(id), sourceManager.getParticleVelocity(id), sourceManager.getParticleForce(id), sourceManager.getParticleColor(id)); return newId; }
// Check collision between snake and food int checkFoodCollision(ParticleGraph& snakeGraph, ParticleManager& snakeManager, ParticleManager& foodManager, ParticleManager& fireworkManager, float step, int init) { for(int i = init; i < foodManager.getCount(); ++i) { if(foodManager.getParticleX(i) - step * foodManager.getParticleMass(i) <= snakeManager.getParticleX(0) && snakeManager.getParticleX(0) <= foodManager.getParticleX(i) + step * foodManager.getParticleMass(i) && foodManager.getParticleY(i) - step * foodManager.getParticleMass(i) <= snakeManager.getParticleY(0) && snakeManager.getParticleY(0) <= foodManager.getParticleY(i) + step* foodManager.getParticleMass(i)) { fireworkManager.addCircleParticlesAtPosition(3, snakeManager.getParticlePosition(0), snakeManager.getParticleColor(1), 25); addParticletoSnake(snakeGraph, i, foodManager, snakeManager); foodManager.addRandomParticle(snakeManager.getCount()); return i; } } return -1; }