@@ -14,6 +14,7 @@ class SLGameEngine {
1414 private let msPerUpdate = TimeInterval ( 0.016 )
1515 private var lag = 0.0
1616 private var previous : Date ?
17+ private weak var gameDisplayDelegate : GameDisplayDelegate ?
1718 private weak var gameLogicDelegate : GameLogicDelegate ?
1819 private var canvasDimensions : CGRect
1920 private var cannonBall : Peg ?
@@ -31,8 +32,12 @@ class SLGameEngine {
3132 self . numOfOrangePegs = 0
3233 }
3334
34- func loadLevel( gameLogicDelegate: GameLogicDelegate , level: Level , bucket: Bucket ) {
35+ func loadLevel(
36+ gameDisplayDelegate: GameDisplayDelegate ,
37+ gameLogicDelegate: GameLogicDelegate ,
38+ level: Level , bucket: Bucket ) {
3539 // create physics body for each object, loads to physics engine
40+ self . gameDisplayDelegate = gameDisplayDelegate
3641 self . gameLogicDelegate = gameLogicDelegate
3742 self . bucket = bucket
3843 self . numOfCannonBallsLeft = 10
@@ -77,7 +82,7 @@ class SLGameEngine {
7782 }
7883
7984 func addCannonBall( ) {
80- guard let gameLogicDelegate = gameLogicDelegate else {
85+ guard let gameDisplayDelegate = gameDisplayDelegate else {
8186 return
8287 }
8388 let middleOfTopScreen = CGPoint ( x: 400 , y: 50 )
@@ -88,7 +93,7 @@ class SLGameEngine {
8893 return
8994 }
9095 print ( " cannon ball added \( cannonBallCheck) " )
91- gameLogicDelegate . didAddCannonBall ( cannonBall: cannonBall)
96+ gameDisplayDelegate . didAddCannonBall ( cannonBall: cannonBall)
9297 self . mostRecentPosition = cannonBall. center
9398 }
9499
@@ -123,30 +128,35 @@ class SLGameEngine {
123128 }
124129
125130 func render( cannonBallCount: Int ) {
126- guard let gameLogicDelegate = gameLogicDelegate ,
131+ guard let gameDisplayDelegate = gameDisplayDelegate ,
127132 let bucket = bucket,
128- let bucketPhysicsBody = mappings [ bucket] else {
133+ let bucketPhysicsBody = mappings [ bucket] ,
134+ let gameLogicDelegate = gameLogicDelegate else {
129135 return
130136 }
131137
132- moveBucket ( bucket, bucketPhysicsBody, gameLogicDelegate )
138+ moveBucket ( bucket, bucketPhysicsBody, gameDisplayDelegate )
133139
134140 guard let cannonBall = cannonBall,
135141 let cannonBallPhysicsBody = mappings [ cannonBall] else {
136142 return
137143 }
138144
139- moveCannonBall ( cannonBall, cannonBallPhysicsBody, gameLogicDelegate )
145+ moveCannonBall ( cannonBall, cannonBallPhysicsBody, gameDisplayDelegate )
140146
141147 let collisions = cannonBallPhysicsBody. collisionsWith
142- let currentCollisions = handleCollisions ( collisions, gameLogicDelegate, cannonBallCount, cannonBall)
148+ let currentCollisions = handleCollisions ( collisions,
149+ gameDisplayDelegate,
150+ gameLogicDelegate,
151+ cannonBallCount,
152+ cannonBall)
143153
144154 let similarPositionLimit = 75
145155
146156 if cannonBallCount == 0 {
147157 cannonBallPhysicsBody. ignore ( )
148158 mappings. removeValue ( forKey: cannonBall)
149- gameLogicDelegate . didRemove ( peg: cannonBall)
159+ gameDisplayDelegate . didRemove ( peg: cannonBall)
150160 if cannonBallInBucket {
151161 numOfCannonBallsLeft += 1
152162 cannonBallInBucket = false
@@ -162,7 +172,7 @@ class SLGameEngine {
162172 }
163173 if pegInTouch. hasCollided {
164174 pegInTouch. ignore ( )
165- gameLogicDelegate . didRemove ( peg: peg)
175+ gameDisplayDelegate . didRemove ( peg: peg)
166176 }
167177 }
168178 } else {
@@ -184,13 +194,14 @@ class SLGameEngine {
184194 }
185195
186196 private func moveBucket(
187- _ bucket: Bucket , _ bucketPhysicsBody: SLPhysicsBody , _ gameLogicDelegate : GameLogicDelegate ) {
197+ _ bucket: Bucket , _ bucketPhysicsBody: SLPhysicsBody , _ gameDisplayDelegate : GameDisplayDelegate ) {
188198 bucket. center = bucketPhysicsBody. position
189- gameLogicDelegate . didMove ( peggleObject: bucket, newLocation: bucketPhysicsBody. position)
199+ gameDisplayDelegate . didMove ( peggleObject: bucket, newLocation: bucketPhysicsBody. position)
190200 }
191201
192202 private func handleCollisions(
193- _ collisions: [ SLPhysicsBody ] , _ gameLogicDelegate: GameLogicDelegate ,
203+ _ collisions: [ SLPhysicsBody ] , _ gameDisplayDelegate: GameDisplayDelegate ,
204+ _ gameLogicDelegate: GameLogicDelegate ,
194205 _ cannonBallCount: Int , _ cannonBall: Peg ) -> [ Peg ] {
195206 var currentCollisions : [ Peg ] = [ ]
196207
@@ -202,10 +213,10 @@ class SLGameEngine {
202213 }
203214 if peg is SpookyPeg || peg is KaboomPeg {
204215 powerUpHandler. handlePowerUp ( powerPeg: peg, mappings: mappings,
205- cannonBall: cannonBall, gameLogicDelegate : gameLogicDelegate )
216+ cannonBall: cannonBall, gameDisplayDelegate : gameDisplayDelegate )
206217 }
207218 if cannonBallCount == 0 {
208- gameLogicDelegate . didRemove ( peg: peg)
219+ gameDisplayDelegate . didRemove ( peg: peg)
209220 mappings. removeValue ( forKey: peg)
210221 if peg. color != cannonBall. color {
211222 gameLogicDelegate. didAddPoints ( peg. points)
@@ -226,17 +237,17 @@ class SLGameEngine {
226237 }
227238
228239 private func moveCannonBall(
229- _ cannonBall: Peg , _ cannonBallPhysicsBody: SLPhysicsBody , _ gameLogicDelegate : GameLogicDelegate ) {
240+ _ cannonBall: Peg , _ cannonBallPhysicsBody: SLPhysicsBody , _ gameDisplayDelegate : GameDisplayDelegate ) {
230241 cannonBall. center = cannonBallPhysicsBody. position
231- gameLogicDelegate . didMove ( peggleObject: cannonBall, newLocation: cannonBallPhysicsBody. position)
242+ gameDisplayDelegate . didMove ( peggleObject: cannonBall, newLocation: cannonBallPhysicsBody. position)
232243
233244 if isCannonBallInBucket ( cannonBallPhysicsBody) {
234245 cannonBallInBucket = true
235246 }
236247 powerUpHandler. handleCannonBall ( canvasDimension: canvasDimensions,
237248 cannonBall: cannonBall,
238249 cannonBallPhysicsBody: cannonBallPhysicsBody,
239- gameLogicDelegate : gameLogicDelegate )
250+ gameDisplayDelegate : gameDisplayDelegate )
240251 }
241252
242253 private func isOutOfScreen( peg: Peg ) -> Bool {
0 commit comments