All pastes #635710 Raw Edit

Stuff

public text v1 · immutable
#635710 ·published 2007-07-27 09:38 UTC
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;
}