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

📄 propertiesmanager.cpp

📁 游戏框架
💻 CPP
字号:
#include "StdAfx.h"
#include ".\propertiesmanager.h"

CPropertiesManager::CPropertiesManager(WORD wMax)
{
	m_pChoose	= NULL;
	m_wMaxProps = wMax;
	m_pLayer	= NULL;
}

CPropertiesManager::~CPropertiesManager(void)
{
	m_pLayer->ClearAll();
}

// 添加道具
void CPropertiesManager::Add(IGameProperties* pIGameProp, INT_PTR nPosition){
	if(nPosition==LISTTEMPLATE_LAST_ITEM)
		m_lstProps.Push(pIGameProp, (DWORD)m_lstProps.GetCount()+1);
	else
		m_lstProps.Insert(pIGameProp, nPosition, (DWORD)nPosition);

	if(m_pLayer){
		m_pLayer->Add(GET_OBJECTPTR_INTERFACE(pIGameProp, IGameObject), "Prop");
	}
}

// 移除道具
void CPropertiesManager::Remove(INT_PTR nIndex){
	m_lstProps.Remove(nIndex);

	if(m_pLayer){
		m_pLayer->Remove(nIndex);
	}
}

// 返回道具
IGameProperties* CPropertiesManager::Get(INT_PTR nIndex){
	return m_lstProps.Get(nIndex);
}

// 设置为选择目标模式
void CPropertiesManager::SetChoose(IGameProperties* pGameProperties){
	m_pChoose = pGameProperties;
}

// 系统使用道具(通知使用)
bool CPropertiesManager::SystemExecute(LPVOID lpParams){
	return false;
}

// 设置当前道具
void CPropertiesManager::ExecuteNotify(IGameProperties* pGameProperties, WORD wType, bool bFlag){
	if(bFlag){
		// 使用道具
		tagRunningProperties* RunningProperties = new tagRunningProperties;
		RunningProperties->pProp = pGameProperties;
		RunningProperties->wType = wType;

		m_lstCurrent.Push(RunningProperties, pGameProperties->GetPropertiesID());

		// 若道具为当前选择目标,则置为空
		if(RunningProperties->pProp == m_pChoose){
			m_pChoose = NULL;
		}
	}
	else{
		// 使用完毕
		for(INT_PTR i=m_lstCurrent.GetCount();i>0;i--){
			tagRunningProperties* RunningProperties = m_lstCurrent.Get(i);
			if(RunningProperties->pProp==pGameProperties){
				// 系统调用的,自动释放
				if(RunningProperties->wType==1){
					delete RunningProperties->pProp;
				}
				delete RunningProperties;
				m_lstCurrent.Remove(i);
				break;
			}
		}
	}
}

// 返回当前道具
IGameProperties* CPropertiesManager::GetCurrent(DWORD dwPropertiesID, bool bFlag){
	// 当dwPropertiesID==0为枚举模块,当bFlag为真时重置为头元素
	if(dwPropertiesID==0){
		if(m_lstCurrent.GetCount()>0){
			tagRunningProperties* RunningProperties = m_lstCurrent.Iterators(bFlag);
			if(RunningProperties)
				return RunningProperties->pProp;
		}
	}
	else{
		tagRunningProperties* RunningProperties = m_lstCurrent.GetBy(dwPropertiesID);
		if(RunningProperties)
			return RunningProperties->pProp;
	}

	return NULL;
}

// 返回当前要选择目标的道具
IGameProperties* CPropertiesManager::GetChoose(){
	return m_pChoose;
}

// 是否有道具使用中
BOOL CPropertiesManager::IsUsing(DWORD dwPropertiesID){
	return m_lstCurrent.GetBy(dwPropertiesID)!=NULL;
}

// 是否有道具选择目标中
BOOL CPropertiesManager::IsChoosing(){
	if(m_pChoose){
		return m_pChoose->IsChoosing();
	}

	return false;
}

// 设置最大道具携带数
void CPropertiesManager::SetMax(WORD wMax){
	m_wMaxProps = wMax;
}

// 设置关联的层对象
void CPropertiesManager::SetLayer(CGameLayer* pLayer){
	m_pLayer = pLayer;

	// 添加道具至该层内
	for(WORD i=0;i<m_wMaxProps && i<m_lstProps.GetCount();i++){
		IGameProperties* pProp = m_lstProps.Get(i+1);
		if(pProp)
			m_pLayer->Add(GET_OBJECTPTR_INTERFACE(pProp, IGameObject), "Prop");
	}
}

//接口查询
void* CPropertiesManager::QueryInterface(const IID & Guid, DWORD dwQueryVer){
	QUERYINTERFACE(IGamePropertiesManager,Guid,dwQueryVer);
	QUERYINTERFACE_IUNKNOWNEX(IUnknownEx,Guid,dwQueryVer);
	return NULL;
}

⌨️ 快捷键说明

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