project_files/HedgewarsMobile/Classes/ObjcExports.m
author koda
Sat, 24 Sep 2011 04:53:53 +0200
changeset 6008 215f0c9719e3
parent 5994 3c578f531cc1
child 6018 3b86826f6665
permissions -rw-r--r--
fix a crash in getting statistics and a glitch that made background music start while in-game
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     1
/*
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 4948
diff changeset
     3
 * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     4
 *
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     8
 *
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    12
 * GNU General Public License for more details.
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    13
 *
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    17
 *
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    18
 * File created on 30/10/2010.
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    19
 */
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    20
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    21
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    22
#import "ObjcExports.h"
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    23
#import "OverlayViewController.h"
4362
8dae325dc625 added missing graphics and fixed some glitches/crashes/bugs
koda
parents: 4034
diff changeset
    24
#import "AmmoMenuViewController.h"
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    25
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    26
#pragma mark -
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    27
#pragma mark internal variables
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    28
// actual game started (controls should be enabled)
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    29
BOOL gameRunning;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    30
// black screen present
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    31
BOOL savedGame;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    32
// cache the grenade time
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    33
NSInteger grenadeTime;
4362
8dae325dc625 added missing graphics and fixed some glitches/crashes/bugs
koda
parents: 4034
diff changeset
    34
// the reference to the newMenu instance
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    35
OverlayViewController *overlay_instance;
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
    36
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    37
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    38
#pragma mark -
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    39
#pragma mark functions called like oop
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    40
void objcExportsInit(OverlayViewController* instance) {
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    41
    overlay_instance = instance;
4034
634a8c8682de add some phone rumbling to big explosions, airbomb and sinegun
koda
parents: 4028
diff changeset
    42
    gameRunning = NO;
634a8c8682de add some phone rumbling to big explosions, airbomb and sinegun
koda
parents: 4028
diff changeset
    43
    savedGame = NO;
634a8c8682de add some phone rumbling to big explosions, airbomb and sinegun
koda
parents: 4028
diff changeset
    44
    grenadeTime = 2;
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    45
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    46
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    47
BOOL inline isGameRunning() {
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    48
    return gameRunning;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    49
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    50
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    51
void inline setGameRunning(BOOL value) {
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    52
    gameRunning = value;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    53
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    54
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    55
NSInteger cachedGrenadeTime() {
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    56
    return grenadeTime;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    57
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    58
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    59
void inline setGrenadeTime(NSInteger value) {
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    60
    grenadeTime = value;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    61
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    62
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    63
#pragma mark -
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    64
#pragma mark functions called by pascal code
5994
3c578f531cc1 don't rumble while synchronising a demo/save
koda
parents: 5992
diff changeset
    65
BOOL inline isApplePhone() {
3c578f531cc1 don't rumble while synchronising a demo/save
koda
parents: 5992
diff changeset
    66
    return (IS_IPAD() == NO);
3c578f531cc1 don't rumble while synchronising a demo/save
koda
parents: 5992
diff changeset
    67
}
3c578f531cc1 don't rumble while synchronising a demo/save
koda
parents: 5992
diff changeset
    68
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    69
void startSpinningProgress() {
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    70
    gameRunning = NO;
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    71
    overlay_instance.lowerIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    72
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    73
    CGPoint center = overlay_instance.view.center;
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: 5194
diff changeset
    74
    overlay_instance.lowerIndicator.center = (IS_DUALHEAD() ? center : CGPointMake(center.x, center.y * 5/3));
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    75
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    76
    [overlay_instance.lowerIndicator startAnimating];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    77
    [overlay_instance.view addSubview:overlay_instance.lowerIndicator];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    78
    [overlay_instance.lowerIndicator release];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    79
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    80
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    81
void stopSpinningProgress() {
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    82
    [overlay_instance.lowerIndicator stopAnimating];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
    83
    [overlay_instance.lowerIndicator removeFromSuperview];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    84
    HW_zoomSet(1.7);
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    85
    if (savedGame == NO)
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    86
        gameRunning = YES;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    87
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    88
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    89
void clearView() {
4504
8906b2409d97 add the appirater class for getting more positive reviews
koda
parents: 4488
diff changeset
    90
    // don't use any engine calls here as this function is called every time the ammomenu is opened
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    91
    [UIView beginAnimations:@"remove button" context:NULL];
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    92
    [UIView setAnimationDuration:ANIMATION_DURATION];
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
    93
    overlay_instance.confirmButton.alpha = 0;
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
    94
    overlay_instance.grenadeTimeSegment.alpha = 0;
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    95
    [UIView commitAnimations];
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
    96
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
    97
    if (overlay_instance.confirmButton)
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
    98
        [overlay_instance.confirmButton performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION];
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
    99
    if (overlay_instance.grenadeTimeSegment) {
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   100
        [overlay_instance.grenadeTimeSegment performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION];
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   101
        overlay_instance.grenadeTimeSegment.tag = 0;
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   102
    }
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   103
    grenadeTime = 2;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   104
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   105
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   106
void saveBeganSynching() {
5194
851c6fbb44e6 small fix for starting the ios game
koda
parents: 5175
diff changeset
   107
    savedGame = YES;
851c6fbb44e6 small fix for starting the ios game
koda
parents: 5175
diff changeset
   108
    stopSpinningProgress();
5992
a311b8461ec9 prevent screen locking while synching saves (can take some time)
koda
parents: 5662
diff changeset
   109
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
5194
851c6fbb44e6 small fix for starting the ios game
koda
parents: 5175
diff changeset
   110
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   111
    overlay_instance.view.backgroundColor = [UIColor blackColor];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   112
    overlay_instance.view.alpha = 0.75;
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   113
    overlay_instance.view.userInteractionEnabled = NO;
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   114
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   115
    overlay_instance.savesIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   116
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: 5194
diff changeset
   117
    overlay_instance.savesIndicator.center = overlay_instance.view.center;
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   118
    overlay_instance.savesIndicator.hidesWhenStopped = YES;
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   119
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   120
    [overlay_instance.savesIndicator startAnimating];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   121
    [overlay_instance.view addSubview:overlay_instance.savesIndicator];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   122
    [overlay_instance.savesIndicator release];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   123
}
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   124
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   125
void saveFinishedSynching() {
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   126
    [UIView beginAnimations:@"fading from save synch" context:NULL];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   127
    [UIView setAnimationDuration:1];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   128
    overlay_instance.view.backgroundColor = [UIColor clearColor];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   129
    overlay_instance.view.alpha = 1;
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   130
    overlay_instance.view.userInteractionEnabled = YES;
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   131
    [UIView commitAnimations];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   132
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   133
    [overlay_instance.savesIndicator stopAnimating];
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   134
    [overlay_instance.savesIndicator performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   135
5992
a311b8461ec9 prevent screen locking while synching saves (can take some time)
koda
parents: 5662
diff changeset
   136
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
4028
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   137
    gameRunning = YES;
eb371ada631d move functions called by pascal code outside controller
koda
parents:
diff changeset
   138
}
4034
634a8c8682de add some phone rumbling to big explosions, airbomb and sinegun
koda
parents: 4028
diff changeset
   139
634a8c8682de add some phone rumbling to big explosions, airbomb and sinegun
koda
parents: 4028
diff changeset
   140
void updateVisualsNewTurn(void) {
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5106
diff changeset
   141
    [overlay_instance.amvc updateAmmoVisuals];
4034
634a8c8682de add some phone rumbling to big explosions, airbomb and sinegun
koda
parents: 4028
diff changeset
   142
}
5106
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5002
diff changeset
   143
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5002
diff changeset
   144
// dummy function to prevent linkage fail
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5002
diff changeset
   145
int SDL_main(int argc, char **argv) {
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5002
diff changeset
   146
    return 0;
517bdd3865f1 wow we're getting famous http://hg.libsdl.org/SDL/rev/8a04b596b472
koda
parents: 5002
diff changeset
   147
}