#include "Globals.h" void InitMouse() { MouseOriginX = WINDOW_WIDTH / 2; MouseOriginY = WINDOW_WIDTH / 2; MouseCurrentX = MouseOriginX; MouseCurrentY = MouseOriginY; SetCursorPos(MouseOriginX, MouseOriginY); } void GetMouse(float* pXAxis, float *pYAxis, float sens) { POINT pt; GetCursorPos(&pt); MouseCurrentX = pt.x; MouseCurrentY = pt.y; *pXAxis = sens * ((float)(MouseCurrentX - MouseOriginX) / ((float)WINDOW_WIDTH / 2.0f)); *pYAxis = sens * ((float)(MouseCurrentY - MouseOriginY) / ((float)WINDOW_HEIGHT / 2.0f)); SetCursorPos(MouseOriginX, MouseOriginY); } void Game_Loop() { if( NULL == d3d_Device ) return; if (KEYDOWN(VK_ESCAPE)) { SendMessage(GameHandle, WM_CLOSE, 0,0); return; } if (KEYDOWN(VK_UP)) { g_SpeedForward = 1.0f; } if (KEYDOWN(VK_DOWN)) { g_SpeedForward = -1.0f; } if (KEYDOWN('A')) { g_Pitch += 1.0f; } if (KEYDOWN('D')) { g_Pitch -= 1.0f; } if (KEYDOWN('W')) { g_Roll += 1.0f; } if (KEYDOWN('S')) { g_Roll -= 1.0f; } if (KEYDOWN(VK_LEFT)) { g_Yaw -= 2.0f; } if (KEYDOWN(VK_RIGHT)) { g_Yaw += 2.0f; } if (KEYDOWN('C')) { g_SpeedStrafe = -1.0f; } if (KEYDOWN('V')) { g_SpeedStrafe = 1.0f; } float mouse_move_x, mouse_move_y; GetMouse(&mouse_move_x, &mouse_move_y, 50.0f); if (mouse_move_x) { g_Yaw += mouse_move_x; } if (mouse_move_y) { g_Pitch += mouse_move_y; } // set the perspective projection of the camera SetPerspectiveProjection(); // update the current camera view matrix UpdateCameraViewMatrix(); // Clear the backbuffer to a blue color d3d_Device->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100,100,255), 1.0f, 0 ); d3d_Device->SetFVF( D3DFVF_CUSTOMVERTEX ); d3d_Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); d3d_Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); d3d_Device->SetRenderState( D3DRS_LIGHTING, FALSE ); d3d_Device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE); // Begin the scene if( SUCCEEDED( d3d_Device->BeginScene() ) ) { d3d_Device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); for (int loop=0; loop0) { d3d_Device->SetTexture(0, pTextures[pQuad[loop].Texture-1]); d3d_Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); d3d_Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); } if (loop==5) { RotatePlaneY(loop); } pQuad[loop].Render(); } for (int loop1=0; loop10) { d3d_Device->SetTexture(0, pTextures[pCube[loop1].Texture-1]); d3d_Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); d3d_Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); } if (loop1==0) { RotatePlaneY1(loop1); } // pQuad[loop].Render(); pCube[loop1].Render(); } d3d_Device->SetTexture(0, NULL); // End the scene d3d_Device->EndScene(); } // Present the backbuffer contents to the display d3d_Device->Present( NULL, NULL, NULL, NULL ); } void SetPerspectiveProjection() { D3DXMATRIX m; D3DXMatrixPerspectiveFovLH(&m, D3DXToRadian(90.0f / 4 * 3), 1.0f, 1.0f, 16000.0f); d3d_Device->SetTransform(D3DTS_PROJECTION, &m); } void UpdateCameraViewMatrix() { D3DXMatrixRotationYawPitchRoll(&g_ViewMatrix, D3DXToRadian(g_Yaw), D3DXToRadian(g_Pitch), D3DXToRadian(g_Roll)); D3DXMATRIX v; D3DXMatrixTranspose(&v, &g_ViewMatrix); d3d_Device->SetTransform(D3DTS_VIEW, &v); D3DXVECTOR3 forward; forward.x = g_ViewMatrix._31; forward.y = g_ViewMatrix._32; forward.z = g_ViewMatrix._33; D3DXVec3Scale(&forward, &forward, g_SpeedForward); D3DXVECTOR3 right; right.x = g_ViewMatrix._11; right.y = g_ViewMatrix._12; right.z = g_ViewMatrix._13; D3DXVec3Scale(&right, &right, g_SpeedStrafe); g_SpeedForward = 0.0f; g_SpeedStrafe = 0.0f; D3DXVECTOR3 movement; D3DXVec3Add(&movement, &forward, &right); D3DXVec3Add(&g_Pos, &g_Pos, &movement); D3DXMATRIX t; D3DXMatrixTranslation(&t, -g_Pos.x, -g_Pos.y, -g_Pos.z); d3d_Device->SetTransform(D3DTS_WORLD, &t); } void RotatePlaneY(int PlaneNum) { D3DXVECTOR4 coords; D3DXVECTOR3 temp; D3DXMATRIX rotY; D3DXMatrixRotationY(&rotY,0.15f); for (int loop=0; loop<4; loop++) { temp.x=pQuad[PlaneNum].m_Verts[loop].point.x; temp.y=pQuad[PlaneNum].m_Verts[loop].point.y; temp.z=pQuad[PlaneNum].m_Verts[loop].point.z-260; D3DXVec3Transform(&coords,&temp,&rotY); pQuad[PlaneNum].m_Verts[loop].point.x=coords.x; pQuad[PlaneNum].m_Verts[loop].point.y=coords.y; pQuad[PlaneNum].m_Verts[loop].point.z=coords.z+260; } } void RotatePlaneY1(int PlaneNum) { D3DXVECTOR4 coords; D3DXVECTOR3 temp; D3DXMATRIX rotY; D3DXMatrixRotationY(&rotY,0.15f); for (int loop=0; loop<24; loop++) { temp.x=pCube[PlaneNum].m_Verts1[loop].point.x-55; temp.y=pCube[PlaneNum].m_Verts1[loop].point.y-55; temp.z=pCube[PlaneNum].m_Verts1[loop].point.z-200; D3DXVec3Transform(&coords,&temp,&rotY); pCube[PlaneNum].m_Verts1[loop].point.x=coords.x+55; pCube[PlaneNum].m_Verts1[loop].point.y=coords.y+55; pCube[PlaneNum].m_Verts1[loop].point.z=coords.z+200; } } void ReadFile() { float tlx,tly,tlz,tlu,tlv; int tlcr,tlcg,tlcb,tlca; float trx,tr_y,trz,tru,trv; int trcr,trcg,trcb,trca; float brx,bry,brz,bru,brv; int brcr,brcg,brcb,brca; float blx,bly,blz,blu,blv; int blcr,blcg,blcb,blca; int text; //cube vars float cube_x, cube_y, cube_z; float cube_w, cube_l, cube_h; char instring[60]; ifstream data("gamedata.info"); // Read initial 3 lines and discard data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); data.getline(instring,60,'<'); NumTextures = atoi(instring); data.getline(instring,60,'\n'); pTextures = new LPDIRECT3DTEXTURE9[NumTextures]; for (int loop=0; loop'); data.getline(instring,60,'<'); //D3DXCreateTextureFromFile(d3d_Device, instring, &pTexture); D3DXCreateTextureFromFileEx(d3d_Device, instring, 0, 0, 0, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &pTexture); pTextures[loop]=pTexture; data.getline(instring,60,'\n'); } data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); // Read in number if Triangles to be rendered, store in NumTris data.getline(instring,60,'='); data.getline(instring,60,'\n'); NumQuads=atoi(instring); // Declare array to hold tris pQuad = new Wall[NumQuads]; // Loop to read in all triangles for (loop=0; loop'); //3 verts data.getline(instring,60,','); tlx = (float)atof(instring); data.getline(instring,60,','); tly = (float)atof(instring); data.getline(instring,60,'<'); tlz = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //4 colours data.getline(instring,60,','); tlcr = atoi(instring); data.getline(instring,60,','); tlcg = atoi(instring); data.getline(instring,60,','); tlcb = atoi(instring); data.getline(instring,60,'<'); tlca = atoi(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //2 uv values data.getline(instring,60,','); tlu = (float)atof(instring); data.getline(instring,60,'<'); tlv = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //3 verts data.getline(instring,60,','); trx = (float)atof(instring); data.getline(instring,60,','); tr_y = (float)atof(instring); data.getline(instring,60,'<'); trz = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //4 colours data.getline(instring,60,','); trcr = atoi(instring); data.getline(instring,60,','); trcg = atoi(instring); data.getline(instring,60,','); trcb = atoi(instring); data.getline(instring,60,'<'); trca = atoi(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //2 uv values data.getline(instring,60,','); tru = (float)atof(instring); data.getline(instring,60,'<'); trv = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //3 verts data.getline(instring,60,','); brx = (float)atof(instring); data.getline(instring,60,','); bry = (float)atof(instring); data.getline(instring,60,'<'); brz = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //4 colours data.getline(instring,60,','); brcr = atoi(instring); data.getline(instring,60,','); brcg = atoi(instring); data.getline(instring,60,','); brcb = atoi(instring); data.getline(instring,60,'<'); brca = atoi(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //2 uv values data.getline(instring,60,','); bru = (float)atof(instring); data.getline(instring,60,'<'); brv = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //3 verts data.getline(instring,60,','); blx = (float)atof(instring); data.getline(instring,60,','); bly = (float)atof(instring); data.getline(instring,60,'<'); blz = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //4 colours data.getline(instring,60,','); blcr = atoi(instring); data.getline(instring,60,','); blcg = atoi(instring); data.getline(instring,60,','); blcb = atoi(instring); data.getline(instring,60,'<'); blca = atoi(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'>'); //2 uv values data.getline(instring,60,','); blu = (float)atof(instring); data.getline(instring,60,'<'); blv = (float)atof(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); //Texture data.getline(instring,60,'>'); data.getline(instring,60,'<'); text = atoi(instring); data.getline(instring,60,'\n'); pQuad[loop]=Wall(tlx,tly,tlz,D3DCOLOR_RGBA(tlcr,tlcg,tlcb,tlca),tlu,tlv, trx,tr_y,trz,D3DCOLOR_RGBA(trcr,trcg,trcb,trca),tru,trv, brx,bry,brz,D3DCOLOR_RGBA(brcr,brcg,brcb,brca),bru,brv, blx,bly,blz,D3DCOLOR_RGBA(blcr,blcg,blcb,blca),blu,blv,text); } // Read How many cubes to be rendered, store in cube data.getline(instring,60,'\n'); data.getline(instring,60,'='); data.getline(instring,60,'\n'); cubenumber=atoi(instring); data.getline(instring,60,'\n'); // Declare array to hold tris pCube = new Cuboid[cubenumber]; for (loop=0; loop'); data.getline(instring,60,'<'); cube_x = atof(instring); data.getline(instring,60,'\n'); //Y data.getline(instring,60,'>'); data.getline(instring,60,'<'); cube_y = atof(instring); data.getline(instring,60,'\n'); //Z data.getline(instring,60,'>'); data.getline(instring,60,'<'); cube_z = atof(instring); data.getline(instring,60,'\n'); //Width data.getline(instring,60,'>'); data.getline(instring,60,'<'); cube_w = atof(instring); data.getline(instring,60,'\n'); //Length data.getline(instring,60,'>'); data.getline(instring,60,'<'); cube_l = atof(instring); data.getline(instring,60,'\n'); //Height data.getline(instring,60,'>'); data.getline(instring,60,'<'); cube_h = atof(instring); data.getline(instring,60,'\n'); //Texture data.getline(instring,60,'\n'); data.getline(instring,60,'>'); data.getline(instring,60,'<'); text = atoi(instring); data.getline(instring,60,'\n'); data.getline(instring,60,'\n'); pCube[loop]=Cuboid(cube_x,cube_y,cube_z, cube_l,cube_w,cube_h, text); } data.close(); /*sprintf(instring,"%d",NumTris); MessageBox(GameHandle,instring,"Error",MB_OK);*/ InitMouse(); }