@@ -23,7 +23,7 @@ class SLGameEngine {
2323 private var numOfCannonBallsLeft : Int
2424 private var numOfOrangePegs : Int
2525 private var cannonBallInBucket = false
26- private var spookyBallsActivated = 0
26+ private var powerUpHandler = PowerUpHandler ( )
2727
2828 init ( canvasDimensions: CGRect ) {
2929 self . canvasDimensions = canvasDimensions
@@ -37,7 +37,7 @@ class SLGameEngine {
3737 self . bucket = bucket
3838 self . numOfCannonBallsLeft = 10
3939 self . numOfOrangePegs = 0
40- self . spookyBallsActivated = 0
40+ self . powerUpHandler . resetCount ( )
4141
4242 var physicsObjects : [ SLPhysicsBody ] = [ ]
4343 for peggleObject in level. peggleObjects {
@@ -123,7 +123,7 @@ class SLGameEngine {
123123 moveCannonBall ( cannonBall, cannonBallPhysicsBody, gameLogicDelegate)
124124
125125 let collisions = cannonBallPhysicsBody. collisionsWith
126- let currentCollisions = handleCollisions ( collisions, gameLogicDelegate, cannonBallCount)
126+ let currentCollisions = handleCollisions ( collisions, gameLogicDelegate, cannonBallCount, cannonBall )
127127
128128 let similarPositionLimit = 75
129129
@@ -170,7 +170,8 @@ class SLGameEngine {
170170 }
171171
172172 private func handleCollisions(
173- _ collisions: [ SLPhysicsBody ] , _ gameLogicDelegate: GameLogicDelegate , _ cannonBallCount: Int ) -> [ Peg ] {
173+ _ collisions: [ SLPhysicsBody ] , _ gameLogicDelegate: GameLogicDelegate ,
174+ _ cannonBallCount: Int , _ cannonBall: Peg ) -> [ Peg ] {
174175 var currentCollisions : [ Peg ] = [ ]
175176
176177 for (key, value) in mappings where value. hasCollided {
@@ -179,17 +180,23 @@ class SLGameEngine {
179180 if contains ( arr: collisions, physicsBody: value) {
180181 currentCollisions. append ( peg)
181182 }
182- if let spookyPeg = peg as? SpookyPeg {
183- if !spookyPeg. activated {
184- spookyBallsActivated += 1
185- print ( spookyBallsActivated)
186- spookyPeg. setActivated ( )
187- }
183+ // TODO: refactor
184+ if peg is SpookyPeg || peg is KaboomPeg {
185+ powerUpHandler. handlePowerUp ( powerPeg: peg, mappings: mappings, cannonBall: cannonBall)
188186 }
187+ // if let spookyPeg = peg as? SpookyPeg {
188+ // if !spookyPeg.activated {
189+ // spookyBallsActivated += 1
190+ // print(spookyBallsActivated)
191+ // spookyPeg.setActivated()
192+ // }
193+ // }
194+ // TODO: add the handler
189195 if cannonBallCount == 0 {
190196 gameLogicDelegate. didRemove ( peg: peg)
191197 mappings. removeValue ( forKey: peg)
192198 value. ignore ( )
199+ powerUpHandler. removePowerPeg ( powerPeg: peg)
193200 if peg. color == . orangeGlow {
194201 numOfOrangePegs -= 1
195202 if numOfOrangePegs == 0 {
@@ -203,26 +210,30 @@ class SLGameEngine {
203210 return currentCollisions
204211 }
205212
213+ // TODO: add handler
206214 private func moveCannonBall(
207215 _ cannonBall: Peg , _ cannonBallPhysicsBody: SLPhysicsBody , _ gameLogicDelegate: GameLogicDelegate ) {
208216 cannonBall. center = cannonBallPhysicsBody. position
209217 gameLogicDelegate. didMove ( peggleObject: cannonBall, newLocation: cannonBallPhysicsBody. position)
210- if spookyBallsActivated > 0 {
211- gameLogicDelegate. spookCannonBall ( cannonBall: cannonBall)
212- }
218+ // if spookyBallsActivated > 0 {
219+ // gameLogicDelegate.spookCannonBall(cannonBall: cannonBall)
220+ // }
213221 if isCannonBallInBucket ( cannonBallPhysicsBody) {
214222 cannonBallInBucket = true
215223 }
216-
217- if spookyBallsActivated > 0 && isOutOfScreen ( peg: cannonBall) {
218- gameLogicDelegate. didMove ( peggleObject: cannonBall,
219- newLocation: Point ( xCoordinate: cannonBall. center. xCoordinate, yCoordinate: 0 ) )
220- cannonBallPhysicsBody. moveTo ( position: Point ( xCoordinate: cannonBall. center. xCoordinate, yCoordinate: 0 ) )
221- cannonBallPhysicsBody
222- . setVelocity ( newVelocity: cannonBallPhysicsBody. velocity. multiplyWithScalar ( scalar: 0.5 ) )
223- spookyBallsActivated -= 1
224- print ( " used one spooky ball, \( spookyBallsActivated) left " )
225- }
224+ powerUpHandler. handleCannonBall ( canvasDimension: canvasDimensions,
225+ cannonBall: cannonBall,
226+ cannonBallPhysicsBody: cannonBallPhysicsBody,
227+ gameLogicDelegate: gameLogicDelegate)
228+ // if spookyBallsActivated > 0 && isOutOfScreen(peg: cannonBall) {
229+ // gameLogicDelegate.didMove(peggleObject: cannonBall,
230+ // newLocation: Point(xCoordinate: cannonBall.center.xCoordinate, yCoordinate: 0))
231+ // cannonBallPhysicsBody.moveTo(position: Point(xCoordinate: cannonBall.center.xCoordinate, yCoordinate: 0))
232+ // cannonBallPhysicsBody
233+ // .setVelocity(newVelocity: cannonBallPhysicsBody.velocity.multiplyWithScalar(scalar: 0.5))
234+ // spookyBallsActivated -= 1
235+ // print("used one spooky ball, \(spookyBallsActivated) left")
236+ // }
226237 }
227238
228239 private func isOutOfScreen( peg: Peg ) -> Bool {
0 commit comments