#include "main.h"
Game::Game(CSettings* sett) {
settings = sett;
for (u32 i=0; i<KEY_KEY_CODES_COUNT; ++i) KeyIsDown[i] = false;
}
Game::~Game() {
}
int Game::error(int errnum, const char errmsg[])
{
cerr << "ERROR: " << errmsg << " (error ID: " << errnum << ")" << endl;
return errnum;
}
int Game::warning(int errnum, const char errmsg[])
{
cerr << "WARNING: " << errmsg << " (error ID: " << errnum << ")" << endl;
return errnum;
}
void Game::info(const char errmsg[])
{
cout << "INFO: " << errmsg << endl;
}
void Game::debug(const char errmsg[])
{
cout << "DEBUG: " << errmsg << endl;
}
int Game::start() {
if(settings->DriverType==EDT_COUNT) return error(1, "User not selected driver");
debug("Creating device...");
irr::SIrrlichtCreationParameters params;
params.DriverType = settings->DriverType;
params.WindowSize = dimension2d<u32>(800, 600);
params.EventReceiver = this;
device = createDeviceEx(params);
if(!device) return error(2, "Failed to create device");
debug("Device created!");
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
gui::IGUIEnvironment* env = device->getGUIEnvironment();
device->getCursorControl()->setVisible(false);
camera = smgr->addCameraSceneNodeFPS(0, 50.0f, .1f, -1, settings->keyMap, 9, false, 0.5f);
loader = new CMapLoader(device, "test");
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
loader->meta, camera, core::vector3df(5,5,5),
core::vector3df(0,-10,0));
camera->addAnimator(anim);
anim->drop(); // I'm done with the animator now
// And set the camera position so that it doesn't start off stuck in the geometry
camera->setPosition(core::vector3df(0.f, 20.f, 0.f));
camera->setTarget(core::vector3df(0.f, 0.f, 0.f));
int lastFPS = -1;
while(device->run() && driver)
if (device->isWindowActive())
{
device->getCursorControl()->setVisible(false);
driver->beginScene(true, true, video::SColor(0,200,200,200));
smgr->drawAll();
driver->endScene();
int fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw str = L"Colonization [";
str += driver->getName();
str += "] FPS:";
str += fps;
device->setWindowCaption(str.c_str());
lastFPS = fps;
}
} else device->getCursorControl()->setVisible(true);
delete loader;
device->drop();
return 0;
}
bool Game::OnEvent(const SEvent& event)
{
if(event.EventType == EET_KEY_INPUT_EVENT) KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;
if ( event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown == false)
{
if ( event.KeyInput.Key == KEY_ESCAPE )
{
device->closeDevice();
}else
if (event.KeyInput.Key == KEY_F10)
{
camera->remove();
delete loader;
camera = device->getSceneManager()->addCameraSceneNodeFPS(0, 50.0f, .1f, -1, settings->keyMap, 9, false, 0.5f);
loader = new CMapLoader(device, "test2");
scene::ISceneNodeAnimator* anim = device->getSceneManager()->createCollisionResponseAnimator(
loader->meta, camera, core::vector3df(5,5,5),
core::vector3df(0,-10,0));
camera->addAnimator(anim);
anim->drop(); // I'm done with the animator now
// And set the camera position so that it doesn't start off stuck in the geometry
camera->setPosition(core::vector3df(0.f, 20.f, 0.f));
camera->setTarget(core::vector3df(0.f, 0.f, 0.f));
}
else
if (event.KeyInput.Key == KEY_F11)
{
c8 buf[256];
// screenshot are taken without gamma!
IImage* image = device->getVideoDriver()->createScreenShot();
if (image)
{
static const c8 *dName[] = { "null", "software", "burning", "d3d8", "d3d9", "opengl" };
time_t rawtime;
time(&rawtime);
struct tm * timeinfo;
timeinfo = localtime(&rawtime);
snprintf(buf, 256, "saves/screenshot/%s_%s_%d-%d-%d_%d-%d-%d.jpg",
loader->name,
dName[device->getVideoDriver()->getDriverType()],
timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday,
timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec
);
path filename(buf);
//filename.replace ( '/', '_' );
char str[256];
snprintf(str, 256, "Screenshot taken: %s_%s_%d-%d-%d_%d-%d-%d.jpg",
loader->name,
dName[device->getVideoDriver()->getDriverType()],
timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday,
timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec
);
info(str);
device->getVideoDriver()->writeImageToFile(image, filename, 100 );
image->drop();
}
}
}
return false;
}
bool Game::IsKeyDown(EKEY_CODE keyCode)
{
return KeyIsDown[keyCode];
}