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

📄 task.h

📁 一个自己写的游戏引擎,用DirectX 写成
💻 H
字号:
//--------------------------------------------------
//  Desc: Task
//  Date: 2006.11.21 /update
//  Author: artsylee
//
//  Copyright (C) 2006 artsylee
//
//	扩展: 更新时间间隔, 显示层次(2006_12_19)
//		  基于消息与延时的任务(2007_2_6)
//
//--------------------------------------------------

#ifndef _TASK_
#define _TASK_

#include <list>
#include <Windows.h>
class CMessageManager;
//--------------------------------------------------
//				任务分层
// 1, 分四大层(海底,地面,天空,逻辑),每层64小层.
// 2, 逻辑层不可显示,其它层可显示.
// 3, 显示时可指定层
//--------------------------------------------------

enum TaskLayer
{
	TL_SEA = 0,
	TL_LAND,
	TL_SKY,
	TL_LOGIC,
};

// 定义子层数量
#define SUBLAYER 64

//---------------------------------------------------
// 任务基类(抽象基类)
//---------------------------------------------------
class ASE_DLL CTask
{
public:
	CTask();					
	virtual ~CTask();			
	virtual void	Destroy();	
	virtual void	Update() = 0;
	virtual void	Render() {}

	bool	IsAutoDelete();
	void	SetAutoDelete(bool c);
	unsigned char GetLayer(void);
	void SetLayer(unsigned char layer);

protected:
	bool			m_bAutoDelete;	//是否由管理器删除自身
	unsigned char	m_cLayer;		//任务所在的层次
};

//---------------------------------------------------
// 基于消息的任务(抽象基类)
//---------------------------------------------------
class ASE_DLL CMessageTask : public CTask
{
public:
	CMessageTask();
	virtual ~CMessageTask();

	virtual void Update() = 0;
	virtual void Render() = 0;
	virtual void EndMessage();

	void SetMessage(CMessageManager *pmm, DWORD type);
	void SetParam(DWORD p1, DWORD p2, void *p3 = NULL);

protected:
	CMessageManager* m_pMsgmanager;
	DWORD			 m_MsgType;
	DWORD			 m_Param1;
	DWORD			 m_Param2;
	void*			 m_pParam3;
};

//---------------------------------------------------
// 帧延时任务(抽象基类)
//---------------------------------------------------
class ASE_DLL CDelayTask : public CMessageTask
{
public:
	CDelayTask();
	virtual ~CDelayTask();

	virtual void Update() = 0;
	virtual void Render() = 0;
	void	SetDelay(DWORD delay)		{ m_dwDelay = delay;	}
	DWORD	GetDelay()					{ return m_dwDelay;		}
protected:
	DWORD	m_dwDelay;
	DWORD	m_dwLastTime;
};

//---------------------------------------------------
// 任务管理器
//---------------------------------------------------
class ASE_DLL CTaskManager
{
public:
	CTaskManager();
	~CTaskManager();
	void	Update();
	void	Render(TaskLayer layer = TL_SEA);

	void	RemoveAll();
	void	AddTask(CTask *pTask);
	bool	RemoveTask(CTask *pTask);
	int		GetTaskCount(void) const;

private:
	std::list<CTask*>	m_TaskList;
};

#endif // _TASK_

⌨️ 快捷键说明

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