author | unc0rr |
Sat, 19 Nov 2011 22:42:52 +0300 | |
changeset 6401 | b9d9024cf203 |
parent 6268 | d773867f93db |
child 6612 | 8fd6bb239a1e |
permissions | -rw-r--r-- |
3829 | 1 |
/* |
2 |
* Hedgewars-iOS, a Hedgewars port for iOS devices |
|
4976 | 3 |
* Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com> |
3829 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
17 |
* |
|
18 |
* File created on 16/03/2010. |
|
19 |
*/ |
|
20 |
||
3547 | 21 |
|
22 |
#import "OverlayViewController.h" |
|
3791
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
23 |
#import "InGameMenuViewController.h" |
3792 | 24 |
#import "HelpPageViewController.h" |
3924 | 25 |
#import "AmmoMenuViewController.h" |
3547 | 26 |
#import "CGPointUtils.h" |
4028
eb371ada631d
move functions called by pascal code outside controller
koda
parents:
3996
diff
changeset
|
27 |
#import "ObjcExports.h" |
3547 | 28 |
|
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:
6018
diff
changeset
|
29 |
|
3547 | 30 |
#define HIDING_TIME_DEFAULT [NSDate dateWithTimeIntervalSinceNow:2.7] |
31 |
#define HIDING_TIME_NEVER [NSDate dateWithTimeIntervalSinceNow:10000] |
|
3941 | 32 |
#define doDim() [dimTimer setFireDate: (IS_DUALHEAD()) ? HIDING_TIME_NEVER : HIDING_TIME_DEFAULT] |
3646
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
33 |
#define doNotDim() [dimTimer setFireDate:HIDING_TIME_NEVER] |
3547 | 34 |
|
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
35 |
|
6018
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
36 |
static OverlayViewController *mainOverlay; |
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
37 |
|
3547 | 38 |
@implementation OverlayViewController |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
39 |
@synthesize popoverController, popupMenu, helpPage, amvc, initialScreenCount, loadingIndicator, |
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:
5208
diff
changeset
|
40 |
confirmButton, grenadeTimeSegment; |
3547 | 41 |
|
3976 | 42 |
#pragma mark - |
43 |
#pragma mark rotation |
|
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:
4976
diff
changeset
|
44 |
|
3547 | 45 |
-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation { |
3977 | 46 |
return rotationManager(interfaceOrientation); |
3547 | 47 |
} |
48 |
||
49 |
#pragma mark - |
|
50 |
#pragma mark View Management |
|
6018
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
51 |
-(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { |
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
52 |
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { |
3976 | 53 |
isAttacking = NO; |
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
54 |
isPopoverVisible = NO; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
55 |
initialScreenCount = (IS_DUALHEAD() ? 2 : 1); |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
56 |
loadingIndicator = nil; |
6018
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
57 |
mainOverlay = self; |
3976 | 58 |
} |
59 |
return self; |
|
60 |
} |
|
3948
24daa33a3114
some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents:
3941
diff
changeset
|
61 |
|
6018
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
62 |
+(OverlayViewController *)mainOverlay { |
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
63 |
return mainOverlay; |
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
64 |
} |
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
65 |
|
3976 | 66 |
-(void) viewDidLoad { |
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:
5208
diff
changeset
|
67 |
// fill all the screen available as sdlview disables autoresizing |
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:
5208
diff
changeset
|
68 |
CGRect rect = [[UIScreen mainScreen] bounds]; |
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:
5208
diff
changeset
|
69 |
self.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width); |
3977 | 70 |
|
3976 | 71 |
// the timer used to dim the overlay |
3941 | 72 |
dimTimer = [[NSTimer alloc] initWithFireDate:(IS_DUALHEAD()) ? HIDING_TIME_NEVER : [NSDate dateWithTimeIntervalSinceNow:6] |
3547 | 73 |
interval:1000 |
74 |
target:self |
|
75 |
selector:@selector(dimOverlay) |
|
76 |
userInfo:nil |
|
77 |
repeats:YES]; |
|
3952
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
78 |
// add timer to runloop, otherwise it doesn't work |
3547 | 79 |
[[NSRunLoop currentRunLoop] addTimer:dimTimer forMode:NSDefaultRunLoopMode]; |
3697 | 80 |
|
4924 | 81 |
// display the help page, required by the popover on ipad |
3791
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
82 |
[[NSNotificationCenter defaultCenter] addObserver:self |
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
83 |
selector:@selector(showHelp:) |
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
84 |
name:@"show help ingame" |
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
85 |
object:nil]; |
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
86 |
|
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:
5208
diff
changeset
|
87 |
if (IS_IPAD()) { |
4082 | 88 |
[[NSNotificationCenter defaultCenter] addObserver:self |
89 |
selector:@selector(numberOfScreensIncreased) |
|
90 |
name:UIScreenDidConnectNotification |
|
91 |
object:nil]; |
|
92 |
||
93 |
[[NSNotificationCenter defaultCenter] addObserver:self |
|
94 |
selector:@selector(numberOfScreensDecreased) |
|
95 |
name:UIScreenDidDisconnectNotification |
|
96 |
object:nil]; |
|
97 |
} |
|
4454 | 98 |
|
3976 | 99 |
// present the overlay |
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
100 |
self.view.alpha = 0; |
3547 | 101 |
[UIView beginAnimations:@"showing overlay" context:NULL]; |
4098
40df542b5f62
i give up and disable rotation on the iphone; also fix smaller compilation issues
koda
parents:
4082
diff
changeset
|
102 |
[UIView setAnimationDuration:2]; |
3547 | 103 |
self.view.alpha = 1; |
104 |
[UIView commitAnimations]; |
|
105 |
} |
|
106 |
||
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
107 |
-(void) viewDidUnload { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
108 |
[[NSNotificationCenter defaultCenter] removeObserver:self]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
109 |
|
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
110 |
[NSObject cancelPreviousPerformRequestsWithTarget:self |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
111 |
selector:@selector(unsetPreciseStatus) |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
112 |
object:nil]; |
3941 | 113 |
|
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
114 |
// only objects initialized in viewDidLoad should be here |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
115 |
dimTimer = nil; |
6018
3b86826f6665
add a class method for getting the overlay (and fix a silly mistake while at it) and use it
koda
parents:
6000
diff
changeset
|
116 |
mainOverlay = nil; |
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
117 |
self.helpPage = nil; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
118 |
[self dismissPopover]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
119 |
self.popoverController = nil; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
120 |
self.amvc = nil; |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
121 |
self.loadingIndicator = nil; |
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
122 |
MSG_DIDUNLOAD(); |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
123 |
[super viewDidUnload]; |
4924 | 124 |
} |
125 |
||
3783 | 126 |
-(void) didReceiveMemoryWarning { |
127 |
if (self.popupMenu.view.superview == nil) |
|
128 |
self.popupMenu = nil; |
|
3791
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
129 |
if (self.helpPage.view.superview == nil) |
98072b3871c1
help page for ingame, some other fixes here and there
koda
parents:
3789
diff
changeset
|
130 |
self.helpPage = nil; |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
131 |
if (self.amvc.view.superview == nil) |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
132 |
self.amvc = nil; |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
133 |
if (self.loadingIndicator.superview == nil) |
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
134 |
self.loadingIndicator = nil; |
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
135 |
if (self.confirmButton.superview == nil) |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
136 |
self.confirmButton = nil; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
137 |
if (self.grenadeTimeSegment.superview == nil) |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
138 |
self.grenadeTimeSegment = nil; |
3996 | 139 |
if (IS_IPAD()) |
3971 | 140 |
if (((UIPopoverController *)self.popoverController).contentViewController.view.superview == nil) |
141 |
self.popoverController = nil; |
|
5156 | 142 |
|
3783 | 143 |
MSG_MEMCLEAN(); |
3971 | 144 |
[super didReceiveMemoryWarning]; |
3783 | 145 |
} |
146 |
||
3547 | 147 |
-(void) dealloc { |
5208 | 148 |
releaseAndNil(popupMenu); |
149 |
releaseAndNil(helpPage); |
|
150 |
releaseAndNil(popoverController); |
|
151 |
releaseAndNil(amvc); |
|
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
152 |
releaseAndNil(loadingIndicator); |
5208 | 153 |
releaseAndNil(confirmButton); |
154 |
releaseAndNil(grenadeTimeSegment); |
|
3547 | 155 |
// dimTimer is autoreleased |
156 |
[super dealloc]; |
|
157 |
} |
|
158 |
||
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
159 |
-(void) numberOfScreensIncreased { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
160 |
if (self.initialScreenCount == 1) { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
161 |
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"New display detected" |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
162 |
message:NSLocalizedString(@"Hedgewars supports multi-monitor configurations, but the screen has to be connected before launching the game.",@"") |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
163 |
delegate:nil |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
164 |
cancelButtonTitle:@"Ok" |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
165 |
otherButtonTitles:nil]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
166 |
[alert show]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
167 |
[alert release]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
168 |
HW_pause(); |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
169 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
170 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
171 |
|
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
172 |
-(void) numberOfScreensDecreased { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
173 |
if (self.initialScreenCount == 2) { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
174 |
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oh noes! Display disconnected" |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
175 |
message:NSLocalizedString(@"A monitor has been disconnected while playing and this has ended the match! You need to restart the game if you wish to use the second display again.",@"") |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
176 |
delegate:nil |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
177 |
cancelButtonTitle:@"Ok" |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
178 |
otherButtonTitles:nil]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
179 |
[alert show]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
180 |
[alert release]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
181 |
HW_terminate(NO); |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
182 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
183 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
184 |
|
3547 | 185 |
#pragma mark - |
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
186 |
#pragma mark overlay appearance |
3547 | 187 |
// nice transition for dimming, should be called only by the timer himself |
188 |
-(void) dimOverlay { |
|
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
189 |
if ([HWUtils isGameRunning]) { |
3547 | 190 |
[UIView beginAnimations:@"overlay dim" context:NULL]; |
191 |
[UIView setAnimationDuration:0.6]; |
|
192 |
self.view.alpha = 0.2; |
|
193 |
[UIView commitAnimations]; |
|
194 |
} |
|
195 |
} |
|
196 |
||
197 |
// set the overlay visible and put off the timer for enough time |
|
198 |
-(void) activateOverlay { |
|
199 |
self.view.alpha = 1; |
|
3646
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
200 |
doNotDim(); |
3547 | 201 |
} |
202 |
||
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
203 |
-(void) removeOverlay { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
204 |
[self.popupMenu performSelectorOnMainThread:@selector(dismiss) withObject:nil waitUntilDone:YES]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
205 |
[self.popoverController performSelectorOnMainThread:@selector(dismissPopoverAnimated:) withObject:nil waitUntilDone:YES]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
206 |
[self.view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:YES]; |
6259
02765411a912
move objc overlay creation after sdlwindow has been created
koda
parents:
6247
diff
changeset
|
207 |
[self performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:YES]; |
6260 | 208 |
mainOverlay = nil; |
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
209 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
210 |
|
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
211 |
#pragma mark - |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
212 |
#pragma mark overlay user interaction |
3626 | 213 |
// dim the overlay when there's no more input for a certain amount of time |
214 |
-(IBAction) buttonReleased:(id) sender { |
|
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
215 |
if ([HWUtils isGameRunning] == NO) |
3629
86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3628
diff
changeset
|
216 |
return; |
3697 | 217 |
|
3626 | 218 |
UIButton *theButton = (UIButton *)sender; |
3697 | 219 |
|
3626 | 220 |
switch (theButton.tag) { |
221 |
case 0: |
|
222 |
case 1: |
|
223 |
case 2: |
|
224 |
case 3: |
|
3649 | 225 |
[NSObject cancelPreviousPerformRequestsWithTarget:self |
226 |
selector:@selector(unsetPreciseStatus) |
|
227 |
object:nil]; |
|
3626 | 228 |
HW_walkingKeysUp(); |
229 |
break; |
|
230 |
case 4: |
|
231 |
case 5: |
|
232 |
case 6: |
|
233 |
HW_otherKeysUp(); |
|
234 |
break; |
|
235 |
default: |
|
3660 | 236 |
DLog(@"Nope"); |
3626 | 237 |
break; |
238 |
} |
|
239 |
||
3737
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
240 |
isAttacking = NO; |
3646
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
241 |
doDim(); |
3626 | 242 |
} |
243 |
||
3697 | 244 |
// issue certain action based on the tag of the button |
3547 | 245 |
-(IBAction) buttonPressed:(id) sender { |
246 |
[self activateOverlay]; |
|
3904
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3829
diff
changeset
|
247 |
|
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
248 |
if ([HWUtils isGameRunning] == NO) |
3904
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3829
diff
changeset
|
249 |
return; |
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3829
diff
changeset
|
250 |
|
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3829
diff
changeset
|
251 |
if (isPopoverVisible) |
3547 | 252 |
[self dismissPopover]; |
3779
3351a017d4ad
tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents:
3765
diff
changeset
|
253 |
|
3547 | 254 |
UIButton *theButton = (UIButton *)sender; |
255 |
switch (theButton.tag) { |
|
256 |
case 0: |
|
3737
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
257 |
if (isAttacking == NO) |
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
258 |
HW_walkLeft(); |
3547 | 259 |
break; |
260 |
case 1: |
|
3737
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
261 |
if (isAttacking == NO) |
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
262 |
HW_walkRight(); |
3547 | 263 |
break; |
264 |
case 2: |
|
3649 | 265 |
[self performSelector:@selector(unsetPreciseStatus) withObject:nil afterDelay:0.8]; |
3737
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
266 |
HW_preciseSet(!HW_isWeaponRope()); |
3547 | 267 |
HW_aimUp(); |
268 |
break; |
|
269 |
case 3: |
|
3649 | 270 |
[self performSelector:@selector(unsetPreciseStatus) withObject:nil afterDelay:0.8]; |
3737
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
271 |
HW_preciseSet(!HW_isWeaponRope()); |
3547 | 272 |
HW_aimDown(); |
273 |
break; |
|
274 |
case 4: |
|
275 |
HW_shoot(); |
|
3737
2ba6ac8a114b
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
koda
parents:
3701
diff
changeset
|
276 |
isAttacking = YES; |
3547 | 277 |
break; |
278 |
case 5: |
|
279 |
HW_jump(); |
|
280 |
break; |
|
281 |
case 6: |
|
282 |
HW_backjump(); |
|
283 |
break; |
|
284 |
case 10: |
|
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:
5662
diff
changeset
|
285 |
[AudioManagerController playClickSound]; |
4504
8906b2409d97
add the appirater class for getting more positive reviews
koda
parents:
4454
diff
changeset
|
286 |
clearView(); |
3667 | 287 |
HW_pause(); |
3941 | 288 |
if (self.amvc.isVisible && IS_DUALHEAD() == NO) { |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
289 |
doDim(); |
3935 | 290 |
[self.amvc disappear]; |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
291 |
} |
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
292 |
clearView(); |
3547 | 293 |
[self showPopover]; |
294 |
break; |
|
3624 | 295 |
case 11: |
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:
5662
diff
changeset
|
296 |
[AudioManagerController playClickSound]; |
4504
8906b2409d97
add the appirater class for getting more positive reviews
koda
parents:
4454
diff
changeset
|
297 |
clearView(); |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
298 |
|
5206 | 299 |
if (IS_DUALHEAD() || [[[NSUserDefaults standardUserDefaults] objectForKey:@"classic_menu"] boolValue] == NO) { |
3935 | 300 |
if (self.amvc == nil) |
301 |
self.amvc = [[AmmoMenuViewController alloc] init]; |
|
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
302 |
|
3935 | 303 |
if (self.amvc.isVisible) { |
304 |
doDim(); |
|
305 |
[self.amvc disappear]; |
|
306 |
} else { |
|
3952
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
307 |
if (HW_isAmmoMenuNotAllowed() == NO) { |
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
308 |
doNotDim(); |
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
309 |
[self.amvc appearInView:self.view]; |
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
310 |
} |
3935 | 311 |
} |
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
312 |
} else |
3941 | 313 |
HW_ammoMenu(); |
3624 | 314 |
break; |
3547 | 315 |
default: |
3626 | 316 |
DLog(@"Nope"); |
3547 | 317 |
break; |
318 |
} |
|
319 |
} |
|
320 |
||
3649 | 321 |
-(void) unsetPreciseStatus { |
322 |
HW_preciseSet(NO); |
|
323 |
} |
|
324 |
||
3976 | 325 |
-(void) sendHWClick { |
326 |
HW_click(); |
|
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
327 |
clearView(); |
3976 | 328 |
doDim(); |
329 |
} |
|
330 |
||
331 |
-(void) setGrenadeTime:(id) sender { |
|
332 |
UISegmentedControl *theSegment = (UISegmentedControl *)sender; |
|
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
333 |
if ([ObjcExports grenadeTime] != theSegment.selectedSegmentIndex) { |
3976 | 334 |
HW_setGrenadeTime(theSegment.selectedSegmentIndex + 1); |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
335 |
[ObjcExports setGrenadeTime:theSegment.selectedSegmentIndex]; |
3976 | 336 |
} |
337 |
} |
|
338 |
||
339 |
#pragma mark - |
|
5166
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
340 |
#pragma mark in-game menu and help page |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
341 |
-(void) showHelp:(id) sender { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
342 |
if (self.helpPage == nil) { |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
343 |
NSString *xibName = (IS_IPAD() ? @"HelpPageInGameViewController-iPad" : @"HelpPageInGameViewController-iPhone"); |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
344 |
self.helpPage = [[HelpPageViewController alloc] initWithNibName:xibName bundle:nil]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
345 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
346 |
self.helpPage.view.alpha = 0; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
347 |
[self.view addSubview:helpPage.view]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
348 |
[UIView beginAnimations:@"helpingame" context:NULL]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
349 |
self.helpPage.view.alpha = 1; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
350 |
[UIView commitAnimations]; |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
351 |
doNotDim(); |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
352 |
} |
d1eb1560b4d5
and now for something completely different, overlay refactoring!
koda
parents:
5156
diff
changeset
|
353 |
|
3547 | 354 |
// show up a popover containing a popupMenuViewController; we hook it with setPopoverContentSize |
355 |
// on iphone instead just use the tableViewController directly (and implement manually all animations) |
|
356 |
-(IBAction) showPopover{ |
|
3667 | 357 |
CGRect screen = [[UIScreen mainScreen] bounds]; |
3547 | 358 |
isPopoverVisible = YES; |
359 |
||
3996 | 360 |
if (IS_IPAD()) { |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
361 |
if (self.popupMenu == nil) |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
362 |
self.popupMenu = [[InGameMenuViewController alloc] initWithStyle:UITableViewStylePlain]; |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
363 |
if (self.popoverController == nil) { |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
364 |
self.popoverController = [[UIPopoverController alloc] initWithContentViewController:self.popupMenu]; |
4935 | 365 |
[self.popoverController setPopoverContentSize:CGSizeMake(220, 200) animated:YES]; |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
366 |
[self.popoverController setPassthroughViews:[NSArray arrayWithObject:self.view]]; |
3547 | 367 |
} |
3551 | 368 |
|
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
369 |
[self.popoverController presentPopoverFromRect:CGRectMake(screen.size.height / 2, screen.size.width / 2, 1, 1) |
3547 | 370 |
inView:self.view |
3667 | 371 |
permittedArrowDirections:UIPopoverArrowDirectionAny |
3547 | 372 |
animated:YES]; |
373 |
} else { |
|
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
374 |
if (self.popupMenu == nil) |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
375 |
self.popupMenu = [[InGameMenuViewController alloc] initWithStyle:UITableViewStyleGrouped]; |
3697 | 376 |
|
3547 | 377 |
[self.view addSubview:popupMenu.view]; |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
378 |
[self.popupMenu present]; |
3547 | 379 |
} |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
380 |
self.popupMenu.tableView.scrollEnabled = NO; |
3547 | 381 |
} |
382 |
||
383 |
// on ipad just dismiss it, on iphone transtion to the right |
|
384 |
-(void) dismissPopover { |
|
385 |
if (YES == isPopoverVisible) { |
|
386 |
isPopoverVisible = NO; |
|
3672
f225b94a4411
shrink confirmation button, double tap resets zoom and centers hog
koda
parents:
3668
diff
changeset
|
387 |
if (HW_isPaused()) |
4454 | 388 |
HW_pauseToggle(); |
3697 | 389 |
|
4920 | 390 |
[self.popupMenu dismiss]; |
391 |
if (IS_IPAD()) |
|
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
392 |
[self.popoverController dismissPopoverAnimated:YES]; |
4920 | 393 |
|
3547 | 394 |
[self buttonReleased:nil]; |
395 |
} |
|
396 |
} |
|
397 |
||
398 |
#pragma mark - |
|
399 |
#pragma mark Custom touch event handling |
|
4541 | 400 |
-(BOOL) shouldIgnoreTouch:(NSSet *)allTouches { |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
401 |
if ([HWUtils isGameRunning] == NO) |
4541 | 402 |
return YES; |
403 |
||
404 |
// ignore activity near the dpad and buttons |
|
405 |
CGPoint touchPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; |
|
406 |
CGSize screen = [[UIScreen mainScreen] bounds].size; |
|
407 |
||
408 |
if ((touchPoint.x < 160 && touchPoint.y > screen.width - 155 ) || |
|
409 |
(touchPoint.x > screen.height - 135 && touchPoint.y > screen.width - 140)) |
|
410 |
return YES; |
|
411 |
return NO; |
|
412 |
} |
|
413 |
||
3547 | 414 |
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
415 |
NSSet *allTouches = [event allTouches]; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
416 |
UITouch *first, *second; |
3697 | 417 |
|
4541 | 418 |
if ([self shouldIgnoreTouch:allTouches] == YES) |
3765
ebfe7c9b3085
set flake to non critical, no touches until game is starding, moved some variables to be initialized in the right place
koda
parents:
3739
diff
changeset
|
419 |
return; |
ebfe7c9b3085
set flake to non critical, no touches until game is starding, moved some variables to be initialized in the right place
koda
parents:
3739
diff
changeset
|
420 |
|
3647
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3646
diff
changeset
|
421 |
// hide in-game menu |
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3646
diff
changeset
|
422 |
if (isPopoverVisible) |
3547 | 423 |
[self dismissPopover]; |
3697 | 424 |
|
3941 | 425 |
if (self.amvc.isVisible && IS_DUALHEAD() == NO) { |
3933
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
426 |
doDim(); |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
427 |
[self.amvc disappear]; |
1a873262f5dd
polishing the cocoa ammomenu a little, still requires work
koda
parents:
3926
diff
changeset
|
428 |
} |
3646
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
429 |
// reset default dimming |
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
430 |
doDim(); |
3697 | 431 |
|
3668
3f7a95234d8a
tap to play piano notes, fix for audio and pause glitch
koda
parents:
3667
diff
changeset
|
432 |
HW_setPianoSound([allTouches count]); |
3697 | 433 |
|
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
434 |
switch ([allTouches count]) { |
3697 | 435 |
case 1: |
3651 | 436 |
startingPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
437 |
if (2 == [[[allTouches allObjects] objectAtIndex:0] tapCount]) |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
438 |
HW_zoomReset(); |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
439 |
break; |
3697 | 440 |
case 2: |
6268
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
441 |
if (2 == [[[allTouches allObjects] objectAtIndex:0] tapCount]) |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
442 |
HW_screenshot(); |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
443 |
else { |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
444 |
// pinching |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
445 |
first = [[allTouches allObjects] objectAtIndex:0]; |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
446 |
second = [[allTouches allObjects] objectAtIndex:1]; |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
447 |
initialDistanceForPinching = distanceBetweenPoints([first locationInView:self.view], [second locationInView:self.view]); |
d773867f93db
double two finger tap to make screenshot on ios (though folder is not yet accessible)
koda
parents:
6260
diff
changeset
|
448 |
} |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
449 |
break; |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
450 |
default: |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
451 |
break; |
3547 | 452 |
} |
453 |
} |
|
454 |
||
455 |
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { |
|
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
456 |
NSSet *allTouches = [event allTouches]; |
4541 | 457 |
if ([self shouldIgnoreTouch:allTouches] == YES) |
3904
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3829
diff
changeset
|
458 |
return; |
4541 | 459 |
|
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
460 |
CGRect screen = [[UIScreen mainScreen] bounds]; |
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
461 |
CGPoint currentPosition = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; |
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
462 |
|
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
463 |
switch ([allTouches count]) { |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
464 |
case 1: |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
465 |
// if we're in the menu we just click in the point |
3952
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
466 |
if (HW_isAmmoMenuOpen()) { |
3680 | 467 |
HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y)); |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
468 |
// this click doesn't need any wrapping because the ammoMenu already limits the cursor |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
469 |
HW_click(); |
3697 | 470 |
} else |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
471 |
// if weapon requires a further click, ask for tapping again |
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
472 |
if (HW_isWeaponRequiringClick()) { |
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
473 |
// here don't have to wrap thanks to isCursorVisible magic |
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
474 |
HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); |
3697 | 475 |
|
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
476 |
// draw the button at the last touched point (which is the current position) |
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
477 |
if (self.confirmButton == nil) { |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
478 |
UIButton *tapAgain = [UIButton buttonWithType:UIButtonTypeRoundedRect]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
479 |
[tapAgain addTarget:self action:@selector(sendHWClick) forControlEvents:UIControlEventTouchUpInside]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
480 |
[tapAgain setTitle:NSLocalizedString(@"Set!",@"on the overlay") forState:UIControlStateNormal]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
481 |
self.confirmButton = tapAgain; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
482 |
} |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
483 |
self.confirmButton.alpha = 0; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
484 |
self.confirmButton.frame = CGRectMake(currentPosition.x - 75, currentPosition.y + 25, 150, 40); |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
485 |
[self.view addSubview:self.confirmButton]; |
3697 | 486 |
|
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
487 |
// animation ftw! |
3697 | 488 |
[UIView beginAnimations:@"inserting button" context:NULL]; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
489 |
[UIView setAnimationDuration:ANIMATION_DURATION]; |
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
490 |
self.confirmButton.alpha = 1; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
491 |
[UIView commitAnimations]; |
3697 | 492 |
|
3646
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
493 |
// keep the overlay active, or the button will fade |
3650 | 494 |
[self activateOverlay]; |
3646
a3271158d93b
don't make the confirmation button disappear, present an alert if game doesn't start
koda
parents:
3639
diff
changeset
|
495 |
doNotDim(); |
3650 | 496 |
} else |
497 |
if (HW_isWeaponTimerable()) { |
|
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
498 |
if (self.grenadeTimeSegment.tag != 0) { |
3650 | 499 |
[UIView beginAnimations:@"removing segmented control" context:NULL]; |
500 |
[UIView setAnimationDuration:ANIMATION_DURATION]; |
|
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
501 |
self.grenadeTimeSegment.alpha = 0; |
3650 | 502 |
[UIView commitAnimations]; |
3697 | 503 |
|
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
504 |
[self.grenadeTimeSegment performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
505 |
self.grenadeTimeSegment.tag = 0; |
3650 | 506 |
} else { |
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
507 |
if (self.grenadeTimeSegment == nil) { |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
508 |
NSArray *items = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
509 |
UISegmentedControl *grenadeSegment = [[UISegmentedControl alloc] initWithItems:items]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
510 |
[items release]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
511 |
[grenadeSegment addTarget:self action:@selector(setGrenadeTime:) forControlEvents:UIControlEventValueChanged]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
512 |
self.grenadeTimeSegment = grenadeSegment; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
513 |
[grenadeSegment release]; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
514 |
} |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
515 |
self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width, 250, 50); |
6247
6dfad55fd71c
unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents:
6078
diff
changeset
|
516 |
self.grenadeTimeSegment.selectedSegmentIndex = [ObjcExports grenadeTime]; |
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
517 |
self.grenadeTimeSegment.alpha = 1; |
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
518 |
[self.view addSubview:self.grenadeTimeSegment]; |
3697 | 519 |
|
3650 | 520 |
[UIView beginAnimations:@"inserting segmented control" context:NULL]; |
521 |
[UIView setAnimationDuration:ANIMATION_DURATION]; |
|
522 |
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; |
|
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
523 |
self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width - 100, 250, 50); |
3650 | 524 |
[UIView commitAnimations]; |
3697 | 525 |
|
5175
a3da220dbb3f
finish overlay refactoring and some leak annihilation
koda
parents:
5174
diff
changeset
|
526 |
self.grenadeTimeSegment.tag++; |
3650 | 527 |
[self activateOverlay]; |
528 |
doNotDim(); |
|
3697 | 529 |
} |
3661 | 530 |
} else |
531 |
if (HW_isWeaponSwitch()) |
|
532 |
HW_tab(); |
|
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
533 |
break; |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
534 |
case 2: |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
535 |
HW_allKeysUp(); |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
536 |
break; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
537 |
default: |
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
538 |
break; |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
539 |
} |
3697 | 540 |
|
3635
38d3e31556d3
improvements to touch interface (tap to select weap, don't move camera for spourious taps, ask for confirmation when using click-weapons)
koda
parents:
3629
diff
changeset
|
541 |
initialDistanceForPinching = 0; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
542 |
} |
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
543 |
|
3547 | 544 |
-(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { |
545 |
[self touchesEnded:touches withEvent:event]; |
|
546 |
} |
|
547 |
||
548 |
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { |
|
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
549 |
NSSet *allTouches = [event allTouches]; |
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
550 |
if ([self shouldIgnoreTouch:allTouches] == YES) |
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
551 |
return; |
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5166
diff
changeset
|
552 |
|
3551 | 553 |
CGRect screen = [[UIScreen mainScreen] bounds]; |
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
|
554 |
int x, y, dx, dy; |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
555 |
UITouch *touch, *first, *second; |
3547 | 556 |
|
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
557 |
switch ([allTouches count]) { |
3551 | 558 |
case 1: |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
559 |
touch = [[allTouches allObjects] objectAtIndex:0]; |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
560 |
CGPoint currentPosition = [touch locationInView:self.view]; |
3639
b5cdbcc89b61
use a button instead of label and simplify a lot touch interaction
koda
parents:
3638
diff
changeset
|
561 |
|
3952
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3948
diff
changeset
|
562 |
if (HW_isAmmoMenuOpen()) { |
3680 | 563 |
// no zoom consideration for this |
564 |
HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y)); |
|
565 |
} else |
|
566 |
if (HW_isWeaponRequiringClick()) { |
|
567 |
// moves the cursor around wrt zoom |
|
568 |
HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); |
|
569 |
} else { |
|
570 |
// panning \o/ |
|
571 |
dx = startingPoint.x - currentPosition.x; |
|
572 |
dy = currentPosition.y - startingPoint.y; |
|
573 |
HW_getCursor(&x, &y); |
|
574 |
// momentum (or something like that) |
|
575 |
/*if (abs(dx) > 40) |
|
576 |
dx *= log(abs(dx)/4); |
|
577 |
if (abs(dy) > 40) |
|
578 |
dy *= log(abs(dy)/4);*/ |
|
579 |
HW_setCursor(x + dx/HW_zoomFactor(), y + dy/HW_zoomFactor()); |
|
580 |
startingPoint = currentPosition; |
|
581 |
} |
|
3551 | 582 |
break; |
3547 | 583 |
case 2: |
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
584 |
first = [[allTouches allObjects] objectAtIndex:0]; |
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3637
diff
changeset
|
585 |
second = [[allTouches allObjects] objectAtIndex:1]; |
3547 | 586 |
CGFloat currentDistanceOfPinching = distanceBetweenPoints([first locationInView:self.view], [second locationInView:self.view]); |
587 |
const int pinchDelta = 40; |
|
3697 | 588 |
|
3547 | 589 |
if (0 != initialDistanceForPinching) { |
590 |
if (currentDistanceOfPinching - initialDistanceForPinching > pinchDelta) { |
|
591 |
HW_zoomIn(); |
|
592 |
initialDistanceForPinching = currentDistanceOfPinching; |
|
593 |
} |
|
594 |
else if (initialDistanceForPinching - currentDistanceOfPinching > pinchDelta) { |
|
595 |
HW_zoomOut(); |
|
596 |
initialDistanceForPinching = currentDistanceOfPinching; |
|
597 |
} |
|
3697 | 598 |
} else |
3547 | 599 |
initialDistanceForPinching = currentDistanceOfPinching; |
600 |
break; |
|
601 |
default: |
|
602 |
break; |
|
603 |
} |
|
604 |
} |
|
605 |
||
606 |
@end |