5
// Created by döme on 12.07.2009.
6
// Copyright __MyCompanyName__ 2009. All rights reserved.
10
#import "JigsAppDelegate.h"
12
#import "JigsawViewController.h"
13
#import "NewGameViewController.h"
14
#import "GriddedImageWell.h"
15
#import "ElAnimation.h"
18
#import <QuartzCore/QuartzCore.h>
20
@interface JigsAppDelegate (Private)
21
- (void) setupNewGameView;
22
- (void) updateNewGameInterface;
23
- (void) startAnimation;
24
- (void) stopInfoBlinkAnimation;
25
- (void) infoBlinkAnimationCallback: (id) info;
29
@implementation JigsAppDelegate
33
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
35
[defaults setDouble: timeInPuzzle forKey: @"timeInCurrentPuzzle"];
37
[jigView saveJigsawState];
42
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
44
timeInPuzzle = [defaults doubleForKey: @"timeInCurrentPuzzle"];
45
[jigView restoreJigsawState];
49
- (void) newGameAction: (id) sender
51
[self presentNewGameDialog: self];
54
- (void) generateJigsaw
56
[jigView generateJigsaw];
60
- (void) viewFadeInFinished: (id) info
62
UIView* oldView = [info objectForKey: AnimationUserInfoKey];
63
if (oldView != currentView)
64
[oldView removeFromSuperview];
67
- (void) fadeInView: (UIView*) newView
69
[newView.layer setOpacity: 0.0f];
70
[self.view addSubview: newView];
72
if (newView == currentView)
75
// NSLog(@"animating view in");
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];
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];
101
anim = [[[ElCallbackAnimation alloc] init] autorelease];
102
[anim setCallback: @selector(viewFadeInFinished:)];
103
[anim setTarget: self];
105
[anim setUserInfo: currentView];
106
[anim queueForKey: @"viewFading" atBeginning: NO cancelPending: NO];
108
currentView = newView;
113
- (void) presentNewGameDialog: (id) sender
115
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
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];
124
[defaults setObject: [NSNumber numberWithBool: YES] forKey: @"inNewGameDialog"];
126
[self updateNewGameInterface];
128
[self stopInfoBlinkAnimation];
130
[self fadeInView: newGameView];
132
[imageWell showInstructions: 3.0f];
136
- (void) presentMainMenu: (id) sender
138
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
140
if ([defaults objectForKey: @"jigsawGameState"])
141
[resumeGameButton setEnabled: YES];
143
[resumeGameButton setEnabled: NO];
145
[self fadeInView: mainMenuView];
146
[self infoBlinkAnimationCallback: nil];
149
- (void) awakeFromNib
152
[super awakeFromNib];
161
[self setupNewGameView];
163
[logoView setImage: [UIImage imageNamed: @"largeIcon.png"]];
164
[logoView setCornerRadius: 20.0f];
166
[logoBackgroundView setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
167
[logoBackgroundView setFillView: YES];
168
[logoBackgroundView setBorderWidth: 0.0f];
169
[logoBackgroundView setCornerRadius: 0.0f];
171
[[infoButton layer] setOpacity: 0.0f];
173
[self startAnimation];
175
[self presentMainMenu: self];
178
- (void) infoBlinkAnimationCallback: (id) info
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];
189
[anim queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
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];
199
[anim queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
200
[[ElAnimation delayedAnimationWithDelay: 2.0f] queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
203
anim = [[[ElCallbackAnimation alloc] init] autorelease];
204
[anim setCallback: @selector(infoBlinkAnimationCallback:)];
205
[anim setTarget: self];
207
[anim queueForKey: @"infoButton" atBeginning: NO cancelPending: NO];
210
- (void) stopInfoBlinkAnimation
212
[[[[ElAnimation alloc] init] autorelease] queueForKey: @"infoButton" atBeginning: YES cancelPending: YES];
215
- (void)applicationDidFinishLaunching:(UIApplication *)application
217
// jigViewController = [[JigsawViewController alloc] initWithNibName: @"JigsawView" bundle: nil];
219
// [window addSubview: blackView];
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,
232
// UIImage* buttonImage = [[UIImage imageNamed: @"button1.png"] stretchableImageWithLeftCapWidth: 25 topCapHeight: 0];
234
// [newGameButton setBackgroundImage: buttonImage forState: UIControlStateNormal];
235
// [continueGameButton setBackgroundImage: buttonImage forState: UIControlStateNormal];
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];
243
// [self presentNewGameDialog: self];
245
[window addSubview: self.view];
249
- (IBAction) sizeChanged: (id) sender
251
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
252
[defaults setFloat: [(UISlider*)sender value] forKey: NewJigsawDensityKey];
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]]];
259
- (IBAction) cancelNewGame: (id) sender
261
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
262
[defaults removeObjectForKey: NewJigsawDensityKey];
263
[defaults removeObjectForKey: NewJigsawRotationEnabledKey];
264
[defaults removeObjectForKey: NewJigsawImageKey];
265
[defaults removeObjectForKey: @"inNewGameDialog"];
267
[self infoBlinkAnimationCallback: nil];
268
[self fadeInView: mainMenuView];
271
- (IBAction) okNewGame: (id) sender
273
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
275
[defaults setObject: [defaults objectForKey: NewJigsawImageKey] forKey: JigsawImageKey];
276
[defaults setObject: [defaults objectForKey: NewJigsawDensityKey] forKey: JigsawDensityKey];
277
[defaults setObject: [defaults objectForKey: NewJigsawRotationEnabledKey] forKey: JigsawRotationEnabledKey];
279
[defaults removeObjectForKey: NewJigsawDensityKey];
280
[defaults removeObjectForKey: NewJigsawRotationEnabledKey];
281
[defaults removeObjectForKey: NewJigsawImageKey];
282
[defaults removeObjectForKey: @"inNewGameDialog"];
284
[self fadeInView: jigView];
286
[self generateJigsaw];
292
- (UIImage*) currentJigsawImage
294
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
295
return [UIImage imageWithData: [defaults objectForKey: JigsawImageKey]];
298
- (IBAction) resumeGame: (id) sender
301
[self fadeInView: jigView];
304
- (IBAction) showInGameSettings: (id) sender
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];
311
- (IBAction) dismissInGameSettings: (id) sender
313
[self fadeInView: jigView];
316
- (IBAction) inGameSettingsToMainMenu: (id) sender
320
[self presentMainMenu: self];
324
- (IBAction) showAboutScreen: (id) sender
326
[self fadeInView: aboutView];
328
- (IBAction) dismissAboutScreen: (id) sender
330
[self infoBlinkAnimationCallback: nil];
331
[self fadeInView: mainMenuView];
334
- (void) updateNewGameInterface
336
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
338
[sizeSlider setValue: [defaults floatForKey: NewJigsawDensityKey]];
339
[imageWell setImage: [UIImage imageWithData: [defaults objectForKey: NewJigsawImageKey]]];
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]]];
345
- (void) setupNewGameView
348
[sliderBackground setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
349
[sliderBackground setFillView: YES];
350
[sliderBackground setBorderWidth: 0.0f];
351
[sliderBackground setCornerRadius: 0.0f];
353
[pickerBackground setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
354
[pickerBackground setFillView: YES];
355
[pickerBackground setBorderWidth: 0.0f];
356
[pickerBackground setCornerRadius: 0.0f];
358
[buttonsBackground setImage: [UIImage imageNamed: @"dark-gradient-480.png"]];
359
[buttonsBackground setFillView: YES];
360
[buttonsBackground setBorderWidth: 0.0f];
361
[buttonsBackground setCornerRadius: 0.0f];
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];
370
- (void) imageWasSelectedInWell: (ImageWell*) well
372
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
374
[defaults setObject: UIImagePNGRepresentation([well image]) forKey: NewJigsawImageKey];
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]]];
382
- (void)applicationWillTerminate:(UIApplication *)application
387
- (void) applicationWillResignActive: (UIApplication*) application
389
//[jigViewController setAnimationInterval: 1.0 / 5.0];
390
//[jigView saveJigsawState];
394
- (void)applicationDidBecomeActive:(UIApplication *)application
396
//[jigViewController setAnimationInterval: 1.0 / 60.0];
399
- (void) animationCallback: (id) info
401
float delta = [[info objectForKey: AnimationDeltaTimeKey] floatValue];
405
if (jigView == currentView)
407
timeInPuzzle += delta;
408
[jigView animationCallback: info];
412
- (void) startAnimation
414
ElCallbackAnimation* anim = [[[ElCallbackAnimation alloc] init] autorelease];
415
[anim setTarget: self];
416
[anim setCallback: @selector(animationCallback:)];
417
[anim setDuration: HUGE_VALF];
419
[anim queueForKey: @"jigView animation" atBeginning: NO cancelPending: NO];
421
- (void) stopAnimation
423
[[[[ElAnimation alloc] init] autorelease] queueForKey: @"jigView animation" atBeginning: YES cancelPending: YES];
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";