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); }
// Check collision between snake and snake int checkSnakeCollision(ParticleManager& snakeManager, ParticleManager& foodManager, float step, int init) { for(int i = init; i < foodManager.getCount() - 1; ++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)) { return i; } } return -1; }
// 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; }
// 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); }