The first time I call this it works great. Enemies are loaded in exactly where I'd like them to be... The goal is when the current wave of enemies are defeated... a second wave of enemies are loaded in exactly the same repetitive way.
The second time I call "loadPatternEnemies(number:Int)" I get the "in here?" in the console... but no enemies are added...
What am I doing wrong here?
func loadPatternEnemies(number:Int) {
switch number {
case 0:
print("in here?")
let parentTimer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(self.addEnemyToScene(timer:)), userInfo: nil, repeats: true)
enemySpawnTimers.append(parentTimer)
enemiesInCurrentWaveLeftToKill = positions.count
default:
print("default reached")
}
}
@objc func addEnemyToScene(timer: Timer) {
if indexForPositions == positions.count {
enemySpawnTimers[currentWaveNumber].invalidate()
indexForPositions = 0
} else {
var newEnemy = Enemy()
newEnemy.health = 1
newEnemy.position = SCNVector3(positions[indexForPositions].x,positions[indexForPositions].y,positions[indexForPositions].z)
newEnemy.name = "enemy\(enemiesInSceneArray.count)"
newEnemy.timerToShoot = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.enemyFireBullet(timer:)), userInfo: newEnemy, repeats: true)
enemiesInSceneArray.append(newEnemy)
let enemyNode = SCNNode(geometry: SCNSphere(radius: 2))
enemyNode.position = newEnemy.position
enemyNode.name = newEnemy.name
enemyNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: enemyNode.geometry!, options: nil))
enemyNode.physicsBody?.categoryBitMask = BitMaskCategory.enemy.rawValue
self.sceneView.scene.rootNode.addChildNode(enemyNode)
indexForPositions += 1
}
}
func enemyHit(bulletNode : SCNNode, enemyNode : SCNNode) {
bulletNode.removeFromParentNode()
if let index = enemiesInSceneArray.index(where: { $0.name == enemyNode.name }) {
enemiesInSceneArray[index].health -= 1
if enemiesInSceneArray[index].health <= 0 {
enemiesInSceneArray[index].timerToShoot.invalidate()
enemyNode.removeFromParentNode()
score += 1
enemiesInCurrentWaveLeftToKill -= 1
}
if enemiesInCurrentWaveLeftToKill == 0 && score > 2 {
currentWaveNumber += 1
loadPatternEnemies(number: 0)
}
}
}