update, fix, simplify ...

This commit is contained in:
Glenn Maynard
2006-08-10 17:42:28 +00:00
parent 3226434976
commit 3d85b7a02b
3 changed files with 48 additions and 88 deletions
+7 -21
View File
@@ -136,6 +136,13 @@ void MusicWheel::BeginScreen()
{ {
WheelBase::BeginScreen(); WheelBase::BeginScreen();
if( (GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage) || GAMESTATE->IsExtraStage2() )
{
m_WheelState = STATE_LOCKED;
SCREENMAN->PlayStartSound();
m_fLockedWheelVelocity = 0;
}
GAMESTATE->m_SortOrder.Set( GAMESTATE->m_PreferredSortOrder ); GAMESTATE->m_SortOrder.Set( GAMESTATE->m_PreferredSortOrder );
/* Never start in the mode menu; some elements may not initialize correctly. */ /* Never start in the mode menu; some elements may not initialize correctly. */
@@ -748,7 +755,6 @@ void MusicWheel::UpdateSwitch()
SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 ); SCREENMAN->PostMessageToTopScreen( SM_SongChanged, 0 );
RebuildWheelItems(); RebuildWheelItems();
TweenOnScreenForSort(); TweenOnScreenForSort();
m_WheelState = STATE_FLYING_ON_AFTER_NEXT_SORT;
SCREENMAN->ZeroNextUpdate(); SCREENMAN->ZeroNextUpdate();
} }
@@ -758,31 +764,12 @@ void MusicWheel::UpdateSwitch()
m_WheelState = STATE_SELECTING; // now, wait for input m_WheelState = STATE_SELECTING; // now, wait for input
break; break;
case STATE_TWEENING_ON_SCREEN:
m_fTimeLeftInState = 0;
if( (GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage) || GAMESTATE->IsExtraStage2() )
{
m_WheelState = STATE_LOCKED;
SCREENMAN->PlayStartSound();
m_fLockedWheelVelocity = 0;
}
else
{
m_WheelState = STATE_SELECTING;
}
break;
case STATE_TWEENING_OFF_SCREEN:
m_WheelState = STATE_WAITING_OFF_SCREEN;
m_fTimeLeftInState = 0;
break;
case STATE_SELECTING: case STATE_SELECTING:
m_fTimeLeftInState = 0; m_fTimeLeftInState = 0;
break; break;
case STATE_ROULETTE_SPINNING: case STATE_ROULETTE_SPINNING:
case STATE_RANDOM_SPINNING: case STATE_RANDOM_SPINNING:
break; break;
case STATE_WAITING_OFF_SCREEN:
break;
case STATE_LOCKED: case STATE_LOCKED:
break; break;
case STATE_ROULETTE_SLOWING_DOWN: case STATE_ROULETTE_SLOWING_DOWN:
@@ -864,7 +851,6 @@ bool MusicWheel::ChangeSort( SortOrder new_so ) // return true if change success
GAMESTATE->m_PreferredSortOrder = new_so; GAMESTATE->m_PreferredSortOrder = new_so;
GAMESTATE->m_SortOrder.Set( new_so ); GAMESTATE->m_SortOrder.Set( new_so );
m_WheelState = STATE_FLYING_OFF_BEFORE_NEXT_SORT;
return true; return true;
} }
+40 -64
View File
@@ -73,31 +73,12 @@ void WheelBase::Load( RString sType )
this->AddChild( m_sprHighlight ); this->AddChild( m_sprHighlight );
ActorUtil::LoadAllCommands( *m_sprHighlight, m_sName ); ActorUtil::LoadAllCommands( *m_sprHighlight, m_sName );
m_ScrollBar.SetName( "ScrollBar" );
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 ); ActorUtil::LoadAllCommands( m_ScrollBar, m_sName );
{ SetPositions();
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() void WheelBase::BeginScreen()
@@ -182,33 +163,32 @@ bool WheelBase::IsSettled() const
return true; return true;
} }
void WheelBase::SetPositions()
void WheelBase::Update( float fDeltaTime )
{ {
ActorFrame::Update( fDeltaTime );
for( int i=0; i<NUM_WHEEL_ITEMS; i++ ) for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
{ {
WheelItemBase *pDisplay = m_WheelBaseItems[i]; WheelItemBase *pDisplay = m_WheelBaseItems[i];
const float fOffsetFromSelection = i - NUM_WHEEL_ITEMS/2 + m_fPositionOffsetFromSelection; const float fOffsetFromSelection = i - NUM_WHEEL_ITEMS/2 + m_fPositionOffsetFromSelection;
if( fabsf(fOffsetFromSelection) > NUM_WHEEL_ITEMS_TO_DRAW/2 ) if( fabsf(fOffsetFromSelection) > NUM_WHEEL_ITEMS_TO_DRAW/2 )
{
pDisplay->SetHidden( true ); pDisplay->SetHidden( true );
continue; else
} pDisplay->SetHidden( false );
pDisplay->SetHidden( false );
switch( m_WheelState ) SetItemPosition( *pDisplay, fOffsetFromSelection );
{ }
case STATE_SELECTING: }
case STATE_LOCKED:
case STATE_ROULETTE_SPINNING:
case STATE_ROULETTE_SLOWING_DOWN:
case STATE_RANDOM_SPINNING:
SetItemPosition( *pDisplay, fOffsetFromSelection );
break;
}
void WheelBase::Update( float fDeltaTime )
{
ActorFrame::Update( fDeltaTime );
/* If tweens aren't controlling the position of the wheel, set positions. */
if( !GetTweenTimeLeft() )
SetPositions();
for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
{
WheelItemBase *pDisplay = m_WheelBaseItems[i];
if( m_WheelState == STATE_LOCKED && i != NUM_WHEEL_ITEMS/2 ) if( m_WheelState == STATE_LOCKED && i != NUM_WHEEL_ITEMS/2 )
pDisplay->m_colorLocked = WHEEL_ITEM_LOCKED_COLOR.GetValue(); pDisplay->m_colorLocked = WHEEL_ITEM_LOCKED_COLOR.GetValue();
else else
@@ -228,9 +208,7 @@ void WheelBase::Update( float fDeltaTime )
// update wheel state // update wheel state
m_fTimeLeftInState -= fDeltaTime; m_fTimeLeftInState -= fDeltaTime;
if( m_fTimeLeftInState <= 0 ) // time to go to a new state if( m_fTimeLeftInState <= 0 ) // time to go to a new state
{
UpdateSwitch(); UpdateSwitch();
}
if( m_WheelState == STATE_LOCKED ) if( m_WheelState == STATE_LOCKED )
{ {
@@ -313,28 +291,9 @@ void WheelBase::UpdateSwitch()
{ {
switch( m_WheelState ) switch( m_WheelState )
{ {
case STATE_TWEENING_ON_SCREEN:
m_fTimeLeftInState = 0;
if( (GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage) || GAMESTATE->IsExtraStage2() )
{
m_WheelState = STATE_LOCKED;
SCREENMAN->PlayStartSound();
m_fLockedWheelVelocity = 0;
}
else
{
m_WheelState = STATE_SELECTING;
}
break;
case STATE_TWEENING_OFF_SCREEN:
m_WheelState = STATE_WAITING_OFF_SCREEN;
m_fTimeLeftInState = 0;
break;
case STATE_SELECTING: case STATE_SELECTING:
m_fTimeLeftInState = 0; m_fTimeLeftInState = 0;
break; break;
case STATE_WAITING_OFF_SCREEN:
break;
case STATE_LOCKED: case STATE_LOCKED:
break; break;
default: default:
@@ -391,20 +350,26 @@ int WheelBase::IsMoving() const
void WheelBase::TweenOnScreenForSort() void WheelBase::TweenOnScreenForSort()
{ {
m_WheelState = STATE_TWEENING_ON_SCREEN; m_fPositionOffsetFromSelection = 0;
/* Before we send SortOn, position items back to their destinations, so commands
* can use this as a reference point. */
SetPositions();
m_WheelState = STATE_FLYING_ON_AFTER_NEXT_SORT;
COMMAND( this, "SortOn" ); COMMAND( this, "SortOn" );
m_fTimeLeftInState = GetTweenTimeLeft() + 0.100f; m_fTimeLeftInState = GetTweenTimeLeft();
} }
void WheelBase::TweenOffScreenForSort() void WheelBase::TweenOffScreenForSort()
{ {
m_WheelState = STATE_TWEENING_OFF_SCREEN; m_WheelState = STATE_FLYING_OFF_BEFORE_NEXT_SORT;
COMMAND( this, "SortOff" ); COMMAND( this, "SortOff" );
m_fTimeLeftInState = GetTweenTimeLeft() + 0.100f; m_fTimeLeftInState = GetTweenTimeLeft();
} }
void WheelBase::ChangeMusicUnlessLocked( int n ) void WheelBase::ChangeMusicUnlessLocked( int n )
@@ -533,6 +498,17 @@ void WheelBase::RebuildWheelItems( int iDist )
iLast = -iDist-1; iLast = -iDist-1;
} }
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 );
for( int i=iFirst; i <= iLast; i++ ) for( int i=iFirst; i <= iLast; i++ )
{ {
int iIndex = iFirstVisibleIndex + i; int iIndex = iFirstVisibleIndex + i;
+1 -3
View File
@@ -53,6 +53,7 @@ protected:
virtual WheelItemBase *MakeItem() = 0; virtual WheelItemBase *MakeItem() = 0;
virtual void UpdateSwitch(); virtual void UpdateSwitch();
virtual bool MoveSpecific(int n); virtual bool MoveSpecific(int n);
void SetPositions();
int FirstVisibleIndex(); int FirstVisibleIndex();
@@ -79,9 +80,6 @@ protected:
STATE_SELECTING, STATE_SELECTING,
STATE_FLYING_OFF_BEFORE_NEXT_SORT, STATE_FLYING_OFF_BEFORE_NEXT_SORT,
STATE_FLYING_ON_AFTER_NEXT_SORT, STATE_FLYING_ON_AFTER_NEXT_SORT,
STATE_TWEENING_ON_SCREEN,
STATE_TWEENING_OFF_SCREEN,
STATE_WAITING_OFF_SCREEN,
STATE_ROULETTE_SPINNING, STATE_ROULETTE_SPINNING,
STATE_ROULETTE_SLOWING_DOWN, STATE_ROULETTE_SLOWING_DOWN,
STATE_RANDOM_SPINNING, STATE_RANDOM_SPINNING,