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; | ||
|  | } |