project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m
author koda
Thu, 12 May 2011 23:00:26 +0200
changeset 5207 4c9ae0f484da
parent 5206 db775bddf771
child 5224 6e8fbbfb0de5
permissions -rw-r--r--
some general tweaks (more intelligent use of macros and more caching)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     1
/*
5017
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     3
 * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     4
 *
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     8
 *
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    12
 * GNU General Public License for more details.
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    13
 *
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    15
 * along with this program; if not, write to the Free Software
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    17
 *
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    18
 * File created on 13/03/2011.
d29cf06d7d11 update headers a bit
koda
parents: 5002
diff changeset
    19
 */
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3668
diff changeset
    20
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    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
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    26
#import "MainMenuViewController.h"
4504
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4454
diff changeset
    27
#import "Appirater.h"
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4454
diff changeset
    28
#include <unistd.h>
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    35
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    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
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5109
diff changeset
    40
@synthesize mainViewController, uiwindow, secondWindow, isInGame;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    45
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    46
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    47
-(id) init {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    48
    if (self = [super init]){
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    49
        mainViewController = nil;
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    50
        uiwindow = nil;
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    51
        secondWindow = nil;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    52
        isInGame = NO;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    53
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    54
    return self;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    55
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    56
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    57
-(void) dealloc {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    58
    [mainViewController release];
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    59
    [uiwindow release];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    60
    [secondWindow release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    63
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
    64
// 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
    65
-(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
    66
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
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
    [Appirater appLaunched];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3668
diff changeset
    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
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3668
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    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
f8d5ac50e307 half reworking of the settings page with delegation
koda
parents: 3650
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    78
3935
5ca27a0e9a63 made the new menu toggable
koda
parents: 3922
diff changeset
    79
    // check for dual monitor support
3941
017b2b31e1c6 integrate nicely with external display
koda
parents: 3940
diff changeset
    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
5ca27a0e9a63 made the new menu toggable
koda
parents: 3922
diff changeset
    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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    94
-(void) applicationWillTerminate:(UIApplication *)application {
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
    95
    if (self.isInGame)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
        HW_terminate(YES);
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
    97
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
    [super applicationWillTerminate:application];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    99
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   100
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   101
-(void) applicationDidReceiveMemoryWarning:(UIApplication *)application {
3663
8c28abf427f5 reduce the number of keywords used and switch to BMP format for screenshots
koda
parents: 3662
diff changeset
   102
    // don't clean mainMenuViewController here!!!
3662
a44406f4369b polish polish polish polish (also: panning horizontal fix, panning momentum, settings page reworked yet again, memory leaks, crashes, segfaults)
koda
parents: 3661
diff changeset
   103
    MSG_MEMCLEAN();
3661
2378ada8a6ee i can haz panning
koda
parents: 3660
diff changeset
   104
    print_free_memory();
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   105
}
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   106
5109
6d2e8a24277e strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents: 5106
diff changeset
   107
//TODO: when the SDLUIKitDelegate methods applicationWillResignActive and applicationDidBecomeActive do work
6d2e8a24277e strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents: 5106
diff changeset
   108
// you'll be able to remove the methods below and just handle the SDL_WINDOWEVENT_MINIMIZED/SDL_WINDOWEVENT_RESTORED
6d2e8a24277e strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents: 5106
diff changeset
   109
// events in the MainLoop
6d2e8a24277e strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents: 5106
diff changeset
   110
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   111
-(void) applicationWillResignActive:(UIApplication *)application {
5109
6d2e8a24277e strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents: 5106
diff changeset
   112
    //[super applicationWillResignActive:application];
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
   113
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   114
    UIDevice* device = [UIDevice currentDevice];
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   115
    if ([device respondsToSelector:@selector(isMultitaskingSupported)] &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   116
         device.multitaskingSupported &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   117
         self.isInGame) {
4540
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4510
diff changeset
   118
        // let's try to be permissive with multitasking here...
5206
db775bddf771 settings.plist is no more, long live nsuserdefaults
koda
parents: 5166
diff changeset
   119
        if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"multitasking"] boolValue])
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   120
            HW_suspend();
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   121
        else {
4504
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4454
diff changeset
   122
            // so the game returns to the configuration view
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   123
            if (isGameRunning())
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   124
                HW_terminate(NO);
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   125
            else {
4504
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4454
diff changeset
   126
                // while screen is loading you can't call HW_terminate() so we close the app
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
   127
                [self applicationWillTerminate:application];
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   128
            }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   129
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   130
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   131
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   132
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   133
-(void) applicationDidBecomeActive:(UIApplication *)application {
5109
6d2e8a24277e strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents: 5106
diff changeset
   134
    //[super applicationDidBecomeActive:application];
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
   135
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   136
    UIDevice* device = [UIDevice currentDevice];
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   137
    if ([device respondsToSelector:@selector(isMultitaskingSupported)] &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   138
         device.multitaskingSupported &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   139
         self.isInGame) {
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   140
        HW_resume();
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   141
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   143
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   144
@end