Make wheel items regular children (no special update/drawing);
remove "staggered tween" hack and set the offset in the context so this can be done in commands; fix sections; do OnCommand/OffCommand normally and rename TweenOn/OffScreen to TweenOn/OffScreenForSort; other fixes/cleanups (metric updates to come in a bit)
This commit is contained in:
@@ -75,6 +75,22 @@ WheelItemBase *MusicWheel::MakeItem()
|
|||||||
|
|
||||||
void MusicWheel::Load( RString sType )
|
void MusicWheel::Load( RString sType )
|
||||||
{
|
{
|
||||||
|
ROULETTE_SWITCH_SECONDS .Load(sType,"RouletteSwitchSeconds");
|
||||||
|
ROULETTE_SLOW_DOWN_SWITCHES .Load(sType,"RouletteSlowDownSwitches");
|
||||||
|
NUM_SECTION_COLORS .Load(sType,"NumSectionColors");
|
||||||
|
SONG_REAL_EXTRA_COLOR .Load(sType,"SongRealExtraColor");
|
||||||
|
SORT_MENU_COLOR .Load(sType,"SortMenuColor");
|
||||||
|
SHOW_ROULETTE .Load(sType,"ShowRoulette");
|
||||||
|
SHOW_RANDOM .Load(sType,"ShowRandom");
|
||||||
|
SHOW_PORTAL .Load(sType,"ShowPortal");
|
||||||
|
RANDOM_PICKS_LOCKED_SONGS .Load(sType,"RandomPicksLockedSongs");
|
||||||
|
MOST_PLAYED_SONGS_TO_SHOW .Load(sType,"MostPlayedSongsToShow");
|
||||||
|
MODE_MENU_CHOICE_NAMES .Load(sType,"ModeMenuChoiceNames");
|
||||||
|
vector<RString> vsModeChoiceNames;
|
||||||
|
split( MODE_MENU_CHOICE_NAMES, ",", vsModeChoiceNames );
|
||||||
|
CHOICE .Load(sType,CHOICE_NAME,vsModeChoiceNames);
|
||||||
|
SECTION_COLORS .Load(sType,SECTION_COLORS_NAME,NUM_SECTION_COLORS);
|
||||||
|
|
||||||
WheelBase::Load( sType );
|
WheelBase::Load( sType );
|
||||||
|
|
||||||
SONGMAN->UpdateRankingCourses();
|
SONGMAN->UpdateRankingCourses();
|
||||||
@@ -153,27 +169,6 @@ void MusicWheel::BeginScreen()
|
|||||||
RebuildWheelItems();
|
RebuildWheelItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MusicWheel::LoadFromMetrics( RString sType )
|
|
||||||
{
|
|
||||||
WheelBase::LoadFromMetrics(sType);
|
|
||||||
|
|
||||||
ROULETTE_SWITCH_SECONDS .Load(sType,"RouletteSwitchSeconds");
|
|
||||||
ROULETTE_SLOW_DOWN_SWITCHES .Load(sType,"RouletteSlowDownSwitches");
|
|
||||||
NUM_SECTION_COLORS .Load(sType,"NumSectionColors");
|
|
||||||
SONG_REAL_EXTRA_COLOR .Load(sType,"SongRealExtraColor");
|
|
||||||
SORT_MENU_COLOR .Load(sType,"SortMenuColor");
|
|
||||||
SHOW_ROULETTE .Load(sType,"ShowRoulette");
|
|
||||||
SHOW_RANDOM .Load(sType,"ShowRandom");
|
|
||||||
SHOW_PORTAL .Load(sType,"ShowPortal");
|
|
||||||
RANDOM_PICKS_LOCKED_SONGS .Load(sType,"RandomPicksLockedSongs");
|
|
||||||
MOST_PLAYED_SONGS_TO_SHOW .Load(sType,"MostPlayedSongsToShow");
|
|
||||||
MODE_MENU_CHOICE_NAMES .Load(sType,"ModeMenuChoiceNames");
|
|
||||||
vector<RString> vsModeChoiceNames;
|
|
||||||
split( MODE_MENU_CHOICE_NAMES, ",", vsModeChoiceNames );
|
|
||||||
CHOICE .Load(sType,CHOICE_NAME,vsModeChoiceNames);
|
|
||||||
SECTION_COLORS .Load(sType,SECTION_COLORS_NAME,NUM_SECTION_COLORS);
|
|
||||||
}
|
|
||||||
|
|
||||||
MusicWheel::~MusicWheel()
|
MusicWheel::~MusicWheel()
|
||||||
{
|
{
|
||||||
FOREACH_SortOrder( so )
|
FOREACH_SortOrder( so )
|
||||||
@@ -752,7 +747,7 @@ void MusicWheel::UpdateSwitch()
|
|||||||
|
|
||||||
SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 );
|
SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 );
|
||||||
RebuildWheelItems();
|
RebuildWheelItems();
|
||||||
TweenOnScreen(true);
|
TweenOnScreenForSort();
|
||||||
m_WheelState = STATE_FLYING_ON_AFTER_NEXT_SORT;
|
m_WheelState = STATE_FLYING_ON_AFTER_NEXT_SORT;
|
||||||
|
|
||||||
SCREENMAN->ZeroNextUpdate();
|
SCREENMAN->ZeroNextUpdate();
|
||||||
@@ -862,7 +857,7 @@ bool MusicWheel::ChangeSort( SortOrder new_so ) // return true if change success
|
|||||||
|
|
||||||
m_soundChangeSort.Play();
|
m_soundChangeSort.Play();
|
||||||
|
|
||||||
TweenOffScreen(true);
|
TweenOffScreenForSort();
|
||||||
|
|
||||||
/* Save the new preference. */
|
/* Save the new preference. */
|
||||||
if( IsSongSort(new_so) )
|
if( IsSongSort(new_so) )
|
||||||
@@ -904,8 +899,6 @@ bool MusicWheel::Select() // return true if this selection ends the screen
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Moving = 0;
|
|
||||||
|
|
||||||
if( m_WheelState == STATE_ROULETTE_SPINNING )
|
if( m_WheelState == STATE_ROULETTE_SPINNING )
|
||||||
{
|
{
|
||||||
m_WheelState = STATE_ROULETTE_SLOWING_DOWN;
|
m_WheelState = STATE_ROULETTE_SLOWING_DOWN;
|
||||||
@@ -925,6 +918,9 @@ bool MusicWheel::Select() // return true if this selection ends the screen
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !WheelBase::Select() )
|
||||||
|
return false;
|
||||||
|
|
||||||
switch( m_CurWheelItemData[m_iSelection]->m_Type )
|
switch( m_CurWheelItemData[m_iSelection]->m_Type )
|
||||||
{
|
{
|
||||||
case TYPE_ROULETTE:
|
case TYPE_ROULETTE:
|
||||||
@@ -946,7 +942,7 @@ bool MusicWheel::Select() // return true if this selection ends the screen
|
|||||||
m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_Action.m_sName;
|
m_sLastModeMenuItem = GetCurWheelItemData(m_iSelection)->m_Action.m_sName;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return WheelBase::Select();
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -993,6 +989,7 @@ void MusicWheel::StartRandom()
|
|||||||
|
|
||||||
void MusicWheel::SetOpenGroup( RString group )
|
void MusicWheel::SetOpenGroup( RString group )
|
||||||
{
|
{
|
||||||
|
LOG->Trace( "SetOpenGroup %s", group.c_str() );
|
||||||
m_sExpandedSectionName = group;
|
m_sExpandedSectionName = group;
|
||||||
|
|
||||||
const WheelItemData *old = NULL;
|
const WheelItemData *old = NULL;
|
||||||
|
|||||||
+82
-167
@@ -31,8 +31,9 @@ WheelBase::~WheelBase()
|
|||||||
void WheelBase::Load( RString sType )
|
void WheelBase::Load( RString sType )
|
||||||
{
|
{
|
||||||
LOG->Trace( "WheelBase::Load('%s')", sType.c_str() );
|
LOG->Trace( "WheelBase::Load('%s')", sType.c_str() );
|
||||||
|
ASSERT( this->GetNumChildren() == 0 ); // only load once
|
||||||
|
|
||||||
m_bEmpty = true;
|
m_bEmpty = false;
|
||||||
m_LastSelection = NULL;
|
m_LastSelection = NULL;
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
m_fTimeLeftInState = 0;
|
m_fTimeLeftInState = 0;
|
||||||
@@ -40,29 +41,8 @@ void WheelBase::Load( RString sType )
|
|||||||
m_iSwitchesLeftInSpinDown = 0;
|
m_iSwitchesLeftInSpinDown = 0;
|
||||||
m_Moving = 0;
|
m_Moving = 0;
|
||||||
|
|
||||||
LoadFromMetrics( sType );
|
|
||||||
|
|
||||||
FOREACH( WheelItemBase*, m_WheelBaseItems, i )
|
|
||||||
SAFE_DELETE( *i );
|
|
||||||
m_WheelBaseItems.clear();
|
|
||||||
WheelItemBase *pTempl = MakeItem();
|
|
||||||
for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
|
|
||||||
{
|
|
||||||
m_WheelBaseItems.push_back( (WheelItemBase *) pTempl->Copy() ); // XXX: ugly cast
|
|
||||||
}
|
|
||||||
SAFE_DELETE( pTempl );
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::BeginScreen()
|
|
||||||
{
|
|
||||||
m_WheelState = STATE_SELECTING;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::LoadFromMetrics( RString sType )
|
|
||||||
{
|
|
||||||
SWITCH_SECONDS .Load(sType,"SwitchSeconds");
|
SWITCH_SECONDS .Load(sType,"SwitchSeconds");
|
||||||
LOCKED_INITIAL_VELOCITY .Load(sType,"LockedInitialVelocity");
|
LOCKED_INITIAL_VELOCITY .Load(sType,"LockedInitialVelocity");
|
||||||
SCROLL_BAR_X .Load(sType,"ScrollBarX");
|
|
||||||
SCROLL_BAR_HEIGHT .Load(sType,"ScrollBarHeight");
|
SCROLL_BAR_HEIGHT .Load(sType,"ScrollBarHeight");
|
||||||
ITEM_CURVE_X .Load(sType,"ItemCurveX");
|
ITEM_CURVE_X .Load(sType,"ItemCurveX");
|
||||||
USE_LINEAR_WHEEL .Load(sType,"NoCurving");
|
USE_LINEAR_WHEEL .Load(sType,"NoCurving");
|
||||||
@@ -71,21 +51,58 @@ void WheelBase::LoadFromMetrics( RString sType )
|
|||||||
CIRCLE_PERCENT .Load(sType,"CirclePercent");
|
CIRCLE_PERCENT .Load(sType,"CirclePercent");
|
||||||
USE_3D .Load(sType,"Use3D");
|
USE_3D .Load(sType,"Use3D");
|
||||||
NUM_WHEEL_ITEMS_TO_DRAW .Load(sType,"NumWheelItems");
|
NUM_WHEEL_ITEMS_TO_DRAW .Load(sType,"NumWheelItems");
|
||||||
WHEEL_ITEM_ON_DELAY_OFFSET .Load(sType,"WheelItemOnDelayOffset");
|
|
||||||
WHEEL_ITEM_OFF_DELAY_OFFSET .Load(sType,"WheelItemOffDelayOffset");
|
|
||||||
WHEEL_ITEM_LOCKED_COLOR .Load(sType,"WheelItemLockedColor");
|
WHEEL_ITEM_LOCKED_COLOR .Load(sType,"WheelItemLockedColor");
|
||||||
|
|
||||||
m_soundChangeMusic.Load( THEME->GetPathS(sType,"change"), true );
|
m_soundChangeMusic.Load( THEME->GetPathS(sType,"change"), true );
|
||||||
m_soundLocked.Load( THEME->GetPathS(sType,"locked"), true );
|
m_soundLocked.Load( THEME->GetPathS(sType,"locked"), true );
|
||||||
|
|
||||||
|
WheelItemBase *pTempl = MakeItem();
|
||||||
|
ActorUtil::LoadAllCommands( *pTempl, m_sName );
|
||||||
|
for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
|
||||||
|
m_WheelBaseItems.push_back( (WheelItemBase *) pTempl->Copy() ); // XXX: ugly cast
|
||||||
|
SAFE_DELETE( pTempl );
|
||||||
|
|
||||||
|
// draw outside->inside
|
||||||
|
for( int i=0; i<NUM_WHEEL_ITEMS/2; i++ )
|
||||||
|
this->AddChild( m_WheelBaseItems[i] );
|
||||||
|
for( int i=NUM_WHEEL_ITEMS-1; i>=NUM_WHEEL_ITEMS/2; i-- )
|
||||||
|
this->AddChild( m_WheelBaseItems[i] );
|
||||||
|
|
||||||
m_sprHighlight.Load( THEME->GetPathG(sType,"highlight") );
|
m_sprHighlight.Load( THEME->GetPathG(sType,"highlight") );
|
||||||
m_sprHighlight->SetName( "Highlight" );
|
m_sprHighlight->SetName( "Highlight" );
|
||||||
this->AddChild( m_sprHighlight );
|
this->AddChild( m_sprHighlight );
|
||||||
ActorUtil::OnCommand( m_sprHighlight, sType );
|
ActorUtil::LoadAllCommands( *m_sprHighlight, m_sName );
|
||||||
|
|
||||||
m_ScrollBar.SetX( SCROLL_BAR_X );
|
|
||||||
m_ScrollBar.SetBarHeight( SCROLL_BAR_HEIGHT );
|
m_ScrollBar.SetBarHeight( SCROLL_BAR_HEIGHT );
|
||||||
this->AddChild( &m_ScrollBar );
|
this->AddChild( &m_ScrollBar );
|
||||||
|
ActorUtil::LoadAllCommands( m_ScrollBar, m_sName );
|
||||||
|
|
||||||
|
{
|
||||||
|
Lua *L = LUA->Get();
|
||||||
|
m_sprHighlight->PushContext(L);
|
||||||
|
lua_pushstring( L, "WheelIndex" );
|
||||||
|
lua_pushnumber( L, NUM_WHEEL_ITEMS/2.0f );
|
||||||
|
lua_settable( L, -3 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
LUA->Release( L );
|
||||||
|
}
|
||||||
|
|
||||||
|
Lua *L = LUA->Get();
|
||||||
|
for( int i=0; i < (int) m_WheelBaseItems.size(); i++ )
|
||||||
|
{
|
||||||
|
m_WheelBaseItems[i]->PushContext(L);
|
||||||
|
lua_pushstring( L, "WheelIndex" );
|
||||||
|
lua_pushnumber( L, i );
|
||||||
|
lua_settable( L, -3 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
LUA->Release( L );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void WheelBase::BeginScreen()
|
||||||
|
{
|
||||||
|
m_WheelState = STATE_SELECTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WheelBase::GetItemPosition( float fPosOffsetsFromMiddle, float& fX_out, float& fY_out, float& fZ_out, float& fRotationX_out )
|
void WheelBase::GetItemPosition( float fPosOffsetsFromMiddle, float& fX_out, float& fY_out, float& fZ_out, float& fRotationX_out )
|
||||||
@@ -134,43 +151,6 @@ void WheelBase::SetItemPosition( Actor &item, float fPosOffsetsFromMiddle )
|
|||||||
item.SetRotationX( fRotationX );
|
item.SetRotationX( fRotationX );
|
||||||
}
|
}
|
||||||
|
|
||||||
void WheelBase::DrawPrimitives()
|
|
||||||
{
|
|
||||||
// draw outside->inside
|
|
||||||
for( int i=0; i<NUM_WHEEL_ITEMS/2; i++ )
|
|
||||||
DrawItem( i );
|
|
||||||
for( int i=NUM_WHEEL_ITEMS-1; i>=NUM_WHEEL_ITEMS/2; i-- )
|
|
||||||
DrawItem( i );
|
|
||||||
|
|
||||||
ActorFrame::DrawPrimitives();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::DrawItem( int i )
|
|
||||||
{
|
|
||||||
const float fThisBannerPositionOffsetFromSelection = i - NUM_WHEEL_ITEMS/2 + m_fPositionOffsetFromSelection;
|
|
||||||
if( fabsf(fThisBannerPositionOffsetFromSelection) > NUM_WHEEL_ITEMS_TO_DRAW/2 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
WheelItemBase *display = m_WheelBaseItems[i];
|
|
||||||
switch( m_WheelState )
|
|
||||||
{
|
|
||||||
case STATE_SELECTING:
|
|
||||||
case STATE_LOCKED:
|
|
||||||
case STATE_ROULETTE_SPINNING:
|
|
||||||
case STATE_ROULETTE_SLOWING_DOWN:
|
|
||||||
case STATE_RANDOM_SPINNING:
|
|
||||||
SetItemPosition( *display, fThisBannerPositionOffsetFromSelection );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( m_WheelState == STATE_LOCKED && i != NUM_WHEEL_ITEMS/2 )
|
|
||||||
display->m_colorLocked = WHEEL_ITEM_LOCKED_COLOR.GetValue();
|
|
||||||
else
|
|
||||||
display->m_colorLocked = RageColor(0,0,0,0);
|
|
||||||
|
|
||||||
display->Draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::UpdateScrollbar()
|
void WheelBase::UpdateScrollbar()
|
||||||
{
|
{
|
||||||
int iTotalNumItems = m_CurWheelItemData.size();
|
int iTotalNumItems = m_CurWheelItemData.size();
|
||||||
@@ -207,7 +187,33 @@ void WheelBase::Update( float fDeltaTime )
|
|||||||
{
|
{
|
||||||
ActorFrame::Update( fDeltaTime );
|
ActorFrame::Update( fDeltaTime );
|
||||||
|
|
||||||
UpdateItems( fDeltaTime );
|
for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
|
||||||
|
{
|
||||||
|
WheelItemBase *pDisplay = m_WheelBaseItems[i];
|
||||||
|
const float fOffsetFromSelection = i - NUM_WHEEL_ITEMS/2 + m_fPositionOffsetFromSelection;
|
||||||
|
if( fabsf(fOffsetFromSelection) > NUM_WHEEL_ITEMS_TO_DRAW/2 )
|
||||||
|
{
|
||||||
|
pDisplay->SetHidden( true );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pDisplay->SetHidden( false );
|
||||||
|
|
||||||
|
switch( m_WheelState )
|
||||||
|
{
|
||||||
|
case STATE_SELECTING:
|
||||||
|
case STATE_LOCKED:
|
||||||
|
case STATE_ROULETTE_SPINNING:
|
||||||
|
case STATE_ROULETTE_SLOWING_DOWN:
|
||||||
|
case STATE_RANDOM_SPINNING:
|
||||||
|
SetItemPosition( *pDisplay, fOffsetFromSelection );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_WheelState == STATE_LOCKED && i != NUM_WHEEL_ITEMS/2 )
|
||||||
|
pDisplay->m_colorLocked = WHEEL_ITEM_LOCKED_COLOR.GetValue();
|
||||||
|
else
|
||||||
|
pDisplay->m_colorLocked = RageColor(0,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
//Moved to CommonUpdateProcedure, seems to work fine
|
//Moved to CommonUpdateProcedure, seems to work fine
|
||||||
//Revert if it happens to break something
|
//Revert if it happens to break something
|
||||||
@@ -303,14 +309,6 @@ void WheelBase::Update( float fDeltaTime )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WheelBase::UpdateItems( float fDeltaTime )
|
|
||||||
{
|
|
||||||
for( unsigned i = 0; i < unsigned(NUM_WHEEL_ITEMS); i++)
|
|
||||||
{
|
|
||||||
m_WheelBaseItems[i]->Update( fDeltaTime );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::UpdateSwitch()
|
void WheelBase::UpdateSwitch()
|
||||||
{
|
{
|
||||||
switch( m_WheelState )
|
switch( m_WheelState )
|
||||||
@@ -351,13 +349,14 @@ bool WheelBase::Select() // return true if this selection can end the screen
|
|||||||
|
|
||||||
m_Moving = 0;
|
m_Moving = 0;
|
||||||
|
|
||||||
if( !m_bEmpty )
|
if( m_bEmpty )
|
||||||
{
|
return false;
|
||||||
|
|
||||||
switch( m_CurWheelItemData[m_iSelection]->m_Type )
|
switch( m_CurWheelItemData[m_iSelection]->m_Type )
|
||||||
{
|
{
|
||||||
case TYPE_GENERIC:
|
case TYPE_GENERIC:
|
||||||
m_LastSelection = m_CurWheelItemData[m_iSelection];
|
m_LastSelection = m_CurWheelItemData[m_iSelection];
|
||||||
return false;
|
break;
|
||||||
case TYPE_SECTION:
|
case TYPE_SECTION:
|
||||||
{
|
{
|
||||||
RString sThisItemSectionName = m_CurWheelItemData[m_iSelection]->m_sText;
|
RString sThisItemSectionName = m_CurWheelItemData[m_iSelection]->m_sText;
|
||||||
@@ -368,13 +367,12 @@ bool WheelBase::Select() // return true if this selection can end the screen
|
|||||||
|
|
||||||
m_soundExpand.Play();
|
m_soundExpand.Play();
|
||||||
}
|
}
|
||||||
return false;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
break;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return true if this selection ends the screen
|
// return true if this selection ends the screen
|
||||||
@@ -391,103 +389,20 @@ int WheelBase::IsMoving() const
|
|||||||
return m_Moving && m_TimeBeforeMovingBegins == 0;
|
return m_Moving && m_TimeBeforeMovingBegins == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WheelBase::TweenOnScreen( bool bChangingSort )
|
void WheelBase::TweenOnScreenForSort()
|
||||||
{
|
{
|
||||||
m_WheelState = STATE_TWEENING_ON_SCREEN;
|
m_WheelState = STATE_TWEENING_ON_SCREEN;
|
||||||
|
|
||||||
SetItemPosition( *m_sprHighlight, 0 );
|
COMMAND( this, "SortOn" );
|
||||||
|
|
||||||
COMMAND( m_sprHighlight, "StartOn");
|
|
||||||
if( bChangingSort )
|
|
||||||
{
|
|
||||||
const float delay = fabsf(NUM_WHEEL_ITEMS/2.0f) * WHEEL_ITEM_ON_DELAY_OFFSET;
|
|
||||||
m_sprHighlight->BeginTweening( delay ); // sleep
|
|
||||||
COMMAND( m_sprHighlight, "FinishOnSort");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
COMMAND( m_sprHighlight, "FinishOn");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_ScrollBar.SetX( SCROLL_BAR_X );
|
|
||||||
m_ScrollBar.AddX( 30 );
|
|
||||||
if( bChangingSort )
|
|
||||||
m_ScrollBar.BeginTweening( 0.2f ); // sleep
|
|
||||||
else
|
|
||||||
m_ScrollBar.BeginTweening( 0.7f ); // sleep
|
|
||||||
m_ScrollBar.BeginTweening( 0.2f , TWEEN_ACCELERATE );
|
|
||||||
m_ScrollBar.AddX( -30 );
|
|
||||||
|
|
||||||
TweenOnScreenUpdateItems( bChangingSort );
|
|
||||||
|
|
||||||
if( bChangingSort )
|
|
||||||
HurryTweening( 0.25f );
|
|
||||||
|
|
||||||
m_fTimeLeftInState = GetTweenTimeLeft() + 0.100f;
|
m_fTimeLeftInState = GetTweenTimeLeft() + 0.100f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WheelBase::TweenOnScreenUpdateItems( bool bChangingSort )
|
void WheelBase::TweenOffScreenForSort()
|
||||||
{
|
|
||||||
for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
|
|
||||||
{
|
|
||||||
WheelItemBase *display = m_WheelBaseItems[i];
|
|
||||||
float fThisBannerPositionOffsetFromSelection = i - NUM_WHEEL_ITEMS/2 + m_fPositionOffsetFromSelection;
|
|
||||||
SetItemPosition( *display, fThisBannerPositionOffsetFromSelection );
|
|
||||||
|
|
||||||
COMMAND( display, "StartOn");
|
|
||||||
const float delay = fabsf((float)i) * WHEEL_ITEM_ON_DELAY_OFFSET;
|
|
||||||
display->BeginTweening( delay ); // sleep
|
|
||||||
COMMAND( display, "FinishOn");
|
|
||||||
if( bChangingSort )
|
|
||||||
display->HurryTweening( 0.25f );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::TweenOffScreenUpdateItems( bool bChangingSort )
|
|
||||||
{
|
|
||||||
for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
|
|
||||||
{
|
|
||||||
WheelItemBase *display = m_WheelBaseItems[i];
|
|
||||||
float fThisBannerPositionOffsetFromSelection = i - NUM_WHEEL_ITEMS/2 + m_fPositionOffsetFromSelection;
|
|
||||||
SetItemPosition( *display, fThisBannerPositionOffsetFromSelection );
|
|
||||||
|
|
||||||
COMMAND( display, "StartOff");
|
|
||||||
const float delay = fabsf((float)i) * WHEEL_ITEM_OFF_DELAY_OFFSET;
|
|
||||||
display->BeginTweening( delay ); // sleep
|
|
||||||
COMMAND( display, "FinishOff");
|
|
||||||
if( bChangingSort )
|
|
||||||
display->HurryTweening( 0.25f );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void WheelBase::TweenOffScreen( bool bChangingSort )
|
|
||||||
{
|
{
|
||||||
m_WheelState = STATE_TWEENING_OFF_SCREEN;
|
m_WheelState = STATE_TWEENING_OFF_SCREEN;
|
||||||
|
|
||||||
SetItemPosition( *m_sprHighlight, 0 );
|
COMMAND( this, "SortOff" );
|
||||||
|
|
||||||
COMMAND( m_sprHighlight, "StartOff");
|
|
||||||
if( bChangingSort )
|
|
||||||
{
|
|
||||||
/* When changing sort, tween the overlay with the item in the center;
|
|
||||||
* having it separate looks messy when we're moving fast. */
|
|
||||||
const float delay = fabsf(NUM_WHEEL_ITEMS/2.0f) * WHEEL_ITEM_ON_DELAY_OFFSET;
|
|
||||||
m_sprHighlight->BeginTweening( delay ); // sleep
|
|
||||||
COMMAND( m_sprHighlight, "FinishOffSort");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
COMMAND( m_sprHighlight, "FinishOff");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_ScrollBar.BeginTweening( 0 );
|
|
||||||
m_ScrollBar.BeginTweening( 0.2f, TWEEN_ACCELERATE );
|
|
||||||
m_ScrollBar.SetX( SCROLL_BAR_X+30 );
|
|
||||||
|
|
||||||
TweenOffScreenUpdateItems( bChangingSort );
|
|
||||||
|
|
||||||
if( bChangingSort )
|
|
||||||
HurryTweening( 0.25f );
|
|
||||||
|
|
||||||
m_fTimeLeftInState = GetTweenTimeLeft() + 0.100f;
|
m_fTimeLeftInState = GetTweenTimeLeft() + 0.100f;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,13 +23,6 @@ public:
|
|||||||
void BeginScreen();
|
void BeginScreen();
|
||||||
|
|
||||||
virtual void Update( float fDeltaTime );
|
virtual void Update( float fDeltaTime );
|
||||||
virtual void DrawPrimitives();
|
|
||||||
void DrawItem( int i );
|
|
||||||
|
|
||||||
void TweenOnScreen(bool changing_sort);
|
|
||||||
void TweenOffScreen(bool changing_sort);
|
|
||||||
void TweenOnScreen() { TweenOnScreen(false); }
|
|
||||||
void TweenOffScreen() { TweenOffScreen(false); }
|
|
||||||
|
|
||||||
virtual void Move(int n);
|
virtual void Move(int n);
|
||||||
void ChangeMusicUnlessLocked( int n ); /* +1 or -1 */
|
void ChangeMusicUnlessLocked( int n ); /* +1 or -1 */
|
||||||
@@ -43,7 +36,7 @@ public:
|
|||||||
void GetItemPosition( float fPosOffsetsFromMiddle, float& fX_out, float& fY_out, float& fZ_out, float& fRotationX_out );
|
void GetItemPosition( float fPosOffsetsFromMiddle, float& fX_out, float& fY_out, float& fZ_out, float& fRotationX_out );
|
||||||
void SetItemPosition( Actor &item, float fPosOffsetsFromMiddle );
|
void SetItemPosition( Actor &item, float fPosOffsetsFromMiddle );
|
||||||
|
|
||||||
virtual bool Select(); // return true if this selection ends the screen
|
virtual bool Select(); // return true if this selection can end the screen
|
||||||
|
|
||||||
bool WheelIsLocked() { return (m_WheelState == STATE_LOCKED ? true : false); }
|
bool WheelIsLocked() { return (m_WheelState == STATE_LOCKED ? true : false); }
|
||||||
void RebuildWheelItems( int dist = INT_MAX ); // INT_MAX = refresh all
|
void RebuildWheelItems( int dist = INT_MAX ); // INT_MAX = refresh all
|
||||||
@@ -54,12 +47,11 @@ public:
|
|||||||
WheelItemBaseData* LastSelected();
|
WheelItemBaseData* LastSelected();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void TweenOnScreenForSort();
|
||||||
|
void TweenOffScreenForSort();
|
||||||
|
|
||||||
virtual WheelItemBase *MakeItem() = 0;
|
virtual WheelItemBase *MakeItem() = 0;
|
||||||
virtual void LoadFromMetrics( RString sType );
|
|
||||||
virtual void UpdateSwitch();
|
virtual void UpdateSwitch();
|
||||||
void UpdateItems(float fDeltaTime);
|
|
||||||
void TweenOnScreenUpdateItems(bool changing_sort);
|
|
||||||
void TweenOffScreenUpdateItems(bool changing_sort);
|
|
||||||
virtual bool MoveSpecific(int n);
|
virtual bool MoveSpecific(int n);
|
||||||
|
|
||||||
int FirstVisibleIndex();
|
int FirstVisibleIndex();
|
||||||
@@ -108,7 +100,6 @@ protected:
|
|||||||
|
|
||||||
ThemeMetric<float> SWITCH_SECONDS;
|
ThemeMetric<float> SWITCH_SECONDS;
|
||||||
ThemeMetric<float> LOCKED_INITIAL_VELOCITY;
|
ThemeMetric<float> LOCKED_INITIAL_VELOCITY;
|
||||||
ThemeMetric<float> SCROLL_BAR_X;
|
|
||||||
ThemeMetric<int> SCROLL_BAR_HEIGHT;
|
ThemeMetric<int> SCROLL_BAR_HEIGHT;
|
||||||
ThemeMetric<float> ITEM_CURVE_X;
|
ThemeMetric<float> ITEM_CURVE_X;
|
||||||
ThemeMetric<bool> USE_LINEAR_WHEEL;
|
ThemeMetric<bool> USE_LINEAR_WHEEL;
|
||||||
@@ -117,8 +108,6 @@ protected:
|
|||||||
ThemeMetric<float> CIRCLE_PERCENT;
|
ThemeMetric<float> CIRCLE_PERCENT;
|
||||||
ThemeMetric<bool> USE_3D;
|
ThemeMetric<bool> USE_3D;
|
||||||
ThemeMetric<float> NUM_WHEEL_ITEMS_TO_DRAW;
|
ThemeMetric<float> NUM_WHEEL_ITEMS_TO_DRAW;
|
||||||
ThemeMetric<float> WHEEL_ITEM_ON_DELAY_OFFSET;
|
|
||||||
ThemeMetric<float> WHEEL_ITEM_OFF_DELAY_OFFSET;
|
|
||||||
ThemeMetric<RageColor> WHEEL_ITEM_LOCKED_COLOR;
|
ThemeMetric<RageColor> WHEEL_ITEM_LOCKED_COLOR;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user