// // Animation.m // WiiToMidi // // Created by Mike Verdone on 29/01/07. // Copyright 2007 __MyCompanyName__. All rights reserved. // #import "Animation.h" static unsigned char __animations[] = { 12, 0, 1, ANIM_FRAME_LOOP, 12, 0, 2, ANIM_FRAME_LOOP, 12, 1, 2, 4, 8, ANIM_FRAME_END, 12, 8, 4, 2, 1, ANIM_FRAME_END, 12, 5, 10, ANIM_FRAME_END, 12, 10, 5, ANIM_FRAME_END }; @implementation Animation -(id) initWithWiiRemote:(WiiRemote*)wii initialState:(unsigned char)state frameData:(unsigned char[])frameData; { NSLog(@"animation init"); _wii = [wii retain]; _initialState = state; _frames = frameData + 1; _frameIdx = 0; _animTimer = [[NSTimer scheduledTimerWithTimeInterval:(*frameData / 100.0) target:self selector:@selector(animate:) userInfo:nil repeats:true] retain]; return self; } -(id) animate:(NSTimer*) timer { if (timer != _animTimer) return self; unsigned char curFrame = _frames[_frameIdx]; if (ANIM_FRAME_END == curFrame) { return [self stopAnimation]; } else if (ANIM_FRAME_LOOP == curFrame) { curFrame = _frames[(_frameIdx = 0)]; } [_wii setLEDEnabled1:(curFrame & 1) enabled2:(curFrame & 2) enabled3:(curFrame & 4) enabled4:(curFrame & 8)]; _frameIdx++; return self; } -(id) stopAnimation { [_animTimer invalidate]; [_animTimer autorelease]; _animTimer = nil; [_wii setLEDEnabled1:(_initialState & 1) enabled2:(_initialState & 2) enabled3:(_initialState & 4) enabled4:(_initialState & 8)]; [_wii autorelease]; _wii = nil; return self; } -(void) dealloc { [self stopAnimation]; [super dealloc]; } +(unsigned char*) getFramesWithId:(int)animId { return __animations + animId; } @end