diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-03-25 18:59:19 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-03-25 18:59:19 +0300 |
commit | 0146f872a63571027512cfaa9bc0433eb7e86430 (patch) | |
tree | e4fa8be656325483378d2aacf3ac5908afbd0b97 /src/gui/windows | |
parent | c7d6fb280271feb57022542f72584fbbbcfb2bc8 (diff) | |
download | mv-0146f872a63571027512cfaa9bc0433eb7e86430.tar.gz mv-0146f872a63571027512cfaa9bc0433eb7e86430.tar.bz2 mv-0146f872a63571027512cfaa9bc0433eb7e86430.tar.xz mv-0146f872a63571027512cfaa9bc0433eb7e86430.zip |
Add particle effect for removing skill. (hercules).
Diffstat (limited to 'src/gui/windows')
-rw-r--r-- | src/gui/windows/skilldialog.cpp | 49 | ||||
-rw-r--r-- | src/gui/windows/skilldialog.h | 8 |
2 files changed, 43 insertions, 14 deletions
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<int, SkillInfo*> SkillMap; SkillMap mSkills; std::vector<SkillInfo*> mDurations; |