2022-08-05 13:32:29 +02:00
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
*
|
|
|
|
*/
|
2022-08-07 07:58:04 +02:00
|
|
|
#import "startSDL.h"
|
2022-08-05 13:32:29 +02:00
|
|
|
|
2022-08-07 07:58:04 +02:00
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
|
|
|
|
#import <objc/runtime.h>
|
|
|
|
|
2022-08-07 08:48:10 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
|
2022-08-07 07:58:04 +02:00
|
|
|
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[])
|
2022-08-05 13:32:29 +02:00
|
|
|
{
|
2022-08-07 07:58:04 +02:00
|
|
|
NSInteger launchType;
|
2022-08-07 08:48:10 +02:00
|
|
|
__auto_type envVar = getenv("VCMI_LAUNCH_TYPE");
|
|
|
|
if (envVar)
|
|
|
|
launchType = envVar[0] == '0' ? 0 : 1;
|
|
|
|
else {
|
|
|
|
@autoreleasepool {
|
|
|
|
launchType = [NSUserDefaults.standardUserDefaults integerForKey:@"LaunchType"];
|
|
|
|
}
|
2022-08-07 07:58:04 +02:00
|
|
|
}
|
|
|
|
if (launchType == 1)
|
|
|
|
return startSDL(argc, argv, NO);
|
|
|
|
|
2022-08-05 13:32:29 +02:00
|
|
|
@autoreleasepool {
|
2022-08-07 07:58:04 +02:00
|
|
|
id __block startGameObserver = [NSNotificationCenter.defaultCenter addObserverForName:@"StartGame" object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
|
|
|
|
[NSNotificationCenter.defaultCenter removeObserver:startGameObserver];
|
|
|
|
startGameObserver = nil;
|
2022-11-08 03:02:26 +02:00
|
|
|
|
2022-11-10 10:48:17 +02:00
|
|
|
NSArray<NSString *> * args = note.userInfo[@"args"];
|
2022-11-10 12:08:19 +02:00
|
|
|
const char * newArgv[args.count];
|
2022-11-08 03:02:26 +02:00
|
|
|
[args enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL * stop) {
|
|
|
|
newArgv[idx] = obj.UTF8String;
|
|
|
|
}];
|
2022-11-10 12:08:19 +02:00
|
|
|
startSDLManually(args.count, (char *)(newArgv));
|
2022-08-07 07:58:04 +02:00
|
|
|
}];
|
|
|
|
return qt_main_wrapper(argc, argv);
|
2022-08-05 13:32:29 +02:00
|
|
|
}
|
|
|
|
}
|