From 0146f872a63571027512cfaa9bc0433eb7e86430 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 25 Mar 2015 18:59:19 +0300 Subject: Add particle effect for removing skill. (hercules). --- src/gui/windows/skilldialog.cpp | 49 +++++++++++++++++++++++++++++------------ src/gui/windows/skilldialog.h | 8 +++++++ 2 files changed, 43 insertions(+), 14 deletions(-) (limited to 'src/gui/windows') diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp index 2804b8734..fb82633fe 100644 --- a/src/gui/windows/skilldialog.cpp +++ b/src/gui/windows/skilldialog.cpp @@ -368,6 +368,8 @@ void SkillDialog::loadXmlFile(const std::string &fileName) node, "invokeCmd", ""); data->updateEffectId = XML::getProperty( node, "levelUpEffectId", -1); + data->removeEffectId = XML::getProperty( + node, "removeEffectId", -1); skill->addData(level, data); } @@ -576,27 +578,46 @@ void SkillDialog::updateQuest(const int var, const int val) } } -void SkillDialog::playUpdateEffect(const int id) const +SkillData *SkillDialog::getSkillData(const int id) const { - if (!effectManager) - return; const SkillMap::const_iterator it = mSkills.find(id); if (it != mSkills.end()) { SkillInfo *const info = it->second; if (info) - { - const SkillData *const data = info->data; - if (!data) - return; - int effectId = data->updateEffectId; - if (effectId == -1) - effectId = paths.getIntValue("skillLevelUpEffectId"); - if (effectId == -1) - return; - effectManager->trigger(effectId, localPlayer); - } + return info->data; } + return nullptr; +} + +void SkillDialog::triggerEffect(int effectId, + const int defaultEffectId) const +{ + if (!effectManager) + return; + if (effectId == -1) + effectId = defaultEffectId; + if (effectId == -1) + return; + effectManager->trigger(effectId, localPlayer); +} + +void SkillDialog::playUpdateEffect(const int id) const +{ + const SkillData *const data = getSkillData(id); + if (!data) + return; + triggerEffect(data->updateEffectId, + paths.getIntValue("skillLevelUpEffectId")); +} + +void SkillDialog::playRemoveEffect(const int id) const +{ + const SkillData *const data = getSkillData(id); + if (!data) + return; + triggerEffect(data->removeEffectId, + paths.getIntValue("skillRemoveEffectId")); } void SkillDialog::useSkill(const SkillInfo *const info) diff --git a/src/gui/windows/skilldialog.h b/src/gui/windows/skilldialog.h index 2628a3d80..1fa182e8b 100644 --- a/src/gui/windows/skilldialog.h +++ b/src/gui/windows/skilldialog.h @@ -36,6 +36,7 @@ class SkillModel; class Tab; class TabbedArea; +struct SkillData; struct SkillInfo; /** @@ -116,15 +117,22 @@ class SkillDialog final : public Window, void playUpdateEffect(const int id) const; + void playRemoveEffect(const int id) const; + void slowLogic(); void removeSkill(const int id); static void useSkill(const SkillInfo *const info); + SkillData *getSkillData(const int id) const; + private: void addSkillDuration(SkillInfo *const skill); + void triggerEffect(int effectId, + const int defaultEffectId) const; + typedef std::map SkillMap; SkillMap mSkills; std::vector mDurations; -- cgit v1.2.3-60-g2f50