Mercurial > sdl-ios-xcode
diff src/joystick/iphoneos/SDLUIAccelerationDelegate.m @ 2362:44fc2537ff9e gsoc2008_iphone
These files contain the specification for a class which receives updates from the iPhone accelerometer. The class holds the accelerometer information, and is queried by SDL_sysjoystick.m.
author | Holmes Futrell <hfutrell@umail.ucsb.edu> |
---|---|
date | Fri, 18 Jul 2008 17:46:17 +0000 |
parents | |
children | 32b9909db651 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/joystick/iphoneos/SDLUIAccelerationDelegate.m Fri Jul 18 17:46:17 2008 +0000 @@ -0,0 +1,88 @@ +// +// SDLUIAccelerationDelegate.m +// iPodSDL +// +// Created by Holmes Futrell on 6/21/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import "SDLUIAccelerationDelegate.h" + +static SDLUIAccelerationDelegate *sharedDelegate=nil; + +@implementation SDLUIAccelerationDelegate + ++(SDLUIAccelerationDelegate *)sharedDelegate { + if (sharedDelegate == nil) { + sharedDelegate = [[SDLUIAccelerationDelegate alloc] init]; + } + return sharedDelegate; +} + +-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { + + x = acceleration.x; + y = acceleration.y; + z = acceleration.z; + + hasNewData = YES; + //timestamp = acceleration.timestamp; + +} + +-(void)getLastOrientation:(Sint16 *)data { + +#define MAX_G_FORCE 5.0 +#define MAX_SINT16 0x7FFF + + if (x > MAX_G_FORCE) x = MAX_G_FORCE; + else if (x < -MAX_G_FORCE) x = -MAX_G_FORCE; + + if (y > MAX_G_FORCE) y = MAX_G_FORCE; + else if (y < -MAX_G_FORCE) y = -MAX_G_FORCE; + + if (z > MAX_G_FORCE) z = MAX_G_FORCE; + else if (z < -MAX_G_FORCE) z = -MAX_G_FORCE; + + data[0] = (x / MAX_G_FORCE) * MAX_SINT16; + data[1] = (y / MAX_G_FORCE) * MAX_SINT16; + data[2] = (z / MAX_G_FORCE) * MAX_SINT16; + +} + +-(id)init { + + self = [super init]; + x = y = z = 0.0; + return self; + +} + +-(void)dealloc { + sharedDelegate = nil; + [super dealloc]; +} + +-(void)startup { + [UIAccelerometer sharedAccelerometer].delegate = self; + isRunning = YES; +} + +-(void)shutdown { + [UIAccelerometer sharedAccelerometer].delegate = nil; + isRunning = NO; +} + +-(BOOL)isRunning { + return isRunning; +} + +-(BOOL)hasNewData { + return hasNewData; +} + +-(void)setHasNewData:(BOOL)value { + hasNewData = value; +} + +@end