📄 properties.h
字号:
#pragma once
#include "gameframe.h"
#define INFECTIONS_TYPE_IMMEDIATE 1 // 立即执行
#define INFECTIONS_TYPE_PERSISTENT 2 // 持续一段时间
#define INFECTIONS_TYPE_ALONE 4 // 独立执行
#define INFECTIONS_TYPE_TARGET 8 // 选择目标
#define INFECTION_METHOD_ADD 1
#define INFECTION_METHOD_SUB 2
#define INFECTION_METHOD_MUL 3
#define INFECTION_METHOD_DIV 4
#define INFECTION_METHOD_MOD 5
#define INFECTION_METHOD_SET 6
#define INFECTION_METHOD_XOR 7
#define INFECTION_METHOD_SPECIAL 0
#define VALUE_TYPE_INT 1
#define VALUE_TYPE_UINT 2
#define VALUE_TYPE_LONG 3
#define VALUE_TYPE_ULONG 4
#define VALUE_TYPE_WORD 5
#define VALUE_TYPE_DWORD 6
#define VALUE_TYPE_FLOAT 7
#define VALUE_TYPE_BOOL 8
template <class TYPE, class ARG_TYPE=TYPE*>
class GAME_FRAME_CLASS CPropertiesValue
{
private:
TYPE m_Value;
public:
inline CPropertiesValue(LPVOID lpValue=NULL){
SetValue(lpValue);
};
inline TYPE GetValue(){
return m_Value;
};
inline void SetValue(LPVOID lpValue){
if(lpValue==NULL)
m_Value = 0;
else
m_Value = *((TYPE*)lpValue);
};
inline void GetTo(LPVOID lpValue){
*((ARG_TYPE)lpValue) = m_Value;
};
inline void Calc(LPVOID lpValue, WORD wMethod){
switch(wMethod){
case INFECTION_METHOD_ADD:
m_Value += (*((TYPE*)lpValue));
break;
case INFECTION_METHOD_SUB:
m_Value -= (*((TYPE*)lpValue));
break;
case INFECTION_METHOD_MUL:
m_Value *= (*((TYPE*)lpValue));
break;
case INFECTION_METHOD_DIV:
m_Value /= (*((TYPE*)lpValue));
break;
case INFECTION_METHOD_SET:
m_Value = (*((TYPE*)lpValue));
break;
case INFECTION_METHOD_XOR:
m_Value = !(*((TYPE*)lpValue));
break;
//case INFECTION_METHOD_MOD:
// m_Value %= (*((TYPE*)lpValue));
// break;
}
};
};
class GAME_FRAME_CLASS CProperties :
public IGameProperties, public CGameObject
{
protected:
DWORD m_dwPropertiesID;
_CString m_szDescription;
bool m_bChoosing;
bool m_bExecuting;
bool m_bEffecting;
tagPropertiesInfections m_tagInfections;
public:
CProperties();
virtual ~CProperties(void);
public:
//对象创建
virtual bool __cdecl Create(LPCTSTR lpName, _SIZE siSize, ...);
// 设置道具ID
virtual void __cdecl SetPropertiesID(DWORD dwID);
// 返回道具ID
virtual DWORD __cdecl GetPropertiesID();
public:
// 目标选择后的回调事件
virtual void __cdecl OnChoosedTarget(LPVOID lpParams, IGameObject* pIGameObject);
// 道具使用时间过后的回调事件
virtual void __cdecl OnTimeOut(IGameObject* pIGameObject=NULL);
// 效果结束
virtual void __cdecl OnEffectFinished(IGameObject* pIGameObject=NULL);
public:
// 选择目标
virtual void __cdecl ChooseTarget();
// 放弃使用
virtual void __cdecl ChooseCancel();
// 是否选择目标中
virtual bool __cdecl IsChoosing();
// 设置影响效果
virtual void __cdecl SetInfection(tagPropertiesInfections* pInfections);
// 执行道具作用
virtual void __cdecl Execute(LPVOID lpParams=NULL, IGameObject* pIGameObject=NULL);
// 执行道具作用
virtual void __cdecl Infection(LPVOID lpParams=NULL, IGameObject* pIGameObject=NULL);
// 执行特殊道具
virtual void __cdecl SpecialInfectionAction(LPVOID lpParams=NULL, IGameObject* pIGameObject=NULL);
// 复原道具影响
virtual void __cdecl UnInfection(IGameObject* pIGameObject=NULL);
// 是否执行中
virtual bool __cdecl IsExecuting();
// 显示效果
virtual void __cdecl ShowEffect(LPVOID lpParams=NULL, IGameObject* pIGameObject=NULL);
// 是否效果播放中
virtual bool __cdecl IsEffecting();
// 返回描述
virtual LPCTSTR __cdecl GetDescription();
// 返回道具执行时长
virtual DWORD __cdecl GetInfectionTime();
// 返回可选定目标
virtual DWORD __cdecl GetTargetCount();
//是否有效
virtual bool __cdecl IsValid() { return AfxIsValidAddress(this,sizeof(CProperties))?true:false;};
//释放对象
virtual bool __cdecl Release() { if(IsValid()) delete this; return true; };
//接口查询
virtual void * __cdecl QueryInterface(const IID & Guid, DWORD dwQueryVer);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -