// // LearnModeModifier.m // WiiToMidi // // Created by Mike Verdone on 27/12/06. // Copyright 2006 __MyCompanyName__. All rights reserved. // // Updated by Mehmet Akten - April 2007 // www.memo.tv // #import "LearnModeModifier.h" @implementation LearnModeModifier -(id) init { [self setLearnMode:FALSE]; _firstTime = TRUE; return self; } -(id) setLearnMode:(BOOL)learnMode { NSLog(@"LearnMode %i", learnMode); _learnMode = learnMode; return self; } -(id) setLearnSubMode:(int)submode { _learnSubMode = (submode % NUM_SUBMODES); return self; } -(BOOL) learnMode { return _learnMode; } -(int) learnSubMode { return _learnSubMode; } -(void) manipulate:(WiiStateArray)signals { unsigned char curSignals[SEND_ARR_SIZE]; int wOffset, nOffset; if (_firstTime) { memcpy(_oldSignals, signals, STATE_ARR_SIZE); _firstTime = FALSE; return; } if (_learnMode) { memcpy(curSignals, signals, SEND_ARR_SIZE); memcpy(signals, _oldSignals, SEND_ARR_SIZE); if (_learnSubMode == SUBMODE_ACC) { wOffset = SA_ACC_X; nOffset = SA_ACC_NX; } else if (_learnSubMode == SUBMODE_VEL) { wOffset = SA_VEL_X; nOffset = SA_VEL_NX; } else if (_learnSubMode == SUBMODE_POS) { wOffset = SA_POS_X; nOffset = SA_POS_NX; } else if (_learnSubMode == SUBMODE_ORI) { wOffset = SA_ORI_X; nOffset = SA_ORI_NX; } if (_learnSubMode < SUBMODE_JOY) { if (signals[SA_BUT_A] && signals[SA_BUT_B] && (_learnSubMode != SUBMODE_ORI)) signals[wOffset + 1] = curSignals[wOffset + 1]; else if (signals[SA_BUT_A]) signals[wOffset + 2] = curSignals[wOffset + 2]; else if (signals[SA_BUT_B]) signals[wOffset] = curSignals[wOffset]; if (signals[SA_BUT_C] && signals[SA_BUT_Z] && (_learnSubMode != SUBMODE_ORI)) signals[nOffset + 1] = curSignals[nOffset + 1]; else if (signals[SA_BUT_C]) signals[nOffset + 2] = curSignals[nOffset + 2]; else if (signals[SA_BUT_Z]) signals[nOffset] = curSignals[nOffset]; } else if (_learnSubMode == SUBMODE_JOY) { if (signals[SA_BUT_A]) signals[SA_JOY_NX] = curSignals[SA_JOY_NX]; if (signals[SA_BUT_B]) signals[SA_JOY_NY] = curSignals[SA_JOY_NY]; if (signals[SA_BUT_CA]) { signals[SA_JOY_CLX] = curSignals[SA_JOY_CLX]; signals[SA_JOY_CRX] = curSignals[SA_JOY_CRX]; } if (signals[SA_BUT_CB]) { signals[SA_JOY_CLY] = curSignals[SA_JOY_CLY]; signals[SA_JOY_CRY] = curSignals[SA_JOY_CRY]; } } } memcpy(_oldSignals, signals, STATE_ARR_SIZE); } @end