mirror of
https://github.com/kihashi/stardew_community_checklist.git
synced 2025-10-19 08:03:17 +00:00
Use object for StoredBundleItemIds instead of array for performance
This commit is contained in:
parent
027c5ee17b
commit
b5d8d667d7
@ -28,7 +28,7 @@ export type Skill = (typeof skills)[0]
|
|||||||
|
|
||||||
export const useGeneralStore = defineStore('general', {
|
export const useGeneralStore = defineStore('general', {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
StoredBundleItemIds: [] as number[],
|
StoredBundleItemIds: {} as { [key: number]: number },
|
||||||
HideSpoilers: false,
|
HideSpoilers: false,
|
||||||
HideCompleted: false,
|
HideCompleted: false,
|
||||||
BundleRewardsSpoilers: true,
|
BundleRewardsSpoilers: true,
|
||||||
@ -78,25 +78,20 @@ export const useGeneralStore = defineStore('general', {
|
|||||||
return (roomId: number): Bundle[] => state.bundles.filter((bundle) => bundle.room === roomId)
|
return (roomId: number): Bundle[] => state.bundles.filter((bundle) => bundle.room === roomId)
|
||||||
},
|
},
|
||||||
getIncompleteBundleItems(state) {
|
getIncompleteBundleItems(state) {
|
||||||
return state.bundleItems.filter((bundleItem) =>
|
return state.bundleItems.filter((bundleItem) => !(bundleItem.id in state.StoredBundleItemIds))
|
||||||
state.StoredBundleItemIds.includes(bundleItem.id)
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
isBundleItemStored(state) {
|
isBundleItemStored(state) {
|
||||||
return (bundleItemId: number): boolean => state.StoredBundleItemIds.includes(bundleItemId)
|
return (bundleItemId: number): boolean => bundleItemId in state.StoredBundleItemIds
|
||||||
},
|
},
|
||||||
|
getNumberOfBundleItemsStoredInBundle() {
|
||||||
getNumberOfBundleItemsStoredInBundle(state) {
|
|
||||||
return (bundleId: number): number => {
|
return (bundleId: number): number => {
|
||||||
// FIXME: Need to find a better way of handling undefined here instead of just assigning an arbitrary value
|
// FIXME: Need to find a better way of handling undefined here instead of just assigning an arbitrary value
|
||||||
// Shouldn't even be undefined, but just in case
|
// Shouldn't even be undefined, but just in case
|
||||||
const bundleItemsRequired = this.getBundleById(bundleId)?.items_required ?? 100
|
const bundleItemsRequired = this.getBundleById(bundleId)?.items_required ?? 100
|
||||||
|
|
||||||
return Math.min(
|
return Math.min(
|
||||||
state.StoredBundleItemIds.filter((id) =>
|
this.getBundleItemsInBundle(bundleId).filter((bundleItem) =>
|
||||||
this.getBundleItemsInBundle(bundleId)
|
this.isBundleItemStored(bundleItem.id)
|
||||||
.map((item) => item.id)
|
|
||||||
.includes(id)
|
|
||||||
).length,
|
).length,
|
||||||
bundleItemsRequired
|
bundleItemsRequired
|
||||||
)
|
)
|
||||||
@ -111,14 +106,14 @@ export const useGeneralStore = defineStore('general', {
|
|||||||
}, 0)
|
}, 0)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isItemComplete(state) {
|
isItemComplete() {
|
||||||
return (itemId: number): boolean => {
|
return (itemId: number): boolean => {
|
||||||
const item = this.getItemById(itemId)
|
const item = this.getItemById(itemId)
|
||||||
|
|
||||||
if (!item) return false
|
if (!item) return false
|
||||||
|
|
||||||
const bundleItems = this.getBundleItemsForItem(itemId)
|
const bundleItems = this.getBundleItemsForItem(itemId)
|
||||||
return bundleItems.every((bundleItem) => state.StoredBundleItemIds.includes(bundleItem.id))
|
return bundleItems.every((bundleItem) => this.isBundleItemStored(bundleItem.id))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isBundleComplete() {
|
isBundleComplete() {
|
||||||
@ -142,10 +137,10 @@ export const useGeneralStore = defineStore('general', {
|
|||||||
this.StoredBundleItemIds = JSON.parse(atob(SerializedState))
|
this.StoredBundleItemIds = JSON.parse(atob(SerializedState))
|
||||||
},
|
},
|
||||||
storeItem(bundleItemId: number) {
|
storeItem(bundleItemId: number) {
|
||||||
this.StoredBundleItemIds.push(bundleItemId)
|
this.StoredBundleItemIds[bundleItemId] = 1
|
||||||
},
|
},
|
||||||
unstoreItem(bundleItemId: number) {
|
unstoreItem(bundleItemId: number) {
|
||||||
this.StoredBundleItemIds = this.StoredBundleItemIds.filter((item) => item !== bundleItemId)
|
delete this.StoredBundleItemIds[bundleItemId]
|
||||||
},
|
},
|
||||||
toggleSpoilers() {
|
toggleSpoilers() {
|
||||||
this.HideSpoilers = !this.HideSpoilers
|
this.HideSpoilers = !this.HideSpoilers
|
||||||
@ -169,7 +164,7 @@ export const useGeneralStore = defineStore('general', {
|
|||||||
this.CompactView = !this.CompactView
|
this.CompactView = !this.CompactView
|
||||||
},
|
},
|
||||||
resetData() {
|
resetData() {
|
||||||
this.StoredBundleItemIds = []
|
this.StoredBundleItemIds = {}
|
||||||
}
|
}
|
||||||
// loadV1State(v1state: { item: number }[][]) {
|
// loadV1State(v1state: { item: number }[][]) {
|
||||||
// for (let i = 0; i < v1state.length; i++) {
|
// for (let i = 0; i < v1state.length; i++) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user