@@ -21,11 +21,7 @@ class AeonViewModel {
21
21
weak var camera : AeonCameraNode ?
22
22
weak var selectedCreature : AeonCreatureNode ?
23
23
24
- var autoCameraRunning : Bool = false {
25
- didSet {
26
- Log . debug ( " Auto Camera Running Toggled to \( autoCameraRunning) " )
27
- }
28
- }
24
+ var autoCameraRunning : Bool = false
29
25
30
26
var autosaveTimer : Timer ?
31
27
var lastUserActivityTimeout : TimeInterval = 10 // default should be 120?
@@ -47,39 +43,29 @@ class AeonViewModel {
47
43
48
44
@objc private func autosave( ) {
49
45
guard let scene = scene else { return }
50
- Log . info ( " Running auto-save... " )
46
+ Log . info ( " 💽 Running auto-save..." )
51
47
DispatchQueue . main. async {
52
- self . saveTank ( scene)
48
+ self . saveTank ( scene, userInitated : false )
53
49
}
54
50
}
55
51
56
52
func activityOccurred( ) {
57
- Log . info ( " User activity occurred. " )
53
+ Log . info ( " ⏰ User activity occurred." )
58
54
59
55
if let idleTimer = idleTimer {
60
56
idleTimer. invalidate ( )
61
57
}
62
58
63
59
idleTimer = Timer . scheduledTimer ( timeInterval: lastUserActivityTimeout, target: self , selector: #selector( startAutoCamera) , userInfo: nil , repeats: false )
64
-
65
- if autoCameraRunning {
66
- stopAutoCamera ( )
67
- }
68
60
}
69
61
70
62
@objc private func startAutoCamera( ) {
71
63
if let currentState = view? . currentState, currentState != . details {
72
64
view? . hideAllMenusIfNeeded ( )
73
- camera? . enableAutoCamera ( )
74
- autoCameraRunning = true
65
+ self . enableAutoCamera ( )
75
66
}
76
67
}
77
68
78
- private func stopAutoCamera( ) {
79
- autoCameraRunning = false
80
- camera? . disableAutoCamera ( )
81
- }
82
-
83
69
private func createScene( size: CGSize , device: DeviceType ) -> AeonTankScene {
84
70
let newScene = AeonTankScene ( size: size)
85
71
newScene. tankSettings = getTankSettings ( for: device)
@@ -89,6 +75,7 @@ class AeonViewModel {
89
75
}
90
76
91
77
func createNewTank( size: CGSize , device: DeviceType ) -> AeonTankScene {
78
+ activityOccurred ( )
92
79
let newScene = createScene ( size: size, device: device)
93
80
CoreDataStore . standard. getCreatures { creatures in
94
81
newScene. loadCreaturesIntoScene ( creatures)
@@ -100,8 +87,9 @@ class AeonViewModel {
100
87
}
101
88
102
89
func loadTank( size: CGSize , device: DeviceType , completion: @escaping ( AeonTankScene ) -> Void ) {
90
+ activityOccurred ( )
103
91
Tank . getAll { tanks in
104
- Log . info ( " Number of tanks in storage: \( tanks. count) " )
92
+ Log . info ( " 💽 Number of tanks in storage: \( tanks. count) " )
105
93
if let tank = tanks. last {
106
94
let newScene = self . createScene ( size: size, device: device)
107
95
tank. restore ( to: newScene)
@@ -113,22 +101,29 @@ class AeonViewModel {
113
101
}
114
102
}
115
103
116
- func saveTank( _ scene: AeonTankScene ) {
104
+ func saveTank( _ scene: AeonTankScene , userInitated: Bool ) {
105
+
117
106
let tankStruct = Tank . from ( scene)
118
107
tankStruct. save ( )
108
+ if userInitated {
109
+ activityOccurred ( )
110
+ }
119
111
}
120
112
121
113
func saveCreature( _ creature: AeonCreatureNode ) {
114
+ activityOccurred ( )
122
115
let creatureStruct = Creature . from ( creature)
123
116
creatureStruct. save ( )
124
117
}
125
118
126
119
func deleteCreature( _ creature: AeonCreatureNode ) {
120
+ activityOccurred ( )
127
121
let creatureStruct = Creature . from ( creature)
128
122
creatureStruct. delete ( )
129
123
}
130
124
131
125
func renameCreature( _ creature: AeonCreatureNode , firstName: String , lastName: String ) {
126
+ activityOccurred ( )
132
127
creature. firstName = firstName
133
128
creature. lastName = lastName
134
129
creature. fullName = " \( firstName) \( lastName) "
@@ -166,11 +161,11 @@ class AeonViewModel {
166
161
)
167
162
default :
168
163
tankSettings = TankSettings (
169
- foodMaxAmount: 15 ,
164
+ foodMaxAmount: 10 ,
170
165
foodHealthRestorationBaseValue: 120 ,
171
166
foodSpawnRate: 2 ,
172
- creatureInitialAmount: 20 ,
173
- creatureMinimumAmount: 10 ,
167
+ creatureInitialAmount: 15 ,
168
+ creatureMinimumAmount: 5 ,
174
169
creatureSpawnRate: 5 ,
175
170
creatureBirthSuccessRate: 0.10 ,
176
171
backgroundParticleBirthrate: 40 ,
@@ -189,44 +184,48 @@ extension AeonViewModel: AeonTankInterfaceDelegate {
189
184
func enableAutoCamera( ) {
190
185
view? . enableAutoCamera ( )
191
186
camera? . enableAutoCamera ( )
187
+ autoCameraRunning = true
192
188
}
193
189
194
190
func disableAutoCamera( ) {
195
191
view? . disableAutoCamera ( )
196
192
camera? . disableAutoCamera ( )
193
+ autoCameraRunning = false
197
194
}
198
195
199
196
func creatureDeselected( ) {
200
- if selectedCreature != nil {
201
- Log . debug ( " Creature De-Selected " )
202
- view? . creatureDeselected ( )
203
- camera? . creatureDeselected ( )
204
- selectedCreature? . hideSelectionRing ( )
205
- selectedCreature = nil
206
- }
197
+ Log . debug ( " 👾 Creature De-Selected " )
198
+ view? . creatureDeselected ( )
199
+ camera? . creatureDeselected ( )
200
+ selectedCreature? . hideSelectionRing ( )
201
+ selectedCreature = nil
202
+ activityOccurred ( )
207
203
}
208
204
209
205
func creatureSelected( _ creature: AeonCreatureNode ) {
210
206
if selectedCreature != creature {
211
- Log . debug ( " Creature Selected " )
207
+ Log . debug ( " 👾 Creature Selected" )
212
208
if selectedCreature != creature {
213
209
selectedCreature? . hideSelectionRing ( )
214
210
}
215
211
selectedCreature = creature
216
212
creature. displaySelectionRing ( withColor: . aeonBrightYellow)
217
213
view? . creatureSelected ( creature)
218
214
camera? . creatureSelected ( creature)
215
+ activityOccurred ( )
219
216
}
220
217
}
221
218
222
219
func resetCamera( ) {
223
- Log . debug ( " Reset Camera " )
220
+ Log . debug ( " 📷 Reset Camera" )
224
221
view? . resetCamera ( )
225
222
camera? . resetCamera ( )
223
+ autoCameraRunning = false
226
224
if selectedCreature != nil {
227
225
selectedCreature? . hideSelectionRing ( )
228
226
selectedCreature = nil
229
227
}
228
+ activityOccurred ( )
230
229
}
231
230
232
231
func updatePopulation( _ population: Int ) {
0 commit comments