rendered paste body#include <windows.h>#include <gl/gl.h>#include <math.h>#include "CoordinateSystem.h"int mouse_x, mouse_y;/************************** * Function Declarations * **************************/LRESULT CALLBACK WndProc (HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam);void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);void EnableSDL ();/************************** * WinMain * **************************/int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow){ WNDCLASS wc; HWND hWnd; HDC hDC; HGLRC hRC; MSG msg; BOOL bQuit = FALSE; float theta = 0.0f; /* register window class */ wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "GLSample"; RegisterClass (&wc); /* create main window */ hWnd = CreateWindow ("GLSample","MirFly",WS_CAPTION|WS_POPUPWINDOW|WS_VISIBLE,64,64,600,600,NULL,NULL,hInstance,NULL); /* enable OpenGL for the window */ EnableOpenGL (hWnd, &hDC, &hRC); /*Declaring Moving object*/ SpaceShip Player; //Sets triangle Angle Player.Triangle.Angle = 0; //Sets triangle dislocation Player.Triangle.DisXY.X = 0; Player.Triangle.DisXY.Y = 0; //Sets color for each of triangles corners Player.Triangle.A.RGB.R = 0.9f; Player.Triangle.A.RGB.G = 0.0f; Player.Triangle.A.RGB.B = 0.0f; Player.Triangle.B.RGB.R = 0.005f; Player.Triangle.B.RGB.G = 0.0f; Player.Triangle.B.RGB.B = 0.0f; Player.Triangle.C.RGB.R = 0.005f; Player.Triangle.C.RGB.G = 0.0f; Player.Triangle.C.RGB.B = 0.0f; //Sets location for each of triangles corners Player.Triangle.A.XY.X = 0.0f; Player.Triangle.A.XY.Y = 0.0433f; Player.Triangle.B.XY.X = 0.05f; Player.Triangle.B.XY.Y = -0.04375f; Player.Triangle.C.XY.X = -0.05f; Player.Triangle.C.XY.Y = -0.04375f; //Sets Speeds of ship Player.TurningSpeed = 3; Player.MovingSpeed = 0.02f; //Sets Missile You need to delete once like donezor Missile PlayerMissile; PlayerMissile.MissileExcists = false; /* program main loop */ while (!bQuit) { /* check for messages */ if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) { /* handle or dispatch messages */ if (msg.message == WM_QUIT) { bQuit = TRUE; } else { TranslateMessage (&msg); DispatchMessage (&msg); } } else { Player.Move (); if (PlayerMissile.MissileExcists == true) { PlayerMissile.SetTarget ( mouse_x, mouse_y, 600, 600); PlayerMissile.Move (); } PlayerMissile = Player.Fire (PlayerMissile); /* OpenGL animation code goes here */ glClearColor (0.0f, 0.0f, 0.0f, 0.0f); glClear (GL_COLOR_BUFFER_BIT); if (PlayerMissile.MissileExcists == true) { PlayerMissile.Triangle.Draw (); } Player.Triangle.Draw (); SwapBuffers (hDC); //Sleep (1); } } /* shutdown OpenGL */ DisableOpenGL (hWnd, hDC, hRC); /* destroy the window explicitly */ DestroyWindow (hWnd); return msg.wParam;}/******************** * Window Procedure * ********************/LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message) { case WM_CREATE: return 0; case WM_CLOSE: PostQuitMessage (0); return 0; case WM_DESTROY: return 0; case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: PostQuitMessage (0); return 0; } return 0; case WM_MOUSEMOVE: mouse_x = GET_X_LPARAM(lParam); mouse_y = GET_Y_LPARAM(lParam); return 0; default: return DefWindowProc (hWnd, message, wParam, lParam); }}//Enables OpenGLvoid EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC){ PIXELFORMATDESCRIPTOR pfd; int iFormat; /* get the device context (DC) */ *hDC = GetDC (hWnd); /* set the pixel format for the DC */ ZeroMemory (&pfd, sizeof (pfd)); pfd.nSize = sizeof (pfd); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat (*hDC, &pfd); SetPixelFormat (*hDC, iFormat, &pfd); /* create and enable the render context (RC) */ *hRC = wglCreateContext ( *hDC ); wglMakeCurrent ( *hDC, *hRC );}//Disables OpenGLvoid DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC){ wglMakeCurrent (NULL, NULL); wglDeleteContext (hRC); ReleaseDC (hWnd, hDC);}//Calculates the amount of time taken/*int FrameRateCalc(int PreviousTime){ int CurrentTime = GetTickCount(); int TimeTaken = CurrentTime - PreviousTime; if(!TimeTaken) //FPS over 1000 { //Print FPS > 1000 } else { //PRINT FPS } return CurrentTime}*/