void Keyboard(unsigned char key, int mx, int my) { float LO; float HI; float x; float z; float y; float r, g, b; Generic_Object* frag; vec3 oldPos; float dirX; float dirY; float dirZ; float moveSpeed = 10.0f; switch(key) { case 'z': camera.position += camera.target * moveSpeed; break; case 's': camera.position -= camera.target * moveSpeed; break; case 'q': camera.position += camera.orientation.Cross(camera.target).Normalized() * moveSpeed; break; case 'd': camera.position -= camera.orientation.Cross(camera.target).Normalized() * moveSpeed; break; case 'w': clearScene = true; break; case 'x': wireframeMode = (wireframeMode?false:true); objectManager.setWireframeMode(wireframeMode); break; case 'y': makeExplosion(vec3(0.0f, 0.0f, 0.0f)); break; case 'u': makeExplosion(vec3(750.0f, 0.0f, 750.0f)); break; case 'i': makeExplosion(vec3(-750.0f, 0.0f, 750.0f)); break; case 'o': makeExplosion(vec3(-750.0f, 0.0f, -750.0f)); break; case 'p': makeExplosion(vec3(750.0f, 0.0f, -750.0f)); break; case 'v': dirX = -2; dirY = 4; dirZ = -2; for(int i = 0; i < 4; ++i) { for(int j= 0; j < 4; ++j) { for(int k =0; k < 4; ++k) { frag = CreateFragments(vec3((float)k * 10.0f-10.f, (float)i * 10.0f + 5.0f + 20.0f, (float)j * 10.0f-10.0f), 10.0f); ++nbObjects; //cout << ++countSphere << " - x: " << k* 5.0f << " y: " << i* 5.0f + 5.0f<< " z: " << j* 5.0f << endl; LO = -3.0f; HI = 3.0f; r = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO))); g = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO))); b = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO))); frag->setWireframeMode(false); frag->getComponents()->getGravity()->setUseGravity(true); frag->getComponents()->getRigidBody()->addRigidBody(RIGID_GENERIC, *frag->getListOfVertices(), *frag->getListOfIndexes(), frag->getCenterOfObject(), true); frag->getComponents()->getRigidBody()->setDisplayRigidBody(true); frag->getComponents()->getRigidBody()->activateRigidBody(true); frag->getComponents()->getGravity()->setBounciness(frag->getMass(), frag->getMass()/5550); frag->getComponents()->getGravity()->setResistance(frag->getMass(), frag->getMass() / 1.01f); frag->setAlternateFacesAndNormals(true); frag->getComponents()->getGravity()->setGravity(9.8f); switch(j) { case 0: frag->setColor(0.61f, 0.44f, 0.13f, 1.0f); break; case 1: frag->setColor(0.77f, 0.56f, 0.16f, 1.0f); break; case 2: frag->setColor(0.86f, 0.72f, 0.43f, 1.0f); break; case 3: frag->setColor(0.91f, 0.79f, 0.58f, 1.0f); break; default: frag->setColor(r, g, b, 1.0f); break; } LO = 1.0f; HI = 2.0f; x = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO))); y = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO))); z = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO))); frag->getComponents()->getGravity()->addForce(vec3(dirX * -x, dirY* - y, dirZ *-z), frag->getVelocity(), 1.0); ++dirX; dirX =(dirX ==0?1:dirX); objectManager.addObject(frag); } dirX = -2; } ++dirY; ++dirZ; dirZ =(dirZ ==0?1:dirZ); } break; case 't': oldPos = camera.position; camera.position = vec3(0.f, 30.f, 1.0f); DestructorManager::LaunchDestruction(objectManager, ground, vec3(0.0f, 0.0f, 0.0f), -camera.position, radiusExplosionCircle, depthExplosion, nbPointsCircle, nbPointsCircle); ground->getComponents()->getRigidBody()->changeIndexesList(*ground->indexesList); ground->getComponents()->getRigidBody()->changeVerticesList(*ground->verticesList); ground->getComponents()->getRigidBody()->getRigidBodyObjectGeneric()->resetWireframeModeindexes(*ground->listIndexesWireframe); camera.position = oldPos; break; } }