author | nemo |
Sat, 05 Nov 2011 20:09:48 -0400 | |
changeset 6294 | 34aa727d4a25 |
parent 6247 | 6dfad55fd71c |
child 6337 | 84e7d1a5e3df |
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" |
6078
8c0cc07731e5
headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents:
6017
diff
changeset
|
23 |
#import "MainMenuViewController.h" |
4454 | 24 |
#import "ObjcExports.h" |
4504
8906b2409d97
add the appirater class for getting more positive reviews
koda
parents:
4454
diff
changeset
|
25 |
#include <unistd.h> |
3547 | 26 |
|
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
27 |
|
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
28 |
@implementation SDLUIKitDelegate (customDelegate) |
3547 | 29 |
|
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
30 |
+(NSString *)getAppDelegateClassName { |
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
31 |
return @"HedgewarsAppDelegate"; |
3547 | 32 |
} |
33 |
||
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
34 |
@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
|
35 |
|
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
|
36 |
@implementation HedgewarsAppDelegate |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6208
diff
changeset
|
37 |
@synthesize mainViewController, uiwindow, secondWindow; |
3547 | 38 |
|
39 |
// 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
|
40 |
+(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
|
41 |
return (HedgewarsAppDelegate *)[[UIApplication sharedApplication] delegate]; |
3547 | 42 |
} |
43 |
||
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
44 |
#pragma mark - |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
45 |
#pragma mark AppDelegate methods |
3547 | 46 |
-(id) init { |
47 |
if (self = [super init]){ |
|
48 |
mainViewController = nil; |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
49 |
uiwindow = nil; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
50 |
secondWindow = nil; |
3547 | 51 |
} |
52 |
return self; |
|
53 |
} |
|
54 |
||
55 |
-(void) dealloc { |
|
56 |
[mainViewController release]; |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
57 |
[uiwindow release]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
58 |
[secondWindow release]; |
3547 | 59 |
[super dealloc]; |
60 |
} |
|
61 |
||
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
|
62 |
// 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
|
63 |
-(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
|
64 |
[[UIApplication sharedApplication] setStatusBarHidden:YES]; |
3697 | 65 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
66 |
self.uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; |
3697 | 67 |
|
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
5109
diff
changeset
|
68 |
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
|
69 |
self.mainViewController = [[MainMenuViewController alloc] initWithNibName:controllerName bundle:nil]; |
3547 | 70 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
71 |
[self.uiwindow addSubview:self.mainViewController.view]; |
3659 | 72 |
[self.mainViewController release]; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
73 |
self.uiwindow.backgroundColor = [UIColor blackColor]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
74 |
[self.uiwindow makeKeyAndVisible]; |
3547 | 75 |
|
3935 | 76 |
// check for dual monitor support |
3941 | 77 |
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
|
78 |
DLog(@"Dualhead mode"); |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
79 |
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
|
80 |
self.secondWindow.backgroundColor = [UIColor blackColor]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
81 |
self.secondWindow.screen = [[UIScreen screens] objectAtIndex:1]; |
3935 | 82 |
UIImage *titleImage = [UIImage imageWithContentsOfFile:@"title.png"]; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
83 |
UIImageView *titleView = [[UIImageView alloc] initWithImage:titleImage]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
84 |
titleView.center = self.secondWindow.center; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
85 |
[self.secondWindow addSubview:titleView]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
86 |
[titleView release]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
87 |
[self.secondWindow makeKeyAndVisible]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
88 |
} |
3547 | 89 |
} |
90 |
||
3548
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
91 |
-(void) applicationDidReceiveMemoryWarning:(UIApplication *)application { |
6208
b831679e9467
move all extra categories in a single source, add caching for HWUtils
koda
parents:
6078
diff
changeset
|
92 |
[HWUtils releaseCache]; |
b831679e9467
move all extra categories in a single source, add caching for HWUtils
koda
parents:
6078
diff
changeset
|
93 |
// don't stop music if it is playing |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6208
diff
changeset
|
94 |
if ([HWUtils isGameLaunched]) { |
6208
b831679e9467
move all extra categories in a single source, add caching for HWUtils
koda
parents:
6078
diff
changeset
|
95 |
[AudioManagerController releaseCache]; |
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
|
96 |
} |
6208
b831679e9467
move all extra categories in a single source, add caching for HWUtils
koda
parents:
6078
diff
changeset
|
97 |
MSG_MEMCLEAN(); |
3663
8c28abf427f5
reduce the number of keywords used and switch to BMP format for screenshots
koda
parents:
3662
diff
changeset
|
98 |
// don't clean mainMenuViewController here!!! |
3548
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
99 |
} |
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
100 |
|
5968
4e8bb227be9a
this reintroduces the gsSuspend state to fix multitasking on ios
koda
parents:
5699
diff
changeset
|
101 |
// true multitasking with sdl works only on 4.2 and above; we close the game to avoid a black screen at return |
3547 | 102 |
-(void) applicationWillResignActive:(UIApplication *)application { |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6208
diff
changeset
|
103 |
if ([HWUtils isGameLaunched] && [[[UIDevice currentDevice] systemVersion] floatValue] < 4.2f) |
6000
dbcebcd3d79f
ios frontend: sounds and music have their own class now (with caching\!) instead of being spread here and there (exploiting class methods like a true oop pro)
koda
parents:
5975
diff
changeset
|
104 |
HW_terminate(NO); |
5975 | 105 |
|
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
|
106 |
[super applicationWillResignActive:application]; |
3547 | 107 |
} |
108 |
||
109 |
@end |