--- /dev/null
+//
+// AppDelegate.m
+// FreeFlight
+//
+// Created by Frédéric D'HAEYER on 16/10/09.
+// Copyright Parrot SA 2009. All rights reserved.
+//
+#import "AppDelegate.h"
+#import "EAGLView.h"
+#import "MenuUpdater.h"
+#import "ES1Renderer.h"
+
+#define SKIP_BUTTON_X_LANDSCAPE_LEFT .9f
+#define SKIP_BUTTON_Y_LANDSCAPE_LEFT 0.f
+
+#define SKIP_BUTTON_X_LANDSCAPE_RIGHT 0.f
+#define SKIP_BUTTON_Y_LANDSCAPE_RIGHT .7f
+
+#define SKIP_BUTTON_WIDTH .1f
+#define SKIP_BUTTON_HEIGHT .3f
+
+#define SKIP_BUTTON_TEXT NSLocalizedString(@"SKIP",)
+
+@interface Movie : MPMoviePlayerViewController
+{
+@public
+ id delegate;
+ SEL rotateToInterfaceOrientationCallback;
+}
+
+@end
+
+@implementation Movie
+
+- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
+{
+ switch (toInterfaceOrientation)
+ {
+ case UIInterfaceOrientationPortrait:
+ case UIInterfaceOrientationPortraitUpsideDown:
+ return NO;
+ default:
+ [delegate performSelector:rotateToInterfaceOrientationCallback withObject:[NSNumber numberWithUnsignedInt:toInterfaceOrientation]];
+ return YES;
+ }
+}
+
+@end
+
+
+@implementation AppDelegate
+@synthesize window;
+@synthesize menuController;
+
+- (void) applicationDidFinishLaunching:(UIApplication *)application
+{
+ NSLog(@"app did finish launching");
+ application.idleTimerDisabled = YES;
+
+ window.backgroundColor = [UIColor blackColor];
+
+#if (!TARGET_CPU_X86) && (!DEBUG)
+ // Display the movie:
+ movie = [[Movie alloc] initWithContentURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"ARFreeFlight" ofType:@"mp4"]]];
+
+ ((Movie *)movie)->delegate = self;
+ ((Movie *)movie)->rotateToInterfaceOrientationCallback = @selector(rotateToInterfaceOrientation:);
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(initGame) name:MPMoviePlayerPlaybackDidFinishNotification object:movie.moviePlayer];
+
+ movie.moviePlayer.shouldAutoplay = NO;
+ movie.moviePlayer.controlStyle = MPMovieControlStyleNone;
+
+ [window addSubview:[movie view]];
+ [[movie moviePlayer] play];
+
+ CGRect frame = [window frame];
+ frame.origin.x = SKIP_BUTTON_X_LANDSCAPE_RIGHT*frame.size.width;
+ frame.origin.y = SKIP_BUTTON_Y_LANDSCAPE_RIGHT*frame.size.height;
+
+ frame.size.width *= SKIP_BUTTON_WIDTH;
+ frame.size.height *= SKIP_BUTTON_HEIGHT;
+
+ skipMovie = [UIButton buttonWithType:UIButtonTypeCustom];
+
+ [skipMovie setTransform:CGAffineTransformMakeRotation(.5f*M_PI)];
+ [skipMovie setFrame:frame];
+ [skipMovie setTitle:SKIP_BUTTON_TEXT forState:UIControlStateNormal];
+ [skipMovie setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+
+ skipMovie.titleLabel.font = [UIFont boldSystemFontOfSize:20.f];
+
+ [skipMovie addTarget:movie.moviePlayer action:@selector(stop) forControlEvents:UIControlEventTouchDown];
+
+ [window addSubview:skipMovie];
+ [window makeKeyAndVisible];
+#else
+ [window makeKeyAndVisible];
+ [self initGame];
+#endif
+
+}
+
+- (void) rotateToInterfaceOrientation:(id)toInterfaceOrientation
+{
+ UIInterfaceOrientation orientation = [(NSNumber *)toInterfaceOrientation unsignedIntValue];
+
+ CGRect frame = [window frame];
+
+ switch (orientation)
+ {
+ case UIInterfaceOrientationLandscapeLeft:
+ frame.origin.x = SKIP_BUTTON_X_LANDSCAPE_LEFT*frame.size.width;
+ frame.origin.y = SKIP_BUTTON_Y_LANDSCAPE_LEFT*frame.size.height;
+
+ frame.size.width *= SKIP_BUTTON_WIDTH;
+ frame.size.height *= SKIP_BUTTON_HEIGHT;
+
+ [skipMovie setTransform:CGAffineTransformMakeRotation(-.5f*M_PI)];
+ break;
+ case UIInterfaceOrientationLandscapeRight:
+ frame.origin.x = SKIP_BUTTON_X_LANDSCAPE_RIGHT*frame.size.width;
+ frame.origin.y = SKIP_BUTTON_Y_LANDSCAPE_RIGHT*frame.size.height;
+
+ frame.size.width *= SKIP_BUTTON_WIDTH;
+ frame.size.height *= SKIP_BUTTON_HEIGHT;
+
+ [skipMovie setTransform:CGAffineTransformMakeRotation(.5f*M_PI)];
+ break;
+ default:
+ break;
+ }
+
+ [skipMovie setFrame:frame];
+}
+
+- (void) initGame
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:movie.moviePlayer];
+
+ [skipMovie removeTarget:movie.moviePlayer action:@selector(stop) forControlEvents:UIControlEventTouchDown];
+ [skipMovie removeFromSuperview];
+ skipMovie = nil;
+
+ [[movie view] removeFromSuperview];
+ [[movie moviePlayer] stop];
+ [movie release];
+ movie = nil;
+
+ // Setup the menu controller
+ menuController.delegate = self;
+ NSLog(@"menu controller view %@", menuController.view);
+
+ was_in_game = NO;
+
+ // Setup the ARDrone
+ ARDroneHUDConfiguration hudconfiguration = {YES, NO, YES};
+ drone = [[ARDrone alloc] initWithFrame:menuController.view.frame withState:was_in_game withDelegate:menuController withHUDConfiguration:&hudconfiguration];
+
+ // Setup the OpenGL view
+ glView = [[EAGLView alloc] initWithFrame:menuController.view.frame];
+ [glView setDrone:drone];
+ [glView changeState:was_in_game];
+
+ CGRect frame = drone.view.frame;
+
+ if (frame.size.width < frame.size.height)
+ {
+ NSLog(@"Here, the ARDrone frame isn't initialized");
+ frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.height, frame.size.width);
+ [drone.view setFrame:frame];
+ }
+
+ [menuController setDrone:drone];
+ [menuController changeState:was_in_game];
+
+ [window addSubview:menuController.view];
+ [window addSubview:glView];
+ [window bringSubviewToFront:menuController.view];
+ [window makeKeyAndVisible];
+}
+
+#pragma mark -
+#pragma mark Drone protocol implementation
+- (void)changeState:(BOOL)inGame
+{
+ was_in_game = inGame;
+
+ if(inGame)
+ {
+ int value;
+ [drone setScreenOrientationRight:(menuController.interfaceOrientation == UIInterfaceOrientationLandscapeRight)];
+#ifdef DISPLAY_DART
+ value = ARDRONE_VIDEO_CHANNEL_HORI;
+ [drone setDefaultConfigurationForKey:ARDRONE_CONFIG_KEY_VIDEO_CHANNEL withValue:&value];
+
+ value = ARDRONE_CAMERA_DETECTION_H_ORIENTED_COCARDE;
+#else
+ value = ARDRONE_CAMERA_DETECTION_NONE;
+#endif
+ [drone setDefaultConfigurationForKey:ARDRONE_CONFIG_KEY_DETECT_TYPE withValue:&value];
+
+ value = 0;
+ [drone setDefaultConfigurationForKey:ARDRONE_CONFIG_KEY_CONTROL_LEVEL withValue:&value];
+
+ }
+
+ [drone changeState:inGame];
+ [glView changeState:inGame];
+}
+
+- (void) applicationWillResignActive:(UIApplication *)application
+{
+ // Become inactive
+ if(was_in_game)
+ {
+ [drone changeState:NO];
+ [glView changeState:NO];
+ }
+ else
+ {
+ [menuController changeState:NO];
+ }
+}
+
+- (void) applicationDidBecomeActive:(UIApplication *)application
+{
+ if(was_in_game)
+ {
+ [drone changeState:YES];
+ [glView changeState:YES];
+ }
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application
+{
+ printf("%s : %d\n", __FUNCTION__, was_in_game);
+
+ if(was_in_game)
+ {
+ [drone changeState:NO];
+ [glView changeState:NO];
+ }
+ else
+ {
+ [menuController changeState:NO];
+ }
+}
+
+- (void)executeCommandIn:(ARDRONE_COMMAND_IN_WITH_PARAM)commandIn fromSender:(id)sender refreshSettings:(BOOL)refresh
+{
+
+}
+
+- (void)executeCommandIn:(ARDRONE_COMMAND_IN)commandId withParameter:(void*)parameter fromSender:(id)sender
+{
+
+}
+
+- (void)setDefaultConfigurationForKey:(ARDRONE_CONFIG_KEYS)key withValue:(void *)value
+{
+
+}
+
+- (BOOL)checkState
+{
+ BOOL result = NO;
+
+ if(was_in_game)
+ {
+ result = [drone checkState];
+ }
+ else
+ {
+ //result = [menuController checkState];
+ }
+
+ return result;
+}
+
+@end