summaryrefslogtreecommitdiff
path: root/src/gui/windows
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-03-25 18:59:19 +0300
committerAndrei Karas <akaras@inbox.ru>2015-03-25 18:59:19 +0300
commit0146f872a63571027512cfaa9bc0433eb7e86430 (patch)
treee4fa8be656325483378d2aacf3ac5908afbd0b97 /src/gui/windows
parentc7d6fb280271feb57022542f72584fbbbcfb2bc8 (diff)
downloadmv-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.cpp49
-rw-r--r--src/gui/windows/skilldialog.h8
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;