Handle editor keymappings more sanely; this fixes the "#ifdef XBOX"
everywhere (tip: if you're putting that many preprocessor checks in high-level code, you're doing something wrong).
This commit is contained in:
+397
-355
@@ -114,6 +114,205 @@ const CString HELP_TEXT =
|
||||
"Black:\n Show\n shortcuts\n";
|
||||
#endif
|
||||
|
||||
/*
|
||||
* g_MapEditToDI is a simple mapping: edit functions map to DeviceInputs.
|
||||
* If g_MapEditToDIHold for a given edit function is valid, then at least one
|
||||
* input in g_MapEditToDIHold must be held when pressing any key in g_MapEditToDI
|
||||
* for the input to occur.
|
||||
*/
|
||||
struct MapEditToDI
|
||||
{
|
||||
DeviceInput button[NUM_EDIT_BUTTONS][NUM_EDIT_TO_DEVICE_SLOTS];
|
||||
DeviceInput hold[NUM_EDIT_BUTTONS][NUM_EDIT_TO_DEVICE_SLOTS];
|
||||
void Clear()
|
||||
{
|
||||
FOREACH_EditButton(e)
|
||||
for( int slot = 0; slot < NUM_EDIT_TO_DEVICE_SLOTS; ++slot )
|
||||
{
|
||||
button[e][slot].MakeInvalid();
|
||||
hold[e][slot].MakeInvalid();
|
||||
}
|
||||
}
|
||||
};
|
||||
static MapEditToDI g_EditMappings, g_PlayMappings, g_RecordMappings;
|
||||
static MapEditToDI *g_pCurrentMap = &g_EditMappings;
|
||||
#if defined(XBOX)
|
||||
static void InitEditMappings()
|
||||
{
|
||||
/* XXX: fill this in */
|
||||
}
|
||||
#else
|
||||
static void InitEditMappings()
|
||||
{
|
||||
g_EditMappings.Clear();
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_0][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C1);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_1][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C2);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_2][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C3);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_3][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C4);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_4][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C5);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_5][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C6);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_6][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C7);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_7][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C8);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_8][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C9);
|
||||
g_EditMappings.button[EDIT_BUTTON_COLUMN_9][0] = DeviceInput(DEVICE_KEYBOARD, KEY_C0);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_RIGHT_SIDE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
|
||||
g_EditMappings.button[EDIT_BUTTON_RIGHT_SIDE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
g_EditMappings.button[EDIT_BUTTON_LAY_MINE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
g_EditMappings.button[EDIT_BUTTON_LAY_ATTACK][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_UP_LINE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_UP);
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_UP_PAGE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_PGUP);
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_DOWN_LINE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_DOWN);
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_DOWN_PAGE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_PGDN);
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_HOME][0] = DeviceInput(DEVICE_KEYBOARD, KEY_HOME);
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_END][0] = DeviceInput(DEVICE_KEYBOARD, KEY_END);
|
||||
|
||||
g_EditMappings.button [EDIT_BUTTON_SCROLL_SPEED_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_UP);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SCROLL_SPEED_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SCROLL_SPEED_UP][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
|
||||
g_EditMappings.button [EDIT_BUTTON_SCROLL_SPEED_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_DOWN);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SCROLL_SPEED_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SCROLL_SPEED_DOWN][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_SELECT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
g_EditMappings.button[EDIT_BUTTON_SCROLL_SELECT][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_LAY_SELECT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_SPACE);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_SNAP_NEXT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LEFT);
|
||||
g_EditMappings.button[EDIT_BUTTON_SNAP_PREV][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RIGHT);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_EDIT_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_AREA_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ENTER);
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_AREA_MENU][1] = DeviceInput(DEVICE_KEYBOARD, KEY_KP_ENTER);
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_BGA_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cb);
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_COURSE_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cc);
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_INPUT_HELP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F1);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_PLAY_FROM_START][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cp);
|
||||
g_EditMappings.hold[EDIT_BUTTON_PLAY_FROM_START][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_PLAY_FROM_START][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
g_EditMappings.button[EDIT_BUTTON_PLAY_FROM_CURSOR][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cp);
|
||||
g_EditMappings.hold[EDIT_BUTTON_PLAY_FROM_CURSOR][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
g_EditMappings.hold[EDIT_BUTTON_PLAY_FROM_CURSOR][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
g_EditMappings.button[EDIT_BUTTON_PLAY_SELECTION][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cp);
|
||||
g_EditMappings.button[EDIT_BUTTON_RECORD][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cr);
|
||||
g_EditMappings.hold[EDIT_BUTTON_RECORD][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_RECORD][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_INSERT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_INSERT);
|
||||
g_EditMappings.button[EDIT_BUTTON_DELETE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_DEL);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_INSERT_SHIFT_PAUSES][0] = DeviceInput(DEVICE_KEYBOARD, KEY_INSERT);
|
||||
g_EditMappings.hold[EDIT_BUTTON_INSERT_SHIFT_PAUSES][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_INSERT_SHIFT_PAUSES][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
g_EditMappings.button[EDIT_BUTTON_DELETE_SHIFT_PAUSES][0] = DeviceInput(DEVICE_KEYBOARD, KEY_DEL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_DELETE_SHIFT_PAUSES][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL);
|
||||
g_EditMappings.hold[EDIT_BUTTON_DELETE_SHIFT_PAUSES][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_TOGGLE_ASSIST_TICK][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F4);
|
||||
g_EditMappings.button[EDIT_BUTTON_PLAY_SAMPLE_MUSIC][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cm);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_NEXT_STEPS][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F6);
|
||||
g_EditMappings.button[EDIT_BUTTON_OPEN_PREV_STEPS][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F5);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_BPM_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F8);
|
||||
g_EditMappings.button[EDIT_BUTTON_BPM_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F7);
|
||||
g_EditMappings.button[EDIT_BUTTON_STOP_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F10);
|
||||
g_EditMappings.button[EDIT_BUTTON_STOP_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F9);
|
||||
g_EditMappings.button[EDIT_BUTTON_OFFSET_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F12);
|
||||
g_EditMappings.button[EDIT_BUTTON_OFFSET_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F11);
|
||||
g_EditMappings.button[EDIT_BUTTON_SAMPLE_START_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RBRACKET);
|
||||
g_EditMappings.button[EDIT_BUTTON_SAMPLE_START_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LBRACKET);
|
||||
g_EditMappings.button[EDIT_BUTTON_SAMPLE_LENGTH_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RBRACKET);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SAMPLE_LENGTH_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SAMPLE_LENGTH_UP][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
g_EditMappings.button[EDIT_BUTTON_SAMPLE_LENGTH_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LBRACKET);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SAMPLE_LENGTH_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
g_EditMappings.hold[EDIT_BUTTON_SAMPLE_LENGTH_DOWN][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
|
||||
g_EditMappings.button[EDIT_BUTTON_ADJUST_FINE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
g_EditMappings.button[EDIT_BUTTON_ADJUST_FINE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
|
||||
|
||||
g_PlayMappings.button[EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
|
||||
g_PlayMappings.button[EDIT_BUTTON_TOGGLE_ASSIST_TICK][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F4);
|
||||
g_PlayMappings.button[EDIT_BUTTON_TOGGLE_AUTOPLAY][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F8);
|
||||
g_PlayMappings.button[EDIT_BUTTON_OFFSET_UP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F12);
|
||||
g_PlayMappings.button[EDIT_BUTTON_OFFSET_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F11);
|
||||
|
||||
g_RecordMappings.button[EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Given a DeviceInput that was just depressed, return an active edit function. */
|
||||
static bool DeviceToEdit( DeviceInput DeviceI, EditButton &button )
|
||||
{
|
||||
ASSERT( DeviceI.IsValid() );
|
||||
|
||||
/* First, search to see if a key that requires a modifier is pressed. */
|
||||
FOREACH_EditButton(e)
|
||||
{
|
||||
for( int slot = 0; slot < NUM_EDIT_TO_DEVICE_SLOTS; ++slot )
|
||||
{
|
||||
if( g_pCurrentMap->button[e][slot] == DeviceI && g_pCurrentMap->hold[e][0].IsValid() )
|
||||
{
|
||||
/* The button maps to this function. */
|
||||
button = e;
|
||||
|
||||
/* This function has one or more shift modifier attached. */
|
||||
for( int holdslot = 0; holdslot < NUM_EDIT_TO_DEVICE_SLOTS; ++holdslot )
|
||||
{
|
||||
DeviceInput hDI = g_pCurrentMap->hold[e][holdslot];
|
||||
if( INPUTFILTER->IsBeingPressed(hDI) )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* No shifted keys matched. See if any unshifted inputs are bound to this key. */
|
||||
FOREACH_EditButton(e)
|
||||
{
|
||||
for( int slot = 0; slot < NUM_EDIT_TO_DEVICE_SLOTS; ++slot )
|
||||
{
|
||||
if( g_pCurrentMap->button[e][slot] == DeviceI && !g_pCurrentMap->hold[e][0].IsValid() )
|
||||
{
|
||||
/* The button maps to this function. */
|
||||
button = e;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
e = EDIT_BUTTON_INVALID;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool EditToDevice( EditButton button, int iSlotNum, DeviceInput &DeviceI )
|
||||
{
|
||||
ASSERT( iSlotNum < NUM_EDIT_TO_DEVICE_SLOTS );
|
||||
DeviceI = g_pCurrentMap->button[button][iSlotNum];
|
||||
return DeviceI.IsValid();
|
||||
}
|
||||
|
||||
static bool EditIsBeingPressed( EditButton button )
|
||||
{
|
||||
for( int slot = 0; slot < NUM_EDIT_TO_DEVICE_SLOTS; ++slot )
|
||||
{
|
||||
DeviceInput DeviceI;
|
||||
if( EditToDevice( button, slot, DeviceI ) && INPUTFILTER->IsBeingPressed(DeviceI) )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static const MenuRow g_KeyboardShortcutsItems[] =
|
||||
{
|
||||
@@ -284,108 +483,13 @@ static Menu g_CourseMode( "Course Display", g_CourseModeItems );
|
||||
int g_iLastInsertAttackTrack = -1;
|
||||
float g_fLastInsertAttackDurationSeconds = -1;
|
||||
|
||||
#if defined(XBOX)
|
||||
bool lIsHeld = false; // true if L (Ctrl) is being held
|
||||
bool rIsHeld = false; // true if R (Shift) is being held
|
||||
bool buttonHeld[4] = {false};
|
||||
|
||||
DeviceInput TranslateInput(const DeviceInput& DeviceI, const InputEventType type)
|
||||
{
|
||||
DeviceInput ret;
|
||||
ret.device = DEVICE_KEYBOARD;
|
||||
ret.button = 0;
|
||||
|
||||
int i = -1;
|
||||
switch(DeviceI.button)
|
||||
{
|
||||
case JOY_HAT_LEFT:
|
||||
ret.button = KEY_LEFT;
|
||||
break;
|
||||
case JOY_HAT_RIGHT:
|
||||
ret.button = KEY_RIGHT;
|
||||
break;
|
||||
case JOY_HAT_UP:
|
||||
ret.button = KEY_UP;
|
||||
break;
|
||||
case JOY_HAT_DOWN:
|
||||
ret.button = KEY_DOWN;
|
||||
break;
|
||||
case JOY_AUX_1: // start
|
||||
if(!lIsHeld)
|
||||
ret.button = KEY_ENTER;
|
||||
else
|
||||
ret.button = KEY_CP;
|
||||
break;
|
||||
case JOY_AUX_2: // select
|
||||
if(rIsHeld)
|
||||
ret.button = KEY_Cr;
|
||||
else if(lIsHeld)
|
||||
ret.button = KEY_Cp;
|
||||
else
|
||||
ret.button = KEY_ESC;
|
||||
break;
|
||||
case JOY_1:
|
||||
i = 1;
|
||||
ret.button = KEY_C2;
|
||||
break;
|
||||
case JOY_2:
|
||||
i = 3;
|
||||
ret.button = KEY_C4;
|
||||
break;
|
||||
case JOY_3:
|
||||
i = 0;
|
||||
ret.button = KEY_C1;
|
||||
break;
|
||||
case JOY_4:
|
||||
i = 2;
|
||||
ret.button = KEY_C3;
|
||||
break;
|
||||
case JOY_5: // Black
|
||||
if(lIsHeld)
|
||||
ret.button = KEY_F4;
|
||||
else if(rIsHeld)
|
||||
ret.button = KEY_DEL;
|
||||
else
|
||||
ret.button = KEY_F1;
|
||||
break;
|
||||
case JOY_6: // White
|
||||
if(rIsHeld)
|
||||
ret.button = KEY_INSERT;
|
||||
else
|
||||
ret.button = KEY_SPACE;
|
||||
break;
|
||||
case JOY_7: // L
|
||||
if(type == IET_FIRST_PRESS)
|
||||
lIsHeld = true;
|
||||
else if(type == IET_RELEASE)
|
||||
lIsHeld = false;
|
||||
break;
|
||||
case JOY_8: // R
|
||||
if(type == IET_FIRST_PRESS)
|
||||
rIsHeld = true;
|
||||
else if(type == IET_RELEASE)
|
||||
rIsHeld = false;
|
||||
ret.button = KEY_LSHIFT;
|
||||
break;
|
||||
}
|
||||
|
||||
if(i != -1)
|
||||
{
|
||||
if(type == IET_FIRST_PRESS)
|
||||
buttonHeld[i] = true;
|
||||
else if(type == IET_RELEASE)
|
||||
buttonHeld[i] = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
REGISTER_SCREEN_CLASS( ScreenEdit );
|
||||
ScreenEdit::ScreenEdit( CString sName ) : Screen( sName )
|
||||
{
|
||||
LOG->Trace( "ScreenEdit::ScreenEdit()" );
|
||||
|
||||
InitEditMappings();
|
||||
|
||||
/* We do this ourself. */
|
||||
SOUND->HandleSongTimer( false );
|
||||
|
||||
@@ -772,18 +876,15 @@ void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, c
|
||||
if( m_In.IsTransitioning() || m_Out.IsTransitioning() )
|
||||
return;
|
||||
|
||||
const DeviceInput& di =
|
||||
#if defined(XBOX)
|
||||
TranslateInput(DeviceI, type);
|
||||
#else
|
||||
DeviceI;
|
||||
#endif
|
||||
const DeviceInput& di = DeviceI;
|
||||
|
||||
EditButton EditB;
|
||||
DeviceToEdit( di, EditB );
|
||||
switch( m_EditMode )
|
||||
{
|
||||
case MODE_EDITING: InputEdit( di, type, GameI, MenuI, StyleI ); break;
|
||||
case MODE_RECORDING: InputRecord( di, type, GameI, MenuI, StyleI ); break;
|
||||
case MODE_PLAYING: InputPlay( di, type, GameI, MenuI, StyleI ); break;
|
||||
case MODE_EDITING: InputEdit( di, type, GameI, MenuI, StyleI, EditB ); break;
|
||||
case MODE_RECORDING: InputRecord( di, type, GameI, MenuI, StyleI, EditB ); break;
|
||||
case MODE_PLAYING: InputPlay( di, type, GameI, MenuI, StyleI, EditB ); break;
|
||||
default: ASSERT(0);
|
||||
}
|
||||
|
||||
@@ -793,7 +894,7 @@ void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, c
|
||||
}
|
||||
|
||||
|
||||
void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||
void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB )
|
||||
{
|
||||
if( DeviceI.device != DEVICE_KEYBOARD )
|
||||
return;
|
||||
@@ -812,35 +913,27 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
return;
|
||||
}
|
||||
|
||||
switch( DeviceI.button )
|
||||
switch( EditB )
|
||||
{
|
||||
case KEY_C1:
|
||||
case KEY_C2:
|
||||
case KEY_C3:
|
||||
case KEY_C4:
|
||||
case KEY_C5:
|
||||
case KEY_C6:
|
||||
case KEY_C7:
|
||||
case KEY_C8:
|
||||
case KEY_C9:
|
||||
case KEY_C0:
|
||||
case EDIT_BUTTON_COLUMN_0:
|
||||
case EDIT_BUTTON_COLUMN_1:
|
||||
case EDIT_BUTTON_COLUMN_2:
|
||||
case EDIT_BUTTON_COLUMN_3:
|
||||
case EDIT_BUTTON_COLUMN_4:
|
||||
case EDIT_BUTTON_COLUMN_5:
|
||||
case EDIT_BUTTON_COLUMN_6:
|
||||
case EDIT_BUTTON_COLUMN_7:
|
||||
case EDIT_BUTTON_COLUMN_8:
|
||||
case EDIT_BUTTON_COLUMN_9:
|
||||
{
|
||||
if( type != IET_FIRST_PRESS )
|
||||
break; // We only care about first presses
|
||||
|
||||
/* Why was this changed back to just "DeviceI.button - KEY_1"? That causes
|
||||
* crashes when 0 is pressed (0 - 1 = -1). -glenn */
|
||||
// int iCol = DeviceI.button - KEY_1;
|
||||
int iCol = DeviceI.button == KEY_C0? 9: DeviceI.button - KEY_C1;
|
||||
int iCol = EditB - EDIT_BUTTON_COLUMN_0;
|
||||
|
||||
|
||||
// Alt + number = input to right half
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT)))
|
||||
#else
|
||||
if(lIsHeld)
|
||||
#endif
|
||||
if( EditIsBeingPressed(EDIT_BUTTON_RIGHT_SIDE) )
|
||||
iCol += m_NoteFieldEdit.GetNumTracks()/2;
|
||||
|
||||
|
||||
@@ -869,15 +962,11 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
}
|
||||
|
||||
// Hold LShift to lay mine, hold RShift to lay an attack
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT)) )
|
||||
#else
|
||||
if(rIsHeld)
|
||||
#endif
|
||||
if( EditIsBeingPressed(EDIT_BUTTON_LAY_MINE) )
|
||||
{
|
||||
m_NoteFieldEdit.SetTapNote(iCol, iSongIndex, TAP_ORIGINAL_MINE );
|
||||
}
|
||||
else if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)) )
|
||||
if( EditIsBeingPressed(EDIT_BUTTON_LAY_ATTACK) )
|
||||
{
|
||||
g_iLastInsertAttackTrack = iCol;
|
||||
SCREENMAN->MiniMenu( &g_InsertAttack, SM_BackFromInsertAttack );
|
||||
@@ -888,59 +977,65 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
}
|
||||
}
|
||||
break;
|
||||
case KEY_UP:
|
||||
case KEY_DOWN:
|
||||
case KEY_PGUP:
|
||||
case KEY_PGDN:
|
||||
case EDIT_BUTTON_SCROLL_SPEED_UP:
|
||||
case EDIT_BUTTON_SCROLL_SPEED_DOWN:
|
||||
{
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_LCTRL)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_RCTRL)) )
|
||||
#else
|
||||
if(lIsHeld)
|
||||
#endif
|
||||
float& fScrollSpeed = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.m_fScrollSpeed;
|
||||
float fNewScrollSpeed = fScrollSpeed;
|
||||
|
||||
if( DeviceI.button == KEY_UP )
|
||||
{
|
||||
float& fScrollSpeed = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.m_fScrollSpeed;
|
||||
float fNewScrollSpeed = fScrollSpeed;
|
||||
|
||||
if( DeviceI.button == KEY_UP )
|
||||
{
|
||||
if( fScrollSpeed == 4 )
|
||||
fNewScrollSpeed = 2;
|
||||
else if( fScrollSpeed == 2 )
|
||||
fNewScrollSpeed = 1;
|
||||
}
|
||||
else if( DeviceI.button == KEY_DOWN )
|
||||
{
|
||||
if( fScrollSpeed == 2 )
|
||||
fNewScrollSpeed = 4;
|
||||
else if( fScrollSpeed == 1 )
|
||||
fNewScrollSpeed = 2;
|
||||
}
|
||||
|
||||
if( fNewScrollSpeed != fScrollSpeed )
|
||||
{
|
||||
fScrollSpeed = fNewScrollSpeed;
|
||||
m_soundMarker.Play();
|
||||
GAMESTATE->StoreSelectedOptions();
|
||||
}
|
||||
break;
|
||||
if( fScrollSpeed == 4 )
|
||||
fNewScrollSpeed = 2;
|
||||
else if( fScrollSpeed == 2 )
|
||||
fNewScrollSpeed = 1;
|
||||
}
|
||||
else if( DeviceI.button == KEY_DOWN )
|
||||
{
|
||||
if( fScrollSpeed == 2 )
|
||||
fNewScrollSpeed = 4;
|
||||
else if( fScrollSpeed == 1 )
|
||||
fNewScrollSpeed = 2;
|
||||
}
|
||||
|
||||
float fBeatsToMove=0.f;
|
||||
switch( DeviceI.button )
|
||||
if( fNewScrollSpeed != fScrollSpeed )
|
||||
{
|
||||
case KEY_UP:
|
||||
case KEY_DOWN:
|
||||
fBeatsToMove = NoteTypeToBeat( m_SnapDisplay.GetNoteType() );
|
||||
if( DeviceI.button == KEY_UP )
|
||||
fBeatsToMove *= -1;
|
||||
fScrollSpeed = fNewScrollSpeed;
|
||||
m_soundMarker.Play();
|
||||
GAMESTATE->StoreSelectedOptions();
|
||||
}
|
||||
break;
|
||||
case KEY_PGUP:
|
||||
case KEY_PGDN:
|
||||
fBeatsToMove = BEATS_PER_MEASURE;
|
||||
if( DeviceI.button == KEY_PGUP )
|
||||
}
|
||||
|
||||
break;
|
||||
case EDIT_BUTTON_SCROLL_UP_LINE:
|
||||
case EDIT_BUTTON_SCROLL_UP_PAGE:
|
||||
case EDIT_BUTTON_SCROLL_DOWN_LINE:
|
||||
case EDIT_BUTTON_SCROLL_DOWN_PAGE:
|
||||
case EDIT_BUTTON_SCROLL_HOME:
|
||||
case EDIT_BUTTON_SCROLL_END:
|
||||
{
|
||||
float fBeatsToMove=0.f;
|
||||
switch( EditB )
|
||||
{
|
||||
case EDIT_BUTTON_SCROLL_UP_LINE:
|
||||
case EDIT_BUTTON_SCROLL_DOWN_LINE:
|
||||
fBeatsToMove = NoteTypeToBeat( m_SnapDisplay.GetNoteType() );
|
||||
if( EditB == EDIT_BUTTON_SCROLL_UP_LINE )
|
||||
fBeatsToMove *= -1;
|
||||
break;
|
||||
case EDIT_BUTTON_SCROLL_UP_PAGE:
|
||||
case EDIT_BUTTON_SCROLL_DOWN_PAGE:
|
||||
fBeatsToMove = BEATS_PER_MEASURE;
|
||||
if( EditB == EDIT_BUTTON_SCROLL_UP_PAGE )
|
||||
fBeatsToMove *= -1;
|
||||
break;
|
||||
case EDIT_BUTTON_SCROLL_HOME:
|
||||
fBeatsToMove = -GAMESTATE->m_fSongBeat;
|
||||
break;
|
||||
case EDIT_BUTTON_SCROLL_END:
|
||||
fBeatsToMove = m_NoteFieldEdit.GetLastBeat() - GAMESTATE->m_fSongBeat;
|
||||
break;
|
||||
}
|
||||
|
||||
const float fStartBeat = GAMESTATE->m_fSongBeat;
|
||||
@@ -952,28 +1047,14 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
int iCol = n;
|
||||
|
||||
// Ctrl + number = input to right half
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT)))
|
||||
#else
|
||||
if(lIsHeld)
|
||||
#endif
|
||||
if( EditIsBeingPressed(EDIT_BUTTON_RIGHT_SIDE) )
|
||||
iCol += m_NoteFieldEdit.GetNumTracks()/2;
|
||||
|
||||
if( iCol >= m_NoteFieldEdit.GetNumTracks() )
|
||||
continue; // skip
|
||||
|
||||
#if !defined(XBOX)
|
||||
int b = n < 9? KEY_C1+n: KEY_C0;
|
||||
const DeviceInput di(DEVICE_KEYBOARD, b);
|
||||
|
||||
if( !INPUTFILTER->IsBeingPressed(di) )
|
||||
#else
|
||||
if(n > 3)
|
||||
continue;
|
||||
|
||||
if(!buttonHeld[n])
|
||||
#endif
|
||||
EditButton b = EditButton(EDIT_BUTTON_COLUMN_0+n);
|
||||
if( !EditIsBeingPressed(b) )
|
||||
continue;
|
||||
|
||||
// create a new hold note
|
||||
@@ -985,12 +1066,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
m_NoteFieldEdit.AddHoldNote( newHN );
|
||||
}
|
||||
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)))
|
||||
#else
|
||||
if(rIsHeld)
|
||||
#endif
|
||||
if( EditIsBeingPressed(EDIT_BUTTON_SCROLL_SELECT) )
|
||||
{
|
||||
/* Shift is being held.
|
||||
*
|
||||
@@ -1020,23 +1096,15 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
m_soundChangeLine.Play();
|
||||
}
|
||||
break;
|
||||
case KEY_HOME:
|
||||
GAMESTATE->m_fSongBeat = 0;
|
||||
m_soundChangeLine.Play();
|
||||
break;
|
||||
case KEY_END:
|
||||
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.GetLastBeat();
|
||||
m_soundChangeLine.Play();
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
case EDIT_BUTTON_SNAP_NEXT:
|
||||
if( m_SnapDisplay.PrevSnapMode() )
|
||||
OnSnapModeChange();
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
case EDIT_BUTTON_SNAP_PREV:
|
||||
if( m_SnapDisplay.NextSnapMode() )
|
||||
OnSnapModeChange();
|
||||
break;
|
||||
case KEY_SPACE:
|
||||
case EDIT_BUTTON_LAY_SELECT:
|
||||
if( m_NoteFieldEdit.m_fBeginMarker==-1 && m_NoteFieldEdit.m_fEndMarker==-1 )
|
||||
{
|
||||
// lay begin marker
|
||||
@@ -1061,8 +1129,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
}
|
||||
m_soundMarker.Play();
|
||||
break;
|
||||
case KEY_ENTER:
|
||||
case KEY_KP_ENTER:
|
||||
case EDIT_BUTTON_OPEN_AREA_MENU:
|
||||
{
|
||||
// update enabled/disabled in g_AreaMenu
|
||||
bool bAreaSelected = m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1;
|
||||
@@ -1082,18 +1149,17 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
SCREENMAN->MiniMenu( &g_AreaMenu, SM_BackFromAreaMenu );
|
||||
}
|
||||
break;
|
||||
case KEY_ESC:
|
||||
case EDIT_BUTTON_OPEN_EDIT_MENU:
|
||||
SCREENMAN->MiniMenu( &g_MainMenu, SM_BackFromMainMenu );
|
||||
break;
|
||||
|
||||
case KEY_F1:
|
||||
case EDIT_BUTTON_OPEN_INPUT_HELP:
|
||||
SCREENMAN->MiniMenu( &g_KeyboardShortcuts, SM_None );
|
||||
break;
|
||||
case KEY_F4:
|
||||
case EDIT_BUTTON_TOGGLE_ASSIST_TICK:
|
||||
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
||||
break;
|
||||
case KEY_F5:
|
||||
case KEY_F6:
|
||||
case EDIT_BUTTON_OPEN_NEXT_STEPS:
|
||||
case EDIT_BUTTON_OPEN_PREV_STEPS:
|
||||
{
|
||||
// save current steps
|
||||
Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
|
||||
@@ -1112,9 +1178,9 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
vector<Steps*>::iterator it = find( vSteps.begin(), vSteps.end(), pSteps );
|
||||
ASSERT( it != vSteps.end() );
|
||||
|
||||
switch( DeviceI.button )
|
||||
switch( EditB )
|
||||
{
|
||||
case KEY_F5:
|
||||
case EDIT_BUTTON_OPEN_PREV_STEPS:
|
||||
if( it==vSteps.begin() )
|
||||
{
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
@@ -1122,7 +1188,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
}
|
||||
it--;
|
||||
break;
|
||||
case KEY_F6:
|
||||
case EDIT_BUTTON_OPEN_NEXT_STEPS:
|
||||
it++;
|
||||
if( it==vSteps.end() )
|
||||
{
|
||||
@@ -1144,22 +1210,19 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
SOUND->PlayOnce( THEME->GetPathToS("ScreenEdit switch") );
|
||||
}
|
||||
break;
|
||||
case KEY_F7:
|
||||
case KEY_F8:
|
||||
case EDIT_BUTTON_BPM_UP:
|
||||
case EDIT_BUTTON_BPM_DOWN:
|
||||
{
|
||||
// MD 11/02/03 - start referring to Editor.ini entries
|
||||
// entries here: BPMDelta, BPMDeltaFine
|
||||
float fBPM = m_pSong->GetBPMAtBeat( GAMESTATE->m_fSongBeat );
|
||||
float fDeltaBPM;
|
||||
switch( DeviceI.button )
|
||||
switch( EditB )
|
||||
{
|
||||
case KEY_F7: fDeltaBPM = - 0.020f; break;
|
||||
case KEY_F8: fDeltaBPM = + 0.020f; break;
|
||||
case EDIT_BUTTON_BPM_UP: fDeltaBPM = +0.020f; break;
|
||||
case EDIT_BUTTON_BPM_DOWN: fDeltaBPM = -0.020f; break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) ||
|
||||
INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) )
|
||||
fDeltaBPM /= 2; /* .010 */
|
||||
if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) )
|
||||
fDeltaBPM /= 2;
|
||||
else switch( type )
|
||||
{
|
||||
case IET_SLOW_REPEAT: fDeltaBPM *= 10; break;
|
||||
@@ -1170,22 +1233,18 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
m_pSong->SetBPMAtBeat( GAMESTATE->m_fSongBeat, fNewBPM );
|
||||
}
|
||||
break;
|
||||
case KEY_F9:
|
||||
case KEY_F10:
|
||||
case EDIT_BUTTON_STOP_UP:
|
||||
case EDIT_BUTTON_STOP_DOWN:
|
||||
{
|
||||
// MD 11/02/03 - start referring to Editor.ini entries
|
||||
// entries here: StopDelta, StopDeltaFine
|
||||
float fStopDelta;
|
||||
switch( DeviceI.button )
|
||||
switch( EditB )
|
||||
{
|
||||
case KEY_F9: fStopDelta = -0.02f; break;
|
||||
case KEY_F10: fStopDelta = +0.02f; break;
|
||||
case EDIT_BUTTON_STOP_UP: fStopDelta = +0.020f; break;
|
||||
case EDIT_BUTTON_STOP_DOWN: fStopDelta = -0.020f; break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
// MD 11/02/03 - requested: fine adjust for stops as well
|
||||
if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) ||
|
||||
INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) )
|
||||
fStopDelta /= 4; /* .005 */
|
||||
if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) )
|
||||
fStopDelta /= 20; /* 1ms */
|
||||
else switch( type )
|
||||
{
|
||||
case IET_SLOW_REPEAT: fStopDelta *= 10; break;
|
||||
@@ -1214,20 +1273,17 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
}
|
||||
}
|
||||
break;
|
||||
case KEY_F11:
|
||||
case KEY_F12:
|
||||
case EDIT_BUTTON_OFFSET_UP:
|
||||
case EDIT_BUTTON_OFFSET_DOWN:
|
||||
{
|
||||
// MD 11/02/03 - start referring to Editor.ini entries
|
||||
// entries here: OffsetDelta, OffsetDeltaFine
|
||||
float fOffsetDelta;
|
||||
switch( DeviceI.button )
|
||||
switch( EditB )
|
||||
{
|
||||
case KEY_F11: fOffsetDelta = -0.02f; break;
|
||||
case KEY_F12: fOffsetDelta = +0.02f; break;
|
||||
case EDIT_BUTTON_OFFSET_DOWN: fOffsetDelta = -0.02f; break;
|
||||
case EDIT_BUTTON_OFFSET_UP: fOffsetDelta = +0.02f; break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) ||
|
||||
INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) )
|
||||
if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) )
|
||||
fOffsetDelta /= 20; /* 1ms */
|
||||
else switch( type )
|
||||
{
|
||||
@@ -1238,17 +1294,16 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
m_pSong->m_Timing.m_fBeat0OffsetInSeconds += fOffsetDelta;
|
||||
}
|
||||
break;
|
||||
case KEY_LBRACKET:
|
||||
case KEY_RBRACKET:
|
||||
case EDIT_BUTTON_SAMPLE_START_UP:
|
||||
case EDIT_BUTTON_SAMPLE_START_DOWN:
|
||||
{
|
||||
// MD 11/02/03 - start referring to Editor.ini entries
|
||||
// entries here: SampleLengthDelta, SampleLengthDeltaFine
|
||||
// SampleStartDelta, SampleStartDeltaFine
|
||||
float fDelta;
|
||||
switch( DeviceI.button )
|
||||
switch( EditB )
|
||||
{
|
||||
case KEY_LBRACKET: fDelta = -0.02f; break;
|
||||
case KEY_RBRACKET: fDelta = +0.02f; break;
|
||||
case EDIT_BUTTON_SAMPLE_START_DOWN: fDelta = -0.02f; break;
|
||||
case EDIT_BUTTON_SAMPLE_START_UP: fDelta = +0.02f; break;
|
||||
case EDIT_BUTTON_SAMPLE_LENGTH_DOWN: fDelta = -0.02f; break;
|
||||
case EDIT_BUTTON_SAMPLE_LENGTH_UP: fDelta = +0.02f; break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
switch( type )
|
||||
@@ -1257,8 +1312,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
case IET_FAST_REPEAT: fDelta *= 40; break;
|
||||
}
|
||||
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)))
|
||||
if( EditB == EDIT_BUTTON_SAMPLE_LENGTH_DOWN || EditB == EDIT_BUTTON_SAMPLE_LENGTH_UP )
|
||||
{
|
||||
m_pSong->m_fMusicSampleLengthSeconds += fDelta;
|
||||
m_pSong->m_fMusicSampleLengthSeconds = max(m_pSong->m_fMusicSampleLengthSeconds,0);
|
||||
@@ -1268,13 +1322,13 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
}
|
||||
}
|
||||
break;
|
||||
case KEY_Cm:
|
||||
case EDIT_BUTTON_PLAY_SAMPLE_MUSIC:
|
||||
PlayPreviewMusic();
|
||||
break;
|
||||
case KEY_Cb:
|
||||
case EDIT_BUTTON_OPEN_BGA_MENU:
|
||||
HandleMainMenuChoice( edit_bg_change, NULL );
|
||||
break;
|
||||
case KEY_Cc:
|
||||
case EDIT_BUTTON_OPEN_COURSE_MENU:
|
||||
{
|
||||
g_CourseMode.rows[0].choices.clear();
|
||||
g_CourseMode.rows[0].choices.push_back( "OFF" );
|
||||
@@ -1307,62 +1361,49 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
SCREENMAN->MiniMenu( &g_CourseMode, SM_BackFromCourseModeMenu );
|
||||
break;
|
||||
}
|
||||
case KEY_Cp:
|
||||
{
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_LCTRL)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_RCTRL)) )
|
||||
HandleMainMenuChoice( play_whole_song, NULL );
|
||||
else if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_LSHIFT)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_RSHIFT)) )
|
||||
HandleMainMenuChoice( play_current_beat_to_end, NULL );
|
||||
else
|
||||
if( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 )
|
||||
HandleAreaMenuChoice( play, NULL );
|
||||
#else
|
||||
if(rIsHeld)
|
||||
HandleMainMenuChoice( play_whole_song, NULL );
|
||||
else
|
||||
HandleAreaMenuChoice( play, NULL );
|
||||
#endif
|
||||
}
|
||||
case EDIT_BUTTON_PLAY_FROM_START:
|
||||
HandleMainMenuChoice( play_whole_song, NULL );
|
||||
break;
|
||||
case KEY_Cr:
|
||||
{
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_LCTRL)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_RCTRL)) )
|
||||
#endif
|
||||
if( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 )
|
||||
HandleAreaMenuChoice( record, NULL );
|
||||
}
|
||||
|
||||
case EDIT_BUTTON_PLAY_FROM_CURSOR:
|
||||
HandleMainMenuChoice( play_current_beat_to_end, NULL );
|
||||
break;
|
||||
case KEY_INSERT:
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_LCTRL)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_RCTRL)) )
|
||||
HandleAreaMenuChoice( shift_pauses_forward, NULL );
|
||||
else
|
||||
#endif
|
||||
HandleAreaMenuChoice( insert_and_shift, NULL );
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
|
||||
case EDIT_BUTTON_PLAY_SELECTION:
|
||||
if( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 )
|
||||
HandleAreaMenuChoice( play, NULL );
|
||||
else
|
||||
HandleMainMenuChoice( play_current_beat_to_end, NULL );
|
||||
break;
|
||||
case KEY_DEL:
|
||||
#if !defined(XBOX)
|
||||
if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_LCTRL)) ||
|
||||
INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD,KEY_RCTRL)) )
|
||||
HandleAreaMenuChoice( shift_pauses_backward, NULL );
|
||||
else
|
||||
#endif
|
||||
HandleAreaMenuChoice( delete_and_shift, NULL );
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
case EDIT_BUTTON_RECORD:
|
||||
if( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 )
|
||||
HandleAreaMenuChoice( record, NULL );
|
||||
break;
|
||||
case EDIT_BUTTON_INSERT:
|
||||
HandleAreaMenuChoice( insert_and_shift, NULL );
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
break;
|
||||
|
||||
case EDIT_BUTTON_INSERT_SHIFT_PAUSES:
|
||||
HandleAreaMenuChoice( shift_pauses_forward, NULL );
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
break;
|
||||
|
||||
case EDIT_BUTTON_DELETE:
|
||||
HandleAreaMenuChoice( delete_and_shift, NULL );
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
break;
|
||||
|
||||
case EDIT_BUTTON_DELETE_SHIFT_PAUSES:
|
||||
HandleAreaMenuChoice( shift_pauses_backward, NULL );
|
||||
SCREENMAN->PlayInvalidSound();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||
void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB )
|
||||
{
|
||||
if( DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == KEY_ESC )
|
||||
if( EditB == EDIT_BUTTON_RETURN_TO_EDIT )
|
||||
{
|
||||
TransitionFromRecordToEdit();
|
||||
return;
|
||||
@@ -1398,52 +1439,48 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||
void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB )
|
||||
{
|
||||
if( type != IET_FIRST_PRESS )
|
||||
return;
|
||||
|
||||
if( DeviceI.device == DEVICE_KEYBOARD )
|
||||
switch( EditB )
|
||||
{
|
||||
switch( DeviceI.button )
|
||||
{
|
||||
case KEY_ESC:
|
||||
TransitionToEdit();
|
||||
break;
|
||||
case KEY_F4:
|
||||
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
||||
break;
|
||||
case KEY_F8:
|
||||
{
|
||||
PREFSMAN->m_bAutoPlay = !PREFSMAN->m_bAutoPlay;
|
||||
FOREACH_HumanPlayer( p )
|
||||
GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_bAutoPlay?PC_AUTOPLAY:PC_HUMAN;
|
||||
}
|
||||
break;
|
||||
case KEY_F11:
|
||||
case KEY_F12:
|
||||
{
|
||||
float fOffsetDelta;
|
||||
switch( DeviceI.button )
|
||||
{
|
||||
case KEY_F11: fOffsetDelta = -0.020f; break;
|
||||
case KEY_F12: fOffsetDelta = +0.020f; break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
|
||||
if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) ||
|
||||
INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) )
|
||||
fOffsetDelta /= 20; /* 1ms */
|
||||
else switch( type )
|
||||
{
|
||||
case IET_SLOW_REPEAT: fOffsetDelta *= 10; break;
|
||||
case IET_FAST_REPEAT: fOffsetDelta *= 40; break;
|
||||
}
|
||||
|
||||
m_pSong->m_Timing.m_fBeat0OffsetInSeconds += fOffsetDelta;
|
||||
}
|
||||
case EDIT_BUTTON_RETURN_TO_EDIT:
|
||||
TransitionToEdit();
|
||||
break;
|
||||
case EDIT_BUTTON_TOGGLE_ASSIST_TICK:
|
||||
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
||||
break;
|
||||
case EDIT_BUTTON_TOGGLE_AUTOPLAY:
|
||||
{
|
||||
PREFSMAN->m_bAutoPlay = !PREFSMAN->m_bAutoPlay;
|
||||
FOREACH_HumanPlayer( p )
|
||||
GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_bAutoPlay?PC_AUTOPLAY:PC_HUMAN;
|
||||
}
|
||||
break;
|
||||
case EDIT_BUTTON_OFFSET_UP:
|
||||
case EDIT_BUTTON_OFFSET_DOWN:
|
||||
{
|
||||
float fOffsetDelta;
|
||||
switch( EditB )
|
||||
{
|
||||
case EDIT_BUTTON_OFFSET_DOWN: fOffsetDelta = -0.020f; break;
|
||||
case EDIT_BUTTON_OFFSET_UP: fOffsetDelta = +0.020f; break;
|
||||
default: ASSERT(0); return;
|
||||
}
|
||||
|
||||
if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) )
|
||||
fOffsetDelta /= 20; /* 1ms */
|
||||
else switch( type )
|
||||
{
|
||||
case IET_SLOW_REPEAT: fOffsetDelta *= 10; break;
|
||||
case IET_FAST_REPEAT: fOffsetDelta *= 40; break;
|
||||
}
|
||||
|
||||
m_pSong->m_Timing.m_fBeat0OffsetInSeconds += fOffsetDelta;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch( StyleI.player )
|
||||
@@ -1460,6 +1497,9 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
|
||||
/* Switch to editing. */
|
||||
void ScreenEdit::TransitionToEdit()
|
||||
{
|
||||
g_pCurrentMap = &g_EditMappings;
|
||||
|
||||
|
||||
/* Important: people will stop playing, change the BG and start again; make sure we reload */
|
||||
m_Background.Unload();
|
||||
m_Foreground.Unload();
|
||||
@@ -2126,6 +2166,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
SOUND->PlayMusic("");
|
||||
|
||||
m_EditMode = MODE_PLAYING;
|
||||
g_pCurrentMap = &g_PlayMappings;
|
||||
GAMESTATE->m_bPastHereWeGo = true;
|
||||
|
||||
/* Reset the note skin, in case preferences have changed. */
|
||||
@@ -2178,6 +2219,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
SOUND->PlayMusic("");
|
||||
|
||||
m_EditMode = MODE_RECORDING;
|
||||
g_pCurrentMap = &g_RecordMappings;
|
||||
GAMESTATE->m_bPastHereWeGo = true;
|
||||
|
||||
/* Reset the note skin, in case preferences have changed. */
|
||||
|
||||
@@ -19,6 +19,86 @@
|
||||
const int NUM_ACTION_MENU_ITEMS = 23;
|
||||
const int NUM_NAMING_MENU_ITEMS = 6;
|
||||
|
||||
enum EditButton
|
||||
{
|
||||
EDIT_BUTTON_COLUMN_0,
|
||||
EDIT_BUTTON_COLUMN_1,
|
||||
EDIT_BUTTON_COLUMN_2,
|
||||
EDIT_BUTTON_COLUMN_3,
|
||||
EDIT_BUTTON_COLUMN_4,
|
||||
EDIT_BUTTON_COLUMN_5,
|
||||
EDIT_BUTTON_COLUMN_6,
|
||||
EDIT_BUTTON_COLUMN_7,
|
||||
EDIT_BUTTON_COLUMN_8,
|
||||
EDIT_BUTTON_COLUMN_9,
|
||||
|
||||
/* These are modifiers to EDIT_BUTTON_COLUMN_*. */
|
||||
EDIT_BUTTON_RIGHT_SIDE,
|
||||
EDIT_BUTTON_LAY_MINE,
|
||||
EDIT_BUTTON_LAY_ATTACK,
|
||||
|
||||
EDIT_BUTTON_SCROLL_UP_LINE,
|
||||
EDIT_BUTTON_SCROLL_UP_PAGE,
|
||||
EDIT_BUTTON_SCROLL_DOWN_LINE,
|
||||
EDIT_BUTTON_SCROLL_DOWN_PAGE,
|
||||
EDIT_BUTTON_SCROLL_HOME,
|
||||
EDIT_BUTTON_SCROLL_END,
|
||||
|
||||
/* These are modifiers to EDIT_BUTTON_SCROLL_*. */
|
||||
EDIT_BUTTON_SCROLL_SELECT,
|
||||
|
||||
EDIT_BUTTON_LAY_SELECT,
|
||||
|
||||
EDIT_BUTTON_SCROLL_SPEED_UP,
|
||||
EDIT_BUTTON_SCROLL_SPEED_DOWN,
|
||||
|
||||
EDIT_BUTTON_SNAP_NEXT,
|
||||
EDIT_BUTTON_SNAP_PREV,
|
||||
|
||||
EDIT_BUTTON_OPEN_EDIT_MENU,
|
||||
EDIT_BUTTON_OPEN_AREA_MENU,
|
||||
EDIT_BUTTON_OPEN_BGA_MENU,
|
||||
EDIT_BUTTON_OPEN_COURSE_MENU,
|
||||
EDIT_BUTTON_OPEN_INPUT_HELP,
|
||||
|
||||
EDIT_BUTTON_PLAY_FROM_START,
|
||||
EDIT_BUTTON_PLAY_FROM_CURSOR,
|
||||
EDIT_BUTTON_PLAY_SELECTION,
|
||||
EDIT_BUTTON_RECORD,
|
||||
|
||||
EDIT_BUTTON_RETURN_TO_EDIT,
|
||||
|
||||
EDIT_BUTTON_INSERT,
|
||||
EDIT_BUTTON_DELETE,
|
||||
EDIT_BUTTON_INSERT_SHIFT_PAUSES,
|
||||
EDIT_BUTTON_DELETE_SHIFT_PAUSES,
|
||||
|
||||
EDIT_BUTTON_OPEN_NEXT_STEPS,
|
||||
EDIT_BUTTON_OPEN_PREV_STEPS,
|
||||
EDIT_BUTTON_TOGGLE_ASSIST_TICK,
|
||||
EDIT_BUTTON_TOGGLE_AUTOPLAY,
|
||||
EDIT_BUTTON_PLAY_SAMPLE_MUSIC,
|
||||
|
||||
EDIT_BUTTON_BPM_UP,
|
||||
EDIT_BUTTON_BPM_DOWN,
|
||||
EDIT_BUTTON_STOP_UP,
|
||||
EDIT_BUTTON_STOP_DOWN,
|
||||
EDIT_BUTTON_OFFSET_UP,
|
||||
EDIT_BUTTON_OFFSET_DOWN,
|
||||
EDIT_BUTTON_SAMPLE_START_UP,
|
||||
EDIT_BUTTON_SAMPLE_START_DOWN,
|
||||
EDIT_BUTTON_SAMPLE_LENGTH_UP,
|
||||
EDIT_BUTTON_SAMPLE_LENGTH_DOWN,
|
||||
|
||||
/* This modifies offset, BPM, and stop segment changes. */
|
||||
EDIT_BUTTON_ADJUST_FINE,
|
||||
|
||||
NUM_EDIT_BUTTONS, // leave this at the end
|
||||
EDIT_BUTTON_INVALID
|
||||
};
|
||||
#define FOREACH_EditButton( e ) FOREACH_ENUM( EditButton, NUM_EDIT_BUTTONS, e )
|
||||
#define NUM_EDIT_TO_DEVICE_SLOTS 2
|
||||
|
||||
|
||||
class ScreenEdit : public Screen
|
||||
{
|
||||
@@ -28,9 +108,9 @@ public:
|
||||
virtual void Update( float fDeltaTime );
|
||||
virtual void DrawPrimitives();
|
||||
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||
void InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB );
|
||||
void InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB );
|
||||
void InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB );
|
||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user