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

📄 enginecamera.cpp

📁 墨香最新私服
💻 CPP
字号:
// EngineCamera.cpp: implementation of the CEngineCamera class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "EngineCamera.h"
#include "GraphicEngine.h"
#include "MHMap.h"

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

VECTOR3 CEngineCamera::m_LastAngle;
VECTOR3 CEngineCamera::m_LastPos;
VECTOR3 gCamPos;

CEngineCamera::CEngineCamera()
{

}

CEngineCamera::~CEngineCamera()
{

}

void CEngineCamera::SetCameraPos(VECTOR3* pPos)
{
	if( pPos->x == m_LastPos.x &&
		pPos->y == m_LastPos.y &&
		pPos->z == m_LastPos.z)
		return;
	gCamPos = *pPos;
	m_LastPos = *pPos;
	g_pExecutive->GetGeometry()->SetCameraPos(pPos,0);
}

void CEngineCamera::SetCameraAngle(float AngleXRad,float AngleYRad)
{
	if( AngleXRad == m_LastAngle.x &&
		AngleYRad == m_LastAngle.y)
		return;

	VECTOR3 angle;
	angle.x = AngleXRad;
	angle.y = AngleYRad;
	angle.z = 0;
	SetCameraAngle(&angle);
}

void CEngineCamera::SetCameraAngle(VECTOR3* pAnglePYR)
{
	if( pAnglePYR->x == m_LastAngle.x &&
		pAnglePYR->y == m_LastAngle.y &&
		pAnglePYR->z == m_LastAngle.z)
		return;
	m_LastAngle = *pAnglePYR;

	g_pExecutive->GetGeometry()->SetCameraAngleRad(pAnglePYR,0);
}

VECTOR3* CEngineCamera::IsCollisonBetweenCamAndHero(VECTOR3* pCamPos,VECTOR3* pHeroPos, float* pDistCamToHero, float* pDistInterToHero)
{
	static VECTOR3 rtPos;
	VECTOR3 IntersectedPos;
	VECTOR3 dir = *pCamPos - *pHeroPos;

	if(MAP->GetMapDesc()->bFixHeight)
	{
		if(GetCollisonPointWithRay(*pHeroPos,*pCamPos,MAP->GetMapDesc()->FixHeight,IntersectedPos) == FALSE)
			return NULL;
	}
	else
	{
		float fDist;
		if(g_pExecutive->GXMGetHFieldCollisionPointWithRay(&IntersectedPos,&fDist,pHeroPos,&dir) == FALSE)
			return NULL;
	}
/*
	float dist1 = VECTOR3Length(&dir);
	float dist2 = CalcDistance(&IntersectedPos,pHeroPos);
	if(dist2 > dist1)
		return NULL;
*/
	*pDistCamToHero = VECTOR3Length(&dir);
	*pDistInterToHero = CalcDistance(&IntersectedPos,pHeroPos);

	if(*pDistInterToHero > *pDistCamToHero)
		return NULL;

	rtPos = IntersectedPos;

	return &rtPos;
}

void  CEngineCamera::ResetCamera( float Distance, float fFov )
{
	g_pExecutive->GetGeometry()->ResetCamera( &m_LastPos, CAMERA_NEAR, Distance, fFov, 0 );
	g_pExecutive->GetGeometry()->SetCameraAngleRad( &m_LastAngle, 0 );
}

⌨️ 快捷键说明

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