192 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			192 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#import "KoreAppDelegate.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <kinc/graphics4/graphics.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/input/gamepad.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/input/keyboard.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/system.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/video.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/window.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import <AudioToolbox/AudioToolbox.h>
							 | 
						||
| 
								 | 
							
								#import <UIKit/UIKit.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool withAutoreleasepool(bool (*f)(void)) {
							 | 
						||
| 
								 | 
							
									@autoreleasepool {
							 | 
						||
| 
								 | 
							
										return f();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static bool keyboardshown = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *iphonegetresourcepath(void) {
							 | 
						||
| 
								 | 
							
									return [[[NSBundle mainBundle] resourcePath] cStringUsingEncoding:1];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool kinc_internal_handle_messages(void) {
							 | 
						||
| 
								 | 
							
									SInt32 result;
							 | 
						||
| 
								 | 
							
									do {
							 | 
						||
| 
								 | 
							
										result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE);
							 | 
						||
| 
								 | 
							
									} while (result == kCFRunLoopRunHandledSource);
							 | 
						||
| 
								 | 
							
									return true;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_set_keep_screen_on(bool on) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void showKeyboard(void);
							 | 
						||
| 
								 | 
							
								void hideKeyboard(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_keyboard_show(void) {
							 | 
						||
| 
								 | 
							
									keyboardshown = true;
							 | 
						||
| 
								 | 
							
									showKeyboard();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_keyboard_hide(void) {
							 | 
						||
| 
								 | 
							
									keyboardshown = false;
							 | 
						||
| 
								 | 
							
									hideKeyboard();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool kinc_keyboard_active(void) {
							 | 
						||
| 
								 | 
							
									return keyboardshown;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void loadURL(const char *url);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_load_url(const char *url) {
							 | 
						||
| 
								 | 
							
									loadURL(url);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// On iOS you can't set the length of the vibration.
							 | 
						||
| 
								 | 
							
								void kinc_vibrate(int ms) {
							 | 
						||
| 
								 | 
							
									AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static char language[3];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *kinc_language(void) {
							 | 
						||
| 
								 | 
							
									NSString *nsstr = [[NSLocale preferredLanguages] objectAtIndex:0];
							 | 
						||
| 
								 | 
							
									const char *lang = [nsstr UTF8String];
							 | 
						||
| 
								 | 
							
									language[0] = lang[0];
							 | 
						||
| 
								 | 
							
									language[1] = lang[1];
							 | 
						||
| 
								 | 
							
									language[2] = 0;
							 | 
						||
| 
								 | 
							
									return language;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// called on rotation event
							 | 
						||
| 
								 | 
							
								void KoreUpdateKeyboard(void) {
							 | 
						||
| 
								 | 
							
									if (keyboardshown) {
							 | 
						||
| 
								 | 
							
										hideKeyboard();
							 | 
						||
| 
								 | 
							
										showKeyboard();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else {
							 | 
						||
| 
								 | 
							
										hideKeyboard();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef KINC_KONG
							 | 
						||
| 
								 | 
							
								void kong_init(void);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_internal_shutdown(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int kinc_init(const char *name, int width, int height, struct kinc_window_options *win, struct kinc_framebuffer_options *frame) {
							 | 
						||
| 
								 | 
							
									kinc_window_options_t defaultWin;
							 | 
						||
| 
								 | 
							
									if (win == NULL) {
							 | 
						||
| 
								 | 
							
										kinc_window_options_set_defaults(&defaultWin);
							 | 
						||
| 
								 | 
							
										win = &defaultWin;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									kinc_framebuffer_options_t defaultFrame;
							 | 
						||
| 
								 | 
							
									if (frame == NULL) {
							 | 
						||
| 
								 | 
							
										kinc_framebuffer_options_set_defaults(&defaultFrame);
							 | 
						||
| 
								 | 
							
										frame = &defaultFrame;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									kinc_g4_internal_init();
							 | 
						||
| 
								 | 
							
									kinc_g4_internal_init_window(0, frame->depth_bits, frame->stencil_bits, true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef KINC_KONG
							 | 
						||
| 
								 | 
							
									kong_init();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
									return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void endGL(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void swapBuffersiOS(void) {
							 | 
						||
| 
								 | 
							
									endGL();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static char sysid[512];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *kinc_system_id(void) {
							 | 
						||
| 
								 | 
							
									const char *name = [[[UIDevice currentDevice] name] UTF8String];
							 | 
						||
| 
								 | 
							
									const char *vendorId = [[[[UIDevice currentDevice] identifierForVendor] UUIDString] UTF8String];
							 | 
						||
| 
								 | 
							
									strcpy(sysid, name);
							 | 
						||
| 
								 | 
							
									strcat(sysid, "-");
							 | 
						||
| 
								 | 
							
									strcat(sysid, vendorId);
							 | 
						||
| 
								 | 
							
									return sysid;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static const char *getSavePath(void) {
							 | 
						||
| 
								 | 
							
									NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
							 | 
						||
| 
								 | 
							
									NSString *resolvedPath = [paths objectAtIndex:0];
							 | 
						||
| 
								 | 
							
									NSString *appName = [NSString stringWithUTF8String:kinc_application_name()];
							 | 
						||
| 
								 | 
							
									resolvedPath = [resolvedPath stringByAppendingPathComponent:appName];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NSFileManager *fileMgr = [[NSFileManager alloc] init];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NSError *error;
							 | 
						||
| 
								 | 
							
									[fileMgr createDirectoryAtPath:resolvedPath withIntermediateDirectories:YES attributes:nil error:&error];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									resolvedPath = [resolvedPath stringByAppendingString:@"/"];
							 | 
						||
| 
								 | 
							
									return [resolvedPath cStringUsingEncoding:1];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *kinc_internal_save_path(void) {
							 | 
						||
| 
								 | 
							
									return getSavePath();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static const char *videoFormats[] = {"mp4", NULL};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char **kinc_video_formats(void) {
							 | 
						||
| 
								 | 
							
									return videoFormats;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <mach/mach_time.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								double kinc_frequency(void) {
							 | 
						||
| 
								 | 
							
									mach_timebase_info_data_t info;
							 | 
						||
| 
								 | 
							
									mach_timebase_info(&info);
							 | 
						||
| 
								 | 
							
									return (double)info.denom / (double)info.numer / 1e-9;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								kinc_ticks_t kinc_timestamp(void) {
							 | 
						||
| 
								 | 
							
									kinc_ticks_t time = mach_absolute_time();
							 | 
						||
| 
								 | 
							
									return time;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_login(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_unlock_achievement(int id) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *kinc_gamepad_vendor(int gamepad) {
							 | 
						||
| 
								 | 
							
									return "nobody";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *kinc_gamepad_product_name(int gamepad) {
							 | 
						||
| 
								 | 
							
									return "none";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool kinc_gamepad_connected(int num) {
							 | 
						||
| 
								 | 
							
									return true;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_gamepad_rumble(int gamepad, float left, float right) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int main(int argc, char *argv[]) {
							 | 
						||
| 
								 | 
							
									int retVal = 0;
							 | 
						||
| 
								 | 
							
									@autoreleasepool {
							 | 
						||
| 
								 | 
							
										[KoreAppDelegate description]; // otherwise removed by the linker
							 | 
						||
| 
								 | 
							
										retVal = UIApplicationMain(argc, argv, nil, @"KoreAppDelegate");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return retVal;
							 | 
						||
| 
								 | 
							
								}
							 |