rendered paste body#include <irrlicht.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;
ISceneNode* p1Paddle;
ISceneNode* p2Paddle;
IrrlichtDevice* device = 0;
class CEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent Event);
};
int main()
{
// Create the Irrlicht device
CEventReceiver EventReceiver;
device = createDevice(EDT_OPENGL, dimension2d<s32>(640, 480), 16, false, true, true, &EventReceiver);
ISceneManager* smgr = device->getSceneManager();
IVideoDriver* driver = device->getVideoDriver();
IGUIEnvironment* guienv = device->getGUIEnvironment();
// Create meta triangle selector to hold all other triangle selectors
IMetaTriangleSelector* metaSelector = smgr->createMetaTriangleSelector();
// Add a camera and hide the mouse
ICameraSceneNode* camera = smgr->addCameraSceneNode(0, vector3df(0, 0, 0), vector3df(0, 0, 100));
device->getCursorControl()->setVisible(false);
// 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 world scene node
ISceneNode* world = smgr->addCubeSceneNode(500);
// Create p1Paddle
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
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, 512, world);
ball->setMaterialTexture(0, TParticle);
ball->setMaterialFlag(EMF_LIGHTING, false);
// Fling the ball to the left
ISceneNodeAnimator* ballAnim = smgr->createFlyStraightAnimator(vector3df(0, 0, 100), vector3df(-100, 0, 100), 5000, false);
ball->addAnimator(ballAnim);
ballAnim->drop();
// Particle system
IParticleSystemSceneNode* particleSystem = smgr->addParticleSystemSceneNode(false, ball);
particleSystem->setMaterialFlag(EMF_LIGHTING, false);
particleSystem->setMaterialTexture(0, TParticle);
particleSystem->setMaterialType(EMT_TRANSPARENT_VERTEX_ALPHA);
// 2 Particle emitters for the ball
IParticleEmitter* ballEmitter = particleSystem->createPointEmitter(vector3df(0.03f, 0.03f, 0.03f), 50, 100, SColor(0, 50, 25, 25), SColor(0, 200, 50, 50), 200, 400);
particleSystem->setEmitter(ballEmitter);
ballEmitter->drop();
ITriangleSelector* ballSelector = smgr->createTriangleSelectorFromBoundingBox(ball);
metaSelector->addTriangleSelector(ballSelector);
ballSelector->drop();
ISceneNodeAnimatorCollisionResponse* collision = smgr->createCollisionResponseAnimator(metaSelector, ball, vector3df(5, 5, 5), vector3df(0, 0, 0));
ball->addAnimator(collision);
collision->drop();
// Show information
IGUIStaticText* leet = guienv->addStaticText(L"Velox Pong", rect<s32>(10, 10, 200, 30), true);
leet->move(position2d<s32>(driver->getFPS(), 0));
float index = 0;
while (device->run() && quit != true)
{
driver->beginScene(true, true, SColor(255, 113, 113, 113));
smgr->drawAll();
guienv->drawAll();
if (camera->getPosition().Y < 100 && index < 100) camera->setPosition(vector3df(0, index++, 0));
driver->endScene();
}
// We're all done, time to drop the Irrlicht device
metaSelector->drop();
device->drop();
return 0;
}
bool CEventReceiver::OnEvent(SEvent Event)
{
if (Event.EventType == EET_KEY_INPUT_EVENT)
{
if (Event.KeyInput.Key == KEY_UP)
p2Paddle->setPosition(p2Paddle->getPosition() + vector3df(0.0f, 0.0f, 1.0f));
if (Event.KeyInput.Key == KEY_DOWN)
p2Paddle->setPosition(p2Paddle->getPosition() + vector3df(0.0f, 0.0f, -1.0f));
if (Event.KeyInput.Key == KEY_KEY_W)
p1Paddle->setPosition(p1Paddle->getPosition() + vector3df(0.0f, 0.0f, 1.0f));
if (Event.KeyInput.Key == KEY_KEY_S)
p1Paddle->setPosition(p1Paddle->getPosition() + vector3df(0.0f, 0.0f, -1.0f));
switch (Event.KeyInput.Key)
{
// Did the user press the "Esc" button?
case 27:
quit = true;
break;
}
}
return true;
}