From cc16bd52b4bfd5b542deddfcb131f0a1ca15b2e0 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 18 Sep 2014 18:10:34 +0300 Subject: Draw cool down bar in skills window. --- src/gui/windows/skilldialog.cpp | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'src/gui/windows/skilldialog.cpp') 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::const_iterator, it, mDurations) + { + if ((*it)->id == skill->id) + return; + } + mDurations.push_back(skill); +} + +void SkillDialog::slowLogic() +{ + FOR_EACH (std::vector::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; + } + } + } +} -- cgit v1.2.3-70-g09d2