rendered paste body#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; loop<NumQuads; loop++)
{
if (pQuad[loop].Texture >0)
{
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; loop1<cubenumber; loop1++)
{
if (pCube[loop1].Texture >0)
{
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<NumTextures; loop++)
{
data.getline(instring,60,'>');
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<NumQuads; loop++)
{
data.getline(instring,60,'\n');
data.getline(instring,60,'\n');
data.getline(instring,60,'\n');
data.getline(instring,60,'>'); //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<cubenumber; loop++)
{
//X
//data.getline(instring,60,'\n');
data.getline(instring,60,'>');
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();
}