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

📄 properties.cpp

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

CProperties::CProperties()
{
	m_dwPropertiesID	= 0;
	m_szDescription		= "";
	ZeroMemory(&m_tagInfections, sizeof(m_tagInfections));

	m_bChoosing			= false;
	m_bExecuting		= false;
	m_bEffecting		= false;
}

CProperties::~CProperties(void)
{
	//释放内存
	if(m_tagInfections.pInfection)
		SafeDelete(m_tagInfections.pInfection);
}

//对象创建
bool CProperties::Create(LPCTSTR lpName, _SIZE siSize, ...){
	__super::Create(lpName, siSize, Type_Properties);
	return true;
}

// 设置道具ID
void CProperties::SetPropertiesID(DWORD dwID){
	m_dwPropertiesID = dwID;
}

// 返回道具ID
DWORD CProperties::GetPropertiesID(){
	return m_dwPropertiesID;
}

// 目标选择后的回调事件
void CProperties::OnChoosedTarget(LPVOID lpParams, IGameObject* pIGameObject){
	m_bChoosing = false;
	if(m_tagInfections.unTimes.dwTimes>0){
		m_tagInfections.unTimes.dwTimes--;
	}
}

// 道具使用时间过后的回调事件
void CProperties::OnTimeOut(IGameObject* pIGameObject){
	m_bExecuting = false;
}

// 效果结束
void CProperties::OnEffectFinished(IGameObject* pIGameObject){
	m_bEffecting = false;
}

// 设置影响效果
void CProperties::SetInfection(tagPropertiesInfections* pInfections){
	//释放内存
	if(m_tagInfections.pInfection)
		SafeDelete(m_tagInfections.pInfection);

	m_tagInfections = *pInfections;

	tagPropertiesInfection*	pInfection = new tagPropertiesInfection[m_tagInfections.wCount];
	CopyMemory(pInfection, pInfections->pInfection, sizeof(tagPropertiesInfection)*m_tagInfections.wCount);
	m_tagInfections.pInfection = pInfection;
}

// 选择目标
void CProperties::ChooseTarget(){
	m_bChoosing = true;
}

// 放弃使用
void CProperties::ChooseCancel(){
	m_bChoosing = false;
}

// 是否选择目标中
bool CProperties::IsChoosing(){
	return m_bChoosing;
}

// 执行道具作用
void CProperties::Execute(LPVOID lpParams, IGameObject* pIGameObject){
	Infection(lpParams, pIGameObject);
}

// 执行道具作用
void CProperties::Infection(LPVOID lpParams, IGameObject* pIGameObject){
	m_bExecuting = true;

	for(int i=0;i<m_tagInfections.wCount;i++){
		if(m_tagInfections.pInfection[i].wMethod == INFECTION_METHOD_SPECIAL){
			SpecialInfectionAction(lpParams, pIGameObject);
		}
		else{
			switch(m_tagInfections.pInfection[i].wValueType){
				case VALUE_TYPE_INT:
					{
						CPropertiesValue<int>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<int>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);
					}
					break;
				case VALUE_TYPE_UINT:
					{
						CPropertiesValue<UINT>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<UINT>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);
					}
					break;
				case VALUE_TYPE_LONG:
					{
						CPropertiesValue<long>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<long>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);
					}
					break;
				case VALUE_TYPE_ULONG:
					{
						CPropertiesValue<ULONG>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<ULONG>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);
					}
					break;
				case VALUE_TYPE_WORD:
					{
						CPropertiesValue<WORD>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<WORD>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);
					}
					break;
				case VALUE_TYPE_DWORD:
					{
						CPropertiesValue<DWORD>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<DWORD>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);
					}
					break;
				case VALUE_TYPE_FLOAT:
					{
						if(m_tagInfections.pInfection[i].wMethod!=INFECTION_METHOD_MOD){
						CPropertiesValue<float>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<float>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);

						}
					}
					break;
				case VALUE_TYPE_BOOL:
					{
						CPropertiesValue<BOOL>	Original(m_tagInfections.pInfection[i].lpTarget);
						Original.GetTo((LPVOID)(&m_tagInfections.pInfection[i].lpOriginal));

						CPropertiesValue<BOOL>	Value(m_tagInfections.pInfection[i].lpTarget);
						Value.Calc((LPVOID)(&m_tagInfections.pInfection[i].lpNumber), m_tagInfections.pInfection[i].wMethod);
						Value.GetTo(m_tagInfections.pInfection[i].lpTarget);

					}
					break;
			}
		}
	}
}

// 执行特殊道具
void CProperties::SpecialInfectionAction(LPVOID lpParams, IGameObject* pIGameObject){
}

// 复原道具影响
void CProperties::UnInfection(IGameObject* pIGameObject){
}

	// 是否执行中
bool CProperties::IsExecuting(){
	return m_bExecuting;
}

// 显示效果
void CProperties::ShowEffect(LPVOID lpParams, IGameObject* pIGameObject){
	m_bEffecting = true;
}

// 是否效果播放中
bool CProperties::IsEffecting(){
	return m_bEffecting;
}

// 返回描述
LPCTSTR CProperties::GetDescription(){
	return m_szDescription;
}

// 返回道具执行时长
DWORD CProperties::GetInfectionTime(){
	return m_tagInfections.unTimes.dwTimeLength;
}

// 返回可选定目标
DWORD CProperties::GetTargetCount(){
	return m_tagInfections.unTimes.dwTimes;
}

//************************************
// <p>Description: 接口查询</p>
// <p>Parameters:  </p>
// <p>    const IID & Guid</p>
// <p>    DWORD dwQueryVer</p>
//
// <p>Returns:   void*</p>
//************************************
void* CProperties::QueryInterface(const IID &Guid, DWORD dwQueryVer){
	QUERYINTERFACE(IGameProperties,Guid,dwQueryVer);
	QUERYINTERFACE(IGameObject,Guid,dwQueryVer);
	QUERYINTERFACE(IBaseObject,Guid,dwQueryVer);
	QUERYINTERFACE_IUNKNOWNEX(IGameObject,Guid,dwQueryVer);
	return NULL;
}

⌨️ 快捷键说明

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