task.h

来自「3D游戏展示程序」· C头文件 代码 · 共 121 行

H
121
字号
//--------------------------------------------------
//  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 + =
减小字号Ctrl + -
显示快捷键?