From 2fd2e45b65d381700ae2c1e033daf5db9761c397 Mon Sep 17 00:00:00 2001 From: Nero Ignis Date: Fri, 27 May 2022 16:52:05 +0200 Subject: [PATCH] Add inventory sorting / grouping; add empty button asset; --- src/assets/gui/blank.png | Bin 0 -> 5286 bytes src/components/InventoryView.vue | 110 +++++++++++++++++++++++++++---- src/store/index.js | 51 ++++++++++++-- 3 files changed, 144 insertions(+), 17 deletions(-) create mode 100644 src/assets/gui/blank.png diff --git a/src/assets/gui/blank.png b/src/assets/gui/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1aa3583777dc5b8e687ca31927ddb35444f475 GIT binary patch literal 5286 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 r`;^QJ{HQlJuZJ9w)m`g9d^Gl6;d6|bo3wj7
-
-
-
- -
- {{ item.name }}
- x{{ item.quantity }} +
+
+
+ Group by category +
+ +
+ Sort {{ $store.state.inventorySortDesc ? 'Z-A' : 'A-Z' }} +
+ +
- You don't have any items yet. + Your inventory is empty.
@@ -36,6 +102,7 @@ export default { \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index 3df8721..b964598 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -26,6 +26,8 @@ export default createStore({ weekdayNr: null }, inventory: [], + inventorySortDesc: true, + groupInventory: false, cropField: [], selections: { field: null, @@ -46,7 +48,7 @@ export default createStore({ item.quantity = inventoryItem.quantity; return item; - }); + }) ?? []; }, getSeedsInInventory(state) { return state.inventory.filter((inventoryItem) => { @@ -56,7 +58,27 @@ export default createStore({ item.quantity = inventoryItem.quantity; return item; - }); + }) ?? []; + }, + getFieldProductsInInventory(state) { + return state.inventory.filter((inventoryItem) => { + return inventoryItem.type === ItemTypes.FieldProducts && inventoryItem.quantity > 0; + }).map((inventoryItem) => { + let item = ItemService.getItemByID(inventoryItem.id); + + item.quantity = inventoryItem.quantity; + return item; + }) ?? []; + }, + getAnimalProductsInInventory(state) { + return state.inventory.filter((inventoryItem) => { + return inventoryItem.type === ItemTypes.AnimalProducts && inventoryItem.quantity > 0; + }).map((inventoryItem) => { + let item = ItemService.getItemByID(inventoryItem.id); + + item.quantity = inventoryItem.quantity; + return item; + }) ?? []; } }, mutations: { @@ -77,7 +99,7 @@ export default createStore({ generateField(state) { let fieldIndex = 0; - while(state.cropField.length < state.player.unlocked.fields) { + while (state.cropField.length < state.player.unlocked.fields) { fieldIndex++; state.cropField.push({ @@ -86,7 +108,7 @@ export default createStore({ } }, selectField(state, id) { - console.debug('select field with id '+id) + console.debug('select field with id ' + id) state.selections.field = id; }, plantSeed(state, seed) { @@ -138,7 +160,7 @@ export default createStore({ if (purchasePrice > state.player.money) { iziToast.error({ - title: "Not enough money to buy "+props.quantity+" of "+props.item.name + title: "Not enough money to buy " + props.quantity + " of " + props.item.name }); return false; } @@ -151,7 +173,7 @@ export default createStore({ state.player.money -= purchasePrice; iziToast.success({ - title: 'Purchased '+props.item.name+(props.quantity > 1 ? ' ('+props.quantity+')' : '') + title: 'Purchased ' + props.item.name + (props.quantity > 1 ? ' (' + props.quantity + ')' : '') }); }, addItemToInventory(state, props = {item: Object, quantity: Number}) { @@ -203,6 +225,23 @@ export default createStore({ }, alphaAddMoney(state) { state.player.money = Number(state.player.money) + Number(1_000); + }, + sortInventory(state) { + state.inventory = state.inventory.sort((a, b) => { + let aItem = ItemService.getItemByID(a.id); + let bItem = ItemService.getItemByID(b.id); + + if (state.inventorySortDesc === true) { + return (bItem.name > aItem.name) ? 1 : -1; + } else { + return (aItem.name < bItem.name) ? -1 : 1; + } + }) + + state.inventorySortDesc = !state.inventorySortDesc; + }, + toggleGrouping(state) { + state.groupInventory = !state.groupInventory; } }, actions: {},