author | koda |
Sun, 05 Feb 2012 15:52:26 +0100 | |
changeset 6624 | e049b5bb0ad1 |
parent 6615 | 65602f1ef0f8 |
child 6656 | 6aeaba3ee584 |
permissions | -rw-r--r-- |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
1 |
/* |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
2 |
* Hedgewars-iOS, a Hedgewars port for iOS devices |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
3 |
* Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com> |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
4 |
* |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License as published by |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
7 |
* the Free Software Foundation; version 2 of the License |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
8 |
* |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
13 |
* |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
17 |
* |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
18 |
* File created on 18/04/2011. |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
19 |
*/ |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
20 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
21 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
22 |
#import "GameInterfaceBridge.h" |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
23 |
#import "EngineProtocolNetwork.h" |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
24 |
#import "OverlayViewController.h" |
5158
4941df038b95
stats implemented once again! refactoring complete \o/
koda
parents:
5157
diff
changeset
|
25 |
#import "StatsPageViewController.h" |
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:
5709
diff
changeset
|
26 |
#import "AudioManagerController.h" |
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
27 |
#import "ObjcExports.h" |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
28 |
|
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
29 |
static UIViewController *callingController; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
30 |
|
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
31 |
@implementation GameInterfaceBridge |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
32 |
@synthesize blackView, savePath, proto; |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
33 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
34 |
#pragma mark - |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
35 |
#pragma mark Instance methods for engine interaction |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
36 |
// prepares the controllers for hosting a game |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
37 |
-(void) earlyEngineLaunch:(NSDictionary *)optionsOrNil { |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
38 |
[self retain]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
39 |
[AudioManagerController stopBackgroundMusic]; |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
40 |
|
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
41 |
EngineProtocolNetwork *engineProtocol = [[EngineProtocolNetwork alloc] init]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
42 |
self.proto = engineProtocol; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
43 |
[engineProtocol release]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
44 |
[self.proto spawnThread:self.savePath withOptions:optionsOrNil]; |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
45 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
46 |
// add a black view hiding the background |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
47 |
CGRect theFrame = [[UIScreen mainScreen] bounds]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
48 |
UIWindow *thisWindow = [[HedgewarsAppDelegate sharedAppDelegate] uiwindow]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
49 |
self.blackView = [[UIView alloc] initWithFrame:theFrame]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
50 |
self.blackView.opaque = YES; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
51 |
self.blackView.backgroundColor = [UIColor blackColor]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
52 |
self.blackView.alpha = 0; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
53 |
[UIView beginAnimations:@"fade out" context:NULL]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
54 |
[UIView setAnimationDuration:1]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
55 |
self.blackView.alpha = 1; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
56 |
[UIView commitAnimations]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
57 |
[thisWindow addSubview:self.blackView]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
58 |
[self.blackView release]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
59 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
60 |
// keep track of uncompleted games |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
61 |
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
62 |
[userDefaults setObject:self.savePath forKey:@"savedGamePath"]; |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
63 |
[userDefaults synchronize]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
64 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
65 |
// let's launch the engine using this -perfomSelector so that the runloop can deal with queued messages first |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
66 |
[self performSelector:@selector(engineLaunch) withObject:nil afterDelay:0.1f]; |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
67 |
} |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
68 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
69 |
// cleans up everything |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
70 |
-(void) lateEngineLaunch { |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
71 |
// notify views below that they are getting the spotlight again |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
72 |
[[[HedgewarsAppDelegate sharedAppDelegate] uiwindow] makeKeyAndVisible]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
73 |
[callingController viewWillAppear:YES]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
74 |
|
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
75 |
// remove completed games notification |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
76 |
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
77 |
[userDefaults setObject:@"" forKey:@"savedGamePath"]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
78 |
[userDefaults synchronize]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
79 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
80 |
// remove the cover view with a transition |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
81 |
self.blackView.alpha = 1; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
82 |
[UIView beginAnimations:@"fade in" context:NULL]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
83 |
[UIView setAnimationDuration:1]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
84 |
self.blackView.alpha = 0; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
85 |
[UIView commitAnimations]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
86 |
[self.blackView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
87 |
|
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
88 |
// the overlay is not needed any more and can be removed |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
89 |
[[OverlayViewController mainOverlay] removeOverlay]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
90 |
|
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
91 |
// engine thread *should* be done by now |
6365 | 92 |
NSArray *stats = [[NSArray alloc] initWithArray:self.proto.statsArray copyItems:YES]; |
93 |
if ([HWUtils gameStatus] == gsEnded && stats != nil) { |
|
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
94 |
StatsPageViewController *statsPage = [[StatsPageViewController alloc] initWithStyle:UITableViewStyleGrouped]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
95 |
statsPage.statsArray = stats; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
96 |
statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
97 |
if ([statsPage respondsToSelector:@selector(setModalPresentationStyle:)]) |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
98 |
statsPage.modalPresentationStyle = UIModalPresentationPageSheet; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
99 |
|
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
100 |
[callingController presentModalViewController:statsPage animated:YES]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
101 |
[statsPage release]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
102 |
} |
6365 | 103 |
[stats release]; |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
104 |
|
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
105 |
// can remove the savefile if the replay has ended |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
106 |
if ([HWUtils gameType] == gtSave) |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
107 |
[[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
108 |
|
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
109 |
// restart music and we're done |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
110 |
[AudioManagerController playBackgroundMusic]; |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
111 |
[HWUtils setGameStatus:gsNone]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
112 |
[HWUtils setGameType:gtNone]; |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
113 |
[self release]; |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
114 |
} |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
115 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
116 |
// main routine for calling the actual game engine |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
117 |
-(void) engineLaunch { |
5156 | 118 |
const char *gameArgs[11]; |
6209 | 119 |
CGFloat width, height; |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
120 |
NSInteger enginePort = self.proto.enginePort; |
6209 | 121 |
CGFloat screenScale = [[UIScreen mainScreen] safeScale]; |
6321 | 122 |
NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",enginePort]; |
6527 | 123 |
NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt",[[NSLocale preferredLanguages] objectAtIndex:0]]; |
5206 | 124 |
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
125 |
|
6624
e049b5bb0ad1
BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents:
6615
diff
changeset
|
126 |
CGRect screenBounds = [[UIScreen mainScreen] safeBounds]; |
e049b5bb0ad1
BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents:
6615
diff
changeset
|
127 |
width = screenBounds.size.width; |
e049b5bb0ad1
BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents:
6615
diff
changeset
|
128 |
height = screenBounds.size.height; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
129 |
|
6209 | 130 |
NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", (int)(width * screenScale)]; |
131 |
NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", (int)(height * screenScale)]; |
|
6344 | 132 |
NSString *resourcePath = [[NSString alloc] initWithFormat:@"%@/Data", [[NSBundle mainBundle] resourcePath]]; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
133 |
|
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:
6020
diff
changeset
|
134 |
NSString *modelId = [HWUtils modelType]; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
135 |
NSInteger tmpQuality; |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
136 |
if ([modelId hasPrefix:@"iPhone1"] || [modelId hasPrefix:@"iPod1,1"] || [modelId hasPrefix:@"iPod2,1"]) // = iPhone and iPhone 3G or iPod Touch or iPod Touch 2G |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
137 |
tmpQuality = 0x00000001 | 0x00000002 | 0x00000008 | 0x00000040; // rqLowRes | rqBlurryLand | rqSimpleRope | rqKillFlakes |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
138 |
else if ([modelId hasPrefix:@"iPhone2"] || [modelId hasPrefix:@"iPod3"]) // = iPhone 3GS or iPod Touch 3G |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
139 |
tmpQuality = 0x00000002 | 0x00000040; // rqBlurryLand | rqKillFlakes |
5709 | 140 |
else if ([modelId hasPrefix:@"iPad1"] || [modelId hasPrefix:@"iPod4"]) // = iPad 1G or iPod Touch 4G |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
141 |
tmpQuality = 0x00000002; // rqBlurryLand |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
142 |
else // = everything else |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
143 |
tmpQuality = 0; // full quality |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
144 |
|
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6266
diff
changeset
|
145 |
// disable ammomenu animation |
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6266
diff
changeset
|
146 |
tmpQuality = tmpQuality | 0x00000080; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
147 |
// disable tooltips on iPhone |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
148 |
if (IS_IPAD() == NO) |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
149 |
tmpQuality = tmpQuality | 0x00000400; |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
150 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
151 |
// prevents using an empty nickname |
5206 | 152 |
NSString *username = [settings objectForKey:@"username"]; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
153 |
if ([username length] == 0) |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
154 |
username = [NSString stringWithFormat:@"MobileUser-%@",ipcString]; |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
155 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
156 |
gameArgs[ 0] = [ipcString UTF8String]; //ipcPort |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
157 |
gameArgs[ 1] = [horizontalSize UTF8String]; //cScreenWidth |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
158 |
gameArgs[ 2] = [verticalSize UTF8String]; //cScreenHeight |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
159 |
gameArgs[ 3] = [[NSString stringWithFormat:@"%d",tmpQuality] UTF8String]; //quality |
6527 | 160 |
gameArgs[ 4] = [localeString UTF8String]; //cLocaleFName |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
161 |
gameArgs[ 5] = [username UTF8String]; //UserNick |
5206 | 162 |
gameArgs[ 6] = [[[settings objectForKey:@"sound"] stringValue] UTF8String]; //isSoundEnabled |
163 |
gameArgs[ 7] = [[[settings objectForKey:@"music"] stringValue] UTF8String]; //isMusicEnabled |
|
164 |
gameArgs[ 8] = [[[settings objectForKey:@"alternate"] stringValue] UTF8String]; //cAltDamage |
|
6344 | 165 |
gameArgs[ 9] = [resourcePath UTF8String]; //PathPrefix |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
166 |
gameArgs[10] = ([HWUtils gameType] == gtSave) ? [self.savePath UTF8String] : NULL; //recordFileName |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
167 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
168 |
[verticalSize release]; |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
169 |
[horizontalSize release]; |
6344 | 170 |
[resourcePath release]; |
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
171 |
[localeString release]; |
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
172 |
[ipcString release]; |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
173 |
|
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6246
diff
changeset
|
174 |
[HWUtils setGameStatus:gsLoading]; |
5194 | 175 |
|
6265
a6944f94c19f
aaand remove also ipcport from the class interface as well
koda
parents:
6263
diff
changeset
|
176 |
// this is the pascal function that starts the game |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
177 |
Game(gameArgs); |
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
178 |
[self lateEngineLaunch]; |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
179 |
} |
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
180 |
|
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
181 |
-(void) dealloc { |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
182 |
releaseAndNil(blackView); |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
183 |
releaseAndNil(savePath); |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
184 |
releaseAndNil(proto); |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
185 |
[super dealloc]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
186 |
} |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
187 |
|
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
188 |
#pragma mark - |
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
189 |
#pragma mark Class methods for setting up the engine from outsite |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
190 |
+(void) registerCallingController:(UIViewController *)controller { |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
191 |
callingController = controller; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
192 |
} |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
193 |
|
6321 | 194 |
+(void) startGame:(TGameType) type atPath:(NSString *)path withOptions:(NSDictionary *)config { |
195 |
[HWUtils setGameType:type]; |
|
6337
84e7d1a5e3df
in class methods you can call [self alloc], as per objc specifications
koda
parents:
6321
diff
changeset
|
196 |
id bridge = [[self alloc] init]; |
6353
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
197 |
[bridge setSavePath:path]; |
d8f62c805619
restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents:
6337
diff
changeset
|
198 |
[bridge earlyEngineLaunch:config]; |
6321 | 199 |
[bridge release]; |
200 |
} |
|
201 |
||
6266
b02a1e92dba2
convert gameinterfacebridge in simple-to-use class methods
koda
parents:
6265
diff
changeset
|
202 |
+(void) startLocalGame:(NSDictionary *)withOptions { |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
203 |
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; |
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
204 |
[outputFormatter setDateFormat:@"yyyy-MM-dd '@' HH.mm"]; |
6263
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
205 |
NSString *savePath = [[NSString alloc] initWithFormat:@"%@%@.hws",SAVES_DIRECTORY(),[outputFormatter stringFromDate:[NSDate date]]]; |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
206 |
[outputFormatter release]; |
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
207 |
|
6301
1259736c0134
engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents:
6276
diff
changeset
|
208 |
// in the rare case in which a savefile with the same name exists the older one must be removed (otherwise it gets corrupted) |
6263
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
209 |
if ([[NSFileManager defaultManager] fileExistsAtPath:savePath]) |
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
210 |
[[NSFileManager defaultManager] removeItemAtPath:savePath error:nil]; |
5158
4941df038b95
stats implemented once again! refactoring complete \o/
koda
parents:
5157
diff
changeset
|
211 |
|
6321 | 212 |
[self startGame:gtLocal atPath:savePath withOptions:withOptions]; |
6263
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
213 |
[savePath release]; |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
214 |
} |
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
215 |
|
6266
b02a1e92dba2
convert gameinterfacebridge in simple-to-use class methods
koda
parents:
6265
diff
changeset
|
216 |
+(void) startSaveGame:(NSString *)atPath { |
6321 | 217 |
[self startGame:gtSave atPath:atPath withOptions:nil]; |
5155
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
218 |
} |
f2165724605c
more refactoring, less warnings, less stuff kept around
koda
parents:
5154
diff
changeset
|
219 |
|
6266
b02a1e92dba2
convert gameinterfacebridge in simple-to-use class methods
koda
parents:
6265
diff
changeset
|
220 |
+(void) startMissionGame:(NSString *)withScript { |
6084 | 221 |
NSString *missionPath = [[NSString alloc] initWithFormat:@"escript Missions/Training/%@.lua",withScript]; |
6263
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
222 |
NSDictionary *missionLine = [[NSDictionary alloc] initWithObjectsAndKeys:missionPath,@"mission_command",nil]; |
6084 | 223 |
[missionPath release]; |
6263
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
224 |
|
6321 | 225 |
[self startGame:gtMission atPath:nil withOptions:missionLine]; |
6263
ec41637ceb64
don't keep track of the savepath and of engineprotocol objects
koda
parents:
6261
diff
changeset
|
226 |
[missionLine release]; |
6083
72c882c0fd0f
first pass for implementing missions/training selection on ipad (not yet running)
koda
parents:
6078
diff
changeset
|
227 |
} |
72c882c0fd0f
first pass for implementing missions/training selection on ipad (not yet running)
koda
parents:
6078
diff
changeset
|
228 |
|
5154
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
229 |
|
851f36579ed4
initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff
changeset
|
230 |
@end |