diff --git a/GoldWars/GoldWars.xcodeproj/project.pbxproj b/GoldWars/GoldWars.xcodeproj/project.pbxproj index 2d47daa..9063e7d 100644 --- a/GoldWars/GoldWars.xcodeproj/project.pbxproj +++ b/GoldWars/GoldWars.xcodeproj/project.pbxproj @@ -31,6 +31,8 @@ 9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C85245DD91500209FF0 /* ButtonComponent.swift */; }; 9E174C88245DF1FF00209FF0 /* BackgroundComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */; }; 9E174C8A245E1A0A00209FF0 /* Background.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C89245E1A0A00209FF0 /* Background.swift */; }; + 9E61EAC4249BAC9100334DDE /* LoserFire.sks in Resources */ = {isa = PBXBuildFile; fileRef = 9E61EAC2249BAC9100334DDE /* LoserFire.sks */; }; + 9E61EAC7249BB61A00334DDE /* SpinningLogo3DNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E61EAC6249BB61A00334DDE /* SpinningLogo3DNode.swift */; }; 9E78ACB6245C9A5300526FF7 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E78ACB5245C9A5300526FF7 /* GameKit.framework */; }; 9E78ACB8245CB75B00526FF7 /* TeamComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */; }; 9E78ACBA245CBDAF00526FF7 /* HUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACB9245CBDAF00526FF7 /* HUD.swift */; }; @@ -41,7 +43,6 @@ 9EC7E48B2461FBF700396BCD /* SliderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC7E48A2461FBF700396BCD /* SliderNode.swift */; }; 9EC86B9F245C88A300796EF3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC86B9E245C88A300796EF3 /* Modal.swift */; }; 9EEDE02D246FCD770096C735 /* SpinningLogoEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EEDE02C246FCD770096C735 /* SpinningLogoEntity.swift */; }; - 9EEDE02F246FCD800096C735 /* SpinningLogoComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EEDE02E246FCD800096C735 /* SpinningLogoComponent.swift */; }; AB21D7D5246C748A00B09CBA /* MapFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB21D7D4246C748A00B09CBA /* MapFactory.swift */; }; ABA03DA0244BD54F00A66916 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA03D9F244BD54F00A66916 /* Base.swift */; }; ABC0C3732481509300387B8F /* MapUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC0C3722481509300387B8F /* MapUtils.swift */; }; @@ -94,6 +95,8 @@ 9E174C85245DD91500209FF0 /* ButtonComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonComponent.swift; sourceTree = ""; }; 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundComponent.swift; sourceTree = ""; }; 9E174C89245E1A0A00209FF0 /* Background.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Background.swift; sourceTree = ""; }; + 9E61EAC2249BAC9100334DDE /* LoserFire.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = LoserFire.sks; sourceTree = ""; }; + 9E61EAC6249BB61A00334DDE /* SpinningLogo3DNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpinningLogo3DNode.swift; sourceTree = ""; }; 9E78ACB5245C9A5300526FF7 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamComponent.swift; sourceTree = ""; }; 9E78ACB9245CBDAF00526FF7 /* HUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUD.swift; sourceTree = ""; }; @@ -105,7 +108,6 @@ 9EC86B9E245C88A300796EF3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = ""; }; 9ECD3699245C91F7008DEEBD /* GoldWars.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = GoldWars.entitlements; sourceTree = ""; }; 9EEDE02C246FCD770096C735 /* SpinningLogoEntity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpinningLogoEntity.swift; sourceTree = ""; }; - 9EEDE02E246FCD800096C735 /* SpinningLogoComponent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpinningLogoComponent.swift; sourceTree = ""; }; AB21D7D4246C748A00B09CBA /* MapFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapFactory.swift; sourceTree = ""; }; ABA03D9F244BD54F00A66916 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; ABC0C3722481509300387B8F /* MapUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapUtils.swift; sourceTree = ""; }; @@ -207,8 +209,8 @@ 8BB6FF3F2472B8F000162BBD /* SingeClickButtonNode.swift */, C05BB9C3247D890C00411249 /* SliderComponent.swift */, 9EC7E48A2461FBF700396BCD /* SliderNode.swift */, - 9EEDE02E246FCD800096C735 /* SpinningLogoComponent.swift */, 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */, + 9E61EAC6249BB61A00334DDE /* SpinningLogo3DNode.swift */, ); path = Components; sourceTree = ""; @@ -234,6 +236,7 @@ children = ( 3F79FFDF2486F7CD003F79C3 /* Explosion.sks */, 9E11FF77245CD81100EED3BE /* Fire.sks */, + 9E61EAC2249BAC9100334DDE /* LoserFire.sks */, ); path = Partikels; sourceTree = ""; @@ -368,6 +371,7 @@ 9E11FF79245CD81100EED3BE /* Fire.sks in Resources */, 110360E0244B101B008610AF /* Assets.xcassets in Resources */, 110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */, + 9E61EAC4249BAC9100334DDE /* LoserFire.sks in Resources */, C04783EE2468583F004961FB /* intro-music.mp3 in Resources */, 3F79FFE02486F7CD003F79C3 /* Explosion.sks in Resources */, ); @@ -418,7 +422,7 @@ ABC0C3732481509300387B8F /* MapUtils.swift in Sources */, 9E174C82245DD81D00209FF0 /* ButtonNode.swift in Sources */, 9EC7E48B2461FBF700396BCD /* SliderNode.swift in Sources */, - 9EEDE02F246FCD800096C735 /* SpinningLogoComponent.swift in Sources */, + 9E61EAC7249BB61A00334DDE /* SpinningLogo3DNode.swift in Sources */, 9E174C84245DD8CE00209FF0 /* Button.swift in Sources */, 110360DB244B101A008610AF /* GameViewController.swift in Sources */, C05BB9C4247D890C00411249 /* SliderComponent.swift in Sources */, diff --git a/GoldWars/GoldWars/Assets.xcassets/winner.imageset/Contents.json b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/Contents.json new file mode 100644 index 0000000..136177b --- /dev/null +++ b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "winner.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "winner-1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "winner-2.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner-1.png b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner-1.png new file mode 100644 index 0000000..b993caf Binary files /dev/null and b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner-1.png differ diff --git a/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner-2.png b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner-2.png new file mode 100644 index 0000000..b993caf Binary files /dev/null and b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner-2.png differ diff --git a/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner.png b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner.png new file mode 100644 index 0000000..b993caf Binary files /dev/null and b/GoldWars/GoldWars/Assets.xcassets/winner.imageset/winner.png differ diff --git a/GoldWars/GoldWars/Components/SpinningLogo3DNode.swift b/GoldWars/GoldWars/Components/SpinningLogo3DNode.swift new file mode 100644 index 0000000..72a2638 --- /dev/null +++ b/GoldWars/GoldWars/Components/SpinningLogo3DNode.swift @@ -0,0 +1,40 @@ +// +// SpinningLogo3DNode.swift +// GoldWars +// +// Created by Niko Jochim on 18.06.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation +import SpriteKit +import GameKit +class SpinningLogo3DNode : SK3DNode { + + init() { + super.init(viewportSize: CGSize(width: 250, height: 250)) + let scnScene: SCNScene = { + let scnScene = SCNScene() + let cylinder = SCNCylinder(radius: 250, height: 50) + let logoMaterial = SCNMaterial() + let colorMaterial = SCNMaterial() + logoMaterial.diffuse.contents = UIImage(named: "logo_no_background") + colorMaterial.diffuse.contents = UIColor(red: 0.852, green: 0.649, blue: 0.123, alpha: 1) + cylinder.materials = [colorMaterial,logoMaterial,logoMaterial] + let cylinderNode = SCNNode(geometry: cylinder) + cylinderNode.eulerAngles = SCNVector3(x: Float(CGFloat.pi / 2), y: 0, z: Float(CGFloat.pi / 2)) + let action = SCNAction.rotateBy(x: CGFloat(GLKMathDegreesToRadians(360)), y:0 , z: 0, duration: 8) + let forever = SCNAction.repeatForever(action) + cylinderNode.runAction(forever) + scnScene.rootNode.addChildNode(cylinderNode) + return scnScene + }() + self.scnScene = scnScene + self.position = position + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + diff --git a/GoldWars/GoldWars/Components/SpinningLogoComponent.swift b/GoldWars/GoldWars/Components/SpinningLogoComponent.swift deleted file mode 100644 index ab01672..0000000 --- a/GoldWars/GoldWars/Components/SpinningLogoComponent.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// SpinningLogoComponent.swift -// GoldWars -// -// Created by Niko Jochim on 15.05.20. -// Copyright © 2020 SP2. All rights reserved. -// - -import Foundation -import GameKit - -class SpinningLogoComponent: GKComponent{ - - var node : SK3DNode - - init(position: CGPoint) { - - let scnScene: SCNScene = { - let scnScene = SCNScene() - let cylinder = SCNCylinder(radius: 250, height: 50) - let logoMaterial = SCNMaterial() - let colorMaterial = SCNMaterial() - logoMaterial.diffuse.contents = UIImage(named: "logo_no_background") - colorMaterial.diffuse.contents = UIColor(red: 0.852, green: 0.649, blue: 0.123, alpha: 1) - cylinder.materials = [colorMaterial,logoMaterial,logoMaterial] - let cylinderNode = SCNNode(geometry: cylinder) - cylinderNode.eulerAngles = SCNVector3(x: Float(CGFloat.pi / 2), y: 0, z: Float(CGFloat.pi / 2)) - let action = SCNAction.rotateBy(x: CGFloat(GLKMathDegreesToRadians(360)), y:0 , z: 0, duration: 8) - let forever = SCNAction.repeatForever(action) - cylinderNode.runAction(forever) - scnScene.rootNode.addChildNode(cylinderNode) - return scnScene - }() - - self.node = SK3DNode(viewportSize: CGSize(width: 250, height: 250)) - node.scnScene = scnScene - node.position = position - super.init() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - -} diff --git a/GoldWars/GoldWars/Entities/EntityManager.swift b/GoldWars/GoldWars/Entities/EntityManager.swift index 49b0941..40dc301 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -60,8 +60,12 @@ class EntityManager { scene.addChild(hudEntitiy.blockWholeScreenPane) } + if let spinningLogoEntity = entity as? SpinningLogoEntity { + scene.addChild(spinningLogoEntity.spinningLogoNode) + } + if let wayEntity = entity as? Way { - scene.addChild(wayEntity.localWayComponent) + scene.addChild(wayEntity.localWayComponent) } if let spriteNode = entity.component(ofType: DefaultBaseComponent.self) { @@ -88,9 +92,7 @@ class EntityManager { if let labelNode = entity.component(ofType: LabelComponent.self)?.labelNode { scene.addChild(labelNode) } - if let node = entity.component(ofType: SpinningLogoComponent.self)?.node { - scene.addChild(node) - } + } func remove(_ entity: GKEntity) { diff --git a/GoldWars/GoldWars/Entities/SpinningLogoEntity.swift b/GoldWars/GoldWars/Entities/SpinningLogoEntity.swift index 0e84923..bde9785 100644 --- a/GoldWars/GoldWars/Entities/SpinningLogoEntity.swift +++ b/GoldWars/GoldWars/Entities/SpinningLogoEntity.swift @@ -11,9 +11,12 @@ import GameplayKit class SpinningLogoEntity: GKEntity { + let spinningLogoNode : SpinningLogo3DNode + init(position: CGPoint) { + spinningLogoNode = SpinningLogo3DNode() + spinningLogoNode.position = position super.init() - self.addComponent(SpinningLogoComponent(position: position)) } required init?(coder: NSCoder) { diff --git a/GoldWars/GoldWars/Partikels/Explosion.sks b/GoldWars/GoldWars/Partikels/Explosion.sks index 179dbe7..05170cb 100644 Binary files a/GoldWars/GoldWars/Partikels/Explosion.sks and b/GoldWars/GoldWars/Partikels/Explosion.sks differ diff --git a/GoldWars/GoldWars/Partikels/Fire.sks b/GoldWars/GoldWars/Partikels/Fire.sks index 1f31d2e..93a4b74 100644 Binary files a/GoldWars/GoldWars/Partikels/Fire.sks and b/GoldWars/GoldWars/Partikels/Fire.sks differ diff --git a/GoldWars/GoldWars/Partikels/LoserFire.sks b/GoldWars/GoldWars/Partikels/LoserFire.sks new file mode 100644 index 0000000..bd7ef75 Binary files /dev/null and b/GoldWars/GoldWars/Partikels/LoserFire.sks differ diff --git a/GoldWars/GoldWars/RoundTimer.swift b/GoldWars/GoldWars/RoundTimer.swift index af64e15..c8bc801 100644 --- a/GoldWars/GoldWars/RoundTimer.swift +++ b/GoldWars/GoldWars/RoundTimer.swift @@ -57,18 +57,18 @@ class RoundTimer: Timer { MultiplayerNetwork.sharedInstance.sendPlayerMoves(localRoundData: DataService.sharedInstance.localRoundData) } calculate = true - if timeLeft <= 0 { - if calculate - && !RoundCalculatorService.sharedInstance.isCalculating - && DataService.sharedInstance.didReceiveAllData() - && GameCenterManager.sharedInstance.isServer { - RoundCalculatorService.sharedInstance.calculateRound() - calculate = false - } + } + + if timeLeft <= 0 { + if calculate + && !RoundCalculatorService.sharedInstance.isCalculating + && DataService.sharedInstance.didReceiveAllData() + && GameCenterManager.sharedInstance.isServer { + RoundCalculatorService.sharedInstance.calculateRound() + calculate = false } } - } } diff --git a/GoldWars/GoldWars/Scenes/GameScene.swift b/GoldWars/GoldWars/Scenes/GameScene.swift index 09da3f9..0737ad2 100644 --- a/GoldWars/GoldWars/Scenes/GameScene.swift +++ b/GoldWars/GoldWars/Scenes/GameScene.swift @@ -31,9 +31,9 @@ class GameScene: SKScene{ } override func didMove(to view: SKView) { - NotificationCenter.default.addObserver(self, selector: #selector(pauseGame), name: Notification.Name("pauseGame"), object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(resumeGame), name: Notification.Name("resumeGame"), object: nil) -} + NotificationCenter.default.addObserver(self, selector: #selector(pauseGame), name: Notification.Name("pauseGame"), object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(resumeGame), name: Notification.Name("resumeGame"), object: nil) + } override func touchesEnded(_ touches: Set, with event: UIEvent?) { guard let touch = touches.first else { @@ -79,7 +79,6 @@ class GameScene: SKScene{ override func update(_ currentTime: TimeInterval) { if entityManager.entities.count != 0 { entityManager.getBackground()?.update(deltaTime: currentTime) - print("Update") if GameCenterManager.sharedInstance.gameEnded && !gameEndEffects { gameEnd() } @@ -129,25 +128,16 @@ class GameScene: SKScene{ } func gameEnd(){ - print("Game END") gameEndEffects = true - let winnerNode:String? GameCenterManager.sharedInstance.gameEnded = false - - if GameCenterManager.sharedInstance.isServer { - winnerNode = "hostLabel" - } else { - winnerNode = "peerLabel" - } - let move = SKAction.move(to: CGPoint(x: self.size.width / 2, y: self.size.height / 2), duration: 1) let removeParticle = SKAction.removeFromParent() let sequence = SKAction.sequence([move, removeParticle]) var n = 0 for nodeChild in children { - if nodeChild.name == winnerNode { + if nodeChild.name == "peerLabel" || nodeChild.name == "hostLabel"{ continue } if nodeChild.name == "way" { @@ -157,19 +147,19 @@ class GameScene: SKScene{ if nodeChild.name != "clouds"{ nodeChild.run(sequence,completion: { if n < 1 { - let explosion = SKEmitterNode(fileNamed: "Explosion")! - explosion.zPosition = 2 - explosion.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2) - explosion.name = "explosion" - explosion.particleColorSequence = nil - explosion.particleColorBlendFactor = 1.0 + let explosion = self.getFinalExplosion() self.addChild(explosion) let action = SKAction.afterDelay(2) { - let size = SKAction.scale(by: 3, duration: 1) - (self.childNode(withName: winnerNode!) as! SKLabelNode).horizontalAlignmentMode = .center - self.childNode(withName: winnerNode!)?.run(SKAction.sequence([move,size])) - let node = ButtonNode(textureName: "yellow_button05", text: "Menu", isEnabled: true, position: CGPoint(x: self.size.width / 2, y: self.size.height / 2 - 200), onButtonPress: { - self.buttonPressed() + + (self.childNode(withName: "hostLabel") as! SKLabelNode).horizontalAlignmentMode = .center + (self.childNode(withName: "peerLabel") as! SKLabelNode).horizontalAlignmentMode = .center + self.childNode(withName: "hostLabel")?.run(SKAction.move(to: CGPoint(x: self.size.width * 0.25, y: self.size.height * 0.3), duration: 1)) + self.childNode(withName: "peerLabel")?.run(SKAction.move(to: CGPoint(x: self.size.width * 0.75, y: self.size.height * 0.3), duration: 1)) + + self.initGameEndIcons() + + let node = ButtonNode(textureName: "yellow_button05", text: "Menu", isEnabled: true, position: CGPoint(x: self.size.width / 2, y: self.size.height / 2 - 300), onButtonPress: { + self.backToMenuAction() }) node.name = "BackButton" self.addChild(node) @@ -183,7 +173,73 @@ class GameScene: SKScene{ } } - func buttonPressed() { + func initGameEndIcons() { + let iclonSize = CGSize(width: 400, height: 400) + let winnerIcon = SKSpriteNode(texture: SKTexture(imageNamed: "winner")); + winnerIcon.size = iclonSize + + let loserIcon = SKSpriteNode(texture: SKTexture(imageNamed: "BaseTexture")) + loserIcon.size = iclonSize + let loserFire = SKEmitterNode(fileNamed: "LoserFire") + loserFire?.zPosition = loserIcon.zPosition - 1 + loserFire?.run(SKAction.scale(by: 4, duration: 8)) + + + let iconPosition1 = CGPoint(x: self.size.width * 0.25, y: self.size.height * 0.55) + let iconPosition2 = CGPoint(x: self.size.width * 0.75, y: self.size.height * 0.55) + let coin = SpinningLogo3DNode() + if GameCenterManager.sharedInstance.winner == GameCenterManager.sharedInstance.hostingPlayer?.displayName { + winnerIcon.position = iconPosition1 + coin.position = iconPosition1 + loserIcon.position = iconPosition2 + loserFire?.position = iconPosition2 + + } else { + winnerIcon.position = iconPosition2 + coin.position = iconPosition2 + loserIcon.position = iconPosition1 + loserFire?.position = iconPosition1 + } + + self.addChild(winnerIcon) + self.addChild(coin) + self.addChild(loserIcon) + self.addChild(loserFire!) + } + + func getFinalExplosion() -> SKEmitterNode { + let explosion = SKEmitterNode(fileNamed: "Explosion")! + explosion.zPosition = 2 + explosion.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2) + explosion.name = "explosion" + explosion.particleColorSequence = nil + explosion.particleColorBlendFactor = 1.0 + return explosion + } + + func goldWarsCoin() -> SK3DNode { + let scnScene: SCNScene = { + let scnScene = SCNScene() + let cylinder = SCNCylinder(radius: 250, height: 50) + let logoMaterial = SCNMaterial() + let colorMaterial = SCNMaterial() + logoMaterial.diffuse.contents = UIImage(named: "logo_no_background") + colorMaterial.diffuse.contents = UIColor(red: 0.852, green: 0.649, blue: 0.123, alpha: 1) + cylinder.materials = [colorMaterial,logoMaterial,logoMaterial] + let cylinderNode = SCNNode(geometry: cylinder) + cylinderNode.eulerAngles = SCNVector3(x: Float(CGFloat.pi / 2), y: 0, z: Float(CGFloat.pi / 2)) + let action = SCNAction.rotateBy(x: CGFloat(GLKMathDegreesToRadians(360)), y:0 , z: 0, duration: 8) + let forever = SCNAction.repeatForever(action) + cylinderNode.runAction(forever) + scnScene.rootNode.addChildNode(cylinderNode) + return scnScene + }() + let node = SK3DNode(viewportSize: CGSize(width: 250, height: 250)) + node.scnScene = scnScene + return node + } + + func backToMenuAction() { GameCenterManager.sharedInstance.reset() self.gameEndEffects = false entityManager.getTimer()?.stopTimer() @@ -255,7 +311,7 @@ class GameScene: SKScene{ currentDraggedBase: nil, touchLocation: nil, collisionBase: nil - )) + )) } @objc func resumeGame() -> Void { entityManager.removeModal()