The code is really bad, but not unreadable. This is all the code that has anything to do with gameplay.
Code: Select all
#include "Game.h"
#include "ItemTypes.h"
Game::Game(void)
{
params.AntiAlias = true;
params.Bits = 32;
params.DriverType = EDT_OPENGL;
params.EventReceiver = this;
params.Fullscreen = false;
params.HighPrecisionFPU = true;
params.Stencilbuffer = true;
params.Vsync = true;
params.WindowId = 0;
params.WindowSize = dimension2d<s32>(1024,768);
engine = createDeviceEx(params);
engine->setWindowCaption(L"Steel Eden Engine");
sound = createIrrKlangDevice();
smgr = engine->getSceneManager();
driver = engine->getVideoDriver();
guienv = engine->getGUIEnvironment();
renderTexture = driver->createRenderTargetTexture(dimension2d<s32>(640,480),"renderTexture");
fader = guienv->addInOutFader(&rect<s32>(0,0,1024,768), NULL, -1);
cam = smgr->addCameraSceneNode(NULL, vector3df(0,0,100),vector3df(0,0,0),-1);
/*if(!engine->getFileSystem()->addZipFileArchive("pakfiles.pk3", false ,false))
{
MessageBox(NULL, "Pak3 file not implemented. Please bash head into OK button to continue.","Josh screwed up.",NULL);
engine->closeDevice();
}*/
for (int x=0;x<KEY_KEY_CODES_COUNT;x++)
{
keys[x]=false;
}
font = guienv->getFont("fonts/font2.xml");
fontSpecial = guienv->getFont("fonts/font1.xml");
fontDebug = guienv->getBuiltInFont();
control = 0;
}
bool Game::intro(float time, int numberOfFrames)
{
engine->setWindowCaption(IT_GAME_NAME);
ISceneNode* cube = smgr->addCubeSceneNode(50,NULL,1);
array<ITexture*> textures;
for(int j = 0; j < numberOfFrames; j++)
{
char i[256];
sprintf(i,"intro/intro%04d.jpg",j);
textures.push_back(driver->getTexture(i));
}
ISceneNodeAnimator* tanim = smgr->createTextureAnimator(textures,time,false);
ISceneNodeAnimator* remove = smgr->createDeleteAnimator(time * numberOfFrames);
cube->setMaterialFlag(EMF_LIGHTING, false);
cube->addAnimator(tanim);
cube->addAnimator(remove);
tanim->drop();
remove->drop();
textures.clear();
//cube->remove();
return true;
}
int Game::getControlVar()
{
return control;
}
int Game::getDelta()
{
return delta;
}
int Game::setControlVar(int val)
{
control = val;
return control;
}
Game::sceneStandard Game::setUpScene(irr::scene::IAnimatedMesh *m)
{
if(!m)
{
MessageBox(NULL, "Level not implemented. Please bash head into OK button to continue.","Josh screwed up.",NULL);
engine->closeDevice();
}
cam->setPosition(vector3df(0,333,666));
cam->updateAbsolutePosition();
sceneStandard scene1;
scene1.baseMesh = m;
scene1.base = smgr->addAnimatedMeshSceneNode(m);
scene1.base->setRotation(vector3df(0,180,0));
scene1.light[0] = smgr->addLightSceneNode(NULL,vector3df(0,1024,0),SColor(255,255,255,255),65525,-1);
return scene1;
}
bool Game::getState()
{
if(control == 0 && !smgr->getSceneNodeFromId(1))
{
sceneStandard scene = setUpScene(smgr->getMesh("data/scene1.x"));
mainCharMesh = smgr->getMesh("data/mainchar.md3");
mainChar = smgr->addAnimatedMeshSceneNode(mainCharMesh,NULL,-1,vector3df(0,0,0),vector3df(0,0,0),vector3df(1,1,1),false);
mainChar->setMaterialTexture(0,driver->getTexture("data/mainChar.bmp"));
mainCharFriction = 0.1;
mainCharSpeed = 90;
if(!mainChar)
{
MessageBox(NULL, "Character not implemented. Please bash head into OK button to continue.","Josh screwed up.",NULL);
engine->closeDevice();
}
fader->fadeIn(1000);
control = 1;
}
if(control >= 1)
{
}
if(keys[KEY_ESCAPE])
{
engine->closeDevice();
}
if(keys[KEY_KEY_A])
{
mainChar->setPosition(mainChar->getAbsolutePosition()+vector3df(-mainCharSpeed*delta,0,0));
}
if(keys[KEY_KEY_D])
{
mainChar->setPosition(mainChar->getAbsolutePosition()+vector3df(mainCharSpeed*delta,0,0));
}
if(keys[KEY_KEY_W])
{
mainChar->setPosition(mainChar->getAbsolutePosition()+vector3df(0,0,-mainCharSpeed*delta));
}
if(keys[KEY_KEY_S])
{
mainChar->setPosition(mainChar->getAbsolutePosition()+vector3df(0,0,mainCharSpeed*delta));
}
return true;
}
bool Game::renderBg()
{
driver->draw2DImage(driver->getTexture("data/bg.bmp"),position2d<s32>(0,0));
return true;
}
ISceneNode* Game::addItem(vector3df pos, int type)
{
IAnimatedMesh* mesh;
rect<s32> itemRect;
switch(type)
{
case 0:
MessageBox(NULL, "Item not implemented. Please bash head into OK button to continue.","Josh screwed up.",NULL);
break;
case 256:
mesh = smgr->getMesh("data/item1.obj");
if(!mesh)
{
MessageBox(NULL, "Mesh not implemented. Please bash head into OK button to continue.","Josh screwed up.",NULL);
engine->closeDevice();
}
break;
}
IAnimatedMeshSceneNode* item = smgr->addAnimatedMeshSceneNode(mesh, NULL, type,pos);
return item;
}
bool Game::run()
{
while(engine->run())
{
then = engine->getTimer()->getTime();
driver->beginScene(true,true,SColor(0,0,0,0));
getState();
renderBg();
smgr->drawAll();
guienv->drawAll();
debugString = "";
debugString += "Mouse: ";
debugString += engine->getCursorControl()->getPosition().X;
debugString += ", ";
debugString += engine->getCursorControl()->getPosition().Y;
fontDebug->draw(debugString.c_str(),rect<s32>(0,0,640,480),SColor(255,255,255,255),false,false,0);
driver->endScene();
engine->getTimer()->tick();
now = engine->getTimer()->getTime();
delta = now - then;
}
return false;
}
bool Game::OnEvent(const SEvent& event)
{
if(event.EventType == EET_KEY_INPUT_EVENT)
{
keys[event.KeyInput.Key] = event.KeyInput.PressedDown;
return true;
}
return false;
}
Game::~Game(void)
{
engine->drop();
}