rendered paste body#include <irrlicht.h>
#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<s32>(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<s32>(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;
}