summaryrefslogtreecommitdiff
path: root/src/gui/windows/skilldialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/windows/skilldialog.cpp')
-rw-r--r--src/gui/windows/skilldialog.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp
index 073cf11bd..ee82445f7 100644
--- a/src/gui/windows/skilldialog.cpp
+++ b/src/gui/windows/skilldialog.cpp
@@ -62,6 +62,7 @@ SkillDialog::SkillDialog() :
Window(_("Skills"), false, nullptr, "skills.xml"),
ActionListener(),
mSkills(),
+ mDurations(),
mTabs(new TabbedArea(this)),
mDeleteTabs(),
mPointsLabel(new Label(this, "0")),
@@ -197,6 +198,7 @@ void SkillDialog::clearSkills()
delete_all(mSkills);
mSkills.clear();
+ mDurations.clear();
}
void SkillDialog::hideSkills()
@@ -433,8 +435,9 @@ void SkillDialog::setSkillDuration(const int id, const int duration)
SkillInfo *const info = (*it).second;
if (info)
{
- info->duration = duration / 10;
+ info->duration = duration;
info->durationTime = tick_time;
+ addSkillDuration(info);
}
}
}
@@ -542,3 +545,38 @@ void SkillDialog::useSkill(const SkillInfo *const info)
}
}
}
+
+void SkillDialog::addSkillDuration(SkillInfo *const skill)
+{
+ FOR_EACH (std::vector<SkillInfo*>::const_iterator, it, mDurations)
+ {
+ if ((*it)->id == skill->id)
+ return;
+ }
+ mDurations.push_back(skill);
+}
+
+void SkillDialog::slowLogic()
+{
+ FOR_EACH (std::vector<SkillInfo*>::const_iterator, it, mDurations)
+ {
+ SkillInfo *const skill = *it;
+ if (skill)
+ {
+ const int time = get_elapsed_time(skill->durationTime);
+ if (time >= skill->duration)
+ {
+ it = mDurations.erase(it);
+ skill->cooldown = 0;
+ skill->duration = 0;
+ skill->durationTime = 0;
+ if (it != mDurations.begin())
+ -- it;
+ }
+ else if (time)
+ {
+ skill->cooldown = skill->duration * 100 / time;
+ }
+ }
+ }
+}