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

📄 carobject.h

📁 3D赛车游戏源代码-用Visual Studio 2005
💻 H
字号:
//////////////////////////////////////////////////////////////////////////
//  CCarObject类,车的基类,实现车子的一些基本操作。
//
//  CarObject.h: CCarObject类的声明
//
//  Copy Rights Wonderful 2006
//////////////////////////////////////////////////////////////////////////

#ifndef __CAROBJECT_H_INCLUDED__
#define __CAROBJECT_H_INCLUDED__

#include "SceneObject.h"

//-------------------------------------------------------------------------------
// 前向声明
//-------------------------------------------------------------------------------
class Model;

//-------------------------------------------------------------------------------
// 汽车的游戏状态
//-------------------------------------------------------------------------------
enum ECarGameState
{
	ECarState_Begin,		// 开始游戏
	ECarState_Check,		// 过了中途检查站
	ECarState_Finish,		// 过了终点检查站
};

//-------------------------------------------------------------------------------
// 车轮的索引
//-------------------------------------------------------------------------------
enum WheelIndex
{
	FRONT_LEFT   = 0,
	FRONT_RIGHT  = 1,
	BACK_LEFT    = 2,
	BACK_RIGHT   = 3,

	WHEEL_COUNT  = 4,
};

//-------------------------------------------------------------------------------
// 车子对象
//-------------------------------------------------------------------------------
class CCarObject : public CSceneObject
{
	typedef CSceneObject Parent;

public:
	// 构造析构函数
	CCarObject();
	virtual ~CCarObject();

	// 载入模型
	void LoadModels(const char *filename);

	// 更新
	virtual void Update();
	// 动画
	void Animate();
	// 移动
	void Move();
	// 左转
	void TurnLeft();
	// 右转
	void TurnRight();

	// 渲染物体
	virtual void RenderObject();

	// 游戏状态
	ECarGameState GetCarState() const { return m_eCurState; }
	void SetCarState(ECarGameState state) { m_eCurState = state; }

	// 速度相关
	void SetMoveSpeed(float speed) { m_fMoveSpeed = speed; }
	float GetMoveSpeed() const { return m_fMoveSpeed; }
	void SetMaxMoveSpeed(float speed) { m_fMaxMoveSpeed = speed; }
	void SetTurnSpeed(float speed) { m_fTurnSpeed = speed; }
	void AddMoveSpeed(float speed) { m_fMoveSpeed += speed; if (m_fMoveSpeed > m_fMaxMoveSpeed) m_fMoveSpeed = m_fMaxMoveSpeed; }
	void SubMoveSpeed(float speed) { m_fMoveSpeed -= speed; if (m_fMoveSpeed < 0.0f) m_fMoveSpeed = 0.0f; }

	float GetWheelTurnRadian() const { return m_fWheelTurnRadian; }

protected:
	void LoadWheelPosition(const char *filename);
	void BuildObjectBox();

protected:
	Model *m_pCarBodyModel;				// 车身模型
	Model *m_pWheelModel;				// 轮子模型
	float m_fMoveSpeed;					// 当前移动速度
	float m_fTurnSpeed;					// 转弯速度
	float m_fMaxMoveSpeed;				// 最大移动速度
	float m_fTurnRadian;
	float m_fWheelRollRadian;			// 轮子滚动的角度
	float m_fWheelTurnRadian;			// 轮子转弯的角度

	Vector3 m_posWheel[WHEEL_COUNT];
	ECarGameState		m_eCurState;	// 当前游戏状态
};

//-------------------------------------------------------------------------------
// 车子与车子的碰撞检测,true为发生碰撞,否则没有
//-------------------------------------------------------------------------------
bool CollisionCheck(const CCarObject &car1, const CCarObject &car2);

//-------------------------------------------------------------------------------
// 车子与车子的碰撞响应
//-------------------------------------------------------------------------------
bool OnCollision(CCarObject &car1, CCarObject &car2);

#endif

⌨️ 快捷键说明

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