From 8ea20d3e1f61bcfeccf6885e11cacddeb014fe0f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 14 Aug 2016 19:25:00 +0300 Subject: Add skill cast type option in skills window. Can be changed, but for now unused. --- src/gui/popups/popupmenu.cpp | 57 ++++++++++++++++++++++++++++++++++++++--- src/gui/popups/popupmenu.h | 2 ++ src/gui/popups/skillpopup.cpp | 39 ++++++++++++++++++++++++++-- src/gui/popups/skillpopup.h | 1 + src/gui/widgets/skilllistbox.h | 2 +- src/gui/windows/skilldialog.cpp | 16 +++++++++--- src/gui/windows/skilldialog.h | 5 ++++ 7 files changed, 112 insertions(+), 10 deletions(-) (limited to 'src/gui') diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index d0896efaa..e7e866491 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -2361,7 +2361,7 @@ void PopupMenu::showNpcDialogPopup(const BeingId npcId, void PopupMenu::showSkillPopup(const SkillInfo *const info) { - if (!info || info->level <= 1) + if (!info) return; setMousePos(); @@ -2373,10 +2373,17 @@ void PopupMenu::showSkillPopup(const SkillInfo *const info) // TRANSLATORS: popup menu header mBrowserBox->addRow(_("Skill")); - mBrowserBox->addRow("/showskilllevels 'ITEMID'", + if (info->level > 1) + { + mBrowserBox->addRow("/showskilllevels 'ITEMID'", + // TRANSLATORS: popup menu item + // TRANSLATORS: set skill level + _("Skill level...")); + } + mBrowserBox->addRow("/showskilltypes 'ITEMID'", // TRANSLATORS: popup menu item - // TRANSLATORS: set skill level - _("Set skill level")); + // TRANSLATORS: set skill cast type + _("Skill cast type...")); // TRANSLATORS: popup menu item // TRANSLATORS: close menu mBrowserBox->addRow("cancel", _("Cancel")); @@ -2422,6 +2429,48 @@ void PopupMenu::showSkillLevelMenu() showPopup(mX, mY); } +void PopupMenu::showSkillTypePopup(const SkillInfo *const info) +{ + if (!info) + return; + setMousePos(); + + // using mItemId as skill id + mItemId = info->id; + // using mItemIndex as skill level + mItemIndex = info->level; + + for (int f = 0; f < maxCards; f ++) + mItemCards[f] = 0; + mBrowserBox->clearRows(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: skill cast type header + mBrowserBox->addRow(_("Select skill cast type")); + mBrowserBox->addRow(strprintf("/selectskilltype %d 0", mItemId), + // TRANSLATORS: popup menu item + // TRANSLATORS: skill cast type + _("Default")); + mBrowserBox->addRow(strprintf("/selectskilltype %d 1", mItemId), + // TRANSLATORS: popup menu item + // TRANSLATORS: skill cast type + _("Target")); + mBrowserBox->addRow(strprintf("/selectskilltype %d 2", mItemId), + // TRANSLATORS: popup menu item + // TRANSLATORS: skill cast type + _("Mouse position")); + mBrowserBox->addRow(strprintf("/selectskilltype %d 3", mItemId), + // TRANSLATORS: popup menu item + // TRANSLATORS: skill cast type + _("Self")); + mBrowserBox->addRow("##3---"); + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + + showPopup(mX, mY); +} + void PopupMenu::showPopup(int x, int y) { const int pad2 = 2 * mPadding; diff --git a/src/gui/popups/popupmenu.h b/src/gui/popups/popupmenu.h index a7a745873..ba88e93f1 100644 --- a/src/gui/popups/popupmenu.h +++ b/src/gui/popups/popupmenu.h @@ -165,6 +165,8 @@ class PopupMenu final : public Popup, public LinkHandler void showSkillLevelPopup(const SkillInfo *const info); + void showSkillTypePopup(const SkillInfo *const info); + void showCraftPopup(); void showEmoteType(); diff --git a/src/gui/popups/skillpopup.cpp b/src/gui/popups/skillpopup.cpp index f6e1f19a7..4c9af3d0f 100644 --- a/src/gui/popups/skillpopup.cpp +++ b/src/gui/popups/skillpopup.cpp @@ -46,6 +46,7 @@ SkillPopup::SkillPopup() : mSkillDesc(new TextBox(this)), mSkillEffect(new TextBox(this)), mSkillLevel(new TextBox(this)), + mSkillCastType(new TextBox(this)), mLastId(0U), mLastLevel(-1) { @@ -68,6 +69,11 @@ SkillPopup::SkillPopup() : mSkillLevel->setPosition(0, 3 * fontHeight); mSkillLevel->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP), getThemeColor(ThemeColorId::POPUP_OUTLINE)); + + mSkillCastType->setEditable(false); + mSkillCastType->setPosition(0, 4 * fontHeight); + mSkillCastType->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP), + getThemeColor(ThemeColorId::POPUP_OUTLINE)); } void SkillPopup::postInit() @@ -77,6 +83,7 @@ void SkillPopup::postInit() add(mSkillDesc); add(mSkillEffect); add(mSkillLevel); + add(mSkillCastType); addMouseListener(this); } @@ -136,6 +143,27 @@ void SkillPopup::show(const SkillInfo *const skill, 196); } } + std::string castStr; + switch (skill->customCastType) + { + case CastType::Default: + default: + castStr = _("Default"); + break; + case CastType::Target: + castStr = _("Target"); + break; + case CastType::Position: + castStr = _("Mouse position"); + break; + case CastType::Self: + castStr = _("Self position"); + break; + } + mSkillCastType->setTextWrapped(strprintf( + // TRANSLATORS: skill cast type + _("Cast type: %s"), + castStr.c_str()), 196); int minWidth = mSkillName->getWidth(); @@ -147,25 +175,32 @@ void SkillPopup::show(const SkillInfo *const skill, minWidth = mSkillEffect->getMinWidth(); if (mSkillLevel->getMinWidth() > minWidth) minWidth = mSkillLevel->getMinWidth(); + if (mSkillCastType->getMinWidth() > minWidth) + minWidth = mSkillCastType->getMinWidth(); const int numRowsDesc = mSkillDesc->getNumberOfRows(); const int numRowsEffect = mSkillEffect->getNumberOfRows(); const int numRowsLevel = mSkillLevel->getNumberOfRows(); + const int numRowsCast = mSkillCastType->getNumberOfRows(); const int height = getFont()->getHeight(); if (skill->skillEffect.empty()) { setContentSize(minWidth, - (numRowsDesc + numRowsLevel + 1) * height); + (numRowsDesc + numRowsLevel + numRowsCast + 1) * height); mSkillLevel->setPosition(0, (numRowsDesc + 1) * height); + mSkillCastType->setPosition(0, (numRowsDesc + 2) * height); } else { setContentSize(minWidth, - (numRowsDesc + numRowsLevel + numRowsEffect + 1) * height); + (numRowsDesc + numRowsLevel + numRowsEffect + numRowsCast + 1) * + height); mSkillEffect->setPosition(0, (numRowsDesc + 1) * height); mSkillLevel->setPosition(0, (numRowsDesc + numRowsEffect + 1) * height); + mSkillCastType->setPosition(0, + (numRowsDesc + numRowsEffect + 2) * height); } mSkillDesc->setPosition(0, 1 * height); diff --git a/src/gui/popups/skillpopup.h b/src/gui/popups/skillpopup.h index 33d6d50cc..be416330a 100644 --- a/src/gui/popups/skillpopup.h +++ b/src/gui/popups/skillpopup.h @@ -66,6 +66,7 @@ class SkillPopup final : public Popup TextBox *mSkillDesc A_NONNULLPOINTER; TextBox *mSkillEffect A_NONNULLPOINTER; TextBox *mSkillLevel A_NONNULLPOINTER; + TextBox *mSkillCastType A_NONNULLPOINTER; unsigned int mLastId; int mLastLevel; }; diff --git a/src/gui/widgets/skilllistbox.h b/src/gui/widgets/skilllistbox.h index b6feb194f..818dbf8cb 100644 --- a/src/gui/widgets/skilllistbox.h +++ b/src/gui/widgets/skilllistbox.h @@ -200,7 +200,7 @@ class SkillListBox final : public ListBox if (!skill) return; skillPopup->show(skill, - skill->selectedLevel); + skill->customSelectedLevel); skillPopup->position(viewport->mMouseX, viewport->mMouseY); } diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp index 66ffb6378..5df9428ce 100644 --- a/src/gui/windows/skilldialog.cpp +++ b/src/gui/windows/skilldialog.cpp @@ -176,7 +176,7 @@ void SkillDialog::action(const ActionEvent &event) const SkillInfo *const info = tab->getSelectedInfo(); useSkill(info, fromBool(config.getBoolValue("skillAutotarget"), AutoTarget), - info->selectedLevel); + info->customSelectedLevel); } } else if (eventId == "close") @@ -908,8 +908,18 @@ void SkillDialog::selectSkillLevel(const int skillId, if (!info) return; if (level > info->level) - info->selectedLevel = info->level; + info->customSelectedLevel = info->level; else - info->selectedLevel = level; + info->customSelectedLevel = level; + info->update(); +} + +void SkillDialog::selectSkillCastType(const int skillId, + const CastTypeT type) +{ + SkillInfo *const info = getSkill(skillId); + if (!info) + return; + info->customCastType = type; info->update(); } diff --git a/src/gui/windows/skilldialog.h b/src/gui/windows/skilldialog.h index f12f9621b..b93fda1b9 100644 --- a/src/gui/windows/skilldialog.h +++ b/src/gui/windows/skilldialog.h @@ -31,6 +31,8 @@ #include "enums/resources/skillowner.h" #include "enums/resources/skilltype.h" +#include "enums/resources/skill/casttype.h" + #include "listeners/actionlistener.h" #include "utils/xml.h" @@ -158,6 +160,9 @@ class SkillDialog final : public Window, void selectSkillLevel(const int skillId, const int level); + void selectSkillCastType(const int skillId, + const CastTypeT type); + private: void addSkillDuration(SkillInfo *const skill); -- cgit v1.2.3-60-g2f50