📄 propertiesmanager.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 + -