version 1.9, 2000/11/28 13:21:23 |
version 1.10, 2000/12/04 10:47:15 |
| |
#include "nel/net/unitime.h" | #include "nel/net/unitime.h" |
| |
#include "nel/3d/driver.h" | #include "nel/3d/driver.h" |
| #include "nel/3d/camera.h" |
| #include "nel/3d/landscape_model.h" |
| #include "nel/3d/landscape.h" |
| |
| #include "move_listener.h" |
#include "language_interface.h" | #include "language_interface.h" |
#include "login_interface.h" | #include "login_interface.h" |
#include "shards_list_interface.h" | #include "shards_list_interface.h" |
| |
#endif | #endif |
| |
| |
| CEventListenerAsync asyncListener; |
| CMoveListener moveListener; |
| |
| |
/** | /** |
* login | * login |
*/ | */ |
| |
} | } |
| |
| |
| |
| /** |
| * zoneMainProc |
| */ |
| 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. |
| scene->clearBuffers(CRGBA(255,251,240)); |
| scene->render(); |
| scene->swapBuffers(); |
| |
| //t0 = t1; |
| |
| //framesCount++; |
| } |
| |
| |
| |
| |
| /** |
| * displayZone |
| */ |
| void displayZone(CScene * scene, const char * zonePath) |
| { |
| // Positioning camera |
| CMatrix camera; |
| camera.identity(); |
| camera.setPos(CVector(0,-20,0)); |
| CSceneUt::Camera->setMatrix(camera); |
| |
| // Create a Landscape |
| CLandscapeModel * land; |
| land = (CLandscapeModel*)scene->createModel(LandscapeModelId); |
| land->Landscape = new CLandscape(); |
| land->Landscape->init(); |
| |
| // Build a zone. |
| CZone zone; |
| CIFile file(zonePath); |
| zone.serial(file); |
| file.close(); |
| |
| // Add it to landscape. |
| land->Landscape->addZone(zone); |
| |
| // Init TileBank. |
| CIFile bankFile("C:/Windows/bureau/tileset/bank.bank"); |
| land->Landscape->TileBank.serial(bankFile); |
| |
| // Events management |
| CEventServer server; |
| server.addEmitter(scene->getDriver()->getEventEmitter()); |
| asyncListener.addToServer(server); |
| moveListener.setWithCamera(*CSceneUt::Camera); |
| moveListener.setViewport(scene->getViewport()); |
| moveListener.addToServer(server); |
| do |
| { |
| server.pump(); |
| zoneMainProc(scene); |
| } |
| while(!asyncListener.isKeyPush(KeyESCAPE)); |
| |
| asyncListener.removeFromServer(server); |
| moveListener.removeFromServer(server); |
| } |
| |
| |
| |
enum TState | enum TState |
{ | { |
LANGUAGE, | LANGUAGE, |
| |
uint w = 800; | uint w = 800; |
uint h = 600; | uint h = 600; |
uint bpp = 32; | uint bpp = 32; |
bool windowed = false;//true; | bool windowed = true; //false; |
NL3D::CScene scene; | NL3D::CScene scene; |
NL3D::CSceneUt::init3d(scene, w, h, bpp, windowed); | NL3D::CSceneUt::init3d(scene, w, h, scene.getViewport(), bpp, windowed); |
| |
// synchronize time with server | // synchronize time with server |
CUniTime::syncUniTimeFromService(); | CUniTime::syncUniTimeFromService(); |
| |
| |
| |
TState clientState = LANGUAGE; | TState clientState = LANGUAGE; |
bool quit = false; | bool quit = true;//false; |
while(!quit) | while(!quit) |
{ | { |
switch(clientState) | switch(clientState) |
| |
if(quit) break; | if(quit) break; |
} | } |
| |
| // display a zone |
| displayZone(&scene,"pipo.zon"); |
| |
// release scene | // release scene |
NL3D::CSceneUt::release3d(scene); | NL3D::CSceneUt::release3d(scene); |