Fix bug #651: sliding hog firing rope could end up stuck in land right after the rope has attached
/* * Hedgewars-iOS, a Hedgewars port for iOS devices * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */#import "AudioManagerController.h"#import "AVFoundation/AVAudioPlayer.h"#import "MXAudioPlayerFadeOperation.h"#define DEFAULT_VOLUME 0.45f#define FADEOUT_DURATION 3.0f#define FADEIN_DURATION 2.0fstatic AudioManagerController *mainInstance;@implementation AudioManagerController@synthesize backgroundMusic, clickSound, backSound, selSound, audioFaderQueue;+(id) mainManager { if (mainInstance == nil) mainInstance = [[self alloc] init]; return mainInstance;}- (id)init { if ((self = [super init])) { self.backgroundMusic = nil; self.clickSound = -1; self.backSound = -1; self.selSound = -1; self.audioFaderQueue = nil; } return self;}- (void)dealloc { [self unloadSounds]; mainInstance = nil;}- (void)didReceiveMemoryWarning { if (self.backgroundMusic.playing == NO) self.backgroundMusic = nil; if ([self.audioFaderQueue operationCount] == 0) self.audioFaderQueue = nil; [self unloadSounds]; MSG_MEMCLEAN();}#pragma mark -#pragma mark background music control- (void)playBackgroundMusic { if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"music"] boolValue] == NO) return; if (self.backgroundMusic == nil) { NSString *musicString = [[NSBundle mainBundle] pathForResource:@"hwclassic" ofType:@"mp3"]; self.backgroundMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:musicString] error:nil]; self.backgroundMusic.delegate = nil; self.backgroundMusic.numberOfLoops = -1; } self.backgroundMusic.volume = DEFAULT_VOLUME; [self.backgroundMusic play];}- (void)pauseBackgroundMusic { [self.backgroundMusic pause];}- (void)stopBackgroundMusic { [self.backgroundMusic stop];}- (void)fadeOutBackgroundMusic { if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"music"] boolValue] == NO) return; if (self.audioFaderQueue == nil) self.audioFaderQueue = [[NSOperationQueue alloc] init]; MXAudioPlayerFadeOperation *fadeOut = [[MXAudioPlayerFadeOperation alloc] initFadeWithAudioPlayer:self.backgroundMusic toVolume:0.0 overDuration:FADEOUT_DURATION]; [self.audioFaderQueue addOperation:fadeOut];}- (void)fadeInBackgroundMusic { if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"music"] boolValue] == NO) return; if (self.audioFaderQueue == nil) self.audioFaderQueue = [[NSOperationQueue alloc] init]; [self playBackgroundMusic]; MXAudioPlayerFadeOperation *fadeIn = [[MXAudioPlayerFadeOperation alloc] initFadeWithAudioPlayer:self.backgroundMusic toVolume:DEFAULT_VOLUME overDuration:FADEIN_DURATION]; [audioFaderQueue addOperation:fadeIn];}#pragma mark -#pragma mark sound effects control-(SystemSoundID) loadSound:(NSString *)snd { SystemSoundID soundID; // get the filename of the sound file in a NSURL format NSString *path = [[NSBundle mainBundle] pathForResource:snd ofType:@"caf"]; NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; // use audio sevices to create and play the sound AudioServicesCreateSystemSoundID((__bridge CFURLRef)filePath, &soundID); return soundID;}- (void)unloadSounds { AudioServicesDisposeSystemSoundID(clickSound), clickSound = -1; AudioServicesDisposeSystemSoundID(backSound), backSound = -1; AudioServicesDisposeSystemSoundID(selSound), selSound = -1;}- (void)playClickSound { if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == NO) return; if (self.clickSound == -1) self.clickSound = [self loadSound:@"clickSound"]; AudioServicesPlaySystemSound(self.clickSound);}- (void)playBackSound { if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == NO) return; if (self.backSound == -1) self.backSound = [self loadSound:@"backSound"]; AudioServicesPlaySystemSound(self.backSound);}- (void)playSelectSound { if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == NO) return; if (self.selSound == -1) self.selSound = [self loadSound:@"selSound"]; AudioServicesPlaySystemSound(self.selSound);}@end