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