diff --git a/GoldWars/GoldWars.xcodeproj/project.pbxproj b/GoldWars/GoldWars.xcodeproj/project.pbxproj index 0017a0d..d42f8be 100644 --- a/GoldWars/GoldWars.xcodeproj/project.pbxproj +++ b/GoldWars/GoldWars.xcodeproj/project.pbxproj @@ -16,15 +16,16 @@ 110360EE244B101B008610AF /* GoldWarsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360ED244B101B008610AF /* GoldWarsTests.swift */; }; 11036113244B3E30008610AF /* MenuScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11036112244B3E30008610AF /* MenuScene.swift */; }; 116060F7245C57D2004E5A36 /* EntityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116060F6245C57D2004E5A36 /* EntityManager.swift */; }; - 205ED9CB249507E200B28718 /* use_boost.wav in Resources */ = {isa = PBXBuildFile; fileRef = 205ED9C8249507E200B28718 /* use_boost.wav */; }; - 205ED9CC249507E200B28718 /* attack_base.wav in Resources */ = {isa = PBXBuildFile; fileRef = 205ED9C9249507E200B28718 /* attack_base.wav */; }; - 205ED9CD249507E200B28718 /* new_round.wav in Resources */ = {isa = PBXBuildFile; fileRef = 205ED9CA249507E200B28718 /* new_round.wav */; }; + 20F1990724A4FAC1004B7A30 /* new_round.wav in Resources */ = {isa = PBXBuildFile; fileRef = 20F1990424A4FAC1004B7A30 /* new_round.wav */; }; + 20F1990824A4FAC1004B7A30 /* use_boost.wav in Resources */ = {isa = PBXBuildFile; fileRef = 20F1990524A4FAC1004B7A30 /* use_boost.wav */; }; + 20F1990924A4FAC1004B7A30 /* attack_base.wav in Resources */ = {isa = PBXBuildFile; fileRef = 20F1990624A4FAC1004B7A30 /* attack_base.wav */; }; 3E67854024728368007B9DE4 /* CElements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E67853F24728368007B9DE4 /* CElements.swift */; }; 3E6785422472CBEC007B9DE4 /* Way.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E6785412472CBEC007B9DE4 /* Way.swift */; }; 3EAD889524801B6A0048A10A /* RoundTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EAD889424801B6A0048A10A /* RoundTimer.swift */; }; 3EBD242E245D9332003CECE7 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242D245D9332003CECE7 /* Team.swift */; }; 3F79FFE02486F7CD003F79C3 /* Explosion.sks in Resources */ = {isa = PBXBuildFile; fileRef = 3F79FFDF2486F7CD003F79C3 /* Explosion.sks */; }; 3FE19DB5246C7A22004827AB /* RoundCalculatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE19DB4246C7A22004827AB /* RoundCalculatorService.swift */; }; + 8B9CA5F1249A3C2E00561704 /* SkillButtonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B9CA5F0249A3C2E00561704 /* SkillButtonNode.swift */; }; 8BB6FF402472B8F000162BBD /* SingeClickButtonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BB6FF3F2472B8F000162BBD /* SingeClickButtonNode.swift */; }; 9E0E459724796262009817A6 /* GameCenterManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0E459624796262009817A6 /* GameCenterManager.swift */; }; 9E11FF79245CD81100EED3BE /* Fire.sks in Resources */ = {isa = PBXBuildFile; fileRef = 9E11FF77245CD81100EED3BE /* Fire.sks */; }; @@ -84,15 +85,16 @@ 110360EF244B101B008610AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 11036112244B3E30008610AF /* MenuScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuScene.swift; sourceTree = ""; }; 116060F6245C57D2004E5A36 /* EntityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntityManager.swift; sourceTree = ""; }; - 205ED9C8249507E200B28718 /* use_boost.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = use_boost.wav; sourceTree = ""; }; - 205ED9C9249507E200B28718 /* attack_base.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = attack_base.wav; sourceTree = ""; }; - 205ED9CA249507E200B28718 /* new_round.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = new_round.wav; sourceTree = ""; }; + 20F1990424A4FAC1004B7A30 /* new_round.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = new_round.wav; sourceTree = ""; }; + 20F1990524A4FAC1004B7A30 /* use_boost.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = use_boost.wav; sourceTree = ""; }; + 20F1990624A4FAC1004B7A30 /* attack_base.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = attack_base.wav; sourceTree = ""; }; 3E67853F24728368007B9DE4 /* CElements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CElements.swift; sourceTree = ""; }; 3E6785412472CBEC007B9DE4 /* Way.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Way.swift; sourceTree = ""; }; 3EAD889424801B6A0048A10A /* RoundTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundTimer.swift; sourceTree = ""; }; 3EBD242D245D9332003CECE7 /* Team.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Team.swift; sourceTree = ""; }; 3F79FFDF2486F7CD003F79C3 /* Explosion.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Explosion.sks; sourceTree = ""; }; 3FE19DB4246C7A22004827AB /* RoundCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundCalculatorService.swift; sourceTree = ""; }; + 8B9CA5F0249A3C2E00561704 /* SkillButtonNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillButtonNode.swift; sourceTree = ""; }; 8BB6FF3F2472B8F000162BBD /* SingeClickButtonNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingeClickButtonNode.swift; sourceTree = ""; }; 9E0E459624796262009817A6 /* GameCenterManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCenterManager.swift; sourceTree = ""; }; 9E11FF77245CD81100EED3BE /* Fire.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Fire.sks; sourceTree = ""; }; @@ -171,9 +173,9 @@ isa = PBXGroup; children = ( C04783ED2468583F004961FB /* intro-music.mp3 */, - 205ED9C9249507E200B28718 /* attack_base.wav */, - 205ED9CA249507E200B28718 /* new_round.wav */, - 205ED9C8249507E200B28718 /* use_boost.wav */, + 20F1990624A4FAC1004B7A30 /* attack_base.wav */, + 20F1990424A4FAC1004B7A30 /* new_round.wav */, + 20F1990524A4FAC1004B7A30 /* use_boost.wav */, 9ECD3699245C91F7008DEEBD /* GoldWars.entitlements */, 9E11FF74245CD79100EED3BE /* Partikels */, 116060F5245C5709004E5A36 /* Entities */, @@ -220,6 +222,7 @@ C064E9A7246C0EA50022B228 /* LabelNode.swift */, 9EC2FBA62476B1EC00ABF11F /* PlayerInfoComponent.swift */, 8BB6FF3F2472B8F000162BBD /* SingeClickButtonNode.swift */, + 8B9CA5F0249A3C2E00561704 /* SkillButtonNode.swift */, C05BB9C3247D890C00411249 /* SliderComponent.swift */, 9EC7E48A2461FBF700396BCD /* SliderNode.swift */, 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */, @@ -379,16 +382,16 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 205ED9CD249507E200B28718 /* new_round.wav in Resources */, 110360DE244B101A008610AF /* Main.storyboard in Resources */, + 20F1990924A4FAC1004B7A30 /* attack_base.wav in Resources */, 9E11FF79245CD81100EED3BE /* Fire.sks in Resources */, + 20F1990724A4FAC1004B7A30 /* new_round.wav in Resources */, 110360E0244B101B008610AF /* Assets.xcassets in Resources */, 110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */, 9E61EAC4249BAC9100334DDE /* LoserFire.sks in Resources */, + 20F1990824A4FAC1004B7A30 /* use_boost.wav in Resources */, C04783EE2468583F004961FB /* intro-music.mp3 in Resources */, - 205ED9CC249507E200B28718 /* attack_base.wav in Resources */, 3F79FFE02486F7CD003F79C3 /* Explosion.sks in Resources */, - 205ED9CB249507E200B28718 /* use_boost.wav in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -430,6 +433,7 @@ 9E174C8A245E1A0A00209FF0 /* Background.swift in Sources */, 8BB6FF402472B8F000162BBD /* SingeClickButtonNode.swift in Sources */, C064E9A8246C0EA50022B228 /* LabelNode.swift in Sources */, + 8B9CA5F1249A3C2E00561704 /* SkillButtonNode.swift in Sources */, 3EAD889524801B6A0048A10A /* RoundTimer.swift in Sources */, AE0C8E2F249BCC2A00996360 /* RulesScene.swift in Sources */, 3E67854024728368007B9DE4 /* CElements.swift in Sources */, diff --git a/GoldWars/GoldWars/Assets.xcassets/atk_button.imageset/Contents.json b/GoldWars/GoldWars/Assets.xcassets/atk_button.imageset/Contents.json new file mode 100644 index 0000000..fc47f62 --- /dev/null +++ b/GoldWars/GoldWars/Assets.xcassets/atk_button.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "atk_button.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoldWars/GoldWars/Assets.xcassets/atk_button.imageset/atk_button.png b/GoldWars/GoldWars/Assets.xcassets/atk_button.imageset/atk_button.png new file mode 100644 index 0000000..7b685da Binary files /dev/null and b/GoldWars/GoldWars/Assets.xcassets/atk_button.imageset/atk_button.png differ diff --git a/GoldWars/GoldWars/Assets.xcassets/def_button.imageset/Contents.json b/GoldWars/GoldWars/Assets.xcassets/def_button.imageset/Contents.json new file mode 100644 index 0000000..f6ac2bb --- /dev/null +++ b/GoldWars/GoldWars/Assets.xcassets/def_button.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "def_button.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoldWars/GoldWars/Assets.xcassets/def_button.imageset/def_button.png b/GoldWars/GoldWars/Assets.xcassets/def_button.imageset/def_button.png new file mode 100644 index 0000000..b6fc30b Binary files /dev/null and b/GoldWars/GoldWars/Assets.xcassets/def_button.imageset/def_button.png differ diff --git a/GoldWars/GoldWars/Assets.xcassets/spy_button.imageset/Contents.json b/GoldWars/GoldWars/Assets.xcassets/spy_button.imageset/Contents.json new file mode 100644 index 0000000..9f41e34 --- /dev/null +++ b/GoldWars/GoldWars/Assets.xcassets/spy_button.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "spy_button.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoldWars/GoldWars/Assets.xcassets/spy_button.imageset/spy_button.png b/GoldWars/GoldWars/Assets.xcassets/spy_button.imageset/spy_button.png new file mode 100644 index 0000000..975c77a Binary files /dev/null and b/GoldWars/GoldWars/Assets.xcassets/spy_button.imageset/spy_button.png differ diff --git a/GoldWars/GoldWars/Components/ButtonNode.swift b/GoldWars/GoldWars/Components/ButtonNode.swift index b98164a..8129fa9 100644 --- a/GoldWars/GoldWars/Components/ButtonNode.swift +++ b/GoldWars/GoldWars/Components/ButtonNode.swift @@ -21,17 +21,15 @@ class ButtonNode: SKSpriteNode { } } } - + var label: SKLabelNode var onButtonPress: () -> () init(textureName: String, text: String, isEnabled: Bool, position: CGPoint, onButtonPress: @escaping () -> ()) { self.onButtonPress = onButtonPress self.isEnabled = isEnabled let texture = SKTexture(imageNamed: textureName) - super.init(texture: texture, color: SKColor.white, size: texture.size()) - self.position = position - - let label = SKLabelNode(fontNamed: "Courier-Bold") + + label = SKLabelNode(fontNamed: "Courier-Bold") label.fontSize = 30 label.fontColor = SKColor.black label.zPosition = 1 @@ -39,6 +37,9 @@ class ButtonNode: SKSpriteNode { label.text = text label.name = "label" + super.init(texture: texture, color: SKColor.white, size: texture.size()) + self.position = position + self.addChild(label) isUserInteractionEnabled = true } diff --git a/GoldWars/GoldWars/Components/SkillButtonNode.swift b/GoldWars/GoldWars/Components/SkillButtonNode.swift new file mode 100644 index 0000000..069b9d5 --- /dev/null +++ b/GoldWars/GoldWars/Components/SkillButtonNode.swift @@ -0,0 +1,56 @@ +// +// SkillButtonNode.swift +// GoldWars +// +// Created by Simon Kellner on 17.06.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import SpriteKit + +class SkillButtonNode: ButtonNode { + + + var cooldownCounter = 0 + var hasCooled: Bool = false + let cooldown: Int + let displayText: String + + init(textureName: String, text: String, isEnabled: Bool, cooldown: Int, position: CGPoint, onButtonPress: @escaping () -> ()) { + self.cooldown = cooldown + self.displayText = text + super.init(textureName: textureName, text: text, isEnabled: isEnabled, position: position, onButtonPress: onButtonPress) + } + + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + super.touchesBegan(touches, with: event) + super.isEnabled = false + self.cooldownCounter = self.cooldown + self.hasCooled = true + } + + func decreaseCooldown() { + if self.cooldownCounter <= 1 { + super.isEnabled = true + super.label.text = self.displayText + let newRoundAction = SKAction.sequence([ + SKAction.scale(by: 1.5, duration: 1), + SKAction.scale(by: 1/1.5, duration: 1), + ]) + if hasCooled { + self.run(newRoundAction) + self.hasCooled = false + } + } else { + super.isEnabled = false + self.cooldownCounter -= 1 + super.label.text = self.cooldownCounter.description + } + } + + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/GoldWars/GoldWars/Entities/Base.swift b/GoldWars/GoldWars/Entities/Base.swift index 65e0c3c..8166bad 100644 --- a/GoldWars/GoldWars/Entities/Base.swift +++ b/GoldWars/GoldWars/Entities/Base.swift @@ -51,7 +51,11 @@ class Base: GKEntity{ self.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(self.unitCount)" if base.component(ofType: TeamComponent.self)?.unitcountLabel.text != "" { - base.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(base.unitCount)" + if base.ownershipPlayer != self.ownershipPlayer { + base.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(abs(base.unitCount - units * 2))" + } else { + base.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(base.unitCount)" + } } DataService.sharedInstance.addMove(playerMove: PlayerMove(fromBase: self.baseID, toBase: base.baseID, diff --git a/GoldWars/GoldWars/Entities/EntityManager.swift b/GoldWars/GoldWars/Entities/EntityManager.swift index ae1b1fd..512a224 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -294,6 +294,11 @@ class EntityManager { return entities.filter{$0 is Button && ($0 as! Button).name == buttonName }[0] as! Button } + func changeSettingsButtonText(buttonName: String, text: String) { + let button = entities.filter{$0 is Button && ($0 as! Button).name == buttonName }[0] as! Button + button.component(ofType: ButtonComponent.self)?.buttonNode.label.text = text + } + func getHUD() -> HUD? { return entities.filter{$0 is HUD}.first as? HUD } @@ -348,13 +353,6 @@ class EntityManager { button.buttonNode.removeFromParent() } self.remove(modal) - - for child in scene.children { - if(child.name != "fire"){ - child.alpha = 1 - } - } - isModal = false } }) diff --git a/GoldWars/GoldWars/Entities/HUD.swift b/GoldWars/GoldWars/Entities/HUD.swift index 54793d5..de2015b 100644 --- a/GoldWars/GoldWars/Entities/HUD.swift +++ b/GoldWars/GoldWars/Entities/HUD.swift @@ -18,9 +18,9 @@ class HUD: GKEntity { var peerLabel:SKLabelNode var peerUnitsLabel:SKLabelNode - var spySkill: SingeClickButtonNode - var defSkill: SingeClickButtonNode - var atkSkill: SingeClickButtonNode + var spySkill: SkillButtonNode + var defSkill: SkillButtonNode + var atkSkill: SkillButtonNode var roundTimerLabel: SKLabelNode let roundTimer: RoundTimer @@ -50,23 +50,25 @@ class HUD: GKEntity { self.roundTimer = RoundTimer() - spySkill = SingeClickButtonNode( - textureName: "yellow_circle", + spySkill = SkillButtonNode( + textureName: "spy_button", text: "Spy", isEnabled: true, - position: CGPoint(x: EntityManager.gameEMInstance.scene.size.width * 0.75, y: EntityManager.gameEMInstance.scene.size.height * 0.1), + cooldown: 3, + position: CGPoint(x: EntityManager.gameEMInstance.scene.size.width * 0.80, y: EntityManager.gameEMInstance.scene.size.height * 0.1), onButtonPress: { EntityManager.gameEMInstance.getOpponentBases(for: EntityManager.gameEMInstance.getTeam()).forEach({base in base.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(base.unitCount)"}) GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.first.time", increasePercentComplete: 100) GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.spy.ten", increasePercentComplete: 10) - SoundManager.sharedInstance.playSoundEffect(pathToFile: "use_boost",fileExtension: "wav", volumeLevel: 0.0) + SoundManager.sharedInstance.playSoundEffect(pathToFile: "use_boost",fileExtension: "wav",volumeLevel: 0.0) } ) - defSkill = SingeClickButtonNode( - textureName: "yellow_circle", + defSkill = SkillButtonNode( + textureName: "def_button", text: "Def", isEnabled: true, - position: CGPoint(x: EntityManager.gameEMInstance.scene.size.width * 0.85, y: EntityManager.gameEMInstance.scene.size.height * 0.1), + cooldown: 4, + position: CGPoint(x: EntityManager.gameEMInstance.scene.size.width * 0.90, y: EntityManager.gameEMInstance.scene.size.height * 0.1), onButtonPress: { DataService.sharedInstance.localRoundData.hasDefenceBoost = true GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.first.time", increasePercentComplete: 100) @@ -74,11 +76,12 @@ class HUD: GKEntity { SoundManager.sharedInstance.playSoundEffect(pathToFile: "use_boost",fileExtension: "wav",volumeLevel: 0.0) } ) - atkSkill = SingeClickButtonNode( - textureName: "yellow_circle", + atkSkill = SkillButtonNode( + textureName: "atk_button", text: "Atk", isEnabled: true, - position: CGPoint(x: EntityManager.gameEMInstance.scene.size.width * 0.95, y: EntityManager.gameEMInstance.scene.size.height * 0.1), + cooldown: 4, + position: CGPoint(x: EntityManager.gameEMInstance.scene.size.width * 0.70, y: EntityManager.gameEMInstance.scene.size.height * 0.1), onButtonPress: { DataService.sharedInstance.localRoundData.hasAttackBoost = true GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.first.time", increasePercentComplete: 100) @@ -89,14 +92,14 @@ class HUD: GKEntity { finishButton = SingeClickButtonNode( textureName: "yellow_button04", - text: "Done", + text: "Fertig", isEnabled: true, position: CGPoint( - x: EntityManager.gameEMInstance.scene.size.width * 0.15, + x: EntityManager.gameEMInstance.scene.size.width * 0.17, y: EntityManager.gameEMInstance.scene.size.height * 0.06), onButtonPress: { } ) - finishButton.size = CGSize(width: 80, height: 40) + finishButton.size = CGSize(width: 125, height: 40) finishButton.zPosition = 2 backgroundRoundCounter = SKSpriteNode(texture: SKTexture(imageNamed: "roundInfo_texture")) @@ -145,7 +148,7 @@ class HUD: GKEntity { func startWithDuration(){ roundTimer.startTimer() finishButton.isEnabled = true - self.roundTimer.roundEnded = "Syncing" + self.roundTimer.roundEnded = "Berechnung" RoundCalculatorService.sharedInstance.isCalculating = false blockWholeScreenPane.isHidden = true } @@ -153,7 +156,7 @@ class HUD: GKEntity { func finishRound() -> () { self.blockWholeScreenPane.isHidden = false self.roundTimer.timeLeft = 1; - self.roundTimer.roundEnded = "Waiting for other player..." + self.roundTimer.roundEnded = "Warte auf Gegner..." } func initRoundInfo(size: CGSize) -> () { @@ -168,14 +171,14 @@ class HUD: GKEntity { currentRoundLabel.zPosition = backgroundRoundCounter.zPosition + 1 roundsLabel.zPosition = backgroundRoundCounter.zPosition + 1 - roundsLabel.text = "of \(RoundCalculatorService.sharedInstance.MAX_ROUNDS)" + roundsLabel.text = "von \(RoundCalculatorService.sharedInstance.MAX_ROUNDS)" roundsLabel.fontColor = SKColor.black roundsLabel.verticalAlignmentMode = .center roundsLabel.fontSize = 12 roundsLabel.position = CGPoint(x: currentRoundLabel.position.x, y: currentRoundLabel.position.y - 25) roundLabel.zPosition = backgroundRoundCounter.zPosition + 1 - roundLabel.text = "Round" + roundLabel.text = "Runde" roundLabel.fontColor = SKColor.black roundLabel.verticalAlignmentMode = .center roundLabel.fontSize = 12 @@ -190,5 +193,12 @@ class HUD: GKEntity { ]) currentRoundLabel.run(newRoundAction) SoundManager.sharedInstance.playSoundEffect(pathToFile: "new_round", fileExtension: "wav", volumeLevel: 0.0) + self.decreaseSkillRoundCooldownCounter() + } + + func decreaseSkillRoundCooldownCounter() { + self.spySkill.decreaseCooldown() + self.atkSkill.decreaseCooldown() + self.defSkill.decreaseCooldown() } } diff --git a/GoldWars/GoldWars/Entities/Modal.swift b/GoldWars/GoldWars/Entities/Modal.swift index 1658d04..760d3f5 100644 --- a/GoldWars/GoldWars/Entities/Modal.swift +++ b/GoldWars/GoldWars/Entities/Modal.swift @@ -61,7 +61,7 @@ class Modal: GKEntity{ footer = SKLabelNode() case .PauseGame: header = SKLabelNode(text: "Pause") - body = SKLabelNode(text: "Waiting for player to reconnect") + body = SKLabelNode(text: "Warte auf Gegner...") footer = SKLabelNode() closeButton.zPosition = -1 } diff --git a/GoldWars/GoldWars/GameCenterManager.swift b/GoldWars/GoldWars/GameCenterManager.swift index a29fdd2..f3b15df 100644 --- a/GoldWars/GoldWars/GameCenterManager.swift +++ b/GoldWars/GoldWars/GameCenterManager.swift @@ -100,7 +100,6 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG GKAchievement.loadAchievements { (achievements: [GKAchievement]?, err: Error?) in var achievementExists: Bool = false achievements?.forEach({ (achievement: GKAchievement) in - print(achievement.identifier) if achievement.identifier == identifier { achievementExists = true achievement.percentComplete += increasePercentComplete diff --git a/GoldWars/GoldWars/Scenes/GameScene.swift b/GoldWars/GoldWars/Scenes/GameScene.swift index 315faef..1ec9d7c 100644 --- a/GoldWars/GoldWars/Scenes/GameScene.swift +++ b/GoldWars/GoldWars/Scenes/GameScene.swift @@ -153,7 +153,7 @@ class GameScene: SKScene{ 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: { + let node = ButtonNode(textureName: "yellow_button05", text: "Menü", isEnabled: true, position: CGPoint(x: self.size.width / 2, y: self.size.height / 2 - 300), onButtonPress: { self.backToMenuAction() }) node.name = "BackButton" diff --git a/GoldWars/GoldWars/Scenes/MenuScene.swift b/GoldWars/GoldWars/Scenes/MenuScene.swift index 683eaea..6058031 100644 --- a/GoldWars/GoldWars/Scenes/MenuScene.swift +++ b/GoldWars/GoldWars/Scenes/MenuScene.swift @@ -36,7 +36,7 @@ class MenuScene: SKScene { })) entityManager.add(Button(name: "settingsButton", textureName: "gold_button_3", - text: "Settings", + text: "Einstellungen", position: CGPoint(x: midX, y: midY ), onButtonPress: { let scene = SettingsScene(size: self.size) diff --git a/GoldWars/GoldWars/SettingsScene.swift b/GoldWars/GoldWars/SettingsScene.swift index 2e0760d..f5bf7ea 100644 --- a/GoldWars/GoldWars/SettingsScene.swift +++ b/GoldWars/GoldWars/SettingsScene.swift @@ -11,14 +11,17 @@ import SpriteKit class SettingsScene: SKScene { var entityManager = EntityManager.settingsEMInstance + var musicButtonText = "" + var isMusicDeactivatedByUserDefault = UserDefaults.standard.bool(forKey: "noMusic") override func sceneDidLoad() { entityManager.setScene(scene: self) let positionX = self.size.width * 0.1 let positionY = self.size.height * 0.05 + isMusicDeactivatedByUserDefault ? setMusicButtonTextByUserDefault(text: "Aus") : setMusicButtonTextByUserDefault(text: "Ein") entityManager.add(Button(name: "backToMenuScene", textureName: "yellow_button04", - text: "Back", + text: "Zurück", position: CGPoint(x: positionX, y: positionY), onButtonPress: { let scene = MenuScene(size: self.size) @@ -26,32 +29,36 @@ class SettingsScene: SKScene { })) entityManager.add(Button(name: "StopMenuMusic", textureName: "yellow_button04", - text: "ON/OFF", + text: musicButtonText, position: CGPoint(x: self.size.width * 0.6, y: self.size.height / 2), onButtonPress: { if SoundManager.sharedInstance.isMusicPlaying { SoundManager.sharedInstance.stopMenuMusic() SoundManager.sharedInstance.isMusicEnabled = false + self.entityManager.changeSettingsButtonText(buttonName: "StopMenuMusic", text: "Aus") } else { SoundManager.sharedInstance.isMusicEnabled = true SoundManager.sharedInstance.startMenuMusic() + self.entityManager.changeSettingsButtonText(buttonName: "StopMenuMusic", text: "An") } })) entityManager.add(Button(name: "StopMovingBackground", textureName: "yellow_button04", - text: "MOVE/STOP", + text: "An", position: CGPoint(x: self.size.width * 0.6, y: self.size.height / 2 - 100), onButtonPress: { if BackgroundComponent.isMovingBackgroundEnabled { BackgroundComponent.isMovingBackgroundEnabled = false + self.entityManager.changeSettingsButtonText(buttonName: "StopMovingBackground", text: "Aus") } else { BackgroundComponent.isMovingBackgroundEnabled = true + self.entityManager.changeSettingsButtonText(buttonName: "StopMovingBackground", text: "An") } })) entityManager.add(Label(fontnamed: "Courier-Bold", name: "SettingsLabel", - text: "Settings", - fontSize: 200.0, + text: "Einstellungen", + fontSize: 150.0, fontColor: .black, position: CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.7), horizontalAlignmentMode: .center, @@ -61,7 +68,7 @@ class SettingsScene: SKScene { ) entityManager.add(Label(fontnamed: "Courier-Bold", name: "LabelMusic", - text: "Music", fontSize: 50.0, + text: "Sounds", fontSize: 50.0, fontColor: .black, position: CGPoint(x: self.size.width * 0.5, y: self.size.height / 2 - 15), horizontalAlignmentMode: .right, @@ -71,7 +78,7 @@ class SettingsScene: SKScene { ) entityManager.add(Label(fontnamed: "Courier-Bold", name: "LabelBackground", - text: "Background", + text: "Wind", fontSize: 50.0, fontColor: .black, position: CGPoint(x: self.size.width * 0.5, y: self.size.height / 2 - 115), @@ -83,6 +90,10 @@ class SettingsScene: SKScene { entityManager.add(Background(size: self.size)) } + func setMusicButtonTextByUserDefault(text: String) { + self.musicButtonText = text + } + func loadScene(scene: SKScene) { let transition = SKTransition.flipVertical(withDuration: 0.5) entityManager.entities.removeAll() diff --git a/GoldWars/GoldWars/SoundManager.swift b/GoldWars/GoldWars/SoundManager.swift index 55b7037..bd27bfb 100644 --- a/GoldWars/GoldWars/SoundManager.swift +++ b/GoldWars/GoldWars/SoundManager.swift @@ -27,7 +27,7 @@ class SoundManager { do { audioPlayer = try AVAudioPlayer(contentsOf: backgroundMainMenuAudio!) } catch { - //TODO: Add logging + os_log("backgroundMusic is broken", log: LOG, type: .error) } audioPlayer.numberOfLoops = -1 audioPlayer.prepareToPlay() @@ -37,12 +37,6 @@ class SoundManager { } } - func stopMenuMusic() { - audioPlayer.pause() - self.isMusicPlaying = false - UserDefaults.standard.set(true, forKey: "noMusic") - } - func playSoundEffect(pathToFile: String, fileExtension: String, volumeLevel: Float){ soundEffect = Bundle.main.url(forResource: pathToFile, withExtension: fileExtension) do { @@ -51,7 +45,16 @@ class SoundManager { os_log("Could not load sound file %@", log: LOG, type: .error, pathToFile) } effectPlayer.volume += volumeLevel - effectPlayer.play() + effectPlayer.prepareToPlay() + if self.isMusicEnabled == true { + effectPlayer.play() + } + } + + func stopMenuMusic() { + audioPlayer.pause() + self.isMusicPlaying = false + UserDefaults.standard.set(true, forKey: "noMusic") } func setVolume(_ volume: Float) {