author | koda |
Sat, 24 Sep 2011 21:54:11 +0200 | |
changeset 6017 | 24631fd2fb9e |
parent 6000 | dbcebcd3d79f |
child 6078 | 8c0cc07731e5 |
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" |
4504
8906b2409d97
add the appirater class for getting more positive reviews
koda
parents:
4454
diff
changeset
|
27 |
#include <unistd.h> |
3547 | 28 |
|
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
29 |
|
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
30 |
@implementation SDLUIKitDelegate (customDelegate) |
3547 | 31 |
|
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
32 |
+(NSString *)getAppDelegateClassName { |
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
33 |
return @"HedgewarsAppDelegate"; |
3547 | 34 |
} |
35 |
||
5106
517bdd3865f1
wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents:
5017
diff
changeset
|
36 |
@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
|
37 |
|
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 |
@implementation HedgewarsAppDelegate |
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
|
39 |
@synthesize mainViewController, uiwindow, secondWindow, isInGame; |
3547 | 40 |
|
41 |
// 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
|
42 |
+(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
|
43 |
return (HedgewarsAppDelegate *)[[UIApplication sharedApplication] delegate]; |
3547 | 44 |
} |
45 |
||
5224
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
46 |
#pragma mark - |
6e8fbbfb0de5
muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusic for the ios frontend finally
koda
parents:
5206
diff
changeset
|
47 |
#pragma mark AppDelegate methods |
3547 | 48 |
-(id) init { |
49 |
if (self = [super init]){ |
|
50 |
mainViewController = nil; |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
51 |
uiwindow = nil; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
52 |
secondWindow = nil; |
3547 | 53 |
isInGame = NO; |
54 |
} |
|
55 |
return self; |
|
56 |
} |
|
57 |
||
58 |
-(void) dealloc { |
|
59 |
[mainViewController release]; |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
60 |
[uiwindow release]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
61 |
[secondWindow release]; |
3547 | 62 |
[super dealloc]; |
63 |
} |
|
64 |
||
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
|
65 |
// 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
|
66 |
-(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
|
67 |
[[UIApplication sharedApplication] setStatusBarHidden:YES]; |
3697 | 68 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
69 |
self.uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; |
3697 | 70 |
|
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
5109
diff
changeset
|
71 |
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
|
72 |
self.mainViewController = [[MainMenuViewController alloc] initWithNibName:controllerName bundle:nil]; |
3547 | 73 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
74 |
[self.uiwindow addSubview:self.mainViewController.view]; |
3659 | 75 |
[self.mainViewController release]; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
76 |
self.uiwindow.backgroundColor = [UIColor blackColor]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
77 |
[self.uiwindow makeKeyAndVisible]; |
3547 | 78 |
|
3935 | 79 |
// check for dual monitor support |
3941 | 80 |
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
|
81 |
DLog(@"Dualhead mode"); |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
82 |
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
|
83 |
self.secondWindow.backgroundColor = [UIColor blackColor]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
84 |
self.secondWindow.screen = [[UIScreen screens] objectAtIndex:1]; |
3935 | 85 |
UIImage *titleImage = [UIImage imageWithContentsOfFile:@"title.png"]; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
86 |
UIImageView *titleView = [[UIImageView alloc] initWithImage:titleImage]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
87 |
titleView.center = self.secondWindow.center; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
88 |
[self.secondWindow addSubview:titleView]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
89 |
[titleView release]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
90 |
[self.secondWindow makeKeyAndVisible]; |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3898
diff
changeset
|
91 |
} |
3547 | 92 |
} |
93 |
||
3548
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
94 |
-(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
|
95 |
// 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
|
96 |
if (self.isInGame) { |
6017
24631fd2fb9e
better memory cleanup for audiomanager and position of lower stats button
koda
parents:
6000
diff
changeset
|
97 |
[AudioManagerController cleanupMemory]; |
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
|
98 |
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
|
99 |
} |
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
|
100 |
print_free_memory(); |
3663
8c28abf427f5
reduce the number of keywords used and switch to BMP format for screenshots
koda
parents:
3662
diff
changeset
|
101 |
// don't clean mainMenuViewController here!!! |
3548
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
102 |
} |
4d220ee7c75f
server somewhat simplified and correct sporadic crasher
koda
parents:
3547
diff
changeset
|
103 |
|
5968
4e8bb227be9a
this reintroduces the gsSuspend state to fix multitasking on ios
koda
parents:
5699
diff
changeset
|
104 |
// true multitasking with sdl works only on 4.2 and above; we close the game to avoid a black screen at return |
3547 | 105 |
-(void) applicationWillResignActive:(UIApplication *)application { |
5975 | 106 |
if (self.isInGame && [[[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
|
107 |
HW_terminate(NO); |
5975 | 108 |
|
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
|
109 |
[super applicationWillResignActive:application]; |
3547 | 110 |
} |
111 |
||
112 |
@end |