version 1.10, 2000/12/04 10:47:15 |
version 1.11, 2000/12/04 17:58:09 |
| |
#endif | #endif |
| |
| |
CEventListenerAsync asyncListener; | |
CMoveListener moveListener; | CMoveListener moveListener; |
| |
| |
| |
*/ | */ |
void zoneMainProc(CScene * scene) | void zoneMainProc(CScene * scene) |
{ | { |
/* | |
static CVector cameraRot(CVector::Null); | |
static CVector cameraPos(0,-20,0); | |
static uint32 framesCount; | |
| |
// time mgt. | |
static float t0= (sint64)CTime::getLocalTime()*0.001f; | |
static float t1; | |
t1= (sint64)CTime::getLocalTime()*0.001f; | |
float dt= t1-t0; | |
dt= 0.02f; | |
| |
| |
// Speed | |
const uint8 nspeed = 5; | |
static float speedBuf[nspeed]= { 1.66f, // 6km/h | |
3.33f, // 12km/h | |
8.33f, // 30km/h | |
40.0f, // 144km/h | |
200.0f // 700km/h | |
}; | |
static uint8 idSpeed = 2; | |
float speed = speedBuf[idSpeed]; | |
if(asyncListener.isKeyPush(KeyS))//getPressKeyState(KeyS)) | |
{ | |
idSpeed++; | |
idSpeed %= nspeed; | |
speed = speedBuf[idSpeed]; | |
} | |
| |
// Rotation | |
float rotSpeed = 80*(float)Pi/180; | |
if(asyncListener.isKeyPush(KeyLEFT)) cameraRot.z += rotSpeed*dt; | |
if(asyncListener.isKeyPush(KeyRIGHT)) cameraRot.z -= rotSpeed*dt; | |
if(asyncListener.isKeyPush(KeyHOME)) cameraRot.x += rotSpeed*dt; | |
if(asyncListener.isKeyPush(KeyEND)) cameraRot.x -= rotSpeed*dt; | |
| |
// Move | |
CVector dir(0,speed*dt,0); | |
CMatrix mat; | |
mat.identity(); | |
mat.rotateZ(cameraRot.z); | |
mat.rotateX(cameraRot.x); | |
dir= mat.mulVector(dir); | |
if(asyncListener.isKeyPush(KeyUP)) cameraPos += dir; | |
if(asyncListener.isKeyPush(KeyDOWN)) cameraPos -= dir; | |
if(asyncListener.isKeyPush(KeyA)) cameraPos.z += speed*dt; | |
if(asyncListener.isKeyPush(KeyQ)) cameraPos.z -= speed*dt; | |
if(asyncListener.isKeyPush(KeyR)) | |
{ | |
cameraPos.set(0,0,0); | |
cameraRot.set(0,0,0); | |
} | |
| |
// Straff | |
float straff = 0; | |
if(asyncListener.isKeyPush(KeyW)) straff = -speed*dt; | |
if(asyncListener.isKeyPush(KeyX)) straff = speed*dt; | |
if(straff) | |
{ | |
CMatrix m; | |
m.identity(); | |
m.rotateZ(cameraRot.z); | |
m.rotateX(cameraRot.x); | |
cameraPos += m*CVector(straff,0,0); | |
} | |
| |
| |
// Camera | |
CMatrix cam; | |
cam.identity(); | |
cam.setRot(cameraRot, CMatrix::ZXY); | |
cam.setPos(cameraPos); | |
CSceneUt::Camera->setMatrix(cam); | |
*/ | |
| |
| |
//scene->getDriver()->setupViewMatrix(moveListener.getViewMatrix()); | |
CSceneUt::Camera->setMatrix(moveListener.getViewMatrix()); | |
| |
| |
| |
| |
// Render. | // Render. |
scene->clearBuffers(CRGBA(255,251,240)); | scene->clearBuffers(CRGBA(255,251,240)); |
scene->render(); | scene->render(); |
scene->swapBuffers(); | scene->swapBuffers(); |
| |
//t0 = t1; | |
| |
//framesCount++; | |
} | } |
| |
| |
| |
/** | /** |
* displayZone | * displayZone |
*/ | */ |
void displayZone(CScene * scene, const char * zonePath) | void displayZone(CScene * scene, uint w, uint h, const char * zonePath) |
{ | { |
// Positioning camera | // Positioning camera |
CMatrix camera; | CMatrix camera; |
camera.identity(); | camera.identity(); |
camera.setPos(CVector(0,-20,0)); | camera.setPos(CVector(0,-20,0)); |
CSceneUt::Camera->setMatrix(camera); | CNELU::Camera->setMatrix(camera); |
| |
// Create a Landscape | // Create a Landscape |
CLandscapeModel * land; | CLandscapeModel * land; |
| |
CIFile bankFile("C:/Windows/bureau/tileset/bank.bank"); | CIFile bankFile("C:/Windows/bureau/tileset/bank.bank"); |
land->Landscape->TileBank.serial(bankFile); | land->Landscape->TileBank.serial(bankFile); |
| |
| scene->getDriver()->showCursor(false); |
| |
// Events management | // Events management |
CEventServer server; | CNELU::EventServer.addEmitter(scene->getDriver()->getEventEmitter()); |
server.addEmitter(scene->getDriver()->getEventEmitter()); | CNELU::AsyncListener.addToServer(CNELU::EventServer); |
asyncListener.addToServer(server); | moveListener.init(scene, w, h, *CNELU::Camera); |
moveListener.setWithCamera(*CSceneUt::Camera); | moveListener.addToServer(CNELU::EventServer); |
moveListener.setViewport(scene->getViewport()); | |
moveListener.addToServer(server); | |
do | do |
{ | { |
server.pump(); | CNELU::EventServer.pump(); |
zoneMainProc(scene); | zoneMainProc(scene); |
} | } |
while(!asyncListener.isKeyPush(KeyESCAPE)); | while(!CNELU::AsyncListener.isKeyPush(KeyESCAPE)); |
| |
| CNELU::AsyncListener.removeFromServer(CNELU::EventServer); |
| moveListener.removeFromServer(CNELU::EventServer); |
| |
| scene->getDriver()->showCursor(true); |
| |
| |
asyncListener.removeFromServer(server); | |
moveListener.removeFromServer(server); | |
} | } |
| |
| |
| |
uint w = 800; | uint w = 800; |
uint h = 600; | uint h = 600; |
uint bpp = 32; | uint bpp = 32; |
bool windowed = true; //false; | bool windowed = false; |
NL3D::CScene scene; | NL3D::CNELU::init(w, h, CViewport(), bpp, windowed); |
NL3D::CSceneUt::init3d(scene, w, h, scene.getViewport(), bpp, windowed); | |
| |
// synchronize time with server | // synchronize time with server |
CUniTime::syncUniTimeFromService(); | CUniTime::syncUniTimeFromService(); |
| |
// language choice | // language choice |
case LANGUAGE: | case LANGUAGE: |
{ | { |
sint languageIndex = chooseLanguage(&scene, &fontGen, w, h); | sint languageIndex = chooseLanguage(&CNELU::Scene, &fontGen, w, h); |
if(languageIndex==-1) | if(languageIndex==-1) |
quit = true; | quit = true; |
else | else |
| |
// get user's login and password | // get user's login and password |
case LOGIN: | case LOGIN: |
{ | { |
if(login(&scene, &fontGen, w, h, shards)) | if(login(&CNELU::Scene, &fontGen, w, h, shards)) |
clientState = SHARD; | clientState = SHARD; |
else | else |
clientState = LANGUAGE; | clientState = LANGUAGE; |
| |
// shard choice | // shard choice |
case SHARD: | case SHARD: |
{ | { |
shardIndex = chooseShard(&scene, &fontGen, w, h, shards); | shardIndex = chooseShard(&CNELU::Scene, &fontGen, w, h, shards); |
if(shardIndex==-1) | if(shardIndex==-1) |
clientState = LOGIN; | clientState = LOGIN; |
else | else |
| |
} | } |
| |
// display a zone | // display a zone |
displayZone(&scene,"pipo.zon"); | displayZone(&CNELU::Scene,w,h,"pipo.zon"); |
| |
// release scene | // release nelu |
NL3D::CSceneUt::release3d(scene); | NL3D::CNELU::release(); |
| |
} | } |
catch(Exception &e) | catch(Exception &e) |