author | koda |
Fri, 26 Oct 2012 14:19:43 +0100 | |
branch | 0.9.16 |
changeset 6007 | b3b9e995ae90 |
parent 5975 | c3a8cab64fcb |
child 6000 | dbcebcd3d79f |
permissions | -rw-r--r-- |
3547 | 1 |
/* |
5017 | 2 |
* Hedgewars-iOS, a Hedgewars port for iOS devices |
3 |
* Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com> |
|
4 |
* |
|
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
17 |
* |
|
18 |
* File created on 13/03/2011. |
|
19 |
*/ |
|
3697 | 20 |
|
3547 | 21 |
|
5002
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
22 |
#import "HedgewarsAppDelegate.h" |
3668
3f7a95234d8a
tap to play piano notes, fix for audio and pause glitch
koda
parents:
3663
diff
changeset
|
23 |
#import "PascalImports.h" |
4454 | 24 |
#import "ObjcExports.h" |
3668
3f7a95234d8a
tap to play piano notes, fix for audio and pause glitch
koda
parents:
3663
diff
changeset
|
25 |
#import "CommodityFunctions.h" |
3547 | 26 |
#import "MainMenuViewController.h" |
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
27 |
#import "AVFoundation/AVAudioPlayer.h" |
4504
8906b2409d97
add the appirater class for getting more positive reviews
koda
parents:
4454
diff
changeset
|
28 |
#include <unistd.h> |
3547 | 29 |
|
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
30 |
|
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
31 |
@implementation SDLUIKitDelegate (customDelegate) |
3547 | 32 |
|
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
33 |
+(NSString *)getAppDelegateClassName { |
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
34 |
return @"HedgewarsAppDelegate"; |
3547 | 35 |
} |
36 |
||
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
37 |
@end |
5002
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
38 |
|
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
39 |
@implementation HedgewarsAppDelegate |
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
40 |
@synthesize mainViewController, uiwindow, secondWindow, isInGame, backgroundMusic; |
3547 | 41 |
|
42 |
// convenience method |
|
5002
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
43 |
+(HedgewarsAppDelegate *)sharedAppDelegate { |
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
44 |
return (HedgewarsAppDelegate *)[[UIApplication sharedApplication] delegate]; |
3547 | 45 |
} |
46 |
||
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
47 |
#pragma mark - |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
48 |
#pragma mark Music control |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
49 |
+(void) playBackgroundMusic { |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
50 |
if ([HedgewarsAppDelegate sharedAppDelegate].backgroundMusic == nil) |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
51 |
[HedgewarsAppDelegate loadBackgroundMusic]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
52 |
[[HedgewarsAppDelegate sharedAppDelegate].backgroundMusic play]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
53 |
} |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
54 |
|
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
55 |
+(void) pauseBackgroundMusic { |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
56 |
[[HedgewarsAppDelegate sharedAppDelegate].backgroundMusic pause]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
57 |
} |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
58 |
|
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
59 |
+(void) stopBackgroundMusic { |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
60 |
[[HedgewarsAppDelegate sharedAppDelegate].backgroundMusic stop]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
61 |
} |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
62 |
|
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
63 |
+(void) loadBackgroundMusic { |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
64 |
NSString *musicString = [[NSBundle mainBundle] pathForResource:@"hwclassic" ofType:@"mp3"]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
65 |
AVAudioPlayer *background = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:musicString] error:nil]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
66 |
|
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
67 |
background.delegate = nil; |
5699
1a9a6a7662aa
ios: respond more gracefully to didReceiveMemoryWarning and add sounds to two buttons
koda
parents:
5662
diff
changeset
|
68 |
background.volume = 0.4f; |
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
69 |
background.numberOfLoops = -1; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
70 |
[background prepareToPlay]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
71 |
[HedgewarsAppDelegate sharedAppDelegate].backgroundMusic = background; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
72 |
[background release]; |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
73 |
} |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
74 |
|
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
75 |
#pragma mark - |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
76 |
#pragma mark AppDelegate methods |
3547 | 77 |
-(id) init { |
78 |
if (self = [super init]){ |
|
79 |
mainViewController = nil; |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
80 |
uiwindow = nil; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
81 |
secondWindow = nil; |
3547 | 82 |
isInGame = NO; |
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
83 |
backgroundMusic = nil; |
3547 | 84 |
} |
85 |
return self; |
|
86 |
} |
|
87 |
||
88 |
-(void) dealloc { |
|
89 |
[mainViewController release]; |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
90 |
[uiwindow release]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
91 |
[secondWindow release]; |
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
92 |
[backgroundMusic release]; |
3547 | 93 |
[super dealloc]; |
94 |
} |
|
95 |
||
5002
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
96 |
// override the direct execution of SDL_main to allow us to implement our own frontend |
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
97 |
-(void) postFinishLaunch { |
a9c44a8ffec8
we get our own AppDelegate, subclassing SDL_UikitAppDelegate so that we don't have to mess with sdl build system
koda
parents:
4976
diff
changeset
|
98 |
[[UIApplication sharedApplication] setStatusBarHidden:YES]; |
3697 | 99 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
100 |
self.uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; |
3697 | 101 |
|
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
5109
diff
changeset
|
102 |
NSString *controllerName = (IS_IPAD() ? @"MainMenuViewController-iPad" : @"MainMenuViewController-iPhone"); |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
5109
diff
changeset
|
103 |
self.mainViewController = [[MainMenuViewController alloc] initWithNibName:controllerName bundle:nil]; |
3547 | 104 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
105 |
[self.uiwindow addSubview:self.mainViewController.view]; |
3659 | 106 |
[self.mainViewController release]; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
107 |
self.uiwindow.backgroundColor = [UIColor blackColor]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
108 |
[self.uiwindow makeKeyAndVisible]; |
3547 | 109 |
|
3935 | 110 |
// check for dual monitor support |
3941 | 111 |
if (IS_DUALHEAD()) { |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
5109
diff
changeset
|
112 |
DLog(@"Dualhead mode"); |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
113 |
self.secondWindow = [[UIWindow alloc] initWithFrame:[[[UIScreen screens] objectAtIndex:1] bounds]]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
114 |
self.secondWindow.backgroundColor = [UIColor blackColor]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
115 |
self.secondWindow.screen = [[UIScreen screens] objectAtIndex:1]; |
3935 | 116 |
UIImage *titleImage = [UIImage imageWithContentsOfFile:@"title.png"]; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
117 |
UIImageView *titleView = [[UIImageView alloc] initWithImage:titleImage]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
118 |
titleView.center = self.secondWindow.center; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
119 |
[self.secondWindow addSubview:titleView]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
120 |
[titleView release]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
121 |
[self.secondWindow makeKeyAndVisible]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
122 |
} |
3547 | 123 |
} |
124 |
||
3548
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
125 |
-(void) applicationDidReceiveMemoryWarning:(UIApplication *)application { |
5662
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
126 |
// don't stop music when it is playing |
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
127 |
if (self.isInGame) { |
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
128 |
[self.backgroundMusic stop]; |
5699
1a9a6a7662aa
ios: respond more gracefully to didReceiveMemoryWarning and add sounds to two buttons
koda
parents:
5662
diff
changeset
|
129 |
self.backgroundMusic = nil; |
5662
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
130 |
MSG_MEMCLEAN(); |
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
131 |
} |
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
132 |
print_free_memory(); |
3663
8c28abf427f5
reduce the number of keywords used and switch to BMP format for screenshots
koda
parents:
3662
diff
changeset
|
133 |
// don't clean mainMenuViewController here!!! |
3548
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
134 |
} |
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
135 |
|
5968
4e8bb227be9a
this reintroduces the gsSuspend state to fix multitasking on ios
koda
parents:
5699
diff
changeset
|
136 |
// true multitasking with sdl works only on 4.2 and above; we close the game to avoid a black screen at return |
3547 | 137 |
-(void) applicationWillResignActive:(UIApplication *)application { |
5975 | 138 |
if (self.isInGame && [[[UIDevice currentDevice] systemVersion] floatValue] < 4.2f) |
5968
4e8bb227be9a
this reintroduces the gsSuspend state to fix multitasking on ios
koda
parents:
5699
diff
changeset
|
139 |
HW_terminate(NO); |
5975 | 140 |
|
5662
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5503
diff
changeset
|
141 |
[super applicationWillResignActive:application]; |
3547 | 142 |
} |
143 |
||
144 |
@end |