Code: Select all
int StartMap(IrrlichtDevice * irrDevice, int randomValue)
{
char temp[15];
IVideoDriver * irrVideo = irrDevice->getVideoDriver();
ISceneManager* irrScene = irrDevice->getSceneManager();
irrVideo->setTextureCreationFlag(ETCF_ALWAYS_32_BIT, true);
SKeyMap keyMap[5];
keyMap[0].Action = EKA_MOVE_FORWARD;
keyMap[0].KeyCode = KEY_KEY_W;
keyMap[1].Action = EKA_MOVE_BACKWARD;
keyMap[1].KeyCode = KEY_KEY_S;
keyMap[2].Action = EKA_STRAFE_LEFT;
keyMap[2].KeyCode = KEY_KEY_A;
keyMap[3].Action = EKA_STRAFE_RIGHT;
keyMap[3].KeyCode = KEY_KEY_D;
keyMap[4].Action = EKA_JUMP_UP;
keyMap[4].KeyCode = KEY_SPACE;
// Add camera
camera = irrScene->addCameraSceneNodeFPS(0, 100.0f, 1.2f, -1, keyMap, 5, false, 0.5f);
camera->setPosition(vector3df(-2700*2, 1750*2, -2600*2));
camera->setTarget(vector3df(2397*2, 343*2, 2700*2));
camera->setFarValue(42000.0f);
// Add terrain scene node
int count = 1, i, j;
for(i = 0; i < COLUMNS; i++)
for(j = 0; j < ROWS; j++)
{
char name[20];
sprintf(name, "heightmap%d.bmp", count);
ITerrainSceneNode* terrain = irrScene->addTerrainSceneNode(
name,
0, // parent node
-1, // node id
vector3df((f32)(j*-12850), 0.f, (f32)(i*-12850)),// position 12800
vector3df(0.f, 0.f, 0.f), // rotation
vector3df(50.f, 15.0f, 50.f), // scale 50 10 50
SColor ( 255, 255, 255, 255 ), // vertexColor
3, // maxLOD
ETPS_17, // patchSize
4 // smoothFactor
);
terrain->setMaterialFlag(EMF_LIGHTING, false);
terrain->scaleTexture(1.0f, 20.0f);
terrain->setMaterialFlag(video::EMF_WIREFRAME,
!terrain->getMaterial(0).Wireframe);
count++;
}
return 0;
}
int main()
{
srand ( (unsigned int)time(NULL) );
// Init engine
irrDevice = createDevice(EDT_DIRECT3D9 , dimension2d<u32>(1024, 768));
IGUIEnvironment* irrGui = irrDevice->getGUIEnvironment();
IVideoDriver * irrVideo = irrDevice->getVideoDriver();
ISceneManager* irrScene = irrDevice->getSceneManager();
StartMap(irrDevice, randomValue);
while(irrDevice->run())
{
irrVideo->beginScene(true, true, SColor(0,150,150,150));
irrScene->drawAll();
irrGui->drawAll();
irrVideo->endScene();
}
//Shut down
irrDevice->drop();
return 0;
}