@@ -15,16 +15,19 @@ public class UserCollection: ObservableObject {
15
15
16
16
// MARK: - Published properties
17
17
@Published public var items : [ Item ] = [ ]
18
+ @Published public var variants : [ String : [ Variant ] ] = [ : ]
18
19
@Published public var villagers : [ Villager ] = [ ]
19
20
@Published public var critters : [ Item ] = [ ]
20
21
@Published public var lists : [ UserList ] = [ ]
21
22
@Published public var dailyTasks = DailyTasks ( )
23
+
22
24
@Published public var isCloudEnabled = true
23
25
@Published public var isSynched = false
24
26
25
27
// MARK: - Private properties
26
28
private struct SavedData : Codable {
27
29
let items : [ Item ]
30
+ let variants : [ String : [ Variant ] ] ?
28
31
let villagers : [ Villager ]
29
32
let critters : [ Item ]
30
33
let lists : [ UserList ] ?
@@ -80,6 +83,31 @@ public class UserCollection: ObservableObject {
80
83
return added
81
84
}
82
85
86
+ public func containVariant( item: Item , variant: Variant ) -> Bool {
87
+ guard let filename = item. filename else {
88
+ return false
89
+ }
90
+ return variants [ filename] ? . contains ( variant) == true
91
+ }
92
+
93
+ public func toggleVariant( item: Item , variant: Variant ) -> Bool {
94
+ guard let filename = item. filename else {
95
+ return false
96
+ }
97
+ if variants [ filename] ? . contains ( variant) == true {
98
+ variants [ filename] ? . removeAll ( where: { $0 == variant } )
99
+ save ( )
100
+ return false
101
+ } else {
102
+ if variants [ filename] == nil {
103
+ variants [ filename] = [ ]
104
+ }
105
+ variants [ filename] ? . append ( variant)
106
+ save ( )
107
+ return true
108
+ }
109
+ }
110
+
83
111
public func toggleCritters( critter: Item ) -> Bool {
84
112
let added = critters. toggle ( item: critter)
85
113
save ( )
@@ -230,7 +258,12 @@ public class UserCollection: ObservableObject {
230
258
// MARK: - Import / Export
231
259
private func save( ) {
232
260
do {
233
- let savedData = SavedData ( items: items, villagers: villagers, critters: critters, lists: lists, dailyTasks: dailyTasks)
261
+ let savedData = SavedData ( items: items,
262
+ variants: variants,
263
+ villagers: villagers,
264
+ critters: critters,
265
+ lists: lists,
266
+ dailyTasks: dailyTasks)
234
267
let data = try encoder. encode ( savedData)
235
268
try data. write ( to: filePath, options: . atomicWrite)
236
269
@@ -250,6 +283,7 @@ public class UserCollection: ObservableObject {
250
283
do {
251
284
let savedData = try decoder. decode ( SavedData . self, from: data)
252
285
self . items = savedData. items
286
+ self . variants = savedData. variants ?? [ : ]
253
287
self . villagers = savedData. villagers
254
288
self . critters = savedData. critters
255
289
self . lists = savedData. lists ?? [ ]
0 commit comments