mirror of https://github.com/zeldaret/botw.git
uking/ui: Implement food sorting in inventory
This commit is contained in:
parent
48276bb4e7
commit
d9f7561588
|
|
@ -56384,7 +56384,7 @@
|
|||
0x0000007100977a28,sub_7100977A28,272,_ZN5uking2ui13compareShieldEPKNS0_9PouchItemES3_PN4ksys3act8InfoDataE
|
||||
0x0000007100977b38,sub_7100977B38,336,_ZN5uking2ui12compareArmorEPKNS0_9PouchItemES3_PN4ksys3act8InfoDataE
|
||||
0x0000007100977c88,sub_7100977C88,308,_ZN5uking2ui15compareMaterialEPKNS0_9PouchItemES3_PN4ksys3act8InfoDataE
|
||||
0x0000007100977dbc,sub_7100977DBC,540,
|
||||
0x0000007100977dbc,sub_7100977DBC,540,_ZN5uking2ui11compareFoodEPKNS0_9PouchItemES3_PN4ksys3act8InfoDataE
|
||||
0x0000007100977fd8,sub_7100977FD8,116,_ZN5uking2ui14compareKeyItemEPKNS0_9PouchItemES3_PN4ksys3act8InfoDataE
|
||||
0x000000710097804c,sub_710097804C,676,
|
||||
0x00000071009782f0,sub_71009782F0,664,_ZN5uking2uiL15doCompareShieldEPKNS0_9PouchItemES3_PN4ksys3act8InfoDataE
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -164,6 +164,46 @@ int getWeaponModifierSortKey(sead::TypedBitFlag<act::WeaponModifier> flags) {
|
|||
return 12;
|
||||
}
|
||||
|
||||
int getFoodSortKey(int* effect_value, const PouchItem* item) {
|
||||
const int type = item->getCookData().mCookEffect0.x;
|
||||
const int value = item->getCookData().mCookEffect0.y;
|
||||
*effect_value = value;
|
||||
// TODO: add an enum
|
||||
switch (type) {
|
||||
case 1:
|
||||
return 0;
|
||||
case 2:
|
||||
return 1;
|
||||
case 14:
|
||||
return 2;
|
||||
case 15:
|
||||
return 3;
|
||||
case 13:
|
||||
return 4;
|
||||
case 16:
|
||||
return 5;
|
||||
case 5:
|
||||
return 6;
|
||||
case 4:
|
||||
return 7;
|
||||
case 6:
|
||||
return 8;
|
||||
case 10:
|
||||
return 9;
|
||||
case 11:
|
||||
return 10;
|
||||
case 12:
|
||||
return 11;
|
||||
default:
|
||||
*effect_value = 0;
|
||||
if (ksys::act::InfoData::instance()->hasTag(item->getName().cstr(),
|
||||
ksys::act::tags::CookResult)) {
|
||||
return 0;
|
||||
}
|
||||
return 12;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int pouchItemSortPredicate(const PouchItem* lhs, const PouchItem* rhs);
|
||||
|
|
@ -1985,6 +2025,44 @@ int compareMaterial(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoD
|
|||
return compareSortKeys(lhs, rhs, data);
|
||||
}
|
||||
|
||||
int compareFood(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoData* data) {
|
||||
int e1, e2;
|
||||
const int k1 = getFoodSortKey(&e1, lhs);
|
||||
const int k2 = getFoodSortKey(&e2, rhs);
|
||||
// Lower key is better
|
||||
if (k1 < k2)
|
||||
return -1;
|
||||
if (k1 > k2)
|
||||
return 1;
|
||||
|
||||
if (auto cmp = compareSortKeys(lhs, rhs, data))
|
||||
return cmp;
|
||||
|
||||
// Higher is better
|
||||
if (e1 > e2)
|
||||
return -1;
|
||||
if (e1 < e2)
|
||||
return 1;
|
||||
|
||||
const int st1 = lhs->getCookData().mStaminaRecoverX;
|
||||
const int st2 = rhs->getCookData().mStaminaRecoverX;
|
||||
// Higher is better
|
||||
if (st1 > st2)
|
||||
return -1;
|
||||
if (st1 < st2)
|
||||
return 1;
|
||||
|
||||
const auto sv1 = lhs->getCookData().getStaminaRecoverValue();
|
||||
const auto sv2 = rhs->getCookData().getStaminaRecoverValue();
|
||||
// Higher is better
|
||||
if (sv1 > sv2)
|
||||
return -1;
|
||||
if (sv1 < sv2)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int compareKeyItem(const PouchItem* lhs, const PouchItem* rhs, ksys::act::InfoData* data) {
|
||||
if (auto cmp = compareSortKeys(lhs, rhs, data))
|
||||
return cmp;
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ struct CookTagInfo {
|
|||
class PouchItem {
|
||||
public:
|
||||
struct CookData {
|
||||
f32 getStaminaRecoverValue() const { return f32(mStaminaRecoverY) * 30.0f; }
|
||||
void setStaminaRecoverX(int x) { mStaminaRecoverX = x; }
|
||||
void setStaminaRecoverY(int y) { mStaminaRecoverY = y; }
|
||||
void setCookEffect1(int effect) { mCookEffect1 = effect; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue