⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basebuildobject.cpp

📁 国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国内还没有,所以找不到测试
💻 CPP
字号:
// BaseBuildObject.cpp: implementation of the CBaseBuildObject class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "BaseBuildObject.h"

#include "MCShadowObject.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBaseBuildObject::CBaseBuildObject()
{
	m_pObject = NULL;

	m_nBreak = 0;

	m_nCurFrame		= 0;

	m_vLook		= D3DXVECTOR3(0.0f,0.0f,1.0f);
	m_vRight	= D3DXVECTOR3(1.0f,0.0f,0.0f);
	m_vUp		= D3DXVECTOR3(0.0f,1.0f,0.0f);
	
	D3DXQuaternionIdentity(&m_quateRotate);
	D3DXMatrixIdentity(&m_matWorld);
	D3DXMatrixIdentity(&m_matScale);
	D3DXMatrixIdentity(&m_matTrans);

	D3DXMatrixIdentity(&m_matWorldShw);

	m_pShadowObject = NULL;
//	m_pBlendObject = NULL;
}

CBaseBuildObject::~CBaseBuildObject()
{
	SAFE_DELETE( m_pShadowObject );
//	SAFE_DELETE( m_pBlendObject );
}

HRESULT CBaseBuildObject::CreateShadowMesh( const char * szFileName )
{
	if(!szFileName)		// Default Setting
		return E_FAIL;

	HANDLE hFile = INVALID_HANDLE_VALUE;
	hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if(hFile == INVALID_HANDLE_VALUE)
		return E_FAIL;

	if(m_pShadowObject)
		int cde = 0;
	SAFE_DELETE( m_pShadowObject );

	m_pShadowObject = new CMCShadowObject;
	if( m_pShadowObject == NULL )
		return E_FAIL;

	DWORD dwSize = 0;

	int iTexCount;
	ReadFile( hFile, &m_pShadowObject->m_nVertexCount, sizeof(int), &dwSize, NULL);
	ReadFile( hFile, &m_pShadowObject->m_nFaceCount, sizeof(int), &dwSize, NULL);
	ReadFile( hFile, &iTexCount, sizeof(int), &dwSize, NULL);

	m_pShadowObject->m_pVertex = new MCFVFSHADOWVERTEX[m_pShadowObject->m_nVertexCount];

	for(int j=0;j<m_pShadowObject->m_nVertexCount;j++)
	{
		float fVertex[3] = {0};
		float fNomal[3] = {0};
	
		ReadFile( hFile, fVertex, sizeof(float)*3, &dwSize, NULL);
//		ReadFile(hFile, fNomal, sizeof(float)*3,&dwSize, NULL );
		for(int i=0;i<3;i++)
		{
			int iValue = (int)(fVertex[i]*64.0f);
			fNomal[i] = (float)iValue/64.0f;
		}
		
		m_pShadowObject->m_pVertex[j].vVector.x = fNomal[0];
		m_pShadowObject->m_pVertex[j].vVector.y = fNomal[1];
		m_pShadowObject->m_pVertex[j].vVector.z = fNomal[2];
		//m_pShadowObject->m_pVertex[j].vVector = fVertex;
	}

	m_pShadowObject->m_pFace = new WORD[m_pShadowObject->m_nFaceCount*3];
	for(j=0;j<m_pShadowObject->m_nFaceCount*3;j++)
	{
		DWORD dwFace;
		ReadFile(hFile, &dwFace, sizeof(DWORD),&dwSize,NULL );
		m_pShadowObject->m_pFace[j] = (WORD)dwFace;
	}

	if(iTexCount)
	{
		for(j=0;j<iTexCount;j++)
		{
			if(!g_pApp->GetTexManager())
				return E_FAIL;

			MCTEXTURE * pTexture = new MCTEXTURE;
			
			char szTexName[68] = {0};
			char szTexPath[256] = {0};
			
			int nTexClass = 0;
			int nTexSub = 0;
			int nTexType = 0;
			int nMapChannel = 0;
			float fTexUOffset = 0.0f;
			float fTexVOffset = 0.0f;
			float fTexUScale = 0.0f;
			float fTexVScale = 0.0f;
			float fTexUAng = 0.0f;
			float fTexVAng = 0.0f;
			float fTexWAng = 0.0f;
			
			ReadFile(hFile, &nTexClass, sizeof(int),&dwSize,NULL );
			ReadFile(hFile, &nTexSub, sizeof(int),&dwSize,NULL );
			ReadFile(hFile, &nTexType, sizeof(int),&dwSize,NULL );
			ReadFile(hFile, &nMapChannel, sizeof(int),&dwSize,NULL );
			ReadFile(hFile, &fTexUOffset, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fTexVOffset, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fTexUScale, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fTexVScale, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fTexUAng, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fTexVAng, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fTexWAng, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, szTexName, sizeof(szTexName),&dwSize,NULL );

			char szNameBuf[256] = {0};
			strcpy(szNameBuf,szFileName);
			
			CUtility::GetDirPath( szNameBuf, szTexPath, NULL, NULL );
			
			sprintf(pTexture->szTextureName,"%s%s",szTexPath,szTexName);
			
			MCTEXTURE * pTex = NULL;

			if( nTexClass == ID_LM ) 
			{
//				sprintf(pTexture->szTextureName,"%saa.jpg",szTexPath);
				pTex = g_pApp->GetTexManager()->AddTexture( pTexture );
			}
				
			
			if( pTex != pTexture ) SAFE_DELETE(pTexture);
			if(!pTex)
			{
				if( nTexClass == ID_LM )
					CUtility::printf_Debug("\n[角菩] 扼捞飘甘(%s::)",szFileName,szTexName);
				
				SAFE_DELETE( pTexture );
			}

			if( pTex )
			{
				m_pShadowObject->m_pTexture = pTex;		// 窍唱狼 坷宏璃飘绰 窍唱狼 扼捞飘甘父 啊瘤备 乐促备 痹沥 秦初疽促....  备贰辑 老纳 秦滴 达..
				//break;		// 榴措 捞逞 靖 救达. 哩厘擎擎擎..
			}
		}

		for(j=0;j<m_pShadowObject->m_nVertexCount;j++)
		{
			DWORD nTexSub;
			float fX = 0;
			float fY = 0;
			ReadFile(hFile, &nTexSub, sizeof(DWORD),&dwSize,NULL );
			ReadFile(hFile, &fX, sizeof(float),&dwSize,NULL );
			ReadFile(hFile, &fY, sizeof(float),&dwSize,NULL );

			m_pShadowObject->m_pVertex[j].Tex.x = fX;
			m_pShadowObject->m_pVertex[j].Tex.y = fY;
		}
	}

	CloseHandle(hFile);

	// 滚咆胶 官操绰 镑..

	m_pShadowObject->CreateVIB();

	return S_OK;
}

void CBaseBuildObject::Translation(D3DXVECTOR3 *pPos,BOOL bChange)
{
	if(bChange)
		D3DXMatrixTranslation(&m_matTrans,pPos->x,pPos->y,pPos->z);
	else
	{
		D3DXMATRIX matTrans;
		D3DXMatrixTranslation(&matTrans,pPos->x,pPos->y,pPos->z);
		D3DXMatrixMultiply(&m_matTrans,&m_matTrans,&matTrans);
	}
}

void CBaseBuildObject::RotateAxis(D3DXVECTOR3 *vAxis,float Angle, BOOL bChange)
{
	D3DXQUATERNION qRot;
	D3DXQuaternionRotationAxis(&qRot,vAxis,Angle); // 孽磐聪柯 雀傈
	D3DXQuaternionNormalize(&qRot,&qRot);

	if(bChange) this->ReSetRotation();

	D3DXQuaternionMultiply(&m_quateRotate,&m_quateRotate,&qRot);	// 雀傈蔼阑 阶酒狄

	CUtility::QuaternionRotateVector(qRot,&m_vLook);
	CUtility::QuaternionRotateVector(qRot,&m_vRight);
	CUtility::QuaternionRotateVector(qRot,&m_vUp);

	D3DXVec3Normalize(&m_vLook,&m_vLook);
	D3DXVec3Normalize(&m_vRight,&m_vRight);
	D3DXVec3Normalize(&m_vUp,&m_vUp);
}

void CBaseBuildObject::ReSetWorldMat()
{
	m_quateResult = m_quateRotate;
	D3DXMATRIX matRotate;
	D3DXMatrixRotationQuaternion(&matRotate,&m_quateResult);	// 概飘腐胶肺
	m_matWorld = m_matScale * matRotate * m_matTrans;
}

void CBaseBuildObject::Render()
{
//	ReSetWorldMat();

	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	
	m_pObject->Render(m_nCurFrame);
	m_pObject->RenderColMesh(m_nCurFrame);
}


void CBaseBuildObject::RenderEx()
{
//	ReSetWorldMat();
	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	
	m_pObject->Render(m_nCurFrame);
}

void CBaseBuildObject::RenderExTest()
{
	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	
	m_pObject->RenderEx( m_matWorld, m_nCurFrame );
}

void CBaseBuildObject::ColMeshRenderEx()
{
	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	m_pObject->RenderColMesh(m_nCurFrame);
}

void CBaseBuildObject::BBoxRender()
{
	m_pObject->BoundingBoxRender(m_nCurFrame,m_matWorld);
}

void CBaseBuildObject::ShadowRender()
{
	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	if(m_pShadowObject) 
		m_pShadowObject->Render();
}

void CBaseBuildObject::RenderAlphaTex()
{
	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	m_pObject->RenderAlphaEx( m_matWorld, m_nCurFrame );
}

void CBaseBuildObject::RenderDecal()
{
	g_pApp->GetD3dDevice()->SetTransform(D3DTS_WORLD,&m_matWorld);
	m_pObject->RenderDecalEx( m_matWorld, m_nCurFrame );
}

BOOL CBaseBuildObject::CheckCollision( D3DXVECTOR3 vOrg, D3DXVECTOR3 * vDir, 
									FLOAT fTargetDist, FLOAT * fDist , D3DXVECTOR3 * vCollPos )
{
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -