project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m
author koda
Mon, 18 Apr 2011 02:45:51 +0200
changeset 5156 641abe679bf0
parent 5154 851f36579ed4
child 5166 d1eb1560b4d5
permissions -rw-r--r--
work in progress yet again (can run some games now)
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
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    30
#ifdef main
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    31
#undef main
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    32
#endif
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    33
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    34
#define BLACKVIEW_TAG 17935
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    35
#define SECONDBLACKVIEW_TAG 48620
5106
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5017
diff changeset
    36
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5017
diff changeset
    37
@implementation SDLUIKitDelegate (customDelegate)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    38
5106
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5017
diff changeset
    39
+(NSString *)getAppDelegateClassName {
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5017
diff changeset
    40
    return @"HedgewarsAppDelegate";
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
5106
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5017
diff changeset
    43
@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
    44
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
    45
@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
    46
@synthesize mainViewController, uiwindow, secondWindow, isInGame;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    47
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    48
// 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
    49
+(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
    50
    return (HedgewarsAppDelegate *)[[UIApplication sharedApplication] delegate];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    51
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    52
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    53
-(id) init {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    54
    if (self = [super init]){
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    55
        mainViewController = nil;
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    56
        uiwindow = nil;
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    57
        secondWindow = nil;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    58
        isInGame = NO;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    59
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    60
    return self;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    63
-(void) dealloc {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    64
    [mainViewController release];
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    65
    [uiwindow release];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    66
    [secondWindow release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    67
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    68
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    69
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
    70
// 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
    71
-(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
    72
    [[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
    73
    [Appirater appLaunched];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3668
diff changeset
    74
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    75
    self.uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3668
diff changeset
    76
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5109
diff changeset
    77
    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
    78
    self.mainViewController = [[MainMenuViewController alloc] initWithNibName:controllerName bundle:nil];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    79
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    80
    [self.uiwindow addSubview:self.mainViewController.view];
3659
f8d5ac50e307 half reworking of the settings page with delegation
koda
parents: 3650
diff changeset
    81
    [self.mainViewController release];
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    82
    self.uiwindow.backgroundColor = [UIColor blackColor];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    83
    [self.uiwindow makeKeyAndVisible];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    84
3935
5ca27a0e9a63 made the new menu toggable
koda
parents: 3922
diff changeset
    85
    // check for dual monitor support
3941
017b2b31e1c6 integrate nicely with external display
koda
parents: 3940
diff changeset
    86
    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
    87
        DLog(@"Dualhead mode");
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    88
        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
    89
        self.secondWindow.backgroundColor = [UIColor blackColor];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    90
        self.secondWindow.screen = [[UIScreen screens] objectAtIndex:1];
3935
5ca27a0e9a63 made the new menu toggable
koda
parents: 3922
diff changeset
    91
        UIImage *titleImage = [UIImage imageWithContentsOfFile:@"title.png"];
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    92
        UIImageView *titleView = [[UIImageView alloc] initWithImage:titleImage];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    93
        titleView.center = self.secondWindow.center;
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    94
        [self.secondWindow addSubview:titleView];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    95
        [titleView release];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    96
        [self.secondWindow makeKeyAndVisible];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3898
diff changeset
    97
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    98
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    99
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   100
-(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
   101
    if (self.isInGame)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   102
        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
   103
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
   104
    [super applicationWillTerminate:application];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   105
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   106
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   107
-(void) applicationDidReceiveMemoryWarning:(UIApplication *)application {
3663
8c28abf427f5 reduce the number of keywords used and switch to BMP format for screenshots
koda
parents: 3662
diff changeset
   108
    // 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
   109
    MSG_MEMCLEAN();
3661
2378ada8a6ee i can haz panning
koda
parents: 3660
diff changeset
   110
    print_free_memory();
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   111
}
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   112
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
   113
//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
   114
// 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
   115
// 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
   116
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   117
-(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
   118
    //[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
   119
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   120
    UIDevice* device = [UIDevice currentDevice];
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   121
    if ([device respondsToSelector:@selector(isMultitaskingSupported)] &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   122
         device.multitaskingSupported &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   123
         self.isInGame) {
4540
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4510
diff changeset
   124
        // let's try to be permissive with multitasking here...
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4510
diff changeset
   125
        NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:SETTINGS_FILE()];
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4510
diff changeset
   126
        if ([[settings objectForKey:@"multitasking"] boolValue])
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   127
            HW_suspend();
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   128
        else {
4504
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4454
diff changeset
   129
            // so the game returns to the configuration view
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   130
            if (isGameRunning())
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   131
                HW_terminate(NO);
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   132
            else {
4504
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4454
diff changeset
   133
                // 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
   134
                [self applicationWillTerminate:application];
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   135
            }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   136
        }
4540
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4510
diff changeset
   137
        [settings release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   138
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   139
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   140
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   141
-(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
   142
    //[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
   143
4454
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   144
    UIDevice* device = [UIDevice currentDevice];
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   145
    if ([device respondsToSelector:@selector(isMultitaskingSupported)] &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   146
         device.multitaskingSupported &&
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   147
         self.isInGame) {
42bfc1a70968 more retina support and multitasking support
koda
parents: 4356
diff changeset
   148
        HW_resume();
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   149
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   150
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   151
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   152
@end