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

📄 mhcamera.h

📁 墨香最新私服
💻 H
字号:
// MHCamera.h: interface for the CMHCamera class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MHCAMERA_H__3EE48679_085F_4E12_AF97_C06D8AB29A00__INCLUDED_)
#define AFX_MHCAMERA_H__3EE48679_085F_4E12_AF97_C06D8AB29A00__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Angle.h"
#include ".\Engine\EngineCamera.h"

class CObject;
class CEngineObject;


struct MHCAMERASHAKE;


#define MAX_CAMERA_DESC	8
#define CAMERA	USINGTON(CMHCamera)

enum eCAMERAMODE
{
	eCM_Free = 0,
	eCM_QuarterView,
	eCM_FollowView,
	eCM_LOGIN,
	eCM_EyeView,
};

enum eCAMERASTATE
{
	eCS_Normal,
	eCS_Sit,
	eCS_Die,
};

enum
{
	eCP_CHARMAKE = 0,
	eCP_CHARSEL,
	eCP_INTERPOLATE,

	eCP_MAX,
};

struct MHCAMERAPOS
{
	float m_AngleX;
	float m_AngleY;
	float m_Dist;

	VECTOR3 m_Pivot;
};


struct MHCAMERADESC
{
	CAngle m_AngleX;
	CAngle m_AngleY;

	float m_fDistance;

	VECTOR3 m_CameraPos;
	VECTOR3 m_CameraDir;
	
	VECTOR3 m_CameraDownVector;
	VECTOR3 m_CameraDownPositon;

	BOOL m_bCameraAngleMovingX;
	DWORD m_CameraAngleMoveStartX;
	DWORD m_CameraAngleMoveDurationX;
	
	BOOL m_bCameraAngleMovingY;
	DWORD m_CameraAngleMoveStartY;
	DWORD m_CameraAngleMoveDurationY;

	BOOL m_bCameraDistanceMoving;
	DWORD m_CameraDistanceMoveStart;
	DWORD m_CameraDistanceMoveDuration;
	float m_fDistanceStart;
	float m_fDistanceChange;

	float m_CharHeight;			//款扁吝俊绰 墨皋扼啊 辑辑洒 郴妨艾栏搁.
	float m_StartCharHeight;
	float m_TargetCharHeight;
	BOOL  m_bHeightChanging;
	DWORD m_dwHeightStartTime;
	DWORD m_dwHeightChangeDuration;

	CObject* m_pPivotObject;	// 笛吝俊 窍唱绰 怖 乐绢具 茄促.
	VECTOR3 m_PivotPos;

	BOOL m_bPivotObject;		// TRUE 搁 PivotObject FALSE 搁 PivotPos
};


class CMHCamera  
{
	//camerafilter
	CEngineObject* m_pCameraFilter;
	float m_MinAngle;
	float m_MaxAngle;
	
	VECTOR3 m_DownVector;
	DWORD m_CurCameraMode;
	CEngineCamera m_EngineCamera;

	MHCAMERADESC m_CameraDesc[MAX_CAMERA_DESC];
	int m_CurCamera;

	float m_fAddHeight;

//---sight distance option
	float m_fDistanceRate;	//50~100% 
	float m_fMaxSightDistance;
	float m_fFov;


	//////////////////////////////////////////////////////////////////////////
	// 柳悼 扁瓷 备泅阑 困茄 函荐甸
	VECTOR3 m_VibratePos;
	VECTOR3 m_VibrateAngle;
	VECTOR3 m_PushedVector;
	DWORD m_VibrateDuration;
	DWORD m_VibrateStartTime;
	BOOL m_bIsVibrating;


	void CalcVibration();
	//////////////////////////////////////////////////////////////////////////	

	
	//////////////////////////////////////////////////////////////////////////
	// 溅捞农 扁瓷阑 困茄 函荐甸
	MHCAMERASHAKE** m_ppCameraShakeDesc;		// 溅捞欧 俊 措茄 Desc 甸..
	VECTOR3 m_ShakingPos;
	BOOL m_bIsShaking;
	DWORD m_nCurShakingNum;						// 泅犁 窍绊 乐绰 溅捞欧 Desc Index (-1捞搁 窍绊 乐瘤 臼促)
	DWORD m_CurShakingPos;						// 泅犁 柳青吝牢 溅捞欧 Desc郴俊辑狼 困摹
	DWORD m_LastShakingPosChangedTime;			// 付瘤阜栏肺 m_CurShakingPos甫 官槽 矫埃.
	float m_Amplitude;

	void CalcShaking();
	//////////////////////////////////////////////////////////////////////////


	//////////////////////////////////////////////////////////////////////////
	// 捞悼焊埃阑 困茄 函荐甸
	MHCAMERAPOS m_MovePos[eCP_MAX];
	int m_CurPosition;
	int m_GotoPosition;
	
	float m_MoveTime;
	float m_MoveStartTime;
	float m_MoveSpeed;
	
	BOOL m_bMoved;
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	// 墨皋扼磊蜡捞悼阑 困茄 函荐甸
	DWORD m_LastMoveNoticeTime;			// 某腐磐啊 捞悼沁促绊 辑滚俊 舅妨霖 矫埃



	//////////////////////////////////////////////////////////////////////////
	
	
	void CalcCameraPosAngle();
	void CalcFreeCamera();
	void ProcessCameraMode();
	void ProcessCameraMoving();

	void RestrictCameraAngleDistance();
	
	void FollowCamera();

public:
	CMHCamera();
//	//MAKESINGLETON(CMHCamera);
	~CMHCamera();

	void Init(CObject* pObject,float angleX,float angleY,float fDistance);
	void InitCamera(int CameraNum,float angleX,float angleY,float fDistance,CObject* pObject);
	void InitCamera(int CameraNum,float angleX,float angleY,float fDistance,VECTOR3* pPivotPos);

	void SetToEngineCamera();


	void SetCameraFilter(CEngineObject* pEngineObj,float minAngle = 0,float maxAngle = gPHI/4);


	void MouseRotate(int x,int y);

	void Process();

	void SetCurCamera(int Camera);
	void SetCameraPivotObject(int Camera,CObject* pObject);
	void SetCameraPivotPos(int Camera,VECTOR3* pPos);

	void SetTargetAngleX(int Camera,float fAngleX,DWORD Duration);
	void SetTargetAngleY(int Camera,float fAngleY,DWORD Duration);
	void SetDistance(int Camera,float fDistance,DWORD Duration);
	float GetDistance(int Camera) { return m_CameraDesc[Camera].m_fDistance; }

	void Rotate(int Camera,float RotateAngle,DWORD Duration);
	void ZoomDistance(int Camera,float fDistanceChange,DWORD Duration);

	void ChangeCameraSmooth(int Camera,DWORD Duration);	// 泅犁 墨皋扼俊辑 促弗 墨皋扼肺 何靛反霸 捞悼茄促.
	void ChangeToDefaultCamera();	// 泅犁 墨皋扼狼 汲沥蔼阑 弊措肺 0锅 墨皋扼俊 悸泼茄促.
	void StopAllMoving(int Camera);	// 雀傈捞唱 淋殿阑 肛冕促.

	void SetMaxSightDistance( float fMaxDistance )		{ m_fMaxSightDistance = fMaxDistance; m_fDistanceRate = 0.0f;  }
	void SetCameraFov( float fFov )						{ m_fFov = fFov; }

	void SetSightDistanceRate( float fDistanceRate );


	//////////////////////////////////////////////////////////////////////////
	// 柳悼扁瓷阑 困茄 窃荐甸
	void SetPushedVibration(VECTOR3* PushedVector,DWORD Duration);
	//////////////////////////////////////////////////////////////////////////
	
	//////////////////////////////////////////////////////////////////////////
	// 溅捞欧 扁瓷阑 困茄 窃荐甸
	void SetShaking(int ShakeNum, float amp);
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	// 捞悼焊埃阑 困茄 窃荐甸
	void SetMovePos(int Index, MHCAMERAPOS* pCameraPos);
	void MoveStart(int GotoIndex);
	void Interpolation();
	BOOL IsMoved()				{	return m_bMoved;	}
	int GetGotoPosition()		{	return m_GotoPosition;	}
	void ResetInterPolation();
	//////////////////////////////////////////////////////////////////////////


	int GetCameraMode() { return m_CurCameraMode; }
	void SetCameraMode(int CameraMode);	
	void ToggleCameraViewMode();
	
	void SetCharState( int eCharState, DWORD dwDuration );
//	BOOL CanChangeCameraAngleTo( float xRad, float yRad );
	void Fly( float fFly );
	
};
EXTERNGLOBALTON(CMHCamera)
#endif // !defined(AFX_MHCAMERA_H__3EE48679_085F_4E12_AF97_C06D8AB29A00__INCLUDED_)

⌨️ 快捷键说明

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