123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- * main.m, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #import "startSDL.h"
- #import <UIKit/UIKit.h>
- #import <objc/runtime.h>
- #include <stdlib.h>
- static void startSDLManually(int argc, char * argv[])
- {
- id<UIApplicationDelegate> appDelegate;
- @autoreleasepool {
- __auto_type sdlAppDelegateClass = NSClassFromString(@"SDLUIKitDelegate");
- NSCAssert(sdlAppDelegateClass != nil, @"SDL AppDelegate class doesn't exist");
- NSCAssert(class_conformsToProtocol(sdlAppDelegateClass, @protocol(UIApplicationDelegate)), @"SDL AppDelegate doesn't conform to UIApplicationDelegate");
- appDelegate = [sdlAppDelegateClass new];
- }
- UIApplication.sharedApplication.delegate = appDelegate;
- int result = startSDL(argc, argv, YES);
- exit(result);
- }
- int qt_main_wrapper(int argc, char * argv[]);
- int client_main(int argc, char * argv[])
- {
- NSInteger launchType;
- __auto_type envVar = getenv("VCMI_LAUNCH_TYPE");
- if (envVar)
- launchType = envVar[0] == '0' ? 0 : 1;
- else {
- @autoreleasepool {
- launchType = [NSUserDefaults.standardUserDefaults integerForKey:@"LaunchType"];
- }
- }
- if (launchType == 1)
- return startSDL(argc, argv, NO);
- @autoreleasepool {
- id __block startGameObserver = [NSNotificationCenter.defaultCenter addObserverForName:@"StartGame" object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
- [NSNotificationCenter.defaultCenter removeObserver:startGameObserver];
- startGameObserver = nil;
- NSArray<NSString *> * args = note.userInfo[@"args"];
- const char * newArgv[args.count];
- NSUInteger i = 0;
- for (NSString * obj in args)
- newArgv[i++] = obj.UTF8String;
- startSDLManually(args.count, (char **)(newArgv));
- }];
- return qt_main_wrapper(argc, argv);
- }
- }
|