RSS

(root)/iphone/common : 61 : Jigs/source/JigsAppDelegate.m

« back to all changes in this revision

Viewing changes to Jigs/source/JigsAppDelegate.m

Dömötör Gulyás
2010-01-18 09:03:51
Revision ID: dognotdog@gmail.com-20100118080351-ib2knxvk4w8ssw3h
made common a nested tree

Show diffs side-by-side

added added

removed removed

1
 
//
2
 
//  JigsAppDelegate.m
3
 
//  Jigs
4
 
//
5
 
//  Created by döme on 12.07.2009.
6
 
//  Copyright __MyCompanyName__ 2009. All rights reserved.
7
 
//
8
 
 
9
 
 
10
 
#import "JigsAppDelegate.h"
11
 
#import "JigView.h"
12
 
#import "JigsawViewController.h"
13
 
#import "NewGameViewController.h"
14
 
#import "GriddedImageWell.h"
15
 
#import "ElAnimation.h"
16
 
#import "geometry.h"
17
 
 
18
 
#import <QuartzCore/QuartzCore.h>
19
 
 
20
 
@interface JigsAppDelegate (Private)
21
 
- (void) setupNewGameView;
22
 
- (void) updateNewGameInterface;
23
 
- (void) startAnimation;
24
 
- (void) stopInfoBlinkAnimation;
25
 
- (void) infoBlinkAnimationCallback: (id) info;
26
 
 
27
 
@end
28
 
 
29
 
@implementation JigsAppDelegate
30
 
 
31
 
- (void) saveGame
32
 
{
33
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
34
 
 
35
 
        [defaults setDouble: timeInPuzzle forKey: @"timeInCurrentPuzzle"];
36
 
 
37
 
        [jigView saveJigsawState];
38
 
}
39
 
 
40
 
- (void) restoreGame
41
 
{
42
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
43
 
 
44
 
        timeInPuzzle = [defaults doubleForKey: @"timeInCurrentPuzzle"];
45
 
        [jigView restoreJigsawState];
46
 
}
47
 
 
48
 
 
49
 
- (void) newGameAction: (id) sender
50
 
{
51
 
        [self presentNewGameDialog: self];
52
 
}
53
 
 
54
 
- (void) generateJigsaw
55
 
{
56
 
        [jigView generateJigsaw];
57
 
}
58
 
 
59
 
 
60
 
- (void) viewFadeInFinished: (id) info
61
 
{
62
 
        UIView* oldView = [info objectForKey: AnimationUserInfoKey];
63
 
        if (oldView != currentView)
64
 
                [oldView removeFromSuperview];
65
 
}
66
 
 
67
 
- (void) fadeInView: (UIView*) newView
68
 
{
69
 
        [newView.layer setOpacity: 0.0f];
70
 
        [self.view addSubview: newView];
71
 
        
72
 
        if (newView == currentView)
73
 
                return;
74
 
 
75
 
//      NSLog(@"animating view in");
76
 
 
77
 
        id anim = nil;
78
 
 
79
 
        if (currentView)
80
 
        {
81
 
//              NSLog(@"fading out %p", currentView);
82
 
                anim = [[[ElFloatAnimation alloc] init] autorelease];
83
 
                [anim setTarget: [currentView layer]];
84
 
                [anim setProperty: @"opacity"];
85
 
                [anim setStartValue: [currentView layer].opacity];
86
 
                [anim setEndValue: 0.0f];
87
 
                [anim setDuration: 0.5f];
88
 
                [anim queueForKey: @"viewFading" atBeginning: NO cancelPending: NO];
89
 
 
90
 
        }
91
 
 
92
 
//      NSLog(@"fading in %p", newView);
93
 
        anim = [[[ElFloatAnimation alloc] init] autorelease];
94
 
        [anim setTarget: newView.layer];
95
 
        [anim setProperty: @"opacity"];
96
 
        [anim setStartValue: 0.0f];
97
 
        [anim setEndValue: 1.0f];
98
 
        [anim setDuration: 0.5f];
99
 
        [anim queueForKey: @"viewFading" atBeginning: NO cancelPending: NO];
100
 
 
101
 
        anim = [[[ElCallbackAnimation alloc] init] autorelease];
102
 
        [anim setCallback: @selector(viewFadeInFinished:)];
103
 
        [anim setTarget: self];
104
 
        if (currentView)
105
 
                [anim setUserInfo: currentView];
106
 
        [anim queueForKey: @"viewFading" atBeginning: NO cancelPending: NO];
107
 
        
108
 
        currentView = newView;
109
 
}
110
 
 
111
 
 
112
 
 
113
 
- (void) presentNewGameDialog: (id) sender
114
 
{
115
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
116
 
 
117
 
        if (![defaults objectForKey: NewJigsawImageKey])
118
 
                [defaults setObject: [defaults objectForKey: JigsawImageKey] forKey: NewJigsawImageKey];
119
 
        if (![defaults objectForKey: NewJigsawDensityKey])
120
 
                [defaults setObject: [defaults objectForKey: JigsawDensityKey] forKey: NewJigsawDensityKey];
121
 
        if (![defaults objectForKey: NewJigsawRotationEnabledKey])
122
 
                [defaults setObject: [defaults objectForKey: JigsawRotationEnabledKey] forKey: NewJigsawRotationEnabledKey];
123
 
 
124
 
        [defaults setObject: [NSNumber numberWithBool: YES] forKey: @"inNewGameDialog"];
125
 
 
126
 
        [self updateNewGameInterface];
127
 
        
128
 
        [self stopInfoBlinkAnimation];
129
 
 
130
 
        [self fadeInView: newGameView];
131
 
        
132
 
        [imageWell showInstructions: 3.0f];
133
 
}
134
 
 
135
 
 
136
 
- (void) presentMainMenu: (id) sender
137
 
{
138
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
139
 
 
140
 
        if ([defaults objectForKey: @"jigsawGameState"])
141
 
                [resumeGameButton setEnabled: YES];
142
 
        else
143
 
                [resumeGameButton setEnabled: NO];
144
 
 
145
 
        [self fadeInView: mainMenuView];
146
 
        [self infoBlinkAnimationCallback: nil];
147
 
}
148
 
 
149
 
- (void) awakeFromNib
150
 
{
151
 
 
152
 
        [super awakeFromNib];
153
 
        
154
 
 
155
 
}
156
 
 
157
 
- (void) viewDidLoad
158
 
{
159
 
    [super viewDidLoad];
160
 
 
161
 
        [self setupNewGameView];
162
 
 
163
 
        [logoView setImage: [UIImage imageNamed: @"largeIcon.png"]];
164
 
        [logoView setCornerRadius: 20.0f];
165
 
 
166
 
        [logoBackgroundView setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
167
 
        [logoBackgroundView setFillView: YES];
168
 
        [logoBackgroundView setBorderWidth: 0.0f];
169
 
        [logoBackgroundView setCornerRadius: 0.0f];
170
 
        
171
 
        [[infoButton layer] setOpacity: 0.0f];
172
 
        
173
 
        [self startAnimation];
174
 
 
175
 
        [self presentMainMenu: self];
176
 
}
177
 
 
178
 
- (void) infoBlinkAnimationCallback: (id) info
179
 
{
180
 
        id anim = nil;
181
 
        
182
 
        anim = [[[ElFloatAnimation alloc] init] autorelease];
183
 
        [anim setProperty: @"opacity"];
184
 
        [anim setTarget: [infoButton layer]];
185
 
        [anim setStartValue: 0.0f];
186
 
        [anim setEndValue: 1.0f];
187
 
        [anim setDuration: 0.1f];
188
 
        
189
 
        [anim queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
190
 
 
191
 
        anim = [[[ElFloatAnimation alloc] init] autorelease];
192
 
        [anim setProperty: @"opacity"];
193
 
        [anim setTarget: [infoButton layer]];
194
 
        [anim setStartValue: 1.0f];
195
 
        [anim setEndValue: 0.0f];
196
 
        [anim setDuration: 2.9f];
197
 
        [anim setInterpolation: kElEaseInInterpolation];
198
 
        
199
 
        [anim queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
200
 
        [[ElAnimation delayedAnimationWithDelay: 2.0f] queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
201
 
 
202
 
 
203
 
        anim = [[[ElCallbackAnimation alloc] init] autorelease];
204
 
        [anim setCallback: @selector(infoBlinkAnimationCallback:)];
205
 
        [anim setTarget: self];
206
 
 
207
 
        [anim queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
208
 
}
209
 
 
210
 
- (void) stopInfoBlinkAnimation
211
 
{
212
 
        [[[[ElAnimation alloc] init] autorelease]  queueForKey: @"infoButton" atBeginning: YES cancelPending: YES];
213
 
}
214
 
 
215
 
- (void)applicationDidFinishLaunching:(UIApplication *)application
216
 
{
217
 
//      jigViewController = [[JigsawViewController alloc] initWithNibName: @"JigsawView" bundle: nil];
218
 
    
219
 
//      [window addSubview: blackView];
220
 
        
221
 
        
222
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
223
 
        [defaults registerDefaults: [NSDictionary dictionaryWithObjectsAndKeys:
224
 
                @"1234", JigsawSeedKey,
225
 
                @"0.5", JigsawDensityKey,
226
 
                @"YES", JigsawRotationEnabledKey,
227
 
                UIImagePNGRepresentation([UIImage imageNamed: @"sucky_monkey.png"]), JigsawImageKey,
228
 
                nil]];
229
 
 
230
 
        
231
 
        
232
 
//      UIImage* buttonImage = [[UIImage imageNamed: @"button1.png"] stretchableImageWithLeftCapWidth: 25 topCapHeight: 0];
233
 
        
234
 
//      [newGameButton setBackgroundImage: buttonImage forState: UIControlStateNormal];
235
 
//      [continueGameButton setBackgroundImage: buttonImage forState: UIControlStateNormal];
236
 
 
237
 
/*
238
 
        [testSlider setThumbImage: [UIImage imageNamed:@"darkslide-button.png"] forState:UIControlStateNormal];
239
 
        [testSlider setMinimumTrackImage: [[UIImage imageNamed: @"darkslide-full.png"] stretchableImageWithLeftCapWidth: 5 topCapHeight: 0] forState:UIControlStateNormal];
240
 
        [testSlider setMaximumTrackImage:[[UIImage imageNamed: @"darkslide-empty.png"]stretchableImageWithLeftCapWidth: 5 topCapHeight: 0] forState:UIControlStateNormal];
241
 
*/
242
 
 
243
 
//      [self presentNewGameDialog: self];
244
 
 
245
 
        [window addSubview: self.view];
246
 
}
247
 
 
248
 
 
249
 
- (IBAction) sizeChanged: (id) sender
250
 
{
251
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
252
 
        [defaults setFloat: [(UISlider*)sender value] forKey: NewJigsawDensityKey];
253
 
        
254
 
        [imageWell setHcells: [jigView numCellsForImageSize: CGSizeFitIntoSize([[imageWell image] size], CGSizeMake(400.0f,400.0f)).width density: [defaults floatForKey: NewJigsawDensityKey]]];
255
 
        [imageWell setVcells: [jigView numCellsForImageSize: CGSizeFitIntoSize([[imageWell image] size], CGSizeMake(400.0f,400.0f)).height density: [defaults floatForKey: NewJigsawDensityKey]]];
256
 
        
257
 
}
258
 
 
259
 
- (IBAction) cancelNewGame: (id) sender
260
 
{
261
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
262
 
        [defaults removeObjectForKey: NewJigsawDensityKey];
263
 
        [defaults removeObjectForKey: NewJigsawRotationEnabledKey];
264
 
        [defaults removeObjectForKey: NewJigsawImageKey];
265
 
        [defaults removeObjectForKey: @"inNewGameDialog"];
266
 
        
267
 
        [self infoBlinkAnimationCallback: nil];
268
 
        [self fadeInView: mainMenuView];
269
 
}
270
 
 
271
 
- (IBAction) okNewGame: (id) sender
272
 
{
273
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
274
 
        
275
 
        [defaults setObject: [defaults objectForKey: NewJigsawImageKey] forKey: JigsawImageKey];
276
 
        [defaults setObject: [defaults objectForKey: NewJigsawDensityKey] forKey: JigsawDensityKey];
277
 
        [defaults setObject: [defaults objectForKey: NewJigsawRotationEnabledKey] forKey: JigsawRotationEnabledKey];
278
 
 
279
 
        [defaults removeObjectForKey: NewJigsawDensityKey];
280
 
        [defaults removeObjectForKey: NewJigsawRotationEnabledKey];
281
 
        [defaults removeObjectForKey: NewJigsawImageKey];
282
 
        [defaults removeObjectForKey: @"inNewGameDialog"];
283
 
 
284
 
        [self fadeInView: jigView];
285
 
 
286
 
        [self generateJigsaw];
287
 
 
288
 
        timeInPuzzle = 0.0;
289
 
 
290
 
}
291
 
 
292
 
- (UIImage*) currentJigsawImage
293
 
{
294
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
295
 
        return [UIImage imageWithData: [defaults objectForKey: JigsawImageKey]];
296
 
}
297
 
 
298
 
- (IBAction) resumeGame: (id) sender
299
 
{
300
 
        [self restoreGame];
301
 
        [self fadeInView: jigView];
302
 
}
303
 
 
304
 
- (IBAction) showInGameSettings: (id) sender
305
 
{
306
 
        [hintImageView setImage: [self currentJigsawImage]];
307
 
        [timePlayedLabel setText: [NSString stringWithFormat: @"Time played: %0.2d:%0.2d:%0.2d", (int)timeInPuzzle/3600, (int)timeInPuzzle/60 % 60, (int)timeInPuzzle % 60]];
308
 
        [self fadeInView: settingsView];
309
 
}
310
 
 
311
 
- (IBAction) dismissInGameSettings: (id) sender
312
 
{
313
 
        [self fadeInView: jigView];
314
 
}
315
 
 
316
 
- (IBAction) inGameSettingsToMainMenu: (id) sender
317
 
{
318
 
        [self saveGame];
319
 
 
320
 
        [self presentMainMenu: self];
321
 
}
322
 
 
323
 
 
324
 
- (IBAction) showAboutScreen: (id) sender
325
 
{
326
 
        [self fadeInView: aboutView];
327
 
}
328
 
- (IBAction) dismissAboutScreen: (id) sender
329
 
{
330
 
        [self infoBlinkAnimationCallback: nil];
331
 
        [self fadeInView: mainMenuView];
332
 
}
333
 
 
334
 
- (void) updateNewGameInterface
335
 
{
336
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
337
 
 
338
 
        [sizeSlider setValue: [defaults floatForKey: NewJigsawDensityKey]];
339
 
        [imageWell setImage: [UIImage imageWithData: [defaults objectForKey: NewJigsawImageKey]]];
340
 
        
341
 
        [imageWell setHcells: [jigView numCellsForImageSize: CGSizeFitIntoSize([[imageWell image] size], CGSizeMake(400.0f,400.0f)).width density: [defaults floatForKey: NewJigsawDensityKey]]];
342
 
        [imageWell setVcells: [jigView numCellsForImageSize: CGSizeFitIntoSize([[imageWell image] size], CGSizeMake(400.0f,400.0f)).height density: [defaults floatForKey: NewJigsawDensityKey]]];
343
 
 
344
 
}
345
 
- (void) setupNewGameView
346
 
{
347
 
 
348
 
        [sliderBackground setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
349
 
        [sliderBackground setFillView: YES];
350
 
        [sliderBackground setBorderWidth: 0.0f];
351
 
        [sliderBackground setCornerRadius: 0.0f];
352
 
 
353
 
        [pickerBackground setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
354
 
        [pickerBackground setFillView: YES];
355
 
        [pickerBackground setBorderWidth: 0.0f];
356
 
        [pickerBackground setCornerRadius: 0.0f];
357
 
 
358
 
        [buttonsBackground setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
359
 
        [buttonsBackground setFillView: YES];
360
 
        [buttonsBackground setBorderWidth: 0.0f];
361
 
        [buttonsBackground setCornerRadius: 0.0f];
362
 
 
363
 
 
364
 
        [sizeSlider setThumbImage: [UIImage imageNamed:@"darkslide-button.png"] forState:UIControlStateNormal];
365
 
        [sizeSlider setMinimumTrackImage: [[UIImage imageNamed: @"darkslide-full.png"] stretchableImageWithLeftCapWidth: 5 topCapHeight: 0] forState:UIControlStateNormal];
366
 
        [sizeSlider setMaximumTrackImage:[[UIImage imageNamed: @"darkslide-empty.png"] stretchableImageWithLeftCapWidth: 5 topCapHeight: 0] forState:UIControlStateNormal];
367
 
}
368
 
 
369
 
 
370
 
- (void) imageWasSelectedInWell: (ImageWell*) well
371
 
{
372
 
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
373
 
 
374
 
        [defaults setObject: UIImagePNGRepresentation([well image]) forKey: NewJigsawImageKey];
375
 
 
376
 
        [imageWell setHcells: [jigView numCellsForImageSize: CGSizeFitIntoSize([[imageWell image] size], CGSizeMake(400.0f,400.0f)).width density: [defaults floatForKey: NewJigsawDensityKey]]];
377
 
        [imageWell setVcells: [jigView numCellsForImageSize: CGSizeFitIntoSize([[imageWell image] size], CGSizeMake(400.0f,400.0f)).height density: [defaults floatForKey: NewJigsawDensityKey]]];
378
 
}
379
 
 
380
 
 
381
 
 
382
 
- (void)applicationWillTerminate:(UIApplication *)application
383
 
{
384
 
        [self saveGame];
385
 
}
386
 
 
387
 
- (void) applicationWillResignActive: (UIApplication*) application
388
 
{
389
 
        //[jigViewController setAnimationInterval: 1.0 / 5.0];
390
 
        //[jigView saveJigsawState];
391
 
}
392
 
 
393
 
 
394
 
- (void)applicationDidBecomeActive:(UIApplication *)application
395
 
{
396
 
        //[jigViewController setAnimationInterval: 1.0 / 60.0];
397
 
}
398
 
 
399
 
- (void) animationCallback: (id) info
400
 
{
401
 
        float delta = [[info objectForKey: AnimationDeltaTimeKey] floatValue];
402
 
        
403
 
        
404
 
 
405
 
        if (jigView == currentView)
406
 
        {
407
 
                timeInPuzzle += delta;
408
 
                [jigView animationCallback: info];
409
 
        }
410
 
}
411
 
 
412
 
- (void) startAnimation
413
 
{
414
 
        ElCallbackAnimation* anim = [[[ElCallbackAnimation alloc] init] autorelease];
415
 
        [anim setTarget: self];
416
 
        [anim setCallback: @selector(animationCallback:)];
417
 
        [anim setDuration: HUGE_VALF];
418
 
        
419
 
        [anim queueForKey: @"jigView animation" atBeginning: NO cancelPending: NO];
420
 
}
421
 
- (void) stopAnimation
422
 
{
423
 
        [[[[ElAnimation alloc] init] autorelease] queueForKey: @"jigView animation" atBeginning: YES cancelPending: YES];
424
 
}
425
 
 
426
 
- (void)dealloc {
427
 
        [window release];
428
 
        [jigView release];
429
 
        [super dealloc];
430
 
}
431
 
 
432
 
@end
433
 
 
434
 
NSString* JigsawSeedKey = @"jigsawSeed";
435
 
NSString* JigsawImageKey = @"jigsawImage";
436
 
NSString* JigsawDensityKey = @"jigsawDensity";
437
 
NSString* JigsawRotationEnabledKey = @"jigsawRotationEnabled";
438
 
NSString* NewJigsawImageKey = @"newJigsawImage";
439
 
NSString* NewJigsawDensityKey = @"newJigsawDensity";
440
 
NSString* NewJigsawRotationEnabledKey = @"newJigsawRotationEnabled";
441
 
 
442
 
 

Loggerhead 1.17 is a web-based interface for Bazaar branches