Skip to content

Commit e7888c7

Browse files
committed
various fixes and logging changes
1 parent 65b998d commit e7888c7

File tree

6 files changed

+44
-61
lines changed

6 files changed

+44
-61
lines changed

App/Core/Nodes/AeonCameraBodyNode.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class AeonCameraBodyNode: SKNode, Updatable {
5050
@objc func pickRandomTarget() {
5151
if let scene = scene as? AeonTankScene {
5252
if let randomNode = scene.creatureNodes.randomElement() {
53-
Log.debug("Picked new target for camera body: \(randomNode.position)")
53+
Log.debug("🤳 Picked new target for camera body: \(randomNode.position)")
5454
currentTarget = randomNode.position
5555

5656
targetingTimer?.invalidate()

App/Core/Nodes/AeonCameraNode.swift

+5-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ protocol AeonCameraDelegate: AnyObject {
1919
class AeonCameraNode: SKCameraNode, Updatable, AeonCameraDelegate {
2020
var body: AeonCameraBodyNode = AeonCameraBodyNode()
2121
var selectedNode: SKNode?
22-
var autoCameraIsEnabled: Bool = false
2322
let cameraMoveDuration: TimeInterval = 0.25
2423
var lastUpdateTime: TimeInterval = 0
2524
var zoomTimer: Timer?
@@ -38,6 +37,8 @@ class AeonCameraNode: SKCameraNode, Updatable, AeonCameraDelegate {
3837

3938
func resetCamera() {
4039
Log.debug("📷 Camera resetting.")
40+
disableAutoCamera()
41+
selectedNode = nil
4142
zoom(.zoomOut)
4243
}
4344

@@ -54,10 +55,12 @@ class AeonCameraNode: SKCameraNode, Updatable, AeonCameraDelegate {
5455

5556
selectedNode(body)
5657
body.pickRandomTarget()
58+
changeCameraZoomLevel()
5759
}
5860

5961
func disableAutoCamera() {
6062
Log.debug("📷 Auto camera stopped.")
63+
zoomTimer?.invalidate()
6164
}
6265

6366
func creatureSelected(_ creature: AeonCreatureNode) {
@@ -78,8 +81,6 @@ class AeonCameraNode: SKCameraNode, Updatable, AeonCameraDelegate {
7881
selectedNode = node
7982
if selectedNode is AeonCreatureNode {
8083
zoom(.fullZoom, speed: 1)
81-
} else {
82-
changeCameraZoomLevel()
8384
}
8485
}
8586
}
@@ -120,7 +121,7 @@ class AeonCameraNode: SKCameraNode, Updatable, AeonCameraDelegate {
120121
}
121122

122123
@objc func changeCameraZoomLevel() {
123-
Log.debug("📷 Camera auto-zoom updated.")
124+
Log.debug("🤳 Camera auto-zoom updated.")
124125

125126
zoomTimer?.invalidate()
126127

App/Core/Scenes/AeonTankScene.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class AeonTankScene: SKScene {
115115
if let creature = node as? AeonCreatureNode {
116116
creatureNodes.remove(object: creature)
117117
if let selectedCreature = cameraNode.selectedNode as? AeonCreatureNode, selectedCreature == creature {
118-
cameraNode.deselectNode()
118+
interfaceDelegate?.creatureDeselected()
119119
}
120120
} else if let food = node as? AeonFoodNode {
121121
foodNodes.remove(object: food)
@@ -140,9 +140,9 @@ class AeonTankScene: SKScene {
140140
lastBubbleTime = currentTime
141141
}
142142

143-
// Log.debug("Food Spawner: Last Spawn \(currentTime - lastFoodTime) - Current Food: \(foodNodes.count) - Max Food: \(foodMaxAmount)")
144143
if (currentTime - lastFoodTime) >= 2,
145144
foodNodes.count < foodMaxAmount {
145+
Log.debug("🍞 Food Spawner: Last Spawn \(Int(currentTime - lastFoodTime))s ago - Current: \(foodNodes.count) - Max: \(foodMaxAmount)")
146146
addFoodPelletToScene()
147147
lastFoodTime = currentTime
148148
}

App/Core/Utilities/Logging.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ open class Log {
7979
let components: [String] = fileName.components(separatedBy: "/")
8080
let objectName = components.last ?? "Unknown Object"
8181
let levelString = Log.useEmoji ? level.emoji : "|" + level.name.uppercased() + "|"
82-
let logString = "\(levelString) [\(date)] \(objectName) line \(line): \(object())"
82+
let logString = "\(levelString) [\(date)]: \(object()) [\(objectName): \(line)]"
8383
print(logString)
8484
handler?(level, logString)
8585
}

App/Core/Views/AeonViewController.swift

+3-20
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
9090
override func viewWillDisappear(_ animated: Bool) {
9191
super.viewWillDisappear(animated)
9292
guard let scene = self.scene else { return }
93-
viewModel?.saveTank(scene)
93+
viewModel?.saveTank(scene, userInitated: false)
9494
}
9595

9696
#if os(iOS)
@@ -112,21 +112,18 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
112112
@objc func newTank() {
113113
scene = viewModel?.createNewTank(size: view.bounds.size, device: deviceType)
114114
skView?.presentScene(scene)
115-
viewModel?.activityOccurred()
116115
}
117116

118117
@objc func saveTank() {
119118
guard let scene = scene else { return }
120-
viewModel?.saveTank(scene)
121-
viewModel?.activityOccurred()
119+
viewModel?.saveTank(scene, userInitated: true)
122120
}
123121

124122
@objc func loadTank() {
125123
viewModel?.loadTank(size: view.bounds.size, device: deviceType, completion: { scene in
126124
self.scene = scene
127125
self.skView!.presentScene(scene)
128126
})
129-
viewModel?.activityOccurred()
130127
}
131128

132129
@objc func toggleFavoriteForSelectedCreature() {
@@ -138,7 +135,6 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
138135
viewModel?.deleteCreature(creature)
139136
}
140137
updateFavoriteButtonLabel()
141-
viewModel?.activityOccurred()
142138
}
143139
}
144140

@@ -172,7 +168,6 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
172168

173169
self.viewModel?.renameCreature(creature, firstName: firstName, lastName: lastName)
174170
Log.info("Renamed creature to \(firstName) \(lastName).")
175-
self.viewModel?.activityOccurred()
176171
}
177172
actionSheet.addAction(okButton)
178173

@@ -213,7 +208,6 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
213208
let selected = mateArray.randomElement()!
214209
viewModel?.creatureSelected(selected)
215210
}
216-
viewModel?.activityOccurred()
217211
}
218212

219213
@objc func deselectCreatureOrResetCamera() {
@@ -222,7 +216,6 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
222216
} else {
223217
viewModel?.resetCamera()
224218
}
225-
viewModel?.activityOccurred()
226219
}
227220
#endif
228221

@@ -253,23 +246,13 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
253246
DispatchQueue.main.async {
254247
self.updateSelectedCreatureDetails(creature)
255248
self.showDetailsIfNeeded()
256-
#if os(iOS)
257-
// Since iOS touch events occur in the scene,
258-
// we need to tell the view model activity occurred here.
259-
self.viewModel?.activityOccurred()
260-
#endif
261249
}
262250
}
263251

264252
func creatureDeselected() {
265253
selectedCreature = nil
266254
DispatchQueue.main.async {
267255
self.hideDetailsIfNeeded()
268-
#if os(iOS)
269-
// Since iOS touch events occur in the scene,
270-
// we need to tell the view model activity occurred here.
271-
self.viewModel?.activityOccurred()
272-
#endif
273256
}
274257
}
275258

@@ -313,7 +296,7 @@ class AeonViewController: UIViewController, AeonTankInterfaceDelegate {
313296
private func animateTransitionIfNeeded(to state: UIState, duration: TimeInterval) {
314297
guard runningAnimators.isEmpty else { return }
315298

316-
Log.debug("Animating UI to state \(state)")
299+
Log.debug("🖥 Animating UI to state \(state)")
317300

318301
let transitionAnimator = UIViewPropertyAnimator(duration: duration, dampingRatio: 1) {
319302
switch state {

App/Core/Views/AeonViewModel.swift

+32-33
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,7 @@ class AeonViewModel {
2121
weak var camera: AeonCameraNode?
2222
weak var selectedCreature: AeonCreatureNode?
2323

24-
var autoCameraRunning: Bool = false {
25-
didSet {
26-
Log.debug("Auto Camera Running Toggled to \(autoCameraRunning)")
27-
}
28-
}
24+
var autoCameraRunning: Bool = false
2925

3026
var autosaveTimer: Timer?
3127
var lastUserActivityTimeout: TimeInterval = 10 // default should be 120?
@@ -47,39 +43,29 @@ class AeonViewModel {
4743

4844
@objc private func autosave() {
4945
guard let scene = scene else { return }
50-
Log.info("Running auto-save...")
46+
Log.info("💽 Running auto-save...")
5147
DispatchQueue.main.async {
52-
self.saveTank(scene)
48+
self.saveTank(scene, userInitated: false)
5349
}
5450
}
5551

5652
func activityOccurred() {
57-
Log.info("User activity occurred.")
53+
Log.info("User activity occurred.")
5854

5955
if let idleTimer = idleTimer {
6056
idleTimer.invalidate()
6157
}
6258

6359
idleTimer = Timer.scheduledTimer(timeInterval: lastUserActivityTimeout, target: self, selector: #selector(startAutoCamera), userInfo: nil, repeats: false)
64-
65-
if autoCameraRunning {
66-
stopAutoCamera()
67-
}
6860
}
6961

7062
@objc private func startAutoCamera() {
7163
if let currentState = view?.currentState, currentState != .details {
7264
view?.hideAllMenusIfNeeded()
73-
camera?.enableAutoCamera()
74-
autoCameraRunning = true
65+
self.enableAutoCamera()
7566
}
7667
}
7768

78-
private func stopAutoCamera() {
79-
autoCameraRunning = false
80-
camera?.disableAutoCamera()
81-
}
82-
8369
private func createScene(size: CGSize, device: DeviceType) -> AeonTankScene {
8470
let newScene = AeonTankScene(size: size)
8571
newScene.tankSettings = getTankSettings(for: device)
@@ -89,6 +75,7 @@ class AeonViewModel {
8975
}
9076

9177
func createNewTank(size: CGSize, device: DeviceType) -> AeonTankScene {
78+
activityOccurred()
9279
let newScene = createScene(size: size, device: device)
9380
CoreDataStore.standard.getCreatures { creatures in
9481
newScene.loadCreaturesIntoScene(creatures)
@@ -100,8 +87,9 @@ class AeonViewModel {
10087
}
10188

10289
func loadTank(size: CGSize, device: DeviceType, completion: @escaping (AeonTankScene) -> Void) {
90+
activityOccurred()
10391
Tank.getAll { tanks in
104-
Log.info("Number of tanks in storage: \(tanks.count)")
92+
Log.info("💽 Number of tanks in storage: \(tanks.count)")
10593
if let tank = tanks.last {
10694
let newScene = self.createScene(size: size, device: device)
10795
tank.restore(to: newScene)
@@ -113,22 +101,29 @@ class AeonViewModel {
113101
}
114102
}
115103

116-
func saveTank(_ scene: AeonTankScene) {
104+
func saveTank(_ scene: AeonTankScene, userInitated: Bool) {
105+
117106
let tankStruct = Tank.from(scene)
118107
tankStruct.save()
108+
if userInitated {
109+
activityOccurred()
110+
}
119111
}
120112

121113
func saveCreature(_ creature: AeonCreatureNode) {
114+
activityOccurred()
122115
let creatureStruct = Creature.from(creature)
123116
creatureStruct.save()
124117
}
125118

126119
func deleteCreature(_ creature: AeonCreatureNode) {
120+
activityOccurred()
127121
let creatureStruct = Creature.from(creature)
128122
creatureStruct.delete()
129123
}
130124

131125
func renameCreature(_ creature: AeonCreatureNode, firstName: String, lastName: String) {
126+
activityOccurred()
132127
creature.firstName = firstName
133128
creature.lastName = lastName
134129
creature.fullName = "\(firstName) \(lastName)"
@@ -166,11 +161,11 @@ class AeonViewModel {
166161
)
167162
default:
168163
tankSettings = TankSettings(
169-
foodMaxAmount: 15,
164+
foodMaxAmount: 10,
170165
foodHealthRestorationBaseValue: 120,
171166
foodSpawnRate: 2,
172-
creatureInitialAmount: 20,
173-
creatureMinimumAmount: 10,
167+
creatureInitialAmount: 15,
168+
creatureMinimumAmount: 5,
174169
creatureSpawnRate: 5,
175170
creatureBirthSuccessRate: 0.10,
176171
backgroundParticleBirthrate: 40,
@@ -189,44 +184,48 @@ extension AeonViewModel: AeonTankInterfaceDelegate {
189184
func enableAutoCamera() {
190185
view?.enableAutoCamera()
191186
camera?.enableAutoCamera()
187+
autoCameraRunning = true
192188
}
193189

194190
func disableAutoCamera() {
195191
view?.disableAutoCamera()
196192
camera?.disableAutoCamera()
193+
autoCameraRunning = false
197194
}
198195

199196
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()
207203
}
208204

209205
func creatureSelected(_ creature: AeonCreatureNode) {
210206
if selectedCreature != creature {
211-
Log.debug("Creature Selected")
207+
Log.debug("👾 Creature Selected")
212208
if selectedCreature != creature {
213209
selectedCreature?.hideSelectionRing()
214210
}
215211
selectedCreature = creature
216212
creature.displaySelectionRing(withColor: .aeonBrightYellow)
217213
view?.creatureSelected(creature)
218214
camera?.creatureSelected(creature)
215+
activityOccurred()
219216
}
220217
}
221218

222219
func resetCamera() {
223-
Log.debug("Reset Camera")
220+
Log.debug("📷 Reset Camera")
224221
view?.resetCamera()
225222
camera?.resetCamera()
223+
autoCameraRunning = false
226224
if selectedCreature != nil {
227225
selectedCreature?.hideSelectionRing()
228226
selectedCreature = nil
229227
}
228+
activityOccurred()
230229
}
231230

232231
func updatePopulation(_ population: Int) {

0 commit comments

Comments
 (0)