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

📄 game_chars.cpp

📁 这是一个服务端/客户端模式的小型网络游戏
💻 CPP
字号:
#include "Game_Chars.h"

#include "Global.h"
#include "WinMain.h"
///////////////////////////////////////////////////////////
// Overloaded character controller class functions
///////////////////////////////////////////////////////////
BOOL cChars::SetData(cApp *App)
{
	if((m_App = App) == FALSE)
		return FALSE;
	return TRUE;
}

BOOL cChars::PCUpdate(sCharacter *Character, long Elapsed,    \
					  float *XMove, float *YMove, float *ZMove)
{
	
	float Speed;
	if(Character->Action == CHAR_MOVE ){
		Speed = (float)Elapsed / 1000.0f * GetSpeed(Character);
		
		// Get the input flags
		
		*XMove = (float)sin(Character->Direction) * Speed;
		*ZMove = (float)cos(Character->Direction) * Speed;
	}
	
	return TRUE;
}

BOOL cChars::ValidateMove(sCharacter *Character,              \
						  float *XMove, float *YMove, float *ZMove)
{
	float Height;
	
	// Check for height changes (can step up to 64 units)
	Height = m_App->GetHeightBelow(&m_App->m_LevelMesh, *XMove + Character->XPos, Character->YPos + 64.0f, *ZMove + Character->ZPos);
	
	// Print item name
	*YMove = Height - Character->YPos;
	// Check against terrain mesh for collision
	if(m_App != NULL) {
		if(m_App->CheckIntersect(									\
			&m_App->m_LevelMesh,									\
			Character->XPos,                                     \
			Character->YPos+64.0f,                                \
			Character->ZPos,                                     \
			*XMove + Character->XPos,                            \
			*YMove + Character->YPos + 64.0f,                     \
			*ZMove + Character->ZPos) == TRUE)
			return FALSE;
	}
	
	return TRUE;
}



BOOL cChars::CheckIntersect(                                    \
							float XStart, float YStart, float ZStart,    \
							float XEnd,   float YEnd,   float ZEnd)
{
	sMesh *MeshPtr;
	BOOL  Hit;
	float u, v, Dist;
	float XDiff, YDiff, ZDiff, Size;
	DWORD FaceIndex;
	D3DXVECTOR3 vecDir;
	
	// Start with parent mesh
	if((MeshPtr = m_App->m_LevelMesh.GetParentMesh()) == NULL)
		return FALSE;  // No polygons hit
	
	// Calculate ray
	XDiff = XEnd - XStart;
	YDiff = YEnd - YStart;
	ZDiff = ZEnd - ZStart;
	Size  = (float)sqrt(XDiff*XDiff+YDiff*YDiff+ZDiff*ZDiff);
	D3DXVec3Normalize(&vecDir, &D3DXVECTOR3(XDiff, YDiff, ZDiff));
	
	// Go through each mesh looking for intersection
	while(MeshPtr != NULL) {
		D3DXIntersect(MeshPtr->m_Mesh,                            \
			&D3DXVECTOR3(XStart,YStart,ZStart), &vecDir,  \
			&Hit, &FaceIndex, &u, &v, &Dist);
		
		
		if(Hit == TRUE) {
			if(Dist >= Size)
				Hit = FALSE;
			else return TRUE;
		}
		
		MeshPtr = MeshPtr->m_Next;
	}
	
	return Hit;  // No polygons hit
}

⌨️ 快捷键说明

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