00001
00010 #include "graphics_relative.h"
00011
00012 #include "../hydro_source/dataFillings.h"
00013
00014 HGLRC hRC=NULL;
00015 HDC hDC=NULL;
00016 HWND hWnd=NULL;
00017 HINSTANCE hInstance;
00018
00019 GLuint base;
00020
00021
00022 bool keys[256];
00023 bool active=TRUE;
00024 bool fullscreen=TRUE;
00025
00026 bool light;
00027
00028
00029
00030 GLfloat viewAngle1 = 0.0;
00031 GLfloat viewAngle2 = 0.3;
00032 GLfloat dviewAngle = 0.01;
00033 GLfloat viewDist = 50.0;
00034 GLfloat dviewDist = 0.3;
00035
00036
00037 GLfloat LightAmbient[]= { 0.35f, 0.35f, 0.5f, 1.0f };
00038 GLfloat LightDiffuse[]= { 0.6f, 0.6f, 0.6f, 1.0f };
00039 GLfloat LightPosition[]= { -10.0f, 20.0f, 150.0f, 0.0f };
00040
00041
00042 MSG msg;
00043 BOOL done=FALSE;
00044
00045
00046 int joystick_exist;
00047 bool doX = TRUE;
00048 bool doY = TRUE;
00049 bool doZ = TRUE;
00050 bool doR = TRUE;
00051 bool allowChangeDoX = TRUE;
00052 bool allowChangeDoY = TRUE;
00053 bool allowChangeDoZ = TRUE;
00054 bool allowChangeDoR = TRUE;
00055 float dirX = 1.0f;
00056 float dirY = 1.0f;
00057 float dirZ = 1.0f;
00058 float dirR = 1.0f;
00059 bool allowChangeDirX = TRUE;
00060 bool allowChangeDirY = TRUE;
00061 bool allowChangeDirZ = TRUE;
00062 bool allowChangeDirR = TRUE;
00063 float time_before = 0.0;
00064 float time_elapsed;
00065 float fps = 0.0;
00066
00067
00068
00070
00074 GLvoid BuildFont(GLvoid)
00075 {
00076 HFONT font;
00077 HFONT oldfont;
00078
00079 base = glGenLists(96);
00080
00081 font = CreateFont( -16,
00082 0,
00083 0,
00084 0,
00085 FW_BOLD,
00086 FALSE,
00087 FALSE,
00088 FALSE,
00089 ANSI_CHARSET,
00090 OUT_TT_PRECIS,
00091 CLIP_DEFAULT_PRECIS,
00092 ANTIALIASED_QUALITY,
00093 FF_DONTCARE|DEFAULT_PITCH,
00094 "Courier New");
00095
00096 oldfont = (HFONT)SelectObject(hDC, font);
00097 wglUseFontBitmaps(hDC, 32, 96, base);
00098 SelectObject(hDC, oldfont);
00099 DeleteObject(font);
00100 }
00101
00102
00104
00107 GLvoid KillFont(GLvoid)
00108 {
00109 glDeleteLists(base, 96);
00110 }
00111
00113
00116 GLvoid glPrint(const char *fmt, ...)
00117 {
00118 char text[256];
00119 va_list ap;
00120
00121 if (fmt == NULL)
00122 return;
00123
00124 va_start(ap, fmt);
00125 vsprintf(text, fmt, ap);
00126 va_end(ap);
00127
00128 glPushAttrib(GL_LIST_BIT);
00129 glListBase(base - 32);
00130
00131 glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
00132 glPopAttrib();
00133 }
00134
00135
00136
00137
00138 GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
00139 {
00140 if (height==0)
00141 {
00142 height=1;
00143 }
00144
00145 glViewport(0, 0, width, height);
00146
00147 glMatrixMode(GL_PROJECTION);
00148 glLoadIdentity();
00149
00150
00151 gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
00152
00153 glMatrixMode(GL_MODELVIEW);
00154 glLoadIdentity();
00155 }
00156
00157
00158
00159 int InitGL(GLvoid)
00160 {
00161 glShadeModel(GL_SMOOTH);
00162 glClearColor(0.3f, 0.3f, 1.0f, 1.0f);
00163
00164 glClearDepth(1.0f);
00165 glEnable(GL_DEPTH_TEST);
00166 glDepthFunc(GL_LEQUAL);
00167
00168 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
00169
00170 glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
00171 glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
00172 glLightfv(GL_LIGHT0, GL_POSITION,LightPosition);
00173 glEnable(GL_LIGHT0);
00174 glEnable(GL_LIGHTING);
00175 glEnable( GL_COLOR_MATERIAL );
00176 glEnable(GL_NORMALIZE);
00177 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
00178 glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1.0f );
00179
00180 BuildFont();
00181
00182 return TRUE;
00183 }
00184
00185
00186
00187
00188
00189 int DrawGLScene(datas *d)
00190 {
00191 double sign;
00192 float X, Y, Z, R;
00193
00194 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00195
00196
00197 if (abs((1.0f/time_elapsed))<300.0f) fps=0.99*fps+0.01*(1.0f/time_elapsed);
00198
00199
00200 glLoadIdentity();
00201
00202 glDisable(GL_LIGHTING);
00203
00204 glTranslatef(0.0f,0.0f,-1.0f);
00205 glColor3f(0.85,0.05,0.05);
00206 glRasterPos2f(-0.5, -0.35);
00207 glPrint("Speed %3.2f km/h Course %3.0f deg",
00208 3.6f*sqrt(d->dx*d->dx + d->dy*d->dy),
00209 -57.2958f*atan(d->dy/d->dx));
00210 glRasterPos2f(-0.5, -0.375);
00211 glPrint("Wind Speed %3.2f km/h, %3.1f fps", 3.6f*d->Wind, fps);
00212 glRasterPos2f(-0.5, -0.4);
00213 glPrint("Relative Wind Speed %3.2f km/h", 3.6*sqrt((d->Wind_x - d->dx)*(d->Wind_x - d->dx)+(d->Wind_y - d->dy)*(d->Wind_y - d->dy)));
00214
00215 glLoadIdentity();
00216 glTranslatef(-0.45f,0.4f,-1.0f);
00217 glScalef(0.08f,0.08f,0.08f);
00218 Girouette_draw(d);
00219
00220 if (joystick_exist)
00221 {
00222 joystick_getXYZR(&d->target_x, &d->target_y, &d->Vslider_x, &d->Hslider_x, doX, doY, doZ, doR);
00223 if (doX) d->target_x *= dirX;
00224 if (doY) d->target_y *= dirY;
00225 if (doZ) d->Vslider_x *= dirZ;
00226 if (doR) d->Hslider_x *= dirR;
00227 }
00228
00229 angles_update(d);
00230
00231 glLoadIdentity();
00232 glTranslatef(0.48f,-0.35f,-1.0f);
00233 glScalef(0.05f,0.05f,0.04f);
00234 Target_draw(d->target_x, d->target_y);
00235
00236 glLoadIdentity();
00237 glTranslatef(0.35f,-0.35f,-1.0f);
00238 glScalef(0.1f,0.1f,0.1f);
00239 HSlider_draw(d->Hslider_x);
00240
00241 glLoadIdentity();
00242 glTranslatef(0.25f,-0.35f,-1.0f);
00243 glScalef(0.1f,0.1f,0.1f);
00244 VSlider_draw(d->Vslider_x);
00245
00246 glEnable(GL_LIGHTING);
00247
00248
00249 glLoadIdentity();
00250
00251 if (cos(viewAngle2) >= 0) sign=1.0;
00252 else sign=-1.0;
00253
00254 gluLookAt( d->x - cos(viewAngle1)*cos(viewAngle2)*viewDist,
00255 d->y + sin(viewAngle1)*cos(viewAngle2)*viewDist,
00256 d->z + sin(viewAngle2)*viewDist,
00257
00258 d->x,d->y,d->z+12.0,
00259
00260 sin(viewAngle2)*cos(viewAngle1) * sign,
00261 -sin(viewAngle2)*sin(viewAngle1) * sign,
00262 cos(viewAngle2) * sign);
00263
00264 glTranslatef(d->x,d->y,0.0);
00265
00266 wave_z_compute(d);
00267 Draw_sea();
00268
00269 glTranslatef(0.0,0.0,d->z);
00270 glRotatef(57.2958*d->phi,1.0f,0.0f,0.0f);
00271 glRotatef(57.2958*d->theta,0.0f,1.0f,0.0f);
00272 glRotatef(57.2958*d->psi,0.0f,0.0f,1.0f);
00273
00274 Boat_draw();
00275 Sail_create_and_draw(d);
00276 RelativeWind_draw(d);
00277
00278 glLightfv(GL_LIGHT0, GL_POSITION,LightPosition);
00279
00280
00281 return TRUE;
00282 }
00283
00284
00285
00286
00287 GLvoid KillGLWindow(GLvoid)
00288 {
00289 if (fullscreen)
00290 {
00291 ChangeDisplaySettings(NULL,0);
00292 ShowCursor(TRUE);
00293 }
00294
00295 if (hRC)
00296 {
00297 if (!wglMakeCurrent(NULL,NULL))
00298 {
00299 MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
00300 }
00301
00302 if (!wglDeleteContext(hRC))
00303 {
00304 MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
00305 }
00306 hRC=NULL;
00307 }
00308
00309 if (hDC && !ReleaseDC(hWnd,hDC))
00310 {
00311 MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
00312 hDC=NULL;
00313 }
00314
00315 if (hWnd && !DestroyWindow(hWnd))
00316 {
00317 MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
00318 hWnd=NULL;
00319 }
00320
00321 if (!UnregisterClass("OpenGL",hInstance))
00322 {
00323 MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
00324 hInstance=NULL;
00325 }
00326 }
00327
00328
00329
00330
00331 BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
00332 {
00333 GLuint PixelFormat;
00334
00335 WNDCLASS wc;
00336
00337 DWORD dwExStyle;
00338 DWORD dwStyle;
00339
00340 RECT WindowRect;
00341 WindowRect.left=(long)0;
00342 WindowRect.right=(long)width;
00343 WindowRect.top=(long)0;
00344 WindowRect.bottom=(long)height;
00345
00346 fullscreen=fullscreenflag;
00347
00348 hInstance = GetModuleHandle(NULL);
00349 wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
00350 wc.lpfnWndProc = (WNDPROC) WndProc;
00351 wc.cbClsExtra = 0;
00352 wc.cbWndExtra = 0;
00353 wc.hInstance = hInstance;
00354 wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
00355 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
00356 wc.hbrBackground = NULL;
00357 wc.lpszMenuName = NULL;
00358 wc.lpszClassName = "OpenGL";
00359
00360 if (!RegisterClass(&wc))
00361 {
00362 MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00363 return FALSE;
00364 }
00365
00366 if (fullscreen)
00367 {
00368 DEVMODE dmScreenSettings;
00369 memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
00370 dmScreenSettings.dmSize=sizeof(dmScreenSettings);
00371 dmScreenSettings.dmPelsWidth = width;
00372 dmScreenSettings.dmPelsHeight = height;
00373 dmScreenSettings.dmBitsPerPel = bits;
00374 dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
00375
00376
00377 if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
00378 {
00379
00380 if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
00381 {
00382 fullscreen=FALSE;
00383 }
00384 else
00385 {
00386
00387 MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
00388 return FALSE;
00389 }
00390 }
00391 }
00392
00393 if (fullscreen)
00394 {
00395 dwExStyle=WS_EX_APPWINDOW;
00396 dwStyle=WS_POPUP;
00397 ShowCursor(FALSE);
00398 }
00399 else
00400 {
00401 dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
00402 dwStyle=WS_OVERLAPPEDWINDOW;
00403 }
00404
00405 AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);
00406
00407 if (!(hWnd=CreateWindowEx( dwExStyle,
00408 "OpenGL",
00409 title,
00410 WS_CLIPSIBLINGS |
00411 WS_CLIPCHILDREN |
00412 dwStyle,
00413 0, 0,
00414 WindowRect.right-WindowRect.left,
00415 WindowRect.bottom-WindowRect.top,
00416 NULL,
00417 NULL,
00418 hInstance,
00419 NULL)))
00420 {
00421 KillGLWindow();
00422 MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00423 return FALSE;
00424 }
00425
00426
00427 static PIXELFORMATDESCRIPTOR pfd=
00428 {
00429 sizeof(PIXELFORMATDESCRIPTOR),
00430 1,
00431 PFD_DRAW_TO_WINDOW |
00432 PFD_SUPPORT_OPENGL |
00433 PFD_DOUBLEBUFFER,
00434 PFD_TYPE_RGBA,
00435 bits,
00436 0, 0, 0, 0, 0, 0,
00437 0,
00438 0,
00439 0,
00440 0, 0, 0, 0,
00441 16,
00442 0,
00443 0,
00444 PFD_MAIN_PLANE,
00445 0,
00446 0, 0, 0
00447 };
00448
00449
00450 if (!(hDC=GetDC(hWnd)))
00451 {
00452 KillGLWindow();
00453 MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00454 return FALSE;
00455 }
00456
00457
00458 if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))
00459 {
00460 KillGLWindow();
00461 MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00462 return FALSE;
00463 }
00464
00465
00466 if(!SetPixelFormat(hDC,PixelFormat,&pfd))
00467 {
00468 KillGLWindow();
00469 MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00470 return FALSE;
00471 }
00472
00473
00474 if (!(hRC=wglCreateContext(hDC)))
00475 {
00476 KillGLWindow();
00477 MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00478 return FALSE;
00479 }
00480
00481
00482 if(!wglMakeCurrent(hDC,hRC))
00483 {
00484 KillGLWindow();
00485 MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00486 return FALSE;
00487 }
00488
00489
00490 ShowWindow(hWnd,SW_SHOW);
00491 SetForegroundWindow(hWnd);
00492 SetFocus(hWnd);
00493 ReSizeGLScene(width, height);
00494
00495
00496 if (!InitGL())
00497 {
00498 KillGLWindow();
00499 MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
00500 return FALSE;
00501 }
00502
00503
00504 return TRUE;
00505 }
00506
00507
00508
00510 LRESULT CALLBACK WndProc( HWND hWnd,
00511 UINT uMsg,
00512 WPARAM wParam,
00513 LPARAM lParam)
00514 {
00515 switch (uMsg)
00516 {
00517 case WM_ACTIVATE:
00518 {
00519 if (!HIWORD(wParam))
00520 {
00521 active=TRUE;
00522 }
00523 else
00524 {
00525 active=FALSE;
00526 }
00527
00528 return 0;
00529 }
00530 case WM_SYSCOMMAND:
00531 {
00532 switch (wParam)
00533 {
00534 case SC_SCREENSAVE:
00535 case SC_MONITORPOWER:
00536 return 0;
00537 }
00538 break;
00539 }
00540 case WM_CLOSE:
00541 {
00542 PostQuitMessage(0);
00543 return 0;
00544 }
00545 case WM_KEYDOWN:
00546 {
00547 keys[wParam] = TRUE;
00548 return 0;
00549 }
00550 case WM_KEYUP:
00551 {
00552 keys[wParam] = FALSE;
00553 return 0;
00554 }
00555 case WM_SIZE:
00556 {
00557 ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
00558 return 0;
00559 }
00560 }
00561
00562
00563 return DefWindowProc(hWnd,uMsg,wParam,lParam);
00564 }
00565
00566
00567
00568 int draw_graphics_init(datas *d)
00569 {
00570
00571
00572 if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
00573 {
00574 fullscreen=FALSE;
00575 }
00576
00577
00578 if (!CreateGLWindow("Hydroptere",640,480,16,fullscreen))
00579 {
00580 return 0;
00581 }
00582
00583
00584
00585 if (joystick_init()!=1)
00586 {
00587 printf("Can't initialize joystick");
00588 joystick_exist = 0;
00589 }
00590 else
00591 {
00592 joystick_exist = 1;
00593 }
00594
00595 return 1;
00596 }
00597
00598
00599 bool draw_graphics(datas *d)
00600 {
00601 float tempAngle;
00602
00603 if(!done)
00604 {
00605 if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
00606 {
00607 if (msg.message==WM_QUIT)
00608 {
00609 done=TRUE;
00610 }
00611 else
00612 {
00613 TranslateMessage(&msg);
00614 DispatchMessage(&msg);
00615 }
00616 }
00617 else
00618 {
00619
00620 if (active)
00621 {
00622 if (keys[VK_ESCAPE])
00623 {
00624 done=TRUE;
00625 }
00626 else
00627 {
00628
00629 DrawGLScene(d);
00630 SwapBuffers(hDC);
00631 }
00632 }
00633 if (keys[VK_F1])
00634 {
00635 keys[VK_F1]=FALSE;
00636 KillGLWindow();
00637 fullscreen=!fullscreen;
00638
00639 if (!CreateGLWindow("Hydroptere",640,480,16,fullscreen))
00640 {
00641 return FALSE;
00642 }
00643 }
00644 }
00645 }
00646
00647 if (keys['Q'])
00648 {
00649 viewAngle1 += dviewAngle;
00650 }
00651 if (keys['W'])
00652 {
00653 viewAngle1 -= dviewAngle;
00654 }
00655 if (keys['E'])
00656 {
00657 viewAngle2 += dviewAngle;
00658 }
00659 if (keys['R'])
00660 {
00661 viewAngle2 -= dviewAngle;
00662 }
00663 if (keys['T'])
00664 {
00665 viewDist += dviewDist;
00666 }
00667 if (keys['Z'])
00668 {
00669 viewDist -= dviewDist;
00670 }
00671
00672 if (keys['X'] && allowChangeDirX) {dirX*=-1.0f; allowChangeDirX = FALSE;}
00673 else if (!keys['X']) allowChangeDirX = TRUE;
00674
00675 if (keys['Y'] && allowChangeDirY) {dirY*=-1.0f; allowChangeDirY = FALSE;}
00676 else if (!keys['Y']) allowChangeDirY = TRUE;
00677
00678 if (keys['V'] && allowChangeDirZ) {dirZ*=-1.0f; allowChangeDirZ = FALSE;}
00679 else if (!keys['V']) allowChangeDirZ = TRUE;
00680
00681 if (keys['C'] && allowChangeDirR) {dirR*=-1.0f; allowChangeDirR = FALSE;}
00682 else if (!keys['C']) allowChangeDirR = TRUE;
00683
00684
00685 if (keys['1'] && allowChangeDoX) {doX=!doX; allowChangeDoX = FALSE;}
00686 else if (!keys['1']) allowChangeDoX = TRUE;
00687
00688 if (keys['2'] && allowChangeDoY) {doY=!doY; allowChangeDoY = FALSE;}
00689 else if (!keys['2']) allowChangeDoY = TRUE;
00690
00691 if (keys['3'] && allowChangeDoZ) {doZ=!doZ; allowChangeDoZ = FALSE;}
00692 else if (!keys['3']) allowChangeDoZ = TRUE;
00693
00694 if (keys['4'] && allowChangeDoR) {doR=!doR; allowChangeDoR = FALSE;}
00695 else if (!keys['4']) allowChangeDoR = TRUE;
00696
00697
00698
00699 time_elapsed = d->t - time_before;
00700
00701 if (keys[VK_UP] && d->target_y<1.0f) d->target_y += 1.5f*time_elapsed;
00702 if (keys[VK_DOWN] && d->target_y>-1.0f) d->target_y -= 1.5f*time_elapsed;
00703
00704 if (keys[VK_RIGHT] && d->target_x<1.0f) d->target_x += 1.5f*time_elapsed;
00705 if (keys[VK_LEFT] && d->target_x>-1.0f) d->target_x -= 1.5f*time_elapsed;
00706
00707 if (keys['M'] && d->Hslider_x<1.0f) d->Hslider_x += 1.5f*time_elapsed;
00708 if (keys['N'] && d->Hslider_x>-1.0f) d->Hslider_x -= 1.5f*time_elapsed;
00709
00710 if (keys['H'] && d->Vslider_x<1.0f) d->Vslider_x += 1.5f*time_elapsed;
00711 if (keys['B'] && d->Vslider_x>-1.0f) d->Vslider_x -= 1.5f*time_elapsed;
00712
00713 if (keys[VK_SPACE]) {d->target_x=0.0f; d->target_y=0.0; d->Hslider_x=0.0f; d->Vslider_x=0.0f;}
00714
00715
00716 if (keys['K'] && d->max_abs_angle_baume<1.4835f) {
00717 d->max_abs_angle_baume += 0.1745*time_elapsed;
00718 }
00719 if (keys['L'] && d->max_abs_angle_baume>0.0f) {
00720 d->max_abs_angle_baume -= 0.1745*time_elapsed;
00721 }
00722
00723 d->tanAngle_sail = tan(d->angle_girouette);
00724 if (atan(d->tanAngle_sail)>d->max_abs_angle_baume) d->tanAngle_sail=tan(d->max_abs_angle_baume);
00725 if (atan(d->tanAngle_sail)< -d->max_abs_angle_baume) d->tanAngle_sail=tan(-d->max_abs_angle_baume);
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739 if (keys['9']){
00740 d->Wind += 2.0f*time_elapsed;
00741 d->Wind_x = -d->Wind*cos(d->Wind_angle);
00742 d->Wind_y = -d->Wind*sin(d->Wind_angle);
00743 }
00744 if (keys['8'] && d->Wind>0){
00745 d->Wind -= 2.0f*time_elapsed;
00746 d->Wind_x = -d->Wind*cos(d->Wind_angle);
00747 d->Wind_y = -d->Wind*sin(d->Wind_angle);
00748 }
00749
00750
00751 if (keys['7']) {
00752 d->Wave_amp0 += 0.15f*time_elapsed;
00753 d->Wave_amp[0] = d->Wave_amp0/2.0;
00754 d->Wave_amp[1] = d->Wave_amp0/4.0;
00755 d->Wave_amp1 = d->Wave_amp[0];
00756 d->Wave_amp2 = d->Wave_amp[1];
00757 }
00758 if (keys['6'] && d->Wave_amp0>0.0f) {
00759 d->Wave_amp0 -= 0.15f*time_elapsed;
00760 d->Wave_amp[0] = d->Wave_amp0/2.0;
00761 d->Wave_amp[1] = d->Wave_amp0/4.0;
00762 d->Wave_amp1 = d->Wave_amp[0];
00763 d->Wave_amp2 = d->Wave_amp[1];
00764 }
00765
00766
00767 time_before = d->t;
00768
00769
00770 return (!done);
00771 }
00772
00773
00774 int draw_graphics_kill()
00775 {
00776
00777 KillGLWindow();
00778 done=FALSE;
00779
00780 joystick_close();
00781
00782 return (msg.wParam);
00783 }
00784
00785
00786
00787
00788 void pass_joy_parameters(joy_parameters *jP)
00789 {
00790 doX = jP->doX;
00791 doY = jP->doY;
00792 doZ = jP->doZ;
00793 doR = jP->doR;
00794
00795 dirX = jP->dirX;
00796 dirY = jP->dirY;
00797 dirZ = jP->dirZ;
00798 dirR = jP->dirR;
00799 }