diff options
| author | Léo Lam <leo@leolam.fr> | 2021-01-21 23:57:37 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-01-22 00:14:41 +0100 |
| commit | 48276bb4e788e28c5b53f098471f8c8af03e6315 (patch) | |
| tree | bb461934744727ca2e1e562e2afe9eec3a43889f /src/Game/UI | |
| parent | 7814fd527b259b5a7c499f4e78e956f789f65fdf (diff) | |
uking/ui: Implement material sorting for inventory
Diffstat (limited to 'src/Game/UI')
| -rw-r--r-- | src/Game/UI/uiPauseMenuDataMgr.cpp | 20 | ||||
| -rw-r--r-- | src/Game/UI/uiUtils.cpp | 27 | ||||
| -rw-r--r-- | src/Game/UI/uiUtils.h | 3 |
3 files changed, 49 insertions, 1 deletions
diff --git a/src/Game/UI/uiPauseMenuDataMgr.cpp b/src/Game/UI/uiPauseMenuDataMgr.cpp index 74c3f8dc..bc05a5bb 100644 --- a/src/Game/UI/uiPauseMenuDataMgr.cpp +++ b/src/Game/UI/uiPauseMenuDataMgr.cpp @@ -1965,6 +1965,26 @@ int compareArmor(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoData return 0; } +int compareMaterial(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoData* data) { + const int order1 = getCookItemOrder(lhs, data); + const int order2 = getCookItemOrder(rhs, data); + // Lower is better + if (order1 < order2) + return -1; + if (order1 > order2) + return 1; + + const int hp1 = getItemHitPointRecover(lhs->getName().cstr()); + const int hp2 = getItemHitPointRecover(rhs->getName().cstr()); + // Higher is better + if (hp1 > hp2) + return -1; + if (hp1 < hp2) + return 1; + + return compareSortKeys(lhs, rhs, data); +} + int compareKeyItem(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoData* data) { if (auto cmp = compareSortKeys(lhs, rhs, data)) return cmp; diff --git a/src/Game/UI/uiUtils.cpp b/src/Game/UI/uiUtils.cpp index 101a00d4..75c4f338 100644 --- a/src/Game/UI/uiUtils.cpp +++ b/src/Game/UI/uiUtils.cpp @@ -1,8 +1,10 @@ #include "Game/UI/uiUtils.h" #include "Game/Actor/actWeapon.h" +#include "Game/DLC/aoc2.h" +#include "Game/UI/uiPauseMenuDataMgr.h" #include "KingSystem/ActorSystem/actInfoCommon.h" #include "KingSystem/ActorSystem/actInfoData.h" -#include "Game/UI/uiPauseMenuDataMgr.h" +#include "KingSystem/Utils/Byaml/Byaml.h" namespace uking::ui { @@ -10,6 +12,29 @@ bool isMasterSwordItem(const PouchItem& item) { return item.getType() == PouchItemType::Sword && isMasterSwordActorName(item.getName()); } +int getItemHitPointRecover(const sead::SafeString& name) { + auto* info = ksys::act::InfoData::instance(); + if (!info) + return 0; + + al::ByamlIter iter; + if (!info->getActorIter(&iter, name.cstr())) + return 0; + if (!info->hasTag(iter, ksys::act::tags::CureItem)) + return 0; + if (!info->hasTag(iter, ksys::act::tags::CanUse)) + return 0; + + int value = ksys::act::getCureItemHitPointRecover(iter); + + if (aoc2::instance() && aoc2::instance()->checkFlag(aoc2::Flag::EnableHardMode) && + aoc2::instance()->isHardModeChangeOn(aoc2::HardModeChange::NerfHpRestore)) { + aoc2::instance()->nerfHpRestore(&value); + } + + return value; +} + int getWeaponInventoryLife(const sead::SafeString& name) { auto* info = ksys::act::InfoData::instance(); if (!info) diff --git a/src/Game/UI/uiUtils.h b/src/Game/UI/uiUtils.h index 53b54f9e..43460eb2 100644 --- a/src/Game/UI/uiUtils.h +++ b/src/Game/UI/uiUtils.h @@ -7,6 +7,9 @@ namespace uking::ui { class PouchItem; bool isMasterSwordItem(const PouchItem& item); + +int getItemHitPointRecover(const sead::SafeString& name); + int getWeaponInventoryLife(const sead::SafeString& name); bool isMasterSwordActorName(const sead::SafeString& name); |
