summaryrefslogtreecommitdiff
path: root/src/Game/UI
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-01-21 23:57:37 +0100
committerLéo Lam <leo@leolam.fr>2021-01-22 00:14:41 +0100
commit48276bb4e788e28c5b53f098471f8c8af03e6315 (patch)
treebb461934744727ca2e1e562e2afe9eec3a43889f /src/Game/UI
parent7814fd527b259b5a7c499f4e78e956f789f65fdf (diff)
uking/ui: Implement material sorting for inventory
Diffstat (limited to 'src/Game/UI')
-rw-r--r--src/Game/UI/uiPauseMenuDataMgr.cpp20
-rw-r--r--src/Game/UI/uiUtils.cpp27
-rw-r--r--src/Game/UI/uiUtils.h3
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);