最近要开始实现技能效果了,比如击退多少距离,增加攻击,中毒等等。
先写个伪码,方便回去实现,当然如果有人用的到,也是好的。
Enum EeffectId
{
Eeffectid_JT, // 击退
Eeffectid_QJTJ, // 全军突击
…
}
// 效果属性设置结构
Struct SeffectDef
{
Int effectId;
Int maxLevel;
String effecticon;
Int baseVal;
string appendVal; // 1,2,3,4,8 ,号分隔按级别升级匹配
Int baselife;
string appendLife; // 1,2,3,4,8 ,号分隔按级别升级匹配
}
// 基类 所有effect继承自该类,分别实现对应方法
class CeffectBase
{
Public:
Virtual void onEnter(Centity *pTarget) = 0; // 效果图标等显示,即时技能效果
Virtual Void onRoundBegin() = 0;
Virtual Void onRoundEnd() = 0;
Virtual Void onExit() = 0;
Private:
Int effectid;
Int effectVal;
Int effectLife;
Int leftLife; // 剩余周期 初始值为effectLife
Centity * m_pTarget;
}
// 工厂
Class CeffectFactory
{
Public:
Static CeffectBase * getEffectObj(int effectid, effectLevel);
Protect:
getEffectVal(int effectid, effectLevel);
getEffectLife(int effectid, effectLevel);
}
// 对象类
Centity:
Void dealEffect(effectid, effectLevel, this); // 供hurt heal调用
D_EffectManager->doEffect(effectid, effectLevel, target)
Void addEffect(Ceffect * pEffectObj); // 供Ceffect::onEnter调用
Void removeEffect(Ceffect * pEffectObj); // 供Ceffect::onExit调用
Void removeAllEffect(int type); // 移除特定类型的效果 1:有益 2:不利… bit方式可组合 供die或者特定技能调用(移除不利状态)
Protect:
Vector< Ceffect * > effectVec; // 对象当前的效果集
// 效果管理类
EffectManager:
Public:
Void doEffect(int effectId, int effectLevel, Centity *pTarget)
CeffectBase * pEffectObj = CeffectFactory:: getEffectObj(effectId, effectLevel );
pEffectObj->onEnter(pTarget);
effectLst.push_back(pEffectObj);
void onRoundBegin();
For (auto &a : m_effectLst)
{
a->onRoundbegin();
}
Void onRoundEnd();
Auto ite = m_effectLst.begin();
For (;ite != m_effectLst,end(); )
{
Ite->onRoundEnd();
if Ite ->getleftLife <= 0
Ite-> onExit;
Ite = m_effectLst->erase(Ite)
Else
Ite++;
}
Void removeEffect(Ceffect *pEffectObj); // 供Centity::removeAllEffect调用
Auto ite = m_effectLst.find(pEffectObj);
If (ite != m_effectLst.end() ) m_effectLst->erase(ite);
Protect:
List< Ceffect * > m_effectLst;