CHANGE: MusicWheel response to user input is improved.
This commit is contained in:
@@ -14,6 +14,9 @@
|
|||||||
#include "ScreenDimensions.h"
|
#include "ScreenDimensions.h"
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
#include "RageMusic.h"
|
#include "RageMusic.h"
|
||||||
|
#include "WindowManager.h" // for sending SM_PlayMusicSample
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const float SWITCH_MUSIC_TIME = 0.3f;
|
const float SWITCH_MUSIC_TIME = 0.3f;
|
||||||
@@ -188,9 +191,9 @@ MusicWheel::MusicWheel()
|
|||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
|
|
||||||
|
|
||||||
// fade the wheel in
|
|
||||||
m_WheelState = STATE_IDLE;
|
m_WheelState = STATE_IDLE;
|
||||||
m_fTimeLeftInState = FADE_TIME;
|
m_fTimeLeftInState = FADE_TIME;
|
||||||
|
m_fPositionOffsetFromSelection = 0;
|
||||||
|
|
||||||
|
|
||||||
RageLog( "end of MusicWheel::MusicWheel()" );
|
RageLog( "end of MusicWheel::MusicWheel()" );
|
||||||
@@ -381,24 +384,18 @@ void MusicWheel::RenderPrimitives()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// iIndex is now the index of the lowest WheelItem to draw
|
// iIndex is now the index of the lowest WheelItem to draw
|
||||||
for( i=0; i<NUM_WHEEL_ITEMS_TO_DRAW; i++ )
|
for( i=-NUM_WHEEL_ITEMS_TO_DRAW/2; i<NUM_WHEEL_ITEMS_TO_DRAW/2; i++ )
|
||||||
{
|
{
|
||||||
WheelItem& WI = m_WheelItems[iIndex];
|
WheelItem& WI = m_WheelItems[iIndex];
|
||||||
|
|
||||||
float fPositionOffsetsFromMiddle = i - NUM_WHEEL_ITEMS_TO_DRAW/2;
|
float fThisBannerPositionOffsetFromSelection = m_fPositionOffsetFromSelection + i;
|
||||||
// adjust fPosOffsetsFromMiddle if we're in the middle of switching songs
|
|
||||||
if( m_WheelState == STATE_SWITCHING_TO_PREV_MUSIC )
|
|
||||||
fPositionOffsetsFromMiddle -= m_fTimeLeftInState / SWITCH_MUSIC_TIME;
|
|
||||||
else if( m_WheelState == STATE_SWITCHING_TO_NEXT_MUSIC )
|
|
||||||
fPositionOffsetsFromMiddle += m_fTimeLeftInState / SWITCH_MUSIC_TIME;
|
|
||||||
|
|
||||||
|
float fY = GetBannerY( fThisBannerPositionOffsetFromSelection );
|
||||||
float fY = GetBannerY( fPositionOffsetsFromMiddle );
|
float fX = GetBannerX( fThisBannerPositionOffsetFromSelection );
|
||||||
float fX = GetBannerX( fPositionOffsetsFromMiddle );
|
|
||||||
WI.SetXY( fX, fY );
|
WI.SetXY( fX, fY );
|
||||||
|
|
||||||
float fBrightness = GetBannerBrightness( fPositionOffsetsFromMiddle );
|
float fBrightness = GetBannerBrightness( m_fPositionOffsetFromSelection );
|
||||||
float fAlpha = GetBannerAlpha( fPositionOffsetsFromMiddle );
|
float fAlpha = GetBannerAlpha( m_fPositionOffsetFromSelection );
|
||||||
|
|
||||||
WI.SetDiffuseColor( D3DXCOLOR(fBrightness, fBrightness, fBrightness, fAlpha) );
|
WI.SetDiffuseColor( D3DXCOLOR(fBrightness, fBrightness, fBrightness, fAlpha) );
|
||||||
WI.Draw();
|
WI.Draw();
|
||||||
@@ -436,10 +433,9 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
{
|
{
|
||||||
switch( m_WheelState )
|
switch( m_WheelState )
|
||||||
{
|
{
|
||||||
case STATE_SWITCHING_TO_PREV_MUSIC:
|
case STATE_SWITCHING_MUSIC:
|
||||||
case STATE_SWITCHING_TO_NEXT_MUSIC:
|
|
||||||
m_WheelState = STATE_IDLE; // now, wait for input
|
m_WheelState = STATE_IDLE; // now, wait for input
|
||||||
PlayMusicSample();
|
WM->SendMessageToTopWindow( SM_PlayMusicSample, 0 );
|
||||||
break;
|
break;
|
||||||
case STATE_FLYING_OFF_BEFORE_NEXT_SORT:
|
case STATE_FLYING_OFF_BEFORE_NEXT_SORT:
|
||||||
{
|
{
|
||||||
@@ -469,11 +465,11 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case STATE_FLYING_ON_AFTER_NEXT_SORT:
|
case STATE_FLYING_ON_AFTER_NEXT_SORT:
|
||||||
PlayMusicSample();
|
WM->SendMessageToTopWindow( SM_PlayMusicSample, 0 );
|
||||||
m_WheelState = STATE_IDLE; // now, wait for input
|
m_WheelState = STATE_IDLE; // now, wait for input
|
||||||
break;
|
break;
|
||||||
case STATE_TWEENING_ON_SCREEN:
|
case STATE_TWEENING_ON_SCREEN:
|
||||||
PlayMusicSample();
|
WM->SendMessageToTopWindow( SM_PlayMusicSample, 0 );
|
||||||
m_WheelState = STATE_IDLE;
|
m_WheelState = STATE_IDLE;
|
||||||
m_fTimeLeftInState = 0;
|
m_fTimeLeftInState = 0;
|
||||||
break;
|
break;
|
||||||
@@ -487,6 +483,15 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "rotate" wheel toward selected song
|
||||||
|
|
||||||
|
if( fabs(m_fPositionOffsetFromSelection) < 0.05f )
|
||||||
|
m_fPositionOffsetFromSelection = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_fPositionOffsetFromSelection -= fDeltaTime * m_fPositionOffsetFromSelection*4; // linear
|
||||||
|
//m_fPositionOffsetFromSelection += fDeltaTime * m_fPositionOffsetFromSelection/fabs(m_fPositionOffsetFromSelection); // constant
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -494,9 +499,8 @@ void MusicWheel::PrevMusic()
|
|||||||
{
|
{
|
||||||
switch( m_WheelState )
|
switch( m_WheelState )
|
||||||
{
|
{
|
||||||
//case STATE_SWITCHING_TO_PREV_MUSIC:
|
|
||||||
|
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
|
case STATE_SWITCHING_MUSIC:
|
||||||
break; // fall through
|
break; // fall through
|
||||||
default:
|
default:
|
||||||
return; // don't fall through
|
return; // don't fall through
|
||||||
@@ -508,7 +512,9 @@ void MusicWheel::PrevMusic()
|
|||||||
if( m_iSelection < 0 )
|
if( m_iSelection < 0 )
|
||||||
m_iSelection = m_WheelItems.GetSize()-1;
|
m_iSelection = m_WheelItems.GetSize()-1;
|
||||||
|
|
||||||
m_WheelState = STATE_SWITCHING_TO_PREV_MUSIC;
|
m_fPositionOffsetFromSelection -= 1;
|
||||||
|
|
||||||
|
m_WheelState = STATE_SWITCHING_MUSIC;
|
||||||
m_fTimeLeftInState = SWITCH_MUSIC_TIME;
|
m_fTimeLeftInState = SWITCH_MUSIC_TIME;
|
||||||
m_soundChangeMusic.PlayRandom();
|
m_soundChangeMusic.PlayRandom();
|
||||||
}
|
}
|
||||||
@@ -518,8 +524,7 @@ void MusicWheel::NextMusic()
|
|||||||
switch( m_WheelState )
|
switch( m_WheelState )
|
||||||
{
|
{
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
case STATE_SWITCHING_TO_NEXT_MUSIC:
|
case STATE_SWITCHING_MUSIC:
|
||||||
case STATE_SWITCHING_TO_PREV_MUSIC:
|
|
||||||
break; // fall through
|
break; // fall through
|
||||||
default:
|
default:
|
||||||
return; // don't continue
|
return; // don't continue
|
||||||
@@ -531,7 +536,9 @@ void MusicWheel::NextMusic()
|
|||||||
if( m_iSelection > m_WheelItems.GetSize()-1 )
|
if( m_iSelection > m_WheelItems.GetSize()-1 )
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
|
|
||||||
m_WheelState = STATE_SWITCHING_TO_NEXT_MUSIC;
|
m_fPositionOffsetFromSelection += 1;
|
||||||
|
|
||||||
|
m_WheelState = STATE_SWITCHING_MUSIC;
|
||||||
m_fTimeLeftInState = SWITCH_MUSIC_TIME;
|
m_fTimeLeftInState = SWITCH_MUSIC_TIME;
|
||||||
m_soundChangeMusic.PlayRandom();
|
m_soundChangeMusic.PlayRandom();
|
||||||
}
|
}
|
||||||
@@ -541,8 +548,7 @@ void MusicWheel::NextSort()
|
|||||||
switch( m_WheelState )
|
switch( m_WheelState )
|
||||||
{
|
{
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
case STATE_SWITCHING_TO_NEXT_MUSIC:
|
case STATE_SWITCHING_MUSIC:
|
||||||
case STATE_SWITCHING_TO_PREV_MUSIC:
|
|
||||||
break; // fall through
|
break; // fall through
|
||||||
default:
|
default:
|
||||||
return; // don't continue
|
return; // don't continue
|
||||||
@@ -598,21 +604,3 @@ bool MusicWheel::Select()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MusicWheel::PlayMusicSample()
|
|
||||||
{
|
|
||||||
//RageLog( "WindowSelectSong::PlaySongSample()" );
|
|
||||||
|
|
||||||
MUSIC->Stop();
|
|
||||||
|
|
||||||
Song* pSong = GetSelectedSong();
|
|
||||||
if( pSong == NULL )
|
|
||||||
return;
|
|
||||||
|
|
||||||
CString sSongToPlay = pSong->GetMusicPath();
|
|
||||||
|
|
||||||
if( pSong->HasMusic() )
|
|
||||||
{
|
|
||||||
MUSIC->Load( sSongToPlay );
|
|
||||||
MUSIC->Play();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -24,13 +24,16 @@
|
|||||||
#include "RageSoundStream.h"
|
#include "RageSoundStream.h"
|
||||||
#include "MusicSortDisplay.h"
|
#include "MusicSortDisplay.h"
|
||||||
#include "MusicStatusDisplay.h"
|
#include "MusicStatusDisplay.h"
|
||||||
|
#include "Window.h" // for WindowMessage
|
||||||
|
|
||||||
const int NUM_WHEEL_ITEMS_TO_DRAW = 13;
|
const int NUM_WHEEL_ITEMS_TO_DRAW = 13;
|
||||||
|
|
||||||
const float FADE_TIME = 0.5f;
|
const float FADE_TIME = 0.5f;
|
||||||
|
|
||||||
|
|
||||||
|
const WindowMessage SM_PlayMusicSample = WindowMessage(SM_User+47); // this should be unique!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class WheelItem : public ActorFrame
|
class WheelItem : public ActorFrame
|
||||||
{
|
{
|
||||||
@@ -100,8 +103,6 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void RebuildWheelItems();
|
void RebuildWheelItems();
|
||||||
|
|
||||||
void PlayMusicSample();
|
|
||||||
|
|
||||||
|
|
||||||
Sprite m_sprSelectionBackground;
|
Sprite m_sprSelectionBackground;
|
||||||
Sprite m_sprSelectionOverlay;
|
Sprite m_sprSelectionOverlay;
|
||||||
@@ -119,8 +120,7 @@ protected:
|
|||||||
|
|
||||||
enum WheelState {
|
enum WheelState {
|
||||||
STATE_IDLE,
|
STATE_IDLE,
|
||||||
STATE_SWITCHING_TO_PREV_MUSIC,
|
STATE_SWITCHING_MUSIC,
|
||||||
STATE_SWITCHING_TO_NEXT_MUSIC,
|
|
||||||
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_ON_SCREEN,
|
||||||
@@ -129,6 +129,7 @@ protected:
|
|||||||
};
|
};
|
||||||
WheelState m_WheelState;
|
WheelState m_WheelState;
|
||||||
float m_fTimeLeftInState;
|
float m_fTimeLeftInState;
|
||||||
|
float m_fPositionOffsetFromSelection;
|
||||||
|
|
||||||
|
|
||||||
// having sounds here causes a crash in Bass. What the heck!?!?!
|
// having sounds here causes a crash in Bass. What the heck!?!?!
|
||||||
|
|||||||
Reference in New Issue
Block a user