All pastes #635570 Raw Edit

Mine

public text v1 · immutable
#635570 ·published 2007-07-27 05:30 UTC
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;
}