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

📄 walking.cpp

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

#include "StdAfx.h"

CWalking::CWalking(D3DXVECTOR3 *pPos, D3DXVECTOR3 *pvDir, float *Speed)
{
	m_type			= Walking;
	m_pvPos			= pPos;
	m_pvDir			= pvDir;
	m_pSpeed		= Speed;
	m_dwLastTime	= timeGetTime();
	m_dwCurTime		= 0;
	m_dwAccTime		= 0;
	m_dwMoveTime	= 500;
	m_bHorizontal	= false;
	m_fResistance	= 0;
	m_vOffset		= D3DXVECTOR3(0,0,0);
}

CWalking::~CWalking()
{
}

BOOL CWalking::MoveUp(PICKING *pRay)
{
/*	// 臭捞啊 乐栏搁 棵扼啊扁.
	// 伙阿屈捞 绝促搁 酒贰肺 冻备扁.
	if( pRay[RAY_DOWN].Dist < 10000.0f)
	{
		D3DXVECTOR3 vPos = m_pLower->GetPosVector();

		if( fabs(vPos.y-pRay[RAY_DOWN].vIntersectPt.y) > 2.0f )	// 2 捞惑 瞒捞唱搁 冻绢廉具窃
			return FALSE;
		else 
		{ vPos.y = pRay[RAY_DOWN].vIntersectPt.y; }

		m_pLower->Translation(&vPos,TRUE);

		return TRUE;
	}*/

	return FALSE;
}

float CWalking::MoveUp(INTERSECT *pInter)
{
	D3DXVECTOR3 vN = m_pSphere->vCenter-pInter->vInterPt;
	float Angle = CUtility::SectorV1ToV2(&D3DXVECTOR3(0,1,0),&vN);

	CUtility::printf_Debug("\nAngle:%f",Angle);
	CUtility::printf_Debug("\nvN:%f, %f, %f",vN.x,vN.y,vN.z);
	CUtility::printf_Debug("\nInter:%f, %f, %f",pInter->vInterPt.x,pInter->vInterPt.y,pInter->vInterPt.z);
/*	CUtility::printf_Debug("\nvPos:%f, %f, %f\n",vObjectPos.x,vObjectPos.y,vObjectPos.z);*/

	if( Angle < D3DX_PI/4 )	// 180/3 = 60档 -> 扼叼救 窜困捞骨肺 3.141592/3 = 1.04719...
	{
		return pInter->vInterPt.y;
	}
	return 0;

	/*D3DXVECTOR3 vN = pInter->vInterPt-m_pSphere->vCenter;
	float Angle = CUtility::SectorV1ToV2(&vN,&(-pInter->vN));

	if( Angle < D3DX_PI/2 )
	{
		return pInter->vInterPt.y;
	}	D3DXVECTOR3 vN = m_pSphere->vCenter-pInter->vInterPt;
	vN += m_pSphere->vCenter-m_pLower->GetPosVector();

	vN/=2;

	/*D3DXVECTOR3 vN = m_pSphere->vCenter - pInter->vInterPt;
	float Angle = CUtility::SectorV1ToV2(&vN,&(-pInter->vN));

	if( Angle < D3DX_PI/4 )	// 棵扼啊扁
	{
		return pInter->vInterPt.y;
	}
	else	// 固掺矾瘤扁
	{
	}*/
/*
	float UpAngle = CUtility::SectorV1ToV2(&D3DXVECTOR3(0,1,0),&(-pInter->vN));	// vN阑 开栏肺 父甸绢辑 结具窃.
	if( UpAngle < D3DX_PI/3 )	// 180/3 = 60档 -> 扼叼救 窜困捞骨肺 3.141592/3 = 1.04719...
	{
		return pInter->vInterPt.y;
	}
	
	/*D3DXVECTOR3 vDir;
	D3DXVec3Normalize(&vDir,m_pvDir);
	float UpAngle = CUtility::SectorV1ToV2(&vDir,&(-pInter->vN));	// vN阑 开栏肺 父甸绢辑 结具窃.

	float pi4 = D3DX_PI/4;

	if( UpAngle > D3DX_PI/2 && UpAngle < D3DX_PI-pi4 )	// 180/3 = 60档 -> 扼叼救 窜困捞骨肺 3.141592/3 = 1.04719...
	{
		return pInter->vInterPt.y;
	}*/
}

bool CWalking::MoveCollision(CCollision *pCol, float *pHeight)
{
	//-------------------------------------------------------//
	// + 抗惑登绰 滚弊(惯斑等 滚弊)
	// 1. 版荤搁阑 坷福搁辑 寒俊 何调煤阑锭-> 浇扼捞爹 加档啊 弧扼咙.
	//	..棵扼啊绰 加档 + 寒 浇扼捞爹加档 = 弥辆加档啊 登绰淀窃.
	// 2. pi/4 阿档 焊促 歹 累阑锭 烹烹 脾绰 滚弊 -> 捞 沥档绰 公矫秦拎档..
	//	..唱吝俊 粱 歹 沥剐茄 面倒规过栏肺 秦搬秦焊磊.
	//-------------------------------------------------------
	// + 面倒 八荤俊 措茄 措救 舅绊府硫
	// 1. 矫埃捞 甸绢埃 八荤 / 矫埃俊 蝶弗 沥犬茄 背痢阑 茫绰促.
	// 2. 飘府甫 捞侩茄 规过 / 弃府帮阑 老沥茄 扁霖栏肺 OBBTree甫 父电促. 
	// Ζ> 畴钢蔼苞, 局概茄 扁霖捞 巩力
	//--------------------------------------------------------//

	bool bDown = false;
	// 备甫 积己窍绊 面倒阑 八荤
	DWORD dwSize = CMovement::Collision(pCol);

	if( dwSize )
	{
		// 吝缴痢俊辑 啊厘 啊鳖款 背痢阑 茫绰促.
		INTERSECT tagMin = m_pInter[0];		// 窍窜阑 力寇茄 啊厘 累篮 巴捞 历厘凳~
		INTERSECT tagDownMin = m_pInter[0];	// 窍窜俊辑 积扁绰 背痢 吝俊 啊厘 累篮巴
		
		for(int i=0; i<dwSize; ++i)
		{
			float Len = D3DXVec3Length(&(m_pInter[i].vInterPt-m_pSphere->vCenter));

			D3DXVECTOR3 vN = m_pSphere->vCenter-m_pInter[i].vInterPt;
			float Angle = CUtility::SectorV1ToV2(&D3DXVECTOR3(0,1,0),&vN);
			if( Angle < D3DX_PI/4 )
			{
				if( D3DXVec3Length(&(tagDownMin.vInterPt-m_pSphere->vCenter)) >= Len )
				{
					bDown=true;
					tagDownMin = m_pInter[i];
				}
			}
			// 啊鳖款 背痢阑 茫绰促.
			else if( D3DXVec3Length(&(tagMin.vInterPt-m_pSphere->vCenter)) > Len )
			{
				tagMin = m_pInter[i];
			}
		}//end for

		D3DXVECTOR3 vDir;
		D3DXVec3Normalize(&vDir,m_pvDir);
		if( !this->MoveHor(vDir,m_pSphere->vCenter,tagMin.vInterPt))	// 荐乞
		{
			this->MoveHor(D3DXVECTOR3(0,-1,0),m_pSphere->vCenter,tagMin.vInterPt);
		}

		if(bDown)
		{
			(*pHeight) = tagDownMin.vInterPt.y; //this->MoveUp(&tagDownMin);	// 棵扼啊扁
		}
	}//end if

	return bDown;
}

bool CWalking::MoveHor(D3DXVECTOR3 &vDir, D3DXVECTOR3 &vCenter, D3DXVECTOR3 &vInterPt)
{	
	// 乞搁阑 父电促~
	D3DXPLANE plane;
	D3DXPlaneFromPointNormal(&plane,&vCenter,&vDir);	// 吝缴痢俊辑 框流咯具且 规氢阑 啊瘤绰 乞搁阑 父惦
	if( D3DXPlaneDotCoord(&plane,&vInterPt) > 0 )	// 背痢捞 捞 乞搁俊 菊率俊 乐促搁, 荐乞框流烙阑 茄促.
	{
		D3DXVECTOR3 vN;
		D3DXVec3Normalize(&vN,&(vCenter-vInterPt));	// 啊厘 累篮 背痢俊辑 吝缴痢栏肺 啊绰 归磐甫 畴钢蔼栏肺 敬促.

		float Dist = fabs( (*m_pSpeed) - m_fResistance );
		(*m_pvDir) = CUtility::Hypotenuse(vN,(*m_pvDir),Dist);
		m_bHorizontal = true;

	//	CUtility::printf_Debug("\nm_pvDir : %f, %f, %f",m_pvDir->x,m_pvDir->y,m_pvDir->z);
	}

	return m_bHorizontal;
}

bool CWalking::MoveHor(CCollision *pCol, float *pHeight)
{
/*	D3DXVECTOR3 vDir;
	D3DXVec3Normalize(&vDir,m_pvDir);
	
	m_bHorizontal = false;	
	
	D3DXVECTOR3 vCenter;
	float fR;
	m_pLower->GetBoxCenter(&vCenter,&fR);

	// 备啊 局聪概捞记俊 规秦 罐瘤 臼扁 困秦辑
	fR = 0.5f;
	vCenter.x = m_pLower->GetPosVector().x;
	vCenter.z = m_pLower->GetPosVector().z;

	INTERSECT *pIn=NULL;
	DWORD dwSize = pCol->TriangleToSphere(vCenter,fR,&pIn);

	if( dwSize )
	{		
		// 吝缴痢俊辑 啊厘 啊鳖款 背痢阑 茫绰促.
		INTERSECT Temp=pIn[0];	// Temp俊 啊厘 累篮 巴捞 历厘凳~

		for(int i=0; i<dwSize; ++i)
		{
			if( D3DXVec3Length(&(Temp.vInterPt-vCenter)) > D3DXVec3Length(&(pIn[i].vInterPt-vCenter)))	// 酒聪扼搁 俩 啊鳖款 背痢阑 茫绰促.
			{
				Temp = pIn[i];
			}
		}//end for

	/*	D3DXPLANE p;
		D3DXPlaneFromPointNormal(&p,&vCenter,&D3DXVECTOR3(0,-1,0));	// 吝缴痢俊辑 框流咯具且 规氢阑 啊瘤绰 乞搁阑 父惦

		if( D3DXPlaneDotCoord(&p,&Temp.vInterPt) > 0 )
		{
			(*pHeight) = Temp.vInterPt.y;
		}

	//	D3DXVECTOR3 vDir2 = (Temp.vInterPt-vCenter);	// 季磐俊辑 背痢栏肺 氢窍绰 规氢阑 父惦
	//	D3DXVECTOR3 vCross;
	//	D3DXVec3Cross(&vCross,&D3DXVECTOR3(0,1,0),&vDir2);
		
	//	float Angle = CUtility::SectorV1ToV2(&vCross,&vDir2);	// 阿档甫 备茄促.
		
	//	float pi4 = D3DX_PI/4;	// pi甫 4俺肺 律暗促.
	//	if( Angle > pi4 && Angle < D3DX_PI - pi4 )	// 备茄 阿档啊 裹困 救俊 乐促搁
	//	{
	//		(*pHeight) = Temp.vInterPt.y;
	//	}
		
		float UpAngle = CUtility::SectorV1ToV2(&D3DXVECTOR3(0,1,0),&(-Temp.vN));	// vN阑 开栏肺 父甸绢辑 结具窃.
		if( UpAngle < D3DX_PI/3 )	// 180/3 = 60档 -> 扼叼救 窜困捞骨肺 3.141592/3 = 1.04719...
		{		
			(*pHeight) = Temp.vInterPt.y;
		}
		
		// 乞搁阑 父电促~
		D3DXPLANE plane;
		D3DXPlaneFromPointNormal(&plane,&vCenter,&vDir);	// 吝缴痢俊辑 框流咯具且 规氢阑 啊瘤绰 乞搁阑 父惦
		if( D3DXPlaneDotCoord(&plane,&Temp.vInterPt) > 0 )	// 背痢捞 捞 乞搁俊 菊率俊 乐促搁, 荐乞框流烙阑 茄促.
		{
			D3DXVECTOR3 vN;
			D3DXVec3Normalize(&vN,&(vCenter-Temp.vInterPt));	// 啊厘 累篮 背痢俊辑 吝缴痢栏肺 啊绰 归磐甫 畴钢蔼栏肺 敬促.
			
			// 加档 拌魂 = V = 规氢氦磐 * |捞悼樊|  : 捞悼樊俊 -啊 甸绢哎 版快 馆措肺 框流捞霸 凳..
			D3DXVECTOR3 V;
			D3DXVec3Normalize(&V,m_pvDir);
			
			float Dist = (*m_pSpeed) - m_fResistance;
			V *= fabs(Dist);
			
			// 荐乞急盒 拌魂 = V - (V

⌨️ 快捷键说明

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