#include #include "CEventReceiver.h" #pragma comment(lib, "Irrlicht.lib") // Irrlicht namespaces using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui; // Global variables bool quit = false; int main() { // Create the Irrlicht device CEventReceiver Receiver; IrrlichtDevice* device = 0; device = createDevice(EDT_OPENGL, dimension2d(640, 480), 16, false, true, true, &Receiver); ISceneManager* smgr = device->getSceneManager(); IVideoDriver* driver = device->getVideoDriver(); IGUIEnvironment* guienv = device->getGUIEnvironment(); ISceneNode* world = smgr->addEmptySceneNode(); // Add a camera ICameraSceneNode* camera = smgr->addCameraSceneNode(0, vector3df(0, 0, 0), vector3df(0, 0, 100)); // Use media.vxp device->getFileSystem()->addZipFileArchive("media.vxp", false, false); // Textures ITexture* TWall = driver->getTexture("wall.jpg"); ITexture* TWall2 = driver->getTexture("wall.bmp"); ITexture* TParticle = driver->getTexture("particle.bmp"); // Create p1Paddle ISceneNode* p1Paddle = smgr->addCubeSceneNode(1, world, 0, vector3df(-75, 0, 100), vector3df(0, 0, 0), vector3df(1, 25, 25)); p1Paddle->setMaterialTexture(0, TWall); p1Paddle->setMaterialFlag(EMF_LIGHTING, false); // Create p2Paddle ISceneNode* p2Paddle = smgr->addCubeSceneNode(1, world, 0, vector3df(75, 0, 100), vector3df(0, 0, 0), vector3df(1, 25, 25)); p2Paddle->setMaterialTexture(0, TWall2); p2Paddle->setMaterialFlag(EMF_LIGHTING, false); // Create the ball ISceneNode* ball = smgr->addSphereSceneNode(5, 16, world, 0, vector3df(0, 0, 100.0f)); ball->setMaterialTexture(0, TParticle); ball->setMaterialFlag(EMF_LIGHTING, false); // Particle system IParticleSystemSceneNode* particleSystem = smgr->addParticleSystemSceneNode(false, ball); particleSystem->setMaterialFlag(EMF_LIGHTING, false); particleSystem->setMaterialTexture(0, TParticle); particleSystem->setMaterialType(EMT_TRANSPARENT_VERTEX_ALPHA); // Create a particle emitter for the ball IParticleEmitter* ballEmitter = particleSystem->createBoxEmitter(ball->getBoundingBox(), vector3df(0, -0.01f, 0.03f), 50, 100, SColor(0, 50, 25, 25), SColor(10, 200, 50, 50), 200, 400); particleSystem->setEmitter(ballEmitter); ballEmitter->drop(); // Show information IGUIStaticText* leet = guienv->addStaticText(L"Velox Pong\nPlayer 1: Player 2:\n Up = W Up = Up\n Down = S Down = Down", rect(10, 10, 200, 50), true); float index = 0; bool isGoingLeft = false; while (device->run() && quit != true) { driver->beginScene(true, true, SColor(255, 113, 113, 113)); driver->draw3DLine(vector3df(-75, 0, 200), vector3df(75, 0, 200), SColor(255, 100, 25, 25)); driver->draw3DLine(vector3df(75, 0, 200), vector3df(75, 0, 20), SColor(255, 100, 25, 25)); driver->draw3DLine(vector3df(75, 0, 20), vector3df(-75, 0, 20), SColor(255, 100, 25, 25)); driver->draw3DLine(vector3df(-75, 0, 20), vector3df(-75, 0, 200), SColor(255, 100, 25, 25)); smgr->drawAll(); guienv->drawAll(); // Set new camera position and target the center if (camera->getPosition().Y < 200 && index < 200) {camera->setPosition(vector3df(0, index++, 0)); camera->setTarget(vector3df(0, 0, 100.0f));} if (p1Paddle->getTransformedBoundingBox().intersectsWithBox(ball->getTransformedBoundingBox())) {isGoingLeft = false;} if (p2Paddle->getTransformedBoundingBox().intersectsWithBox(ball->getTransformedBoundingBox())) {isGoingLeft = true;} if (isGoingLeft) ball->setPosition(ball->getPosition() + vector3df(-1, 0, 0)); else ball->setPosition(ball->getPosition() + vector3df(1, 0, (rand()%4)-2)); // Test for any key inputs if (Receiver.getKeyState(KEY_KEY_W) && p1Paddle->getPosition().Z < 200) p1Paddle->setPosition(p1Paddle->getPosition() + vector3df(0, 0, 3)); if (Receiver.getKeyState(KEY_KEY_S) && p1Paddle->getPosition().Z > 35) p1Paddle->setPosition(p1Paddle->getPosition() + vector3df(0, 0, -3)); if (Receiver.getKeyState(KEY_UP) && p2Paddle->getPosition().Z < 200) p2Paddle->setPosition(p2Paddle->getPosition() + vector3df(0, 0, 3)); if (Receiver.getKeyState(KEY_DOWN) && p2Paddle->getPosition().Z > 35) p2Paddle->setPosition(p2Paddle->getPosition() + vector3df(0, 0, -3)); if (Receiver.getKeyState(KEY_SPACE)) ball->setPosition(vector3df(0, 0, 100)); if (Receiver.getKeyState(KEY_ESCAPE)) quit = true; camera->setTarget(ball->getPosition()); // End the scene driver->endScene(); } // We're all done, time to drop the Irrlicht device device->drop(); return 0; }