diff --git a/GoldWars/GoldWars.xcodeproj/project.pbxproj b/GoldWars/GoldWars.xcodeproj/project.pbxproj index 3850212..0d3c7e8 100644 --- a/GoldWars/GoldWars.xcodeproj/project.pbxproj +++ b/GoldWars/GoldWars.xcodeproj/project.pbxproj @@ -16,6 +16,9 @@ 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 */; }; 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 */; }; @@ -82,6 +85,9 @@ 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 = ""; }; 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 = ""; }; @@ -167,6 +173,9 @@ isa = PBXGroup; children = ( C04783ED2468583F004961FB /* intro-music.mp3 */, + 205ED9C9249507E200B28718 /* attack_base.wav */, + 205ED9CA249507E200B28718 /* new_round.wav */, + 205ED9C8249507E200B28718 /* use_boost.wav */, 9ECD3699245C91F7008DEEBD /* GoldWars.entitlements */, 9E11FF74245CD79100EED3BE /* Partikels */, 116060F5245C5709004E5A36 /* Entities */, @@ -373,13 +382,16 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 205ED9CD249507E200B28718 /* new_round.wav in Resources */, 110360DE244B101A008610AF /* Main.storyboard in Resources */, 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 */, + 205ED9CC249507E200B28718 /* attack_base.wav in Resources */, 3F79FFE02486F7CD003F79C3 /* Explosion.sks in Resources */, + 205ED9CB249507E200B28718 /* use_boost.wav in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/GoldWars/GoldWars/Entities/Base.swift b/GoldWars/GoldWars/Entities/Base.swift index 8f14a8b..ba1bbdc 100644 --- a/GoldWars/GoldWars/Entities/Base.swift +++ b/GoldWars/GoldWars/Entities/Base.swift @@ -49,9 +49,11 @@ class Base: GKEntity{ self.unitCount -= units base.unitCount += units self.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(self.unitCount)" - if base.ownershipPlayer == GKLocalPlayer.local { + + if base.component(ofType: TeamComponent.self)?.unitcountLabel.text != "" { base.component(ofType: TeamComponent.self)?.unitcountLabel.text = "\(base.unitCount)" } + base.ownershipPlayer = self.ownershipPlayer 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 9d43fbe..ae1b1fd 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -133,6 +133,7 @@ class EntityManager { scene.addChild(spriteNode.unitcountLabel) scene.addChild(spriteNode.fire) } + SoundManager.sharedInstance.playSoundEffect(pathToFile: "attack_base",fileExtension: "wav",volumeLevel: -3.0) } GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.capture.fifty.bases", increasePercentComplete: 2) } diff --git a/GoldWars/GoldWars/Entities/HUD.swift b/GoldWars/GoldWars/Entities/HUD.swift index 35083f3..54793d5 100644 --- a/GoldWars/GoldWars/Entities/HUD.swift +++ b/GoldWars/GoldWars/Entities/HUD.swift @@ -59,6 +59,7 @@ class HUD: GKEntity { 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) } ) defSkill = SingeClickButtonNode( @@ -70,6 +71,7 @@ class HUD: GKEntity { DataService.sharedInstance.localRoundData.hasDefenceBoost = true GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.first.time", increasePercentComplete: 100) GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.def.ten", increasePercentComplete: 10) + SoundManager.sharedInstance.playSoundEffect(pathToFile: "use_boost",fileExtension: "wav",volumeLevel: 0.0) } ) atkSkill = SingeClickButtonNode( @@ -81,6 +83,7 @@ class HUD: GKEntity { DataService.sharedInstance.localRoundData.hasAttackBoost = true GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.first.time", increasePercentComplete: 100) GameCenterManager.sharedInstance.addAchievementProgress(identifier: "de.hft.stuttgart.ip2.goldwars.skill.atk.ten", increasePercentComplete: 10) + SoundManager.sharedInstance.playSoundEffect(pathToFile: "use_boost",fileExtension: "wav",volumeLevel: 0.0) } ) @@ -186,5 +189,6 @@ class HUD: GKEntity { SKAction.scale(by: 0.5, duration: 1), ]) currentRoundLabel.run(newRoundAction) + SoundManager.sharedInstance.playSoundEffect(pathToFile: "new_round", fileExtension: "wav", volumeLevel: 0.0) } } diff --git a/GoldWars/GoldWars/Entities/Modal.swift b/GoldWars/GoldWars/Entities/Modal.swift index 7dcce67..412e736 100644 --- a/GoldWars/GoldWars/Entities/Modal.swift +++ b/GoldWars/GoldWars/Entities/Modal.swift @@ -109,10 +109,11 @@ class Modal: GKEntity{ } func sendUnits(currentDraggedBase: Base?, touchLocation: CGPoint, gameScene: GameScene, collisionBase: Base?){ + let moveType: PlayerMoveType = self.type == ModalType.BaseAttack ? .AtkMove : .TxnMove for base in currentDraggedBase!.adjacencyList { if base == collisionBase { RoundCalculatorService.sharedInstance.increaseMoveCounter(ownBase: currentDraggedBase?.ownershipPlayer == base.ownershipPlayer) - entityManager.update((currentDraggedBase?.doPlayerMoveTypeToBase(base: base, playerMoveType: PlayerMoveType.AtkMove, units: Int(GameScene.sendUnits)))!) + entityManager.update((currentDraggedBase?.doPlayerMoveTypeToBase(base: base, playerMoveType: moveType, units: Int(GameScene.sendUnits)))!) GameScene.sendUnits = 0 } } diff --git a/GoldWars/GoldWars/Scenes/GameScene.swift b/GoldWars/GoldWars/Scenes/GameScene.swift index 812e3fc..f4f431b 100644 --- a/GoldWars/GoldWars/Scenes/GameScene.swift +++ b/GoldWars/GoldWars/Scenes/GameScene.swift @@ -264,7 +264,7 @@ class GameScene: SKScene{ } func isAttackMove() -> Bool { - return collisionBase?.ownershipPlayer != currentDraggedBase?.ownershipPlayer + return collisionBase?.ownershipPlayer != currentDraggedBase?.ownershipPlayer && !(collisionBase?.changeOwnership ?? false) } @objc func pauseGame() -> Void { diff --git a/GoldWars/GoldWars/SoundManager.swift b/GoldWars/GoldWars/SoundManager.swift index 9f7bb03..55b7037 100644 --- a/GoldWars/GoldWars/SoundManager.swift +++ b/GoldWars/GoldWars/SoundManager.swift @@ -8,12 +8,16 @@ import SpriteKit import AVFoundation +import os class SoundManager { public static var sharedInstance = SoundManager() + let LOG = OSLog.init(subsystem: "SoundManager", category: "SoundManager") var audioPlayer = AVAudioPlayer() + var effectPlayer = AVAudioPlayer() var backgroundMainMenuAudio: URL? + var soundEffect: URL? var isMusicPlaying = false var isMusicEnabled = true @@ -39,6 +43,17 @@ class SoundManager { UserDefaults.standard.set(true, forKey: "noMusic") } + func playSoundEffect(pathToFile: String, fileExtension: String, volumeLevel: Float){ + soundEffect = Bundle.main.url(forResource: pathToFile, withExtension: fileExtension) + do { + effectPlayer = try AVAudioPlayer(contentsOf: soundEffect!) + } catch { + os_log("Could not load sound file %@", log: LOG, type: .error, pathToFile) + } + effectPlayer.volume += volumeLevel + effectPlayer.play() + } + func setVolume(_ volume: Float) { audioPlayer.volume = volume } diff --git a/GoldWars/GoldWars/attack_base.wav b/GoldWars/GoldWars/attack_base.wav new file mode 100644 index 0000000..55893c3 Binary files /dev/null and b/GoldWars/GoldWars/attack_base.wav differ diff --git a/GoldWars/GoldWars/new_round.wav b/GoldWars/GoldWars/new_round.wav new file mode 100644 index 0000000..dd149f3 Binary files /dev/null and b/GoldWars/GoldWars/new_round.wav differ diff --git a/GoldWars/GoldWars/use_boost.wav b/GoldWars/GoldWars/use_boost.wav new file mode 100644 index 0000000..d65acaf Binary files /dev/null and b/GoldWars/GoldWars/use_boost.wav differ