weekend checkin
This commit is contained in:
@@ -11,6 +11,10 @@
|
|||||||
|
|
||||||
#include "ActorFrame.h"
|
#include "ActorFrame.h"
|
||||||
|
|
||||||
|
void ActorFrame::AddActor( Actor* pActor)
|
||||||
|
{
|
||||||
|
m_SubActors.Add( pActor );
|
||||||
|
}
|
||||||
|
|
||||||
void ActorFrame::DrawPrimitives()
|
void ActorFrame::DrawPrimitives()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
/*
|
/*
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
File: ActorFrame.h
|
File: ActorFrame.h
|
||||||
@@ -8,10 +9,6 @@
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _ActorFrame_H_
|
|
||||||
#define _ActorFrame_H_
|
|
||||||
|
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
|
|
||||||
#include <d3dx8math.h>
|
#include <d3dx8math.h>
|
||||||
@@ -26,7 +23,7 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void AddActor( Actor* pActor) { m_SubActors.Add(pActor); };
|
void AddActor( Actor* pActor);
|
||||||
|
|
||||||
virtual void Update( float fDeltaTime );
|
virtual void Update( float fDeltaTime );
|
||||||
virtual void DrawPrimitives();
|
virtual void DrawPrimitives();
|
||||||
@@ -34,7 +31,3 @@ public:
|
|||||||
virtual void SetDiffuseColor( D3DXCOLOR c );
|
virtual void SetDiffuseColor( D3DXCOLOR c );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "AnnouncerManager.h"
|
#include "AnnouncerManager.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
AnnouncerManager* ANNOUNCER = NULL; // global object accessable from anywhere in the program
|
AnnouncerManager* ANNOUNCER = NULL; // global object accessable from anywhere in the program
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ void AnnouncerManager::SwitchAnnouncer( CString sAnnouncerName )
|
|||||||
m_sCurAnnouncerName = sAnnouncerName;
|
m_sCurAnnouncerName = sAnnouncerName;
|
||||||
CString sAnnouncerDir = GetAnnouncerDirFromName( m_sCurAnnouncerName );
|
CString sAnnouncerDir = GetAnnouncerDirFromName( m_sCurAnnouncerName );
|
||||||
if( !DoesFileExist( sAnnouncerDir ) )
|
if( !DoesFileExist( sAnnouncerDir ) )
|
||||||
FatalError( "Error loading the announcer in diretory '%s'.", m_sCurAnnouncerName );
|
throw RageException( "Error loading the announcer in diretory '%s'.", m_sCurAnnouncerName );
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnnouncerManager::AssertAnnouncerIsComplete( CString sAnnouncerName )
|
void AnnouncerManager::AssertAnnouncerIsComplete( CString sAnnouncerName )
|
||||||
@@ -58,7 +58,7 @@ void AnnouncerManager::AssertAnnouncerIsComplete( CString sAnnouncerName )
|
|||||||
{
|
{
|
||||||
CString sPath = GetPathTo( (AnnouncerElement)i, sAnnouncerName );
|
CString sPath = GetPathTo( (AnnouncerElement)i, sAnnouncerName );
|
||||||
if( !DoesFileExist(sPath) )
|
if( !DoesFileExist(sPath) )
|
||||||
FatalError( "The Announcer element '%s' is missing.", sPath );
|
throw RageException( "The Announcer element '%s' is missing.", sPath );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,9 +119,12 @@ CString AnnouncerManager::GetPathTo( AnnouncerElement ae, CString sAnnouncerName
|
|||||||
case ANNOUNCER_RESULT_C: sAssetDir = "result c"; break;
|
case ANNOUNCER_RESULT_C: sAssetDir = "result c"; break;
|
||||||
case ANNOUNCER_RESULT_D: sAssetDir = "result d"; break;
|
case ANNOUNCER_RESULT_D: sAssetDir = "result d"; break;
|
||||||
case ANNOUNCER_RESULT_E: sAssetDir = "result e"; break;
|
case ANNOUNCER_RESULT_E: sAssetDir = "result e"; break;
|
||||||
|
case ANNOUNCER_SELECT_COURSE_INTRO: sAssetDir = "select course intro"; break;
|
||||||
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_EASY: sAssetDir = "select difficulty comment easy"; break;
|
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_EASY: sAssetDir = "select difficulty comment easy"; break;
|
||||||
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_HARD: sAssetDir = "select difficulty comment hard"; break;
|
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_HARD: sAssetDir = "select difficulty comment hard"; break;
|
||||||
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_MEDIUM:sAssetDir = "select difficulty comment medium"; break;
|
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_MEDIUM:sAssetDir = "select difficulty comment medium"; break;
|
||||||
|
case ANNOUNCER_SELECT_DIFFICULTY_COMMENT_ONI: sAssetDir = "select difficulty comment oni"; break;
|
||||||
|
case ANNOUNCER_SELECT_DIFFICULTY_CHALLENGE: sAssetDir = "select difficulty challenge"; break;
|
||||||
case ANNOUNCER_SELECT_DIFFICULTY_INTRO: sAssetDir = "select difficulty intro"; break;
|
case ANNOUNCER_SELECT_DIFFICULTY_INTRO: sAssetDir = "select difficulty intro"; break;
|
||||||
case ANNOUNCER_SELECT_GROUP_COMMENT_ALL_MUSIC: sAssetDir = "select group comment all music"; break;
|
case ANNOUNCER_SELECT_GROUP_COMMENT_ALL_MUSIC: sAssetDir = "select group comment all music"; break;
|
||||||
case ANNOUNCER_SELECT_GROUP_COMMENT_GENERAL: sAssetDir = "select group comment general"; break;
|
case ANNOUNCER_SELECT_GROUP_COMMENT_GENERAL: sAssetDir = "select group comment general"; break;
|
||||||
|
|||||||
@@ -56,9 +56,12 @@ enum AnnouncerElement {
|
|||||||
ANNOUNCER_RESULT_C,
|
ANNOUNCER_RESULT_C,
|
||||||
ANNOUNCER_RESULT_D,
|
ANNOUNCER_RESULT_D,
|
||||||
ANNOUNCER_RESULT_E,
|
ANNOUNCER_RESULT_E,
|
||||||
|
ANNOUNCER_SELECT_COURSE_INTRO,
|
||||||
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_EASY,
|
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_EASY,
|
||||||
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_HARD,
|
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_HARD,
|
||||||
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_MEDIUM,
|
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_MEDIUM,
|
||||||
|
ANNOUNCER_SELECT_DIFFICULTY_COMMENT_ONI,
|
||||||
|
ANNOUNCER_SELECT_DIFFICULTY_CHALLENGE,
|
||||||
ANNOUNCER_SELECT_DIFFICULTY_INTRO,
|
ANNOUNCER_SELECT_DIFFICULTY_INTRO,
|
||||||
ANNOUNCER_SELECT_GROUP_COMMENT_ALL_MUSIC,
|
ANNOUNCER_SELECT_GROUP_COMMENT_ALL_MUSIC,
|
||||||
ANNOUNCER_SELECT_GROUP_COMMENT_GENERAL,
|
ANNOUNCER_SELECT_GROUP_COMMENT_GENERAL,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ float ArrowGetXPos( const PlayerOptions& po, int iColNum, float fYOffset, float
|
|||||||
switch( po.m_EffectType )
|
switch( po.m_EffectType )
|
||||||
{
|
{
|
||||||
case PlayerOptions::EFFECT_DRUNK:
|
case PlayerOptions::EFFECT_DRUNK:
|
||||||
fPixelOffsetFromCenter += cosf( (GetTickCount()%1000000)/250.0f + iColNum*0.4f + fYOffset/SCREEN_HEIGHT*4) * ARROW_SIZE/3;
|
fPixelOffsetFromCenter += cosf( TIMER->GetTimeSinceStart()/4 + iColNum*0.4f + fYOffset/SCREEN_HEIGHT*4) * ARROW_SIZE/3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return fPixelOffsetFromCenter;
|
return fPixelOffsetFromCenter;
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ void Background::DrawPrimitives()
|
|||||||
{
|
{
|
||||||
ActorFrame::DrawPrimitives();
|
ActorFrame::DrawPrimitives();
|
||||||
|
|
||||||
if( m_bShowDanger && (GetTickCount() % 1000) > 500 )
|
if( m_bShowDanger && (TIMER->GetTimeSinceStart() - (int)TIMER->GetTimeSinceStart()) > 0.5f )
|
||||||
{
|
{
|
||||||
m_sprDangerBackground.Draw();
|
m_sprDangerBackground.Draw();
|
||||||
m_sprDanger.Draw();
|
m_sprDanger.Draw();
|
||||||
|
|||||||
@@ -72,6 +72,19 @@ bool Banner::LoadFromGroup( CString sGroupName )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Banner::LoadFromCourse( Course* pCourse ) // NULL means no course
|
||||||
|
{
|
||||||
|
m_bScrolling = false;
|
||||||
|
|
||||||
|
Sprite::TurnShadowOff();
|
||||||
|
|
||||||
|
if( pCourse == NULL ) Banner::Load( THEME->GetPathTo(GRAPHIC_FALLBACK_BANNER) );
|
||||||
|
else if( pCourse->m_sBannerPath != "" ) Banner::Load( pCourse->m_sBannerPath );
|
||||||
|
else Banner::Load( THEME->GetPathTo(GRAPHIC_FALLBACK_BANNER) );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Banner::LoadRoulette()
|
bool Banner::LoadRoulette()
|
||||||
{
|
{
|
||||||
Banner::Load( THEME->GetPathTo(GRAPHIC_SELECT_MUSIC_ROULETTE_BANNER), false, 0, 0, false, false );
|
Banner::Load( THEME->GetPathTo(GRAPHIC_SELECT_MUSIC_ROULETTE_BANNER), false, 0, 0, false, false );
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
const float BANNER_WIDTH = 286;
|
const float BANNER_WIDTH = 286;
|
||||||
const float BANNER_HEIGHT = 92;
|
const float BANNER_HEIGHT = 92;
|
||||||
|
|
||||||
|
class Course;
|
||||||
|
|
||||||
|
|
||||||
class Banner : public CroppedSprite
|
class Banner : public CroppedSprite
|
||||||
{
|
{
|
||||||
@@ -36,6 +38,7 @@ public:
|
|||||||
|
|
||||||
bool LoadFromSong( Song* pSong ); // NULL means no song
|
bool LoadFromSong( Song* pSong ); // NULL means no song
|
||||||
bool LoadFromGroup( CString sGroupName );
|
bool LoadFromGroup( CString sGroupName );
|
||||||
|
bool LoadFromCourse( Course* pCourse );
|
||||||
bool LoadRoulette();
|
bool LoadRoulette();
|
||||||
|
|
||||||
inline void SetScrolling( bool bScroll ) { m_bScrolling = bScroll; };
|
inline void SetScrolling( bool bScroll ) { m_bScrolling = bScroll; };
|
||||||
|
|||||||
@@ -31,3 +31,8 @@ void BannerWithFrame::LoadFromSong( Song* pSong )
|
|||||||
{
|
{
|
||||||
m_Banner.LoadFromSong( pSong );
|
m_Banner.LoadFromSong( pSong );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BannerWithFrame::LoadFromGroup( CString sGroupName )
|
||||||
|
{
|
||||||
|
m_Banner.LoadFromGroup( sGroupName );
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public:
|
|||||||
BannerWithFrame();
|
BannerWithFrame();
|
||||||
|
|
||||||
void LoadFromSong( Song* pSong );
|
void LoadFromSong( Song* pSong );
|
||||||
|
void LoadFromGroup( CString sGroupName );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
#include "FontManager.h"
|
#include "FontManager.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
D3DXCOLOR RAINBOW_COLORS[] = {
|
D3DXCOLOR RAINBOW_COLORS[] = {
|
||||||
@@ -176,7 +176,7 @@ void BitmapText::DrawPrimitives()
|
|||||||
const char c = szLine[j];
|
const char c = szLine[j];
|
||||||
const int iFrameNo = m_pFont->m_iCharToFrameNo[c];
|
const int iFrameNo = m_pFont->m_iCharToFrameNo[c];
|
||||||
if( iFrameNo == -1 ) // this font doesn't impelemnt this character
|
if( iFrameNo == -1 ) // this font doesn't impelemnt this character
|
||||||
FatalError( "The font '%s' does not implement the character '%c'", m_sFontFilePath, c );
|
throw RageException( "The font '%s' does not implement the character '%c'", m_sFontFilePath, c );
|
||||||
const int iCharWidth = m_pFont->m_iFrameNoToWidth[iFrameNo];
|
const int iCharWidth = m_pFont->m_iFrameNoToWidth[iFrameNo];
|
||||||
|
|
||||||
// HACK:
|
// HACK:
|
||||||
@@ -298,7 +298,7 @@ void BitmapText::DrawPrimitives()
|
|||||||
|
|
||||||
if( m_bRainbow )
|
if( m_bRainbow )
|
||||||
{
|
{
|
||||||
int color_index = (GetTickCount() / 200) % NUM_RAINBOW_COLORS;
|
int color_index = int(TIMER->GetTimeSinceStart() / 0.200) % NUM_RAINBOW_COLORS;
|
||||||
for( int i=0; i<iNumV; i+=6 )
|
for( int i=0; i<iNumV; i+=6 )
|
||||||
{
|
{
|
||||||
const D3DXCOLOR color = RAINBOW_COLORS[color_index];
|
const D3DXCOLOR color = RAINBOW_COLORS[color_index];
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Combo::Combo()
|
|||||||
m_textComboNumber.Load( THEME->GetPathTo(FONT_COMBO_NUMBERS) );
|
m_textComboNumber.Load( THEME->GetPathTo(FONT_COMBO_NUMBERS) );
|
||||||
m_textComboNumber.TurnShadowOn();
|
m_textComboNumber.TurnShadowOn();
|
||||||
m_textComboNumber.SetHorizAlign( Actor::align_right );
|
m_textComboNumber.SetHorizAlign( Actor::align_right );
|
||||||
m_textComboNumber.SetX( -10 );
|
m_textComboNumber.SetX( -0 );
|
||||||
|
|
||||||
m_textComboNumber.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
|
m_textComboNumber.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
|
||||||
m_sprCombo.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
|
m_sprCombo.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
|
||||||
@@ -38,9 +38,9 @@ Combo::Combo()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Combo::ContinueCombo()
|
void Combo::ContinueCombo( const int iNumNotesHit )
|
||||||
{
|
{
|
||||||
m_iCurCombo++;
|
m_iCurCombo += iNumNotesHit;
|
||||||
|
|
||||||
// new max combo
|
// new max combo
|
||||||
if( m_iCurCombo > m_iMaxCombo )
|
if( m_iCurCombo > m_iMaxCombo )
|
||||||
@@ -59,7 +59,6 @@ void Combo::ContinueCombo()
|
|||||||
m_textComboNumber.SetText( ssprintf("%d", m_iCurCombo) );
|
m_textComboNumber.SetText( ssprintf("%d", m_iCurCombo) );
|
||||||
float fNewZoom = 0.5f + m_iCurCombo/800.0f;
|
float fNewZoom = 0.5f + m_iCurCombo/800.0f;
|
||||||
m_textComboNumber.SetZoom( fNewZoom );
|
m_textComboNumber.SetZoom( fNewZoom );
|
||||||
m_textComboNumber.SetX( -40 - (fNewZoom-1)*30 );
|
|
||||||
|
|
||||||
//this->SetZoom( 1.2f );
|
//this->SetZoom( 1.2f );
|
||||||
//this->BeginTweening( 0.3f );
|
//this->BeginTweening( 0.3f );
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class Combo : public ActorFrame
|
|||||||
public:
|
public:
|
||||||
Combo();
|
Combo();
|
||||||
|
|
||||||
void ContinueCombo();
|
void ContinueCombo( const int iNumNotesHit );
|
||||||
void EndCombo();
|
void EndCombo();
|
||||||
|
|
||||||
int GetCurrentCombo();
|
int GetCurrentCombo();
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: Course
|
||||||
|
|
||||||
|
Desc: See header.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Course.h"
|
||||||
|
#include "ThemeManager.h"
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Course: Course
|
||||||
|
|
||||||
|
Desc: A queue of songs and notes.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "GameConstantsAndTypes.h"
|
||||||
|
class Song;
|
||||||
|
struct Notes;
|
||||||
|
|
||||||
|
const int MAX_COURSE_STAGES = 100;
|
||||||
|
|
||||||
|
class Course
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Course()
|
||||||
|
{
|
||||||
|
m_NotesType = NOTES_TYPE_INVALID;
|
||||||
|
m_iStages = 0;
|
||||||
|
for( int i=0; i<MAX_COURSE_STAGES; i++ )
|
||||||
|
{
|
||||||
|
m_apSongs[i] = NULL;
|
||||||
|
m_apNotes[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CString m_sName;
|
||||||
|
CString m_sBannerPath;
|
||||||
|
CString m_sCDTitlePath;
|
||||||
|
NotesType m_NotesType;
|
||||||
|
int m_iStages;
|
||||||
|
Song* m_apSongs[MAX_COURSE_STAGES];
|
||||||
|
Notes* m_apNotes[MAX_COURSE_STAGES];
|
||||||
|
|
||||||
|
void AddStage( Song* pSong, Notes* pNotes )
|
||||||
|
{
|
||||||
|
ASSERT( m_iStages <= MAX_COURSE_STAGES );
|
||||||
|
m_apSongs[m_iStages] = pSong;
|
||||||
|
m_apNotes[m_iStages] = pNotes;
|
||||||
|
m_iStages++;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: CourseContentsFrame
|
||||||
|
|
||||||
|
Desc: See header.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "CourseContentsFrame.h"
|
||||||
|
#include "RageUtil.h"
|
||||||
|
#include "GameConstantsAndTypes.h"
|
||||||
|
#include "ThemeManager.h"
|
||||||
|
#include "RageLog.h"
|
||||||
|
#include "PrefsManager.h"
|
||||||
|
#include "Course.h"
|
||||||
|
|
||||||
|
const float NAME_X = -100;
|
||||||
|
const float METER_X = +50;
|
||||||
|
const float GAP_Y = 34;
|
||||||
|
const float START_Y = 0 - MAX_COURSE_CONTENTS/2*GAP_Y;
|
||||||
|
|
||||||
|
|
||||||
|
CourseContentsFrame::CourseContentsFrame()
|
||||||
|
{
|
||||||
|
for( int i=0; i<MAX_COURSE_CONTENTS; i++ )
|
||||||
|
{
|
||||||
|
m_textContents[i].Load( THEME->GetPathTo(FONT_TEXT_BANNER) );
|
||||||
|
m_textContents[i].SetHorizAlign( Actor::align_left );
|
||||||
|
m_textContents[i].SetXY( NAME_X, START_Y + GAP_Y*i );
|
||||||
|
m_textContents[i].SetText( "" );
|
||||||
|
m_textContents[i].SetZoom( 0.7f );
|
||||||
|
this->AddActor( &m_textContents[i] );
|
||||||
|
|
||||||
|
m_Meters[i].SetXY( METER_X, START_Y + GAP_Y*i + 10 );
|
||||||
|
this->AddActor( &m_Meters[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CourseContentsFrame::Update( float fDeltaTime )
|
||||||
|
{
|
||||||
|
ActorFrame::Update( fDeltaTime );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CourseContentsFrame::SetFromCourse( Course* pCourse )
|
||||||
|
{
|
||||||
|
ASSERT( pCourse != NULL );
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// turn all lines "off"
|
||||||
|
for( i=0; i<MAX_COURSE_CONTENTS; i++ )
|
||||||
|
{
|
||||||
|
m_textContents[i].SetText( "" );
|
||||||
|
m_Meters[i].SetFromNotes( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i=0; i<pCourse->m_iStages-1; i++ )
|
||||||
|
{
|
||||||
|
m_textContents[i].SetText( pCourse->m_apSongs[i]->GetMainTitle() );
|
||||||
|
m_textContents[i].SetDiffuseColor( DifficultyClassToColor(pCourse->m_apNotes[i]->m_DifficultyClass) );
|
||||||
|
|
||||||
|
m_Meters[i].SetFromNotes( pCourse->m_apNotes[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( pCourse->m_iStages >= MAX_COURSE_CONTENTS )
|
||||||
|
m_textContents[MAX_COURSE_CONTENTS-1].SetText( ssprintf("%d more...", pCourse->m_iStages-(MAX_COURSE_CONTENTS-1)) );
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: CourseContentsFrame
|
||||||
|
|
||||||
|
Desc: Holds course name and banner.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "FootMeter.h"
|
||||||
|
#include "BitmapText.h"
|
||||||
|
#include "ActorFrame.h"
|
||||||
|
class Course;
|
||||||
|
|
||||||
|
const int MAX_COURSE_CONTENTS = 8;
|
||||||
|
|
||||||
|
class CourseContentsFrame : public ActorFrame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CourseContentsFrame();
|
||||||
|
|
||||||
|
void Update( float fDeltaTime );
|
||||||
|
|
||||||
|
void SetFromCourse( Course* pCourse );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
BitmapText m_textContents[MAX_COURSE_CONTENTS];
|
||||||
|
FootMeter m_Meters[MAX_COURSE_CONTENTS];
|
||||||
|
};
|
||||||
@@ -1,18 +1,16 @@
|
|||||||
|
#pragma once
|
||||||
/*
|
/*
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
File: DifficultyIcon.h
|
Class: DifficultyIcon
|
||||||
|
|
||||||
Desc: A graphic displayed in the DifficultyIcon during Dancing.
|
Desc: A graphic displayed in Select Music above the Groove Radar.
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _DifficultyIcon_H_
|
|
||||||
#define _DifficultyIcon_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "Sprite.h"
|
#include "Sprite.h"
|
||||||
#include "Song.h"
|
#include "Song.h"
|
||||||
#include "BitmapText.h"
|
#include "BitmapText.h"
|
||||||
@@ -24,7 +22,7 @@ class DifficultyIcon : public Sprite
|
|||||||
public:
|
public:
|
||||||
DifficultyIcon()
|
DifficultyIcon()
|
||||||
{
|
{
|
||||||
Load( THEME->GetPathTo(GRAPHIC_DIFFICULTY_ICONS) );
|
Load( THEME->GetPathTo(GRAPHIC_GAMEPLAY_DIFFICULTY_BANNER_ICONS) );
|
||||||
StopAnimating();
|
StopAnimating();
|
||||||
|
|
||||||
SetFromNotes( NULL );
|
SetFromNotes( NULL );
|
||||||
@@ -61,4 +59,3 @@ private:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
#include "RageTextureManager.h"
|
#include "RageTextureManager.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
Font::Font( const CString &sFontFilePath )
|
Font::Font( const CString &sFontFilePath )
|
||||||
@@ -49,7 +49,7 @@ Font::Font( const CString &sFontFilePath )
|
|||||||
IniFile ini;
|
IniFile ini;
|
||||||
ini.SetPath( m_sFontFilePath );
|
ini.SetPath( m_sFontFilePath );
|
||||||
if( !ini.ReadFile() )
|
if( !ini.ReadFile() )
|
||||||
FatalError( "Error opening Font file '%s'.", m_sFontFilePath );
|
throw RageException( "Error opening Font file '%s'.", m_sFontFilePath );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -58,7 +58,7 @@ Font::Font( const CString &sFontFilePath )
|
|||||||
CString sTextureFile;
|
CString sTextureFile;
|
||||||
ini.GetValue( "Font", "Texture", sTextureFile );
|
ini.GetValue( "Font", "Texture", sTextureFile );
|
||||||
if( sTextureFile == "" )
|
if( sTextureFile == "" )
|
||||||
FatalError( "Error reading value 'Texture' from %s.", m_sFontFilePath );
|
throw RageException( "Error reading value 'Texture' from %s.", m_sFontFilePath );
|
||||||
|
|
||||||
m_sTexturePath = sFontDir + sTextureFile; // save the path of the new texture
|
m_sTexturePath = sFontDir + sTextureFile; // save the path of the new texture
|
||||||
m_sTexturePath.MakeLower();
|
m_sTexturePath.MakeLower();
|
||||||
@@ -76,7 +76,7 @@ Font::Font( const CString &sFontFilePath )
|
|||||||
{
|
{
|
||||||
// sanity check
|
// sanity check
|
||||||
if( sCharacters.GetLength() != m_pTexture->GetNumFrames() )
|
if( sCharacters.GetLength() != m_pTexture->GetNumFrames() )
|
||||||
FatalError( "The characters in '%s' does not match the number of frames in the texture."
|
throw RageException( "The characters in '%s' does not match the number of frames in the texture."
|
||||||
"The font has %d frames, and the texture has %d frames.",
|
"The font has %d frames, and the texture has %d frames.",
|
||||||
m_sFontFilePath, sCharacters.GetLength(), m_pTexture->GetNumFrames() );
|
m_sFontFilePath, sCharacters.GetLength(), m_pTexture->GetNumFrames() );
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ Font::Font( const CString &sFontFilePath )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FatalError( "No characters were specified in '%s' and the font is not a standard ASCII set.", m_sFontFilePath );
|
throw RageException( "No characters were specified in '%s' and the font is not a standard ASCII set.", m_sFontFilePath );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,7 @@ Font::Font( const CString &sFontFilePath )
|
|||||||
split( sWidthsValue, ",", asCharWidths );
|
split( sWidthsValue, ",", asCharWidths );
|
||||||
|
|
||||||
if( asCharWidths.GetSize() != m_pTexture->GetNumFrames() )
|
if( asCharWidths.GetSize() != m_pTexture->GetNumFrames() )
|
||||||
FatalError( "The number of widths specified in '%s' (%d) do not match the number of frames in the texture (%d).",
|
throw RageException( "The number of widths specified in '%s' (%d) do not match the number of frames in the texture (%d).",
|
||||||
m_sFontFilePath, asCharWidths.GetSize(), m_pTexture->GetNumFrames() );
|
m_sFontFilePath, asCharWidths.GetSize(), m_pTexture->GetNumFrames() );
|
||||||
|
|
||||||
for( int i=0; i<asCharWidths.GetSize(); i++ )
|
for( int i=0; i<asCharWidths.GetSize(); i++ )
|
||||||
@@ -158,7 +158,7 @@ int Font::GetLineWidthInSourcePixels( LPCTSTR szLine, int iLength )
|
|||||||
const char c = szLine[i];
|
const char c = szLine[i];
|
||||||
const int iFrameNo = m_iCharToFrameNo[c];
|
const int iFrameNo = m_iCharToFrameNo[c];
|
||||||
if( iFrameNo == -1 ) // this font doesn't impelemnt this character
|
if( iFrameNo == -1 ) // this font doesn't impelemnt this character
|
||||||
FatalError( "The font '%s' does not implement the character '%c'", m_sFontFilePath, c );
|
throw RageException( "The font '%s' does not implement the character '%c'", m_sFontFilePath, c );
|
||||||
|
|
||||||
iLineWidth += m_iFrameNoToWidth[iFrameNo];
|
iLineWidth += m_iFrameNoToWidth[iFrameNo];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
FontManager* FONT = NULL;
|
FontManager* FONT = NULL;
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ void FontManager::UnloadFont( CString sFontFilePath )
|
|||||||
}
|
}
|
||||||
else // lookup failed
|
else // lookup failed
|
||||||
{
|
{
|
||||||
FatalError( ssprintf("Tried to Unload a font that wasn't loaded. '%s'", sFontFilePath) );
|
throw RageException( ssprintf("Tried to Unload a font that wasn't loaded. '%s'", sFontFilePath) );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ void FootMeter::SetFromNotes( Notes* pNotes )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
this->SetEffectNone();
|
||||||
SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
SetNumFeet( 0, "" );
|
SetNumFeet( 0, "" );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,7 +153,8 @@ enum NotesType
|
|||||||
NOTES_TYPE_DANCE_SOLO,
|
NOTES_TYPE_DANCE_SOLO,
|
||||||
NOTES_TYPE_PUMP_SINGLE,
|
NOTES_TYPE_PUMP_SINGLE,
|
||||||
NOTES_TYPE_PUMP_DOUBLE,
|
NOTES_TYPE_PUMP_DOUBLE,
|
||||||
NUM_NOTES_TYPES // leave this at the end
|
NUM_NOTES_TYPES, // leave this at the end
|
||||||
|
NOTES_TYPE_INVALID,
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int NotesTypeToNumColumns( NotesType nt )
|
inline int NotesTypeToNumColumns( NotesType nt )
|
||||||
@@ -202,8 +203,7 @@ inline CString NotesTypeToString( NotesType nt )
|
|||||||
enum PlayMode
|
enum PlayMode
|
||||||
{
|
{
|
||||||
PLAY_MODE_ARCADE,
|
PLAY_MODE_ARCADE,
|
||||||
PLAY_MODE_NONSTOP,
|
PLAY_MODE_ONI,
|
||||||
PLAY_MODE_ENDLESS,
|
|
||||||
NUM_PLAY_MODES
|
NUM_PLAY_MODES
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -253,7 +253,6 @@ enum Style
|
|||||||
STYLE_DANCE_DOUBLE,
|
STYLE_DANCE_DOUBLE,
|
||||||
STYLE_DANCE_COUPLE,
|
STYLE_DANCE_COUPLE,
|
||||||
STYLE_DANCE_SOLO,
|
STYLE_DANCE_SOLO,
|
||||||
STYLE_DANCE_SOLO_VERSUS,
|
|
||||||
STYLE_PUMP_SINGLE,
|
STYLE_PUMP_SINGLE,
|
||||||
STYLE_PUMP_VERSUS,
|
STYLE_PUMP_VERSUS,
|
||||||
STYLE_PUMP_DOUBLE,
|
STYLE_PUMP_DOUBLE,
|
||||||
@@ -270,7 +269,6 @@ inline Game StyleToGame( Style s )
|
|||||||
case STYLE_DANCE_DOUBLE:
|
case STYLE_DANCE_DOUBLE:
|
||||||
case STYLE_DANCE_COUPLE:
|
case STYLE_DANCE_COUPLE:
|
||||||
case STYLE_DANCE_SOLO:
|
case STYLE_DANCE_SOLO:
|
||||||
case STYLE_DANCE_SOLO_VERSUS:
|
|
||||||
return GAME_DANCE;
|
return GAME_DANCE;
|
||||||
case STYLE_PUMP_SINGLE:
|
case STYLE_PUMP_SINGLE:
|
||||||
case STYLE_PUMP_VERSUS:
|
case STYLE_PUMP_VERSUS:
|
||||||
@@ -374,19 +372,3 @@ struct SongOptions
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct ScoreSummary
|
|
||||||
{
|
|
||||||
int perfect, great, good, boo, miss, ok, ng, max_combo;
|
|
||||||
float score;
|
|
||||||
|
|
||||||
float fRadarActual[NUM_RADAR_VALUES];
|
|
||||||
float fRadarPossible[NUM_RADAR_VALUES];
|
|
||||||
|
|
||||||
ScoreSummary()
|
|
||||||
{
|
|
||||||
perfect=great=good=boo=miss=ok=ng=max_combo=0;
|
|
||||||
score=0;
|
|
||||||
for( int r=0; r<NUM_RADAR_VALUES; r++ )
|
|
||||||
fRadarActual[r] = fRadarPossible[r] = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#include "GameDef.h"
|
#include "GameDef.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
#include "StyleDef.h"
|
#include "StyleDef.h"
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ CString GameDef::ElementToGraphicSuffix( const GameButtonGraphic gbg )
|
|||||||
case GRAPHIC_TAP_EXPLOSION_DIM: sAssetPath = "tap explosion dim"; break;
|
case GRAPHIC_TAP_EXPLOSION_DIM: sAssetPath = "tap explosion dim"; break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FatalError( ssprintf("Unhandled StyleElement %d", gbg) );
|
throw RageException( ssprintf("Unhandled StyleElement %d", gbg) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return sAssetPath;
|
return sAssetPath;
|
||||||
@@ -54,7 +54,7 @@ CString GameDef::GetPathToGraphic( const CString sSkinName, const int iInstrumen
|
|||||||
if( arrayPossibleFileNames.GetSize() > 0 )
|
if( arrayPossibleFileNames.GetSize() > 0 )
|
||||||
return sSkinDir + arrayPossibleFileNames[0];
|
return sSkinDir + arrayPossibleFileNames[0];
|
||||||
|
|
||||||
FatalError( "The game button graphic '%s%s %s' is missing.", sSkinDir, sButtonName, sGraphicSuffix );
|
throw RageException( "The game button graphic '%s%s %s' is missing.", sSkinDir, sButtonName, sGraphicSuffix );
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ void GameDef::GetSkinNames( CStringArray &AddTo )
|
|||||||
AddTo.RemoveAt( i );
|
AddTo.RemoveAt( i );
|
||||||
|
|
||||||
if( AddTo.GetSize() == 0 )
|
if( AddTo.GetSize() == 0 )
|
||||||
FatalError( "The folder '%s' must contain at least one skin.", sBaseSkinFolder );
|
throw RageException( "The folder '%s' must contain at least one skin.", sBaseSkinFolder );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameDef::HasASkinNamed( CString sSkin )
|
bool GameDef::HasASkinNamed( CString sSkin )
|
||||||
@@ -124,7 +124,7 @@ void GameDef::AssertSkinsAreComplete()
|
|||||||
GameButtonGraphic gbg = (GameButtonGraphic)i;
|
GameButtonGraphic gbg = (GameButtonGraphic)i;
|
||||||
CString sPathToGraphic = GetPathToGraphic( sSkin, INSTRUMENT_1, gbg );
|
CString sPathToGraphic = GetPathToGraphic( sSkin, INSTRUMENT_1, gbg );
|
||||||
if( !DoesFileExist(sPathToGraphic) )
|
if( !DoesFileExist(sPathToGraphic) )
|
||||||
FatalError( "Game button graphic at %s is missing.", sPathToGraphic );
|
throw RageException( "Game button graphic at %s is missing.", sPathToGraphic );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "GameManager.h"
|
#include "GameManager.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
GameManager* GAMEMAN = NULL; // global and accessable from anywhere in our program
|
GameManager* GAMEMAN = NULL; // global and accessable from anywhere in our program
|
||||||
@@ -226,7 +226,7 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
|||||||
0,1,2,3,4,5
|
0,1,2,3,4,5
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ // STYLE_DANCE_SOLO_VERSUS
|
/* { // STYLE_DANCE_SOLO_VERSUS
|
||||||
"dance-solo-versus", // m_szName
|
"dance-solo-versus", // m_szName
|
||||||
NOTES_TYPE_DANCE_SOLO, // m_NotesType
|
NOTES_TYPE_DANCE_SOLO, // m_NotesType
|
||||||
StyleDef::ONE_PLAYER_USES_ONE_SIDE, // m_StyleType
|
StyleDef::ONE_PLAYER_USES_ONE_SIDE, // m_StyleType
|
||||||
@@ -254,8 +254,8 @@ StyleDef g_StyleDefs[NUM_STYLES] =
|
|||||||
0,5,1,4,2,3 // outside in
|
0,5,1,4,2,3 // outside in
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ // PUMP_STYLE_SINGLE
|
*/ { // PUMP_STYLE_SINGLE
|
||||||
"single", // m_szName
|
"pump-single", // m_szName
|
||||||
NOTES_TYPE_PUMP_SINGLE, // m_NotesType
|
NOTES_TYPE_PUMP_SINGLE, // m_NotesType
|
||||||
StyleDef::ONE_PLAYER_USES_ONE_SIDE, // m_StyleType
|
StyleDef::ONE_PLAYER_USES_ONE_SIDE, // m_StyleType
|
||||||
{ 160, 480 }, // m_iCenterX
|
{ 160, 480 }, // m_iCenterX
|
||||||
@@ -383,6 +383,9 @@ void GameManager::GetSkinNames( CStringArray &AddTo )
|
|||||||
|
|
||||||
bool GameManager::IsPlayerEnabled( PlayerNumber pn )
|
bool GameManager::IsPlayerEnabled( PlayerNumber pn )
|
||||||
{
|
{
|
||||||
|
if( m_CurStyle == STYLE_NONE ) // if no style set (we're in TitleMenu, ConfigInstruments or something)
|
||||||
|
return true; // allow input from both sides
|
||||||
|
|
||||||
return ( pn == m_sMasterPlayerNumber ) ||
|
return ( pn == m_sMasterPlayerNumber ) ||
|
||||||
( GetCurrentStyleDef()->m_StyleType == StyleDef::TWO_PLAYERS_USE_TWO_SIDES );
|
( GetCurrentStyleDef()->m_StyleType == StyleDef::TWO_PLAYERS_USE_TWO_SIDES );
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ void GhostArrow::Step( TapNoteScore score )
|
|||||||
case TNS_BOO: SetDiffuseColor( D3DXCOLOR(0.8f,0.0f,0.6f,0.6f) ); break;
|
case TNS_BOO: SetDiffuseColor( D3DXCOLOR(0.8f,0.0f,0.6f,0.6f) ); break;
|
||||||
case TNS_MISS: ASSERT( false ); break;
|
case TNS_MISS: ASSERT( false ); break;
|
||||||
}
|
}
|
||||||
SetZoom( 1.1f );
|
SetZoom( 1.0f );
|
||||||
BeginTweening( 0.30f );
|
BeginTweening( 0.25f );
|
||||||
SetTweenZoom( 1.7f );
|
SetTweenZoom( 1.5f );
|
||||||
D3DXCOLOR colorTween = GetDiffuseColor();
|
D3DXCOLOR colorTween = GetDiffuseColor();
|
||||||
colorTween.a = 0;
|
colorTween.a = 0;
|
||||||
SetTweenDiffuseColor( colorTween );
|
SetTweenDiffuseColor( colorTween );
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ void GhostArrowBright::Step( TapNoteScore score )
|
|||||||
case TNS_MISS: ASSERT( false ); break;
|
case TNS_MISS: ASSERT( false ); break;
|
||||||
}
|
}
|
||||||
SetState( 0 );
|
SetState( 0 );
|
||||||
SetZoom( 1.3f );
|
SetZoom( 1.0f );
|
||||||
BeginTweening( 0.35f );
|
BeginTweening( 0.25f );
|
||||||
SetTweenZoom( 2.5f );
|
SetTweenZoom( 1.5f );
|
||||||
D3DXCOLOR colorTween = GetDiffuseColor();
|
D3DXCOLOR colorTween = GetDiffuseColor();
|
||||||
colorTween.a = 0;
|
colorTween.a = 0;
|
||||||
SetTweenDiffuseColor( colorTween );
|
SetTweenDiffuseColor( colorTween );
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ GradeDisplay::GradeDisplay()
|
|||||||
StopAnimating();
|
StopAnimating();
|
||||||
|
|
||||||
m_fTimeLeftInScroll = 0;
|
m_fTimeLeftInScroll = 0;
|
||||||
|
m_bDoScrolling = false;
|
||||||
|
|
||||||
SetGrade( GRADE_NO_DATA );
|
SetGrade( GRADE_NO_DATA );
|
||||||
}
|
}
|
||||||
@@ -37,24 +38,27 @@ void GradeDisplay::Update( float fDeltaTime )
|
|||||||
{
|
{
|
||||||
Sprite::Update( fDeltaTime );
|
Sprite::Update( fDeltaTime );
|
||||||
|
|
||||||
m_fTimeLeftInScroll -= fDeltaTime;
|
if( m_bDoScrolling )
|
||||||
m_fTimeLeftInScroll = max( 0, m_fTimeLeftInScroll );
|
{
|
||||||
|
m_fTimeLeftInScroll -= fDeltaTime;
|
||||||
|
m_fTimeLeftInScroll = max( 0, m_fTimeLeftInScroll );
|
||||||
|
|
||||||
float fPercentIntoScrolling = 1 - (m_fTimeLeftInScroll/SCROLL_TIME);
|
float fPercentIntoScrolling = 1 - (m_fTimeLeftInScroll/SCROLL_TIME);
|
||||||
if( fPercentIntoScrolling < 0.75 )
|
if( fPercentIntoScrolling < 0.75 )
|
||||||
fPercentIntoScrolling = (fPercentIntoScrolling/0.75f) * (1 + 1.0f/NUM_GRADE_FRAMES);
|
fPercentIntoScrolling = (fPercentIntoScrolling/0.75f) * (1 + 1.0f/NUM_GRADE_FRAMES);
|
||||||
else if( fPercentIntoScrolling < 0.9 )
|
else if( fPercentIntoScrolling < 0.9 )
|
||||||
fPercentIntoScrolling = 1 + 1.0f/NUM_GRADE_FRAMES;
|
fPercentIntoScrolling = 1 + 1.0f/NUM_GRADE_FRAMES;
|
||||||
else
|
else
|
||||||
fPercentIntoScrolling = (1 + 1.0f/NUM_GRADE_FRAMES) - ((fPercentIntoScrolling-0.9f)/0.1f) * 1.0f/NUM_GRADE_FRAMES;
|
fPercentIntoScrolling = (1 + 1.0f/NUM_GRADE_FRAMES) - ((fPercentIntoScrolling-0.9f)/0.1f) * 1.0f/NUM_GRADE_FRAMES;
|
||||||
|
|
||||||
FRECT frectCurrentTextureCoords;
|
FRECT frectCurrentTextureCoords;
|
||||||
frectCurrentTextureCoords.left = m_frectStartTexCoords.left*(1-fPercentIntoScrolling) + m_frectDestTexCoords.left*fPercentIntoScrolling;
|
frectCurrentTextureCoords.left = m_frectStartTexCoords.left*(1-fPercentIntoScrolling) + m_frectDestTexCoords.left*fPercentIntoScrolling;
|
||||||
frectCurrentTextureCoords.top = m_frectStartTexCoords.top*(1-fPercentIntoScrolling) + m_frectDestTexCoords.top*fPercentIntoScrolling;
|
frectCurrentTextureCoords.top = m_frectStartTexCoords.top*(1-fPercentIntoScrolling) + m_frectDestTexCoords.top*fPercentIntoScrolling;
|
||||||
frectCurrentTextureCoords.right = m_frectStartTexCoords.right*(1-fPercentIntoScrolling) + m_frectDestTexCoords.right*fPercentIntoScrolling;
|
frectCurrentTextureCoords.right = m_frectStartTexCoords.right*(1-fPercentIntoScrolling) + m_frectDestTexCoords.right*fPercentIntoScrolling;
|
||||||
frectCurrentTextureCoords.bottom = m_frectStartTexCoords.bottom*(1-fPercentIntoScrolling) + m_frectDestTexCoords.bottom*fPercentIntoScrolling;
|
frectCurrentTextureCoords.bottom = m_frectStartTexCoords.bottom*(1-fPercentIntoScrolling) + m_frectDestTexCoords.bottom*fPercentIntoScrolling;
|
||||||
|
|
||||||
this->SetCustomTextureRect( frectCurrentTextureCoords );
|
this->SetCustomTextureRect( frectCurrentTextureCoords );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GradeDisplay::DrawPrimitives()
|
void GradeDisplay::DrawPrimitives()
|
||||||
@@ -69,6 +73,7 @@ void GradeDisplay::SetGrade( Grade g )
|
|||||||
{
|
{
|
||||||
m_Grade = g;
|
m_Grade = g;
|
||||||
|
|
||||||
|
m_bDoScrolling = false;
|
||||||
StopUsingCustomCoords();
|
StopUsingCustomCoords();
|
||||||
|
|
||||||
switch( g )
|
switch( g )
|
||||||
@@ -90,6 +95,9 @@ void GradeDisplay::SpinAndSettleOn( Grade g )
|
|||||||
ASSERT( g != GRADE_NO_DATA );
|
ASSERT( g != GRADE_NO_DATA );
|
||||||
m_Grade = g;
|
m_Grade = g;
|
||||||
|
|
||||||
|
m_bDoScrolling = true;
|
||||||
|
|
||||||
|
|
||||||
SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
||||||
|
|
||||||
int iFrameNo;
|
int iFrameNo;
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ protected:
|
|||||||
Grade m_Grade;
|
Grade m_Grade;
|
||||||
|
|
||||||
// for scrolling
|
// for scrolling
|
||||||
|
bool m_bDoScrolling;
|
||||||
FRECT m_frectStartTexCoords;
|
FRECT m_frectStartTexCoords;
|
||||||
FRECT m_frectDestTexCoords;
|
FRECT m_frectDestTexCoords;
|
||||||
float m_fTimeLeftInScroll;
|
float m_fTimeLeftInScroll;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ void HoldGhostArrow::Update( float fDeltaTime )
|
|||||||
|
|
||||||
if( m_fHeatLevel == 1 )
|
if( m_fHeatLevel == 1 )
|
||||||
{
|
{
|
||||||
bool bZooomALittle = (GetTickCount() % 50) > 25;
|
bool bZooomALittle = fmodf( TIMER->GetTimeSinceStart(), 1/20.0f ) > 1/40.0f;
|
||||||
SetZoom( bZooomALittle ? 1.04f : 1.0f );
|
SetZoom( bZooomALittle ? 1.04f : 1.0f );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -44,21 +44,21 @@ void HoldJudgement::DrawPrimitives()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HoldJudgement::SetHoldJudgement( HoldNoteResult result )
|
void HoldJudgement::SetHoldJudgement( HoldNoteScore hns )
|
||||||
{
|
{
|
||||||
//LOG->WriteLine( "Judgement::SetJudgement()" );
|
//LOG->WriteLine( "Judgement::SetJudgement()" );
|
||||||
|
|
||||||
switch( result )
|
switch( hns )
|
||||||
{
|
{
|
||||||
case HNR_NONE: m_sprJudgement.SetState( 0 ); break;
|
case HNS_NONE: m_sprJudgement.SetState( 0 ); break;
|
||||||
case HNR_OK: m_sprJudgement.SetState( 7 ); break;
|
case HNS_OK: m_sprJudgement.SetState( 7 ); break;
|
||||||
case HNR_NG: m_sprJudgement.SetState( 8 ); break;
|
case HNS_NG: m_sprJudgement.SetState( 8 ); break;
|
||||||
default: ASSERT( false );
|
default: ASSERT( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_fDisplayCountdown = JUDGEMENT_DISPLAY_TIME;
|
m_fDisplayCountdown = JUDGEMENT_DISPLAY_TIME;
|
||||||
|
|
||||||
if( result == HNR_NG )
|
if( hns == HNS_NG )
|
||||||
{
|
{
|
||||||
// falling down
|
// falling down
|
||||||
m_sprJudgement.SetY( -10 );
|
m_sprJudgement.SetY( -10 );
|
||||||
@@ -66,7 +66,7 @@ void HoldJudgement::SetHoldJudgement( HoldNoteResult result )
|
|||||||
m_sprJudgement.BeginTweening( JUDGEMENT_DISPLAY_TIME );
|
m_sprJudgement.BeginTweening( JUDGEMENT_DISPLAY_TIME );
|
||||||
m_sprJudgement.SetTweenY( 10 );
|
m_sprJudgement.SetTweenY( 10 );
|
||||||
}
|
}
|
||||||
else if( result == HNR_OK )
|
else // hns == HNS_OK
|
||||||
{
|
{
|
||||||
// zooming out
|
// zooming out
|
||||||
m_sprJudgement.SetZoom( 1.5f );
|
m_sprJudgement.SetZoom( 1.5f );
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class HoldJudgement : public ActorFrame
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HoldJudgement();
|
HoldJudgement();
|
||||||
void SetHoldJudgement( HoldNoteResult result );
|
void SetHoldJudgement( HoldNoteScore hns );
|
||||||
virtual void Update( float fDeltaTime );
|
virtual void Update( float fDeltaTime );
|
||||||
virtual void DrawPrimitives();
|
virtual void DrawPrimitives();
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "InputFilter.h"
|
#include "InputFilter.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "RageInput.h"
|
#include "RageInput.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
InputFilter* INPUTFILTER = NULL; // global and accessable from anywhere in our program
|
InputFilter* INPUTFILTER = NULL; // global and accessable from anywhere in our program
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ void InputMapper::ReadMappingsFromDisk()
|
|||||||
ini.SetPath( m_sCurrentGame + ".ini" );
|
ini.SetPath( m_sCurrentGame + ".ini" );
|
||||||
if( !ini.ReadFile() ) {
|
if( !ini.ReadFile() ) {
|
||||||
return; // load nothing
|
return; // load nothing
|
||||||
//FatalError( "could not read config file" );
|
//throw RageException( "could not read config file" );
|
||||||
}
|
}
|
||||||
|
|
||||||
CMapStringToString* pKey = ini.GetKeyPointer("Input");
|
CMapStringToString* pKey = ini.GetKeyPointer("Input");
|
||||||
@@ -235,6 +235,12 @@ DeviceInput InputMapper::MenuToDevice( MenuInput MenuI )
|
|||||||
|
|
||||||
void InputMapper::GameToStyle( GameInput GameI, StyleInput &StyleI )
|
void InputMapper::GameToStyle( GameInput GameI, StyleInput &StyleI )
|
||||||
{
|
{
|
||||||
|
if( GAMEMAN->m_CurStyle == STYLE_NONE )
|
||||||
|
{
|
||||||
|
StyleI.MakeBlank();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
StyleDef* pStyleDef = GAMEMAN->GetCurrentStyleDef();
|
StyleDef* pStyleDef = GAMEMAN->GetCurrentStyleDef();
|
||||||
StyleI = pStyleDef->GameInputToStyleInput( GameI );
|
StyleI = pStyleDef->GameInputToStyleInput( GameI );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Desc: Holds user-chosen preferences and saves it between sessions. This class
|
Desc: Holds user-chosen preferences and saves it between sessions. This class
|
||||||
also has temporary holders for information that passed between windows - e.g.
|
also has temporary holders for information that passed between windows - e.g.
|
||||||
ScoreSummary.
|
GameplayStatistics.
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
Chris Danford
|
Chris Danford
|
||||||
|
|||||||
+15
-16
@@ -21,35 +21,34 @@ public:
|
|||||||
InputQueue()
|
InputQueue()
|
||||||
{
|
{
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
m_aMenuButtonQueue[p].SetSize( MAX_INPUT_QUEUE_LENGTH );
|
m_aQueue[p].SetSize( MAX_INPUT_QUEUE_LENGTH );
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleInput( const PlayerNumber p, const MenuButton b )
|
void HandleInput( const PlayerNumber p, const MenuButton b )
|
||||||
{
|
{
|
||||||
if( m_aMenuButtonQueue[p].GetSize() >= MAX_INPUT_QUEUE_LENGTH ) // full
|
if( m_aQueue[p].GetSize() >= MAX_INPUT_QUEUE_LENGTH ) // full
|
||||||
m_aMenuButtonQueue[p].RemoveAt( 0, m_aMenuButtonQueue[p].GetSize()-MAX_INPUT_QUEUE_LENGTH+1 );
|
m_aQueue[p].RemoveAt( 0, m_aQueue[p].GetSize()-MAX_INPUT_QUEUE_LENGTH+1 );
|
||||||
m_aMenuButtonQueue[p].Add( MenuButtonAndTickCount(b,GetTickCount()) );
|
m_aQueue[p].Add( MenuButtonAndTime(b,TIMER->GetTimeSinceStart()) );
|
||||||
};
|
};
|
||||||
bool MatchesPattern( const PlayerNumber p, const MenuButton* button_sequence, const int iNumButtons, float fMaxSecondsBack = -1 )
|
bool MatchesPattern( const PlayerNumber p, const MenuButton* button_sequence, const int iNumButtons, float fMaxSecondsBack = -1 )
|
||||||
{
|
{
|
||||||
if( fMaxSecondsBack == -1 )
|
if( fMaxSecondsBack == -1 )
|
||||||
fMaxSecondsBack = 0.4f + iNumButtons*0.15f;
|
fMaxSecondsBack = 0.4f + iNumButtons*0.15f;
|
||||||
|
|
||||||
DWORD dwMaxTicksBack = roundf(fMaxSecondsBack*1000);
|
float fOldestTimeAllowed = TIMER->GetTimeSinceStart() - fMaxSecondsBack;
|
||||||
DWORD dwOldestTickAllowed = GetTickCount() - dwMaxTicksBack;
|
|
||||||
|
|
||||||
int sequence_index = iNumButtons-1; // count down
|
int sequence_index = iNumButtons-1; // count down
|
||||||
for( int queue_index=m_aMenuButtonQueue[p].GetSize()-1; queue_index>=0; queue_index-- ) // iterate newest to oldest
|
for( int queue_index=m_aQueue[p].GetSize()-1; queue_index>=0; queue_index-- ) // iterate newest to oldest
|
||||||
{
|
{
|
||||||
MenuButtonAndTickCount BandT = m_aMenuButtonQueue[p][queue_index];
|
MenuButtonAndTime BandT = m_aQueue[p][queue_index];
|
||||||
if( BandT.button != button_sequence[sequence_index] ||
|
if( BandT.button != button_sequence[sequence_index] ||
|
||||||
BandT.dwTickCount < dwOldestTickAllowed )
|
BandT.fTime < fOldestTimeAllowed )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if( sequence_index == 0 ) // we matched the whole pattern
|
if( sequence_index == 0 ) // we matched the whole pattern
|
||||||
{
|
{
|
||||||
m_aMenuButtonQueue[p].RemoveAll(); // empty the queue so we don't match on it again
|
m_aQueue[p].RemoveAll(); // empty the queue so we don't match on it again
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
sequence_index--;
|
sequence_index--;
|
||||||
@@ -58,14 +57,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct MenuButtonAndTickCount
|
struct MenuButtonAndTime
|
||||||
{
|
{
|
||||||
MenuButtonAndTickCount() {}
|
MenuButtonAndTime() {}
|
||||||
MenuButtonAndTickCount( MenuButton b, DWORD t ) { button = b; dwTickCount = t; };
|
MenuButtonAndTime( MenuButton b, float t ) { button = b; fTime = t; };
|
||||||
MenuButton button;
|
MenuButton button;
|
||||||
DWORD dwTickCount;
|
float fTime;
|
||||||
};
|
};
|
||||||
CArray<MenuButtonAndTickCount,MenuButtonAndTickCount> m_aMenuButtonQueue[NUM_PLAYERS];
|
CArray<MenuButtonAndTime,MenuButtonAndTime> m_aQueue[NUM_PLAYERS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ void LifeMeterBar::DrawPrimitives()
|
|||||||
|
|
||||||
int iNumV = 0;
|
int iNumV = 0;
|
||||||
|
|
||||||
float fPercentIntoSection = (GetTickCount()/300.0f)*SECTION_WIDTH;
|
float fPercentIntoSection = (TIMER->GetTimeSinceStart()/0.3f)*SECTION_WIDTH;
|
||||||
fPercentIntoSection -= (int)fPercentIntoSection;
|
fPercentIntoSection -= (int)fPercentIntoSection;
|
||||||
fPercentIntoSection = 1-fPercentIntoSection;
|
fPercentIntoSection = 1-fPercentIntoSection;
|
||||||
fPercentIntoSection -= (int)fPercentIntoSection;
|
fPercentIntoSection -= (int)fPercentIntoSection;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
#include "ScreenManager.h"
|
#include "ScreenManager.h"
|
||||||
|
|
||||||
const float TIMER_SECONDS = 40;
|
const float TIMER_SECONDS = 99;
|
||||||
|
|
||||||
MenuTimer::MenuTimer()
|
MenuTimer::MenuTimer()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public:
|
|||||||
case TYPE_CROWN2:
|
case TYPE_CROWN2:
|
||||||
case TYPE_CROWN3:
|
case TYPE_CROWN3:
|
||||||
// blink
|
// blink
|
||||||
if( (GetTickCount() % 1000) > 500 ) // show the new icon
|
if( (TIMER->GetTimeSinceStart() - (int)TIMER->GetTimeSinceStart()) > 0.5f ) // show the new icon
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case TYPE_NONE:
|
case TYPE_NONE:
|
||||||
|
|||||||
+245
-165
@@ -66,11 +66,12 @@ WheelItemData::WheelItemData()
|
|||||||
m_MusicStatusDisplayType = TYPE_NONE;
|
m_MusicStatusDisplayType = TYPE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WheelItemData::Load( WheelItemType wit, Song* pSong, const CString &sSectionName, const D3DXCOLOR color )
|
void WheelItemData::Load( WheelItemType wit, Song* pSong, const CString &sSectionName, Course* pCourse, const D3DXCOLOR color )
|
||||||
{
|
{
|
||||||
m_WheelItemType = wit;
|
m_WheelItemType = wit;
|
||||||
m_pSong = pSong;
|
m_pSong = pSong;
|
||||||
m_sSectionName = sSectionName;
|
m_sSectionName = sSectionName;
|
||||||
|
m_pCourse = pCourse;
|
||||||
m_color = color;
|
m_color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,6 +111,15 @@ WheelItemDisplay::WheelItemDisplay()
|
|||||||
m_GradeDisplay[p].SetZoom( 1.0f );
|
m_GradeDisplay[p].SetZoom( 1.0f );
|
||||||
m_GradeDisplay[p].SetXY( 90.0f + p*30.0f, 0 );
|
m_GradeDisplay[p].SetXY( 90.0f + p*30.0f, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_textCourse.Load( THEME->GetPathTo(FONT_TEXT_BANNER) );
|
||||||
|
m_textCourse.TurnShadowOff();
|
||||||
|
m_textCourse.SetText( "ROULETTE" );
|
||||||
|
m_textCourse.TurnRainbowOn();
|
||||||
|
m_textCourse.SetZoom( 1.3f );
|
||||||
|
m_textCourse.SetHorizAlign( align_left );
|
||||||
|
m_textCourse.SetXY( -120, 0 );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -119,11 +129,11 @@ void WheelItemDisplay::LoadFromWheelItemData( WheelItemData* pWID )
|
|||||||
|
|
||||||
|
|
||||||
// copy all data items
|
// copy all data items
|
||||||
m_WheelItemType = pWID->m_WheelItemType;
|
this->m_WheelItemType = pWID->m_WheelItemType;
|
||||||
m_sSectionName = pWID->m_sSectionName;
|
this->m_sSectionName = pWID->m_sSectionName;
|
||||||
m_pSong = pWID->m_pSong;
|
this->m_pCourse = pWID->m_pCourse;
|
||||||
m_color = pWID->m_color;
|
this->m_pSong = pWID->m_pSong;
|
||||||
m_MusicStatusDisplayType = pWID->m_MusicStatusDisplayType;
|
this->m_color = pWID->m_color;
|
||||||
|
|
||||||
|
|
||||||
// init type specific stuff
|
// init type specific stuff
|
||||||
@@ -132,16 +142,16 @@ void WheelItemDisplay::LoadFromWheelItemData( WheelItemData* pWID )
|
|||||||
|
|
||||||
case TYPE_SECTION:
|
case TYPE_SECTION:
|
||||||
{
|
{
|
||||||
CString sDisplayName = SONGMAN->ShortenGroupName(m_sSectionName);
|
CString sDisplayName = SONGMAN->ShortenGroupName(m_sSectionName);
|
||||||
m_textSectionName.SetZoom( 1 );
|
m_textSectionName.SetZoom( 1 );
|
||||||
m_textSectionName.SetText( sDisplayName );
|
m_textSectionName.SetText( sDisplayName );
|
||||||
m_textSectionName.SetDiffuseColor( m_color );
|
m_textSectionName.SetDiffuseColor( m_color );
|
||||||
m_textSectionName.TurnRainbowOff();
|
m_textSectionName.TurnRainbowOff();
|
||||||
|
|
||||||
float fSourcePixelWidth = (float)m_textSectionName.GetWidestLineWidthInSourcePixels();
|
float fSourcePixelWidth = (float)m_textSectionName.GetWidestLineWidthInSourcePixels();
|
||||||
float fMaxTextWidth = 200;
|
float fMaxTextWidth = 200;
|
||||||
if( fSourcePixelWidth > fMaxTextWidth )
|
if( fSourcePixelWidth > fMaxTextWidth )
|
||||||
m_textSectionName.SetZoomX( fMaxTextWidth / fSourcePixelWidth );
|
m_textSectionName.SetZoomX( fMaxTextWidth / fSourcePixelWidth );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_SONG:
|
case TYPE_SONG:
|
||||||
@@ -160,6 +170,19 @@ void WheelItemDisplay::LoadFromWheelItemData( WheelItemData* pWID )
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TYPE_COURSE:
|
||||||
|
{
|
||||||
|
m_textCourse.SetZoom( 1 );
|
||||||
|
m_textCourse.SetText( m_pCourse->m_sName );
|
||||||
|
m_textCourse.SetDiffuseColor( m_color );
|
||||||
|
m_textCourse.TurnRainbowOff();
|
||||||
|
|
||||||
|
float fSourcePixelWidth = (float)m_textCourse.GetWidestLineWidthInSourcePixels();
|
||||||
|
float fMaxTextWidth = 200;
|
||||||
|
if( fSourcePixelWidth > fMaxTextWidth )
|
||||||
|
m_textCourse.SetZoomX( fMaxTextWidth / fSourcePixelWidth );
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT( false ); // invalid type
|
ASSERT( false ); // invalid type
|
||||||
}
|
}
|
||||||
@@ -181,7 +204,7 @@ void WheelItemDisplay::RefreshGrades()
|
|||||||
const DifficultyClass dc = PREFSMAN->m_PreferredDifficultyClass[p];
|
const DifficultyClass dc = PREFSMAN->m_PreferredDifficultyClass[p];
|
||||||
const Grade grade = m_pSong->GetGradeForDifficultyClass( GAMEMAN->GetCurrentStyleDef()->m_NotesType, dc );
|
const Grade grade = m_pSong->GetGradeForDifficultyClass( GAMEMAN->GetCurrentStyleDef()->m_NotesType, dc );
|
||||||
m_GradeDisplay[p].SetGrade( grade );
|
m_GradeDisplay[p].SetGrade( grade );
|
||||||
//m_GradeDisplay[p].SetDiffuseColor( PlayerToColor((PlayerNumber)p) );
|
m_GradeDisplay[p].SetDiffuseColor( PlayerToColor((PlayerNumber)p) );
|
||||||
}
|
}
|
||||||
else // this is a section display
|
else // this is a section display
|
||||||
{
|
{
|
||||||
@@ -207,12 +230,20 @@ void WheelItemDisplay::Update( float fDeltaTime )
|
|||||||
m_textRoulette.Update( fDeltaTime );
|
m_textRoulette.Update( fDeltaTime );
|
||||||
break;
|
break;
|
||||||
case TYPE_SONG:
|
case TYPE_SONG:
|
||||||
m_sprSongBar.Update( fDeltaTime );
|
{
|
||||||
m_MusicStatusDisplay.Update( fDeltaTime );
|
m_sprSongBar.Update( fDeltaTime );
|
||||||
m_TextBanner.Update( fDeltaTime );
|
m_MusicStatusDisplay.Update( fDeltaTime );
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
m_TextBanner.Update( fDeltaTime );
|
||||||
m_GradeDisplay[p].Update( fDeltaTime );
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
m_GradeDisplay[p].Update( fDeltaTime );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
case TYPE_COURSE:
|
||||||
|
m_sprSongBar.Update( fDeltaTime );
|
||||||
|
m_textCourse.Update( fDeltaTime );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,12 +260,20 @@ void WheelItemDisplay::DrawPrimitives()
|
|||||||
m_textRoulette.Draw();
|
m_textRoulette.Draw();
|
||||||
break;
|
break;
|
||||||
case TYPE_SONG:
|
case TYPE_SONG:
|
||||||
m_sprSongBar.Draw();
|
{
|
||||||
m_MusicStatusDisplay.Draw();
|
m_sprSongBar.Draw();
|
||||||
m_TextBanner.Draw();
|
m_MusicStatusDisplay.Draw();
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
m_TextBanner.Draw();
|
||||||
m_GradeDisplay[p].Draw();
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
m_GradeDisplay[p].Draw();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
case TYPE_COURSE:
|
||||||
|
m_sprSongBar.Draw();
|
||||||
|
m_textCourse.Draw();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,6 +328,7 @@ MusicWheel::MusicWheel()
|
|||||||
m_soundChangeMusic.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_CHANGE_MUSIC), 10 );
|
m_soundChangeMusic.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_CHANGE_MUSIC), 10 );
|
||||||
m_soundChangeSort.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_CHANGE_SORT) );
|
m_soundChangeSort.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_CHANGE_SORT) );
|
||||||
m_soundExpand.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_SECTION_EXPAND) );
|
m_soundExpand.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_SECTION_EXPAND) );
|
||||||
|
m_soundExpand.Load( THEME->GetPathTo(SOUND_MENU_START) );
|
||||||
|
|
||||||
|
|
||||||
// init m_mapGroupNameToBannerColor
|
// init m_mapGroupNameToBannerColor
|
||||||
@@ -358,103 +398,127 @@ void MusicWheel::BuildWheelItemDatas( CArray<WheelItemData, WheelItemData&> &arr
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
///////////////////////////////////
|
switch( PREFSMAN->m_PlayMode )
|
||||||
// Make an array of Song*, then sort them
|
|
||||||
///////////////////////////////////
|
|
||||||
CArray<Song*, Song*> arraySongs;
|
|
||||||
|
|
||||||
// copy only song that have at least one Notes for the current GameMode
|
|
||||||
for( i=0; i<SONGMAN->m_pSongs.GetSize(); i++ )
|
|
||||||
{
|
{
|
||||||
Song* pSong = SONGMAN->m_pSongs[i];
|
case PLAY_MODE_ARCADE:
|
||||||
|
{
|
||||||
|
///////////////////////////////////
|
||||||
|
// Make an array of Song*, then sort them
|
||||||
|
///////////////////////////////////
|
||||||
|
CArray<Song*, Song*> arraySongs;
|
||||||
|
|
||||||
CArray<Notes*, Notes*> arraySteps;
|
// copy only song that have at least one Notes for the current GameMode
|
||||||
pSong->GetNotesThatMatch( GAMEMAN->GetCurrentStyleDef()->m_NotesType, arraySteps );
|
for( i=0; i<SONGMAN->m_pSongs.GetSize(); i++ )
|
||||||
|
{
|
||||||
|
Song* pSong = SONGMAN->m_pSongs[i];
|
||||||
|
|
||||||
if( arraySteps.GetSize() > 0 )
|
CArray<Notes*, Notes*> arraySteps;
|
||||||
arraySongs.Add( pSong );
|
pSong->GetNotesThatMatch( GAMEMAN->GetCurrentStyleDef()->m_NotesType, arraySteps );
|
||||||
}
|
|
||||||
|
if( arraySteps.GetSize() > 0 )
|
||||||
|
arraySongs.Add( pSong );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// sort the SONGMAN
|
// sort the SONGMAN
|
||||||
switch( so )
|
switch( so )
|
||||||
{
|
{
|
||||||
case SORT_GROUP:
|
case SORT_GROUP:
|
||||||
SortSongPointerArrayByGroup( arraySongs );
|
SortSongPointerArrayByGroup( arraySongs );
|
||||||
|
break;
|
||||||
|
case SORT_TITLE:
|
||||||
|
SortSongPointerArrayByTitle( arraySongs );
|
||||||
|
break;
|
||||||
|
case SORT_BPM:
|
||||||
|
SortSongPointerArrayByBPM( arraySongs );
|
||||||
|
break;
|
||||||
|
// case SORT_ARTIST:
|
||||||
|
// SortSongPointerArrayByArtist( arraySongs );
|
||||||
|
// break;
|
||||||
|
case SORT_MOST_PLAYED:
|
||||||
|
SortSongPointerArrayByMostPlayed( arraySongs );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT( false ); // unhandled SORT_ORDER
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////
|
||||||
|
// Build an array of WheelItemDatas from the sorted list of Song*
|
||||||
|
///////////////////////////////////
|
||||||
|
arrayWheelItemDatas.RemoveAll(); // clear out the previous wheel items...
|
||||||
|
|
||||||
|
// ...and load new ones
|
||||||
|
|
||||||
|
bool bUseSections;
|
||||||
|
switch( so )
|
||||||
|
{
|
||||||
|
case SORT_MOST_PLAYED: bUseSections = false; break;
|
||||||
|
case SORT_BPM: bUseSections = false; break;
|
||||||
|
case SORT_GROUP: bUseSections = SONGMAN->m_sPreferredGroup != "ALL MUSIC"; break;
|
||||||
|
case SORT_TITLE: bUseSections = true; break;
|
||||||
|
default: ASSERT( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( bUseSections )
|
||||||
|
{
|
||||||
|
// make WheelItemDatas with sections
|
||||||
|
arrayWheelItemDatas.SetSize( arraySongs.GetSize()*2 ); // make sure we have enough room for all music and section items
|
||||||
|
|
||||||
|
CString sLastSection = "";
|
||||||
|
D3DXCOLOR colorSection;
|
||||||
|
int iCurWheelItem = 0;
|
||||||
|
for( int i=0; i< arraySongs.GetSize(); i++ )
|
||||||
|
{
|
||||||
|
Song* pSong = arraySongs[i];
|
||||||
|
CString sThisSection = GetSectionNameFromSongAndSort( pSong, so );
|
||||||
|
int iSectionColorIndex = 0;
|
||||||
|
if( sThisSection != sLastSection ) // new section, make a section item
|
||||||
|
{
|
||||||
|
WheelItemData &WID = arrayWheelItemDatas[iCurWheelItem++];
|
||||||
|
colorSection = (so==SORT_TITLE) ? SONGMAN->GetGroupColor(pSong->GetGroupName()) : SECTION_COLORS[iSectionColorIndex];
|
||||||
|
iSectionColorIndex = (iSectionColorIndex+1) % NUM_SECTION_COLORS;
|
||||||
|
WID.Load( TYPE_SECTION, NULL, sThisSection, NULL, colorSection );
|
||||||
|
sLastSection = sThisSection;
|
||||||
|
}
|
||||||
|
|
||||||
|
WheelItemData &WID = arrayWheelItemDatas[iCurWheelItem++];
|
||||||
|
WID.Load( TYPE_SONG, pSong, sThisSection, NULL, SONGMAN->GetGroupColor(pSong->GetGroupName()) );
|
||||||
|
}
|
||||||
|
arrayWheelItemDatas.SetSize( iCurWheelItem ); // make sure we have enough room for all music and section items
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arrayWheelItemDatas.SetSize( arraySongs.GetSize() );
|
||||||
|
{
|
||||||
|
for( int i=0; i<arraySongs.GetSize(); i++ )
|
||||||
|
{
|
||||||
|
Song* pSong = arraySongs[i];
|
||||||
|
WheelItemData &WID = arrayWheelItemDatas[i];
|
||||||
|
WID.Load( TYPE_SONG, pSong, "", NULL, SONGMAN->GetGroupColor(pSong->GetGroupName()) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SORT_TITLE:
|
case PLAY_MODE_ONI:
|
||||||
SortSongPointerArrayByTitle( arraySongs );
|
{
|
||||||
break;
|
arrayWheelItemDatas.SetSize( 0, 20 ); // clear out the previous wheel items...
|
||||||
case SORT_BPM:
|
for( int c=0; c<SONGMAN->m_aCourses.GetSize(); c++ ) // foreach course
|
||||||
SortSongPointerArrayByBPM( arraySongs );
|
{
|
||||||
break;
|
Course* pCourse = &SONGMAN->m_aCourses[c];
|
||||||
// case SORT_ARTIST:
|
if( GAMEMAN->GetCurrentStyleDef()->m_NotesType == pCourse->m_NotesType )
|
||||||
// SortSongPointerArrayByArtist( arraySongs );
|
{
|
||||||
// break;
|
arrayWheelItemDatas.Add( WheelItemData() );
|
||||||
case SORT_MOST_PLAYED:
|
WheelItemData &WID = arrayWheelItemDatas[arrayWheelItemDatas.GetSize()-1];
|
||||||
SortSongPointerArrayByMostPlayed( arraySongs );
|
WID.Load( TYPE_COURSE, NULL, "", pCourse, D3DXCOLOR(1,1,1,1) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT( false ); // unhandled SORT_ORDER
|
ASSERT(0); // invalid PlayMode
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////
|
|
||||||
// Build an array of WheelItemDatas from the sorted list of Song*
|
|
||||||
///////////////////////////////////
|
|
||||||
arrayWheelItemDatas.RemoveAll(); // clear out the previous wheel items...
|
|
||||||
|
|
||||||
// ...and load new ones
|
|
||||||
|
|
||||||
bool bUseSections;
|
|
||||||
switch( so )
|
|
||||||
{
|
|
||||||
case SORT_MOST_PLAYED: bUseSections = false; break;
|
|
||||||
case SORT_BPM: bUseSections = false; break;
|
|
||||||
case SORT_GROUP: bUseSections = SONGMAN->m_sPreferredGroup != "ALL MUSIC"; break;
|
|
||||||
case SORT_TITLE: bUseSections = true; break;
|
|
||||||
default: ASSERT( false );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( bUseSections )
|
|
||||||
{
|
|
||||||
// make WheelItemDatas with sections
|
|
||||||
arrayWheelItemDatas.SetSize( arraySongs.GetSize()*2 ); // make sure we have enough room for all music and section items
|
|
||||||
|
|
||||||
CString sLastSection = "";
|
|
||||||
D3DXCOLOR colorSection;
|
|
||||||
int iCurWheelItem = 0;
|
|
||||||
for( int i=0; i< arraySongs.GetSize(); i++ )
|
|
||||||
{
|
|
||||||
Song* pSong = arraySongs[i];
|
|
||||||
CString sThisSection = GetSectionNameFromSongAndSort( pSong, so );
|
|
||||||
int iSectionColorIndex = 0;
|
|
||||||
if( sThisSection != sLastSection ) // new section, make a section item
|
|
||||||
{
|
|
||||||
WheelItemData &WID = arrayWheelItemDatas[iCurWheelItem++];
|
|
||||||
colorSection = (so==SORT_TITLE) ? SONGMAN->GetGroupColor(pSong->GetGroupName()) : SECTION_COLORS[iSectionColorIndex];
|
|
||||||
iSectionColorIndex = (iSectionColorIndex+1) % NUM_SECTION_COLORS;
|
|
||||||
WID.Load( TYPE_SECTION, NULL, sThisSection, colorSection );
|
|
||||||
sLastSection = sThisSection;
|
|
||||||
}
|
|
||||||
|
|
||||||
WheelItemData &WID = arrayWheelItemDatas[iCurWheelItem++];
|
|
||||||
WID.Load( TYPE_SONG, pSong, sThisSection, SONGMAN->GetGroupColor(pSong->GetGroupName()) );
|
|
||||||
}
|
|
||||||
arrayWheelItemDatas.SetSize( iCurWheelItem ); // make sure we have enough room for all music and section items
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arrayWheelItemDatas.SetSize( arraySongs.GetSize() );
|
|
||||||
{
|
|
||||||
for( int i=0; i<arraySongs.GetSize(); i++ )
|
|
||||||
{
|
|
||||||
Song* pSong = arraySongs[i];
|
|
||||||
WheelItemData &WID = arrayWheelItemDatas[i];
|
|
||||||
WID.Load( TYPE_SONG, pSong, "", SONGMAN->GetGroupColor(pSong->GetGroupName()) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// init crowns
|
// init crowns
|
||||||
@@ -481,12 +545,12 @@ void MusicWheel::BuildWheelItemDatas( CArray<WheelItemData, WheelItemData&> &arr
|
|||||||
if( arrayWheelItemDatas.GetSize() == 0 )
|
if( arrayWheelItemDatas.GetSize() == 0 )
|
||||||
{
|
{
|
||||||
arrayWheelItemDatas.SetSize( 1 );
|
arrayWheelItemDatas.SetSize( 1 );
|
||||||
arrayWheelItemDatas[0].Load( TYPE_SECTION, NULL, "NO SONGS", D3DXCOLOR(1,0,0,1) );
|
arrayWheelItemDatas[0].Load( TYPE_SECTION, NULL, "NO SONGS", NULL, D3DXCOLOR(1,0,0,1) );
|
||||||
}
|
}
|
||||||
else
|
else if( PREFSMAN->m_PlayMode == PLAY_MODE_ARCADE )
|
||||||
{
|
{
|
||||||
arrayWheelItemDatas.SetSize( arrayWheelItemDatas.GetSize()+1 );
|
arrayWheelItemDatas.SetSize( arrayWheelItemDatas.GetSize()+1 );
|
||||||
arrayWheelItemDatas[arrayWheelItemDatas.GetSize()-1].Load( TYPE_ROULETTE, NULL, "", D3DXCOLOR(1,0,0,1) );
|
arrayWheelItemDatas[arrayWheelItemDatas.GetSize()-1].Load( TYPE_ROULETTE, NULL, "", NULL, D3DXCOLOR(1,0,0,1) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,7 +651,7 @@ void MusicWheel::NotesChanged( PlayerNumber pn ) // update grade graphics and to
|
|||||||
Notes* m_pNotes = SONGMAN->GetCurrentNotes( pn );
|
Notes* m_pNotes = SONGMAN->GetCurrentNotes( pn );
|
||||||
|
|
||||||
if( m_pNotes )
|
if( m_pNotes )
|
||||||
m_HighScore[pn].SetScore( (float)m_pNotes->m_iTopScore );
|
m_HighScore[pn].SetScore( m_pNotes->m_iTopScore );
|
||||||
|
|
||||||
for( int i=0; i<NUM_WHEEL_ITEMS_TO_DRAW; i++ )
|
for( int i=0; i<NUM_WHEEL_ITEMS_TO_DRAW; i++ )
|
||||||
{
|
{
|
||||||
@@ -643,6 +707,13 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
float fScrollPercentage = (m_iSelection-m_fPositionOffsetFromSelection) / (float)GetCurWheelItemDatas().GetSize();
|
float fScrollPercentage = (m_iSelection-m_fPositionOffsetFromSelection) / (float)GetCurWheelItemDatas().GetSize();
|
||||||
m_ScrollBar.SetPercentage( fScrollPercentage );
|
m_ScrollBar.SetPercentage( fScrollPercentage );
|
||||||
|
|
||||||
|
if( m_WheelState == STATE_ROULETTE_SPINNING )
|
||||||
|
{
|
||||||
|
float fOldMod = fmodf( TIMER->GetTimeSinceStart()-fDeltaTime, SWITCH_MUSIC_TIME );
|
||||||
|
float fNewMod = fmodf( TIMER->GetTimeSinceStart(), SWITCH_MUSIC_TIME );
|
||||||
|
if( fNewMod < fOldMod ) // wrapped
|
||||||
|
NextMusic();
|
||||||
|
}
|
||||||
|
|
||||||
// update wheel state
|
// update wheel state
|
||||||
m_fTimeLeftInState -= fDeltaTime;
|
m_fTimeLeftInState -= fDeltaTime;
|
||||||
@@ -656,55 +727,54 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
break;
|
break;
|
||||||
case STATE_FLYING_OFF_BEFORE_NEXT_SORT:
|
case STATE_FLYING_OFF_BEFORE_NEXT_SORT:
|
||||||
{
|
{
|
||||||
m_WheelState = STATE_FLYING_ON_AFTER_NEXT_SORT;
|
m_WheelState = STATE_FLYING_ON_AFTER_NEXT_SORT;
|
||||||
m_fTimeLeftInState = FADE_TIME;
|
m_fTimeLeftInState = FADE_TIME;
|
||||||
|
|
||||||
Song* pPrevSelectedSong = GetCurWheelItemDatas()[m_iSelection].m_pSong;
|
Song* pPrevSelectedSong = GetCurWheelItemDatas()[m_iSelection].m_pSong;
|
||||||
CString sPrevSelectedSection = GetCurWheelItemDatas()[m_iSelection].m_sSectionName;
|
CString sPrevSelectedSection = GetCurWheelItemDatas()[m_iSelection].m_sSectionName;
|
||||||
|
|
||||||
// change the sort order
|
// change the sort order
|
||||||
m_SortOrder = SongSortOrder(m_SortOrder+1);
|
m_SortOrder = SongSortOrder(m_SortOrder+1);
|
||||||
if( m_SortOrder > NUM_SORT_ORDERS-1 )
|
if( m_SortOrder > NUM_SORT_ORDERS-1 )
|
||||||
m_SortOrder = (SongSortOrder)0;
|
m_SortOrder = (SongSortOrder)0;
|
||||||
m_sExpandedSectionName = GetSectionNameFromSongAndSort( pPrevSelectedSong, m_SortOrder );
|
m_sExpandedSectionName = GetSectionNameFromSongAndSort( pPrevSelectedSong, m_SortOrder );
|
||||||
//RebuildWheelItems();
|
//RebuildWheelItems();
|
||||||
|
|
||||||
m_MusicSortDisplay.Set( m_SortOrder );
|
m_MusicSortDisplay.Set( m_SortOrder );
|
||||||
m_MusicSortDisplay.BeginTweening( FADE_TIME, TWEEN_BIAS_BEGIN );
|
m_MusicSortDisplay.BeginTweening( FADE_TIME, TWEEN_BIAS_BEGIN );
|
||||||
m_MusicSortDisplay.SetTweenXY( SORT_ICON_ON_SCREEN_X, SORT_ICON_ON_SCREEN_Y );
|
m_MusicSortDisplay.SetTweenXY( SORT_ICON_ON_SCREEN_X, SORT_ICON_ON_SCREEN_Y );
|
||||||
|
|
||||||
|
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
|
|
||||||
if( pPrevSelectedSong != NULL ) // the previous selected item was a song
|
if( pPrevSelectedSong != NULL ) // the previous selected item was a song
|
||||||
{
|
|
||||||
// find the previously selected song, and select it
|
|
||||||
for( i=0; i<GetCurWheelItemDatas().GetSize(); i++ )
|
|
||||||
{
|
{
|
||||||
if( GetCurWheelItemDatas()[i].m_pSong == pPrevSelectedSong )
|
// find the previously selected song, and select it
|
||||||
|
for( i=0; i<GetCurWheelItemDatas().GetSize(); i++ )
|
||||||
{
|
{
|
||||||
m_iSelection = i;
|
if( GetCurWheelItemDatas()[i].m_pSong == pPrevSelectedSong )
|
||||||
break;
|
{
|
||||||
|
m_iSelection = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else // the previously selected item was a section
|
||||||
else // the previously selected item was a section
|
|
||||||
{
|
|
||||||
// find the previously selected song, and select it
|
|
||||||
for( i=0; i<GetCurWheelItemDatas().GetSize(); i++ )
|
|
||||||
{
|
{
|
||||||
if( GetCurWheelItemDatas()[i].m_sSectionName == sPrevSelectedSection )
|
// find the previously selected song, and select it
|
||||||
|
for( i=0; i<GetCurWheelItemDatas().GetSize(); i++ )
|
||||||
{
|
{
|
||||||
m_iSelection = i;
|
if( GetCurWheelItemDatas()[i].m_sSectionName == sPrevSelectedSection )
|
||||||
break;
|
{
|
||||||
|
m_iSelection = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
RebuildWheelItemDisplays();
|
RebuildWheelItemDisplays();
|
||||||
|
|
||||||
TweenOnScreen();
|
|
||||||
|
|
||||||
|
TweenOnScreen();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case STATE_FLYING_ON_AFTER_NEXT_SORT:
|
case STATE_FLYING_ON_AFTER_NEXT_SORT:
|
||||||
@@ -723,6 +793,10 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
m_fTimeLeftInState = 0;
|
m_fTimeLeftInState = 0;
|
||||||
break;
|
break;
|
||||||
|
case STATE_ROULETTE_SLOWING_DOWN:
|
||||||
|
m_WheelState = STATE_IDLE;
|
||||||
|
m_fTimeLeftInState = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -745,6 +819,8 @@ void MusicWheel::PrevMusic()
|
|||||||
{
|
{
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
case STATE_SWITCHING_MUSIC:
|
case STATE_SWITCHING_MUSIC:
|
||||||
|
case STATE_ROULETTE_SPINNING:
|
||||||
|
case STATE_ROULETTE_SLOWING_DOWN:
|
||||||
break; // fall through
|
break; // fall through
|
||||||
default:
|
default:
|
||||||
return; // don't fall through
|
return; // don't fall through
|
||||||
@@ -759,7 +835,7 @@ void MusicWheel::PrevMusic()
|
|||||||
if( m_iSelection < 0 )
|
if( m_iSelection < 0 )
|
||||||
m_iSelection = GetCurWheelItemDatas().GetSize()-1;
|
m_iSelection = GetCurWheelItemDatas().GetSize()-1;
|
||||||
}
|
}
|
||||||
while( GetCurWheelItemDatas()[m_iSelection].m_WheelItemType == TYPE_SONG
|
while( (GetCurWheelItemDatas()[m_iSelection].m_WheelItemType == TYPE_SONG || GetCurWheelItemDatas()[m_iSelection].m_WheelItemType == TYPE_COURSE)
|
||||||
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != ""
|
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != ""
|
||||||
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != m_sExpandedSectionName );
|
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != m_sExpandedSectionName );
|
||||||
|
|
||||||
@@ -778,6 +854,8 @@ void MusicWheel::NextMusic()
|
|||||||
{
|
{
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
case STATE_SWITCHING_MUSIC:
|
case STATE_SWITCHING_MUSIC:
|
||||||
|
case STATE_ROULETTE_SPINNING:
|
||||||
|
case STATE_ROULETTE_SLOWING_DOWN:
|
||||||
break; // fall through
|
break; // fall through
|
||||||
default:
|
default:
|
||||||
return; // don't continue
|
return; // don't continue
|
||||||
@@ -792,7 +870,7 @@ void MusicWheel::NextMusic()
|
|||||||
if( m_iSelection > GetCurWheelItemDatas().GetSize()-1 )
|
if( m_iSelection > GetCurWheelItemDatas().GetSize()-1 )
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
}
|
}
|
||||||
while( GetCurWheelItemDatas()[m_iSelection].m_WheelItemType == TYPE_SONG
|
while( (GetCurWheelItemDatas()[m_iSelection].m_WheelItemType == TYPE_SONG || GetCurWheelItemDatas()[m_iSelection].m_WheelItemType == TYPE_COURSE)
|
||||||
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != ""
|
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != ""
|
||||||
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != m_sExpandedSectionName );
|
&& GetCurWheelItemDatas()[m_iSelection].m_sSectionName != m_sExpandedSectionName );
|
||||||
|
|
||||||
@@ -834,8 +912,15 @@ void MusicWheel::NextSort()
|
|||||||
m_fTimeLeftInState = FADE_TIME;
|
m_fTimeLeftInState = FADE_TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MusicWheel::Select()
|
bool MusicWheel::Select() // return true of a playable item was chosen
|
||||||
{
|
{
|
||||||
|
if( m_WheelState == STATE_ROULETTE_SPINNING )
|
||||||
|
{
|
||||||
|
m_WheelState = STATE_ROULETTE_SLOWING_DOWN;
|
||||||
|
m_fTimeLeftInState = 20;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
switch( GetCurWheelItemDatas()[m_iSelection].m_WheelItemType )
|
switch( GetCurWheelItemDatas()[m_iSelection].m_WheelItemType )
|
||||||
{
|
{
|
||||||
case TYPE_SECTION:
|
case TYPE_SECTION:
|
||||||
@@ -868,6 +953,8 @@ bool MusicWheel::Select()
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
case TYPE_ROULETTE:
|
case TYPE_ROULETTE:
|
||||||
|
m_soundExpand.Play();
|
||||||
|
m_WheelState = STATE_ROULETTE_SPINNING;
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case TYPE_SONG:
|
case TYPE_SONG:
|
||||||
@@ -888,14 +975,6 @@ void MusicWheel::TweenOnScreen()
|
|||||||
m_MusicSortDisplay.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
m_MusicSortDisplay.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
||||||
|
|
||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
|
||||||
{
|
|
||||||
float fOriginalX = m_HighScore[p].GetX();
|
|
||||||
m_HighScore[p].SetX( fOriginalX+320 );
|
|
||||||
m_HighScore[p].BeginTweening( 0.2f, Actor::TWEEN_BIAS_END );
|
|
||||||
m_HighScore[p].SetTweenX( fOriginalX );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float fX, fY;
|
float fX, fY;
|
||||||
|
|
||||||
@@ -907,6 +986,7 @@ void MusicWheel::TweenOnScreen()
|
|||||||
m_frameOverlay.SetTweenX( fX );
|
m_frameOverlay.SetTweenX( fX );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fX = m_ScrollBar.GetX();
|
fX = m_ScrollBar.GetX();
|
||||||
fY = m_ScrollBar.GetY();
|
fY = m_ScrollBar.GetY();
|
||||||
m_ScrollBar.SetXY( fX+30, fY );
|
m_ScrollBar.SetXY( fX+30, fY );
|
||||||
@@ -943,8 +1023,8 @@ void MusicWheel::TweenOffScreen()
|
|||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
m_HighScore[p].BeginTweening( 0.2f, Actor::TWEEN_BIAS_END );
|
// m_HighScore[p].BeginTweening( 0.2f, Actor::TWEEN_BIAS_END );
|
||||||
m_HighScore[p].SetTweenX( m_HighScore[p].GetX()+320 );
|
// m_HighScore[p].SetTweenX( m_HighScore[p].GetX()+320 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,10 @@
|
|||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
#include "MusicSortDisplay.h"
|
#include "MusicSortDisplay.h"
|
||||||
#include "MusicStatusDisplay.h"
|
#include "MusicStatusDisplay.h"
|
||||||
#include "Screen.h" // for ScreenMessage
|
#include "Screen.h" // for ScreenMessage
|
||||||
#include "ScoreDisplayRolling.h"
|
#include "ScoreDisplayRolling.h"
|
||||||
#include "ScrollBar.h"
|
#include "ScrollBar.h"
|
||||||
|
#include "Course.h"
|
||||||
|
|
||||||
|
|
||||||
const int NUM_WHEEL_ITEMS_TO_DRAW = 13;
|
const int NUM_WHEEL_ITEMS_TO_DRAW = 13;
|
||||||
@@ -34,7 +35,7 @@ const ScreenMessage SM_SongChanged = ScreenMessage(SM_User+47); // this should
|
|||||||
const ScreenMessage SM_PlaySongSample = ScreenMessage(SM_User+48);
|
const ScreenMessage SM_PlaySongSample = ScreenMessage(SM_User+48);
|
||||||
|
|
||||||
|
|
||||||
enum WheelItemType { TYPE_SECTION, TYPE_SONG, TYPE_ROULETTE };
|
enum WheelItemType { TYPE_SECTION, TYPE_SONG, TYPE_ROULETTE, TYPE_COURSE };
|
||||||
|
|
||||||
|
|
||||||
struct WheelItemData
|
struct WheelItemData
|
||||||
@@ -42,18 +43,19 @@ struct WheelItemData
|
|||||||
public:
|
public:
|
||||||
WheelItemData();
|
WheelItemData();
|
||||||
|
|
||||||
void Load( WheelItemType wit, Song* pSong, const CString &sSectionName, const D3DXCOLOR color );
|
void Load( WheelItemType wit, Song* pSong, const CString &sSectionName, Course* pCourse, const D3DXCOLOR color );
|
||||||
|
|
||||||
WheelItemType m_WheelItemType;
|
WheelItemType m_WheelItemType;
|
||||||
CString m_sSectionName;
|
CString m_sSectionName;
|
||||||
|
Course* m_pCourse;
|
||||||
Song* m_pSong;
|
Song* m_pSong;
|
||||||
D3DXCOLOR m_color; // either text color or section background color
|
D3DXCOLOR m_color; // either text color or section background color
|
||||||
MusicStatusDisplayType m_MusicStatusDisplayType;
|
MusicStatusDisplayType m_MusicStatusDisplayType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class WheelItemDisplay : public Actor,
|
class WheelItemDisplay : public WheelItemData,
|
||||||
public WheelItemData
|
public Actor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
WheelItemDisplay();
|
WheelItemDisplay();
|
||||||
@@ -78,6 +80,9 @@ public:
|
|||||||
MusicStatusDisplay m_MusicStatusDisplay;
|
MusicStatusDisplay m_MusicStatusDisplay;
|
||||||
TextBanner m_TextBanner;
|
TextBanner m_TextBanner;
|
||||||
GradeDisplay m_GradeDisplay[NUM_PLAYERS];
|
GradeDisplay m_GradeDisplay[NUM_PLAYERS];
|
||||||
|
|
||||||
|
// for TYPE_COURSE
|
||||||
|
BitmapText m_textCourse;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -109,6 +114,7 @@ public:
|
|||||||
bool Select(); // return true if the selected item is a music, otherwise false
|
bool Select(); // return true if the selected item is a music, otherwise false
|
||||||
WheelItemType GetSelectedType() { return GetCurWheelItemDatas()[m_iSelection].m_WheelItemType; };
|
WheelItemType GetSelectedType() { return GetCurWheelItemDatas()[m_iSelection].m_WheelItemType; };
|
||||||
Song* GetSelectedSong() { return GetCurWheelItemDatas()[m_iSelection].m_pSong; };
|
Song* GetSelectedSong() { return GetCurWheelItemDatas()[m_iSelection].m_pSong; };
|
||||||
|
Course* GetSelectedCourse() { return GetCurWheelItemDatas()[m_iSelection].m_pCourse; };
|
||||||
CString GetSelectedSection(){ return GetCurWheelItemDatas()[m_iSelection].m_sSectionName; };
|
CString GetSelectedSection(){ return GetCurWheelItemDatas()[m_iSelection].m_sSectionName; };
|
||||||
|
|
||||||
|
|
||||||
@@ -147,7 +153,10 @@ protected:
|
|||||||
STATE_FLYING_ON_AFTER_NEXT_SORT,
|
STATE_FLYING_ON_AFTER_NEXT_SORT,
|
||||||
STATE_TWEENING_ON_SCREEN,
|
STATE_TWEENING_ON_SCREEN,
|
||||||
STATE_TWEENING_OFF_SCREEN,
|
STATE_TWEENING_OFF_SCREEN,
|
||||||
STATE_WAITING_OFF_SCREEN
|
STATE_WAITING_OFF_SCREEN,
|
||||||
|
STATE_ROULETTE_SPINNING,
|
||||||
|
STATE_ROULETTE_SLOWING_DOWN,
|
||||||
|
STATE_LOCKED,
|
||||||
};
|
};
|
||||||
WheelState m_WheelState;
|
WheelState m_WheelState;
|
||||||
float m_fTimeLeftInState;
|
float m_fTimeLeftInState;
|
||||||
@@ -158,6 +167,7 @@ protected:
|
|||||||
RageSoundSample m_soundChangeMusic;
|
RageSoundSample m_soundChangeMusic;
|
||||||
RageSoundSample m_soundChangeSort;
|
RageSoundSample m_soundChangeSort;
|
||||||
RageSoundSample m_soundExpand;
|
RageSoundSample m_soundExpand;
|
||||||
|
RageSoundSample m_soundStart;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include "ArrowEffects.h"
|
#include "ArrowEffects.h"
|
||||||
#include "PrefsManager.h"
|
#include "PrefsManager.h"
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
NoteData::NoteData()
|
NoteData::NoteData()
|
||||||
@@ -149,11 +149,14 @@ void NoteData::AddHoldNote( HoldNote add )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// delete TapNotes under this HoldNote
|
// delete TapNotes under this HoldNote
|
||||||
for( i=add.m_iStartIndex; i<=add.m_iEndIndex; i++ )
|
for( i=add.m_iStartIndex+1; i<=add.m_iEndIndex; i++ )
|
||||||
{
|
{
|
||||||
m_TapNotes[add.m_iTrack][i] = '0';
|
m_TapNotes[add.m_iTrack][i] = '0';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// add a tap note at the start of this hold
|
||||||
|
m_TapNotes[add.m_iTrack][add.m_iStartIndex] = '1';
|
||||||
|
|
||||||
m_HoldNotes[m_iNumHoldNotes++] = add;
|
m_HoldNotes[m_iNumHoldNotes++] = add;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,6 +164,11 @@ void NoteData::RemoveHoldNote( int index )
|
|||||||
{
|
{
|
||||||
ASSERT( index > 0 && index < m_iNumHoldNotes );
|
ASSERT( index > 0 && index < m_iNumHoldNotes );
|
||||||
|
|
||||||
|
// delete a tap note at the start of this hold
|
||||||
|
HoldNote &hn = m_HoldNotes[index];
|
||||||
|
m_TapNotes[hn.m_iTrack][hn.m_iStartIndex] = '0';
|
||||||
|
|
||||||
|
// remove from list
|
||||||
for( int j=index; j<m_iNumHoldNotes-1; j++ )
|
for( int j=index; j<m_iNumHoldNotes-1; j++ )
|
||||||
{
|
{
|
||||||
m_HoldNotes[j] = m_HoldNotes[j+1];
|
m_HoldNotes[j] = m_HoldNotes[j+1];
|
||||||
@@ -260,6 +268,23 @@ int NoteData::GetNumHoldNotes( const float fStartBeat, const float fEndBeat )
|
|||||||
return iNumSteps;
|
return iNumSteps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int NoteData::GetPossibleDancePoints()
|
||||||
|
{
|
||||||
|
//Each song has a certain number of "Dance Points" assigned to it. For regular arrows, this is 2 per arrow. For freeze arrows, it is 6 per arrow. When you add this all up, you get the maximum number of possible "Dance Points".
|
||||||
|
//
|
||||||
|
//Your "Dance Points" are calculated as follows:
|
||||||
|
//
|
||||||
|
//A "Perfect" is worth 2 points
|
||||||
|
//A "Great" is worth 1 points
|
||||||
|
//A "Good" is worth 0 points
|
||||||
|
//A "Boo" will subtract 4 points
|
||||||
|
//A "Miss" will subtract 8 points
|
||||||
|
//An "OK" (Successful Freeze step) will add 6 points
|
||||||
|
//A "NG" (Unsuccessful Freeze step) is worth 0 points
|
||||||
|
|
||||||
|
return GetNumTapNotes()*TapNoteScoreToDancePoints(TNS_PERFECT) +
|
||||||
|
GetNumHoldNotes()*HoldNoteScoreToDancePoints(HNS_OK);
|
||||||
|
}
|
||||||
|
|
||||||
void NoteData::CropToLeftSide()
|
void NoteData::CropToLeftSide()
|
||||||
{
|
{
|
||||||
@@ -666,7 +691,7 @@ void NoteData::SetFromMeasureStrings( CStringArray &arrayMeasureStrings )
|
|||||||
if( m_iNumTracks == 0 )
|
if( m_iNumTracks == 0 )
|
||||||
m_iNumTracks = sNoteLine.GetLength();
|
m_iNumTracks = sNoteLine.GetLength();
|
||||||
if( m_iNumTracks != sNoteLine.GetLength() )
|
if( m_iNumTracks != sNoteLine.GetLength() )
|
||||||
FatalError( "Line doesn't have right number of notes." );
|
throw RageException( "Line doesn't have right number of notes." );
|
||||||
|
|
||||||
for( int c=0; c<sNoteLine.GetLength(); c++ )
|
for( int c=0; c<sNoteLine.GetLength(); c++ )
|
||||||
{
|
{
|
||||||
|
|||||||
+44
-26
@@ -17,19 +17,32 @@
|
|||||||
|
|
||||||
// '1' = tap note
|
// '1' = tap note
|
||||||
// '2' = hold note begin
|
// '2' = hold note begin
|
||||||
// '3' = hold note end ('1' can also end a HoldNote)
|
// '3' = hold note end ('1' can also end a HoldNote) ('3' without a matching '2' is ignored
|
||||||
// ... for future expansion
|
// ... for future expansion
|
||||||
|
|
||||||
|
|
||||||
enum TapNoteScore {
|
enum TapNoteScore {
|
||||||
TNS_NONE,
|
TNS_NONE,
|
||||||
TNS_PERFECT,
|
TNS_MISS,
|
||||||
TNS_GREAT,
|
|
||||||
TNS_GOOD,
|
|
||||||
TNS_BOO,
|
TNS_BOO,
|
||||||
TNS_MISS
|
TNS_GOOD,
|
||||||
|
TNS_GREAT,
|
||||||
|
TNS_PERFECT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline int TapNoteScoreToDancePoints( TapNoteScore tns )
|
||||||
|
{
|
||||||
|
switch( tns )
|
||||||
|
{
|
||||||
|
case TNS_PERFECT: return +2;
|
||||||
|
case TNS_GREAT: return +1;
|
||||||
|
case TNS_GOOD: return +0;
|
||||||
|
case TNS_BOO: return -4;
|
||||||
|
case TNS_MISS: return +8;
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//enum TapNoteTiming {
|
//enum TapNoteTiming {
|
||||||
// TNT_NONE,
|
// TNT_NONE,
|
||||||
// TNT_EARLY,
|
// TNT_EARLY,
|
||||||
@@ -44,32 +57,23 @@ struct HoldNote
|
|||||||
int m_iEndIndex;
|
int m_iEndIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum HoldNoteResult
|
enum HoldNoteScore
|
||||||
{
|
{
|
||||||
HNR_NONE, // this HoldNote has not been scored yet
|
HNS_NONE, // this HoldNote has not been scored yet
|
||||||
HNR_OK, // the HoldNote has passed and was successfully held all the way through
|
HNS_OK, // the HoldNote has passed and was successfully held all the way through
|
||||||
HNR_NG // the HoldNote has passed and they missed it
|
HNS_NG // the HoldNote has passed and they missed it
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HoldNoteScore
|
|
||||||
|
inline int HoldNoteScoreToDancePoints( HoldNoteScore hns )
|
||||||
{
|
{
|
||||||
TapNoteScore m_TapNoteScore; // The scoring of the tap Note that begins the hold.
|
switch( hns )
|
||||||
// This is judeged separately from the actual hold.
|
|
||||||
HoldNoteResult m_Result;
|
|
||||||
float m_fLife; // 1.0 means this HoldNote has full life.
|
|
||||||
// 0.0 means this HoldNote is dead
|
|
||||||
// When this value hits 0.0 for the first time,
|
|
||||||
// m_HoldScore becomes HSS_NG.
|
|
||||||
// If the life is > 0.0 when the HoldNote ends, then
|
|
||||||
// m_HoldScore becomes HSS_OK.
|
|
||||||
HoldNoteScore()
|
|
||||||
{
|
{
|
||||||
m_TapNoteScore = TNS_NONE;
|
case HNS_OK: return +6;
|
||||||
m_Result = HNR_NONE;
|
case HNS_NG: return +0;
|
||||||
m_fLife = 1.0f;
|
default: ASSERT(0); return 0;
|
||||||
};
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline int BeatToNoteRow( float fBeatNum ) { return int( fBeatNum * ELEMENTS_PER_BEAT + 0.5f); }; // round
|
inline int BeatToNoteRow( float fBeatNum ) { return int( fBeatNum * ELEMENTS_PER_BEAT + 0.5f); }; // round
|
||||||
@@ -126,7 +130,21 @@ public:
|
|||||||
int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
int GetNumDoubles( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
||||||
int GetNumHoldNotes( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
int GetNumHoldNotes( const float fStartBeat = 0, const float fEndBeat = MAX_BEATS );
|
||||||
|
|
||||||
|
int GetPossibleDancePoints();
|
||||||
|
|
||||||
// radar values - return between 0.0 and 1.2
|
// radar values - return between 0.0 and 1.2
|
||||||
|
float GetRadarValue( RadarCatrgory rv, float fSongSeconds )
|
||||||
|
{
|
||||||
|
switch( rv )
|
||||||
|
{
|
||||||
|
case RADAR_STREAM: return GetStreamRadarValue( fSongSeconds ); break;
|
||||||
|
case RADAR_VOLTAGE: return GetVoltageRadarValue( fSongSeconds ); break;
|
||||||
|
case RADAR_AIR: return GetAirRadarValue( fSongSeconds ); break;
|
||||||
|
case RADAR_CHAOS: return GetChaosRadarValue( fSongSeconds ); break;
|
||||||
|
case RADAR_FREEZE: return GetFreezeRadarValue( fSongSeconds ); break;
|
||||||
|
default: ASSERT(0); return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
float GetStreamRadarValue( float fSongSeconds );
|
float GetStreamRadarValue( float fSongSeconds );
|
||||||
float GetVoltageRadarValue( float fSongSeconds );
|
float GetVoltageRadarValue( float fSongSeconds );
|
||||||
float GetAirRadarValue( float fSongSeconds );
|
float GetAirRadarValue( float fSongSeconds );
|
||||||
|
|||||||
+62
-57
@@ -18,8 +18,9 @@
|
|||||||
#include "PrefsManager.h"
|
#include "PrefsManager.h"
|
||||||
#include "GameManager.h"
|
#include "GameManager.h"
|
||||||
|
|
||||||
const float BEATS_BETWEEN_HOLD_BITS = 0.2f;
|
const float HOLD_NOTE_BITS_PER_BEAT = 6;
|
||||||
const float INDICIES_BETWEEN_HOLD_BITS = BEATS_BETWEEN_HOLD_BITS * ELEMENTS_PER_BEAT;
|
const float HOLD_NOTE_BITS_PER_ROW = HOLD_NOTE_BITS_PER_BEAT / ELEMENTS_PER_BEAT;
|
||||||
|
const float ROWS_BETWEEN_HOLD_BITS = 1 / HOLD_NOTE_BITS_PER_ROW;
|
||||||
|
|
||||||
NoteField::NoteField()
|
NoteField::NoteField()
|
||||||
{
|
{
|
||||||
@@ -205,18 +206,72 @@ void NoteField::DrawPrimitives()
|
|||||||
{
|
{
|
||||||
const int MAX_COLOR_NOTE_INSTANCES = 300;
|
const int MAX_COLOR_NOTE_INSTANCES = 300;
|
||||||
ColorNoteInstance instances[MAX_COLOR_NOTE_INSTANCES];
|
ColorNoteInstance instances[MAX_COLOR_NOTE_INSTANCES];
|
||||||
int iCount = 0; // number of valid elements in instances
|
int iCount = 0; // number of valid elements in the instances array
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// Draw all HoldNotes in this column (so that they appear under the tap notes)
|
||||||
|
/////////////////////////////////
|
||||||
|
for( int i=0; i<m_iNumHoldNotes; i++ )
|
||||||
|
{
|
||||||
|
HoldNote &hn = m_HoldNotes[i];
|
||||||
|
|
||||||
|
if( hn.m_iTrack != c ) // this HoldNote doesn't belong to this column
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// If no part of this HoldNote is on the screen, skip it
|
||||||
|
if( !( iIndexFirstArrowToDraw <= hn.m_iEndIndex && hn.m_iEndIndex <= iIndexLastArrowToDraw ||
|
||||||
|
iIndexFirstArrowToDraw <= hn.m_iStartIndex && hn.m_iStartIndex <= iIndexLastArrowToDraw ||
|
||||||
|
hn.m_iStartIndex < iIndexFirstArrowToDraw && hn.m_iEndIndex > iIndexLastArrowToDraw ) )
|
||||||
|
{
|
||||||
|
continue; // skip
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// If this note was in the past and has life > 0, then it was completed and don't draw it!
|
||||||
|
if( hn.m_iEndIndex < BeatToNoteRow(m_fSongBeat) && m_HoldNoteLife[i] > 0 )
|
||||||
|
continue; // skip
|
||||||
|
|
||||||
|
|
||||||
|
const int iCol = hn.m_iTrack;
|
||||||
|
const float fHoldNoteLife = m_HoldNoteLife[i];
|
||||||
|
const bool bActive = NoteRowToBeat(hn.m_iStartIndex) > m_fSongBeat && m_fSongBeat < NoteRowToBeat(hn.m_iEndIndex);
|
||||||
|
|
||||||
|
|
||||||
|
// parts of the hold
|
||||||
|
const float fStartDrawingAtBeat = froundf( (float)hn.m_iStartIndex, ROWS_BETWEEN_HOLD_BITS );
|
||||||
|
for( float j=fStartDrawingAtBeat;
|
||||||
|
j<=hn.m_iEndIndex;
|
||||||
|
j+=ROWS_BETWEEN_HOLD_BITS/m_PlayerOptions.m_fArrowScrollSpeed ) // for each bit of the hold
|
||||||
|
{
|
||||||
|
// check if this arrow is off the the screen
|
||||||
|
if( j < iIndexFirstArrowToDraw || iIndexLastArrowToDraw < j)
|
||||||
|
continue; // skip this arrow
|
||||||
|
|
||||||
|
CreateHoldNoteInstance( instances[iCount++], bActive, (float)j, hn, fHoldNoteLife );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool bDrawAddPass = m_PlayerOptions.m_AppearanceType != PlayerOptions::APPEARANCE_VISIBLE;
|
||||||
|
if( iCount > 0 )
|
||||||
|
m_ColorNote[c].DrawList( iCount, instances, bDrawAddPass );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
iCount = 0; // reset count
|
||||||
|
|
||||||
|
///////////////////////////////////
|
||||||
// Draw all TapNotes in this column
|
// Draw all TapNotes in this column
|
||||||
//
|
///////////////////////////////////
|
||||||
for( int i=iIndexFirstArrowToDraw; i<=iIndexLastArrowToDraw; i++ ) // for each row
|
for( i=iIndexFirstArrowToDraw; i<=iIndexLastArrowToDraw; i++ ) // for each row
|
||||||
{
|
{
|
||||||
if( m_TapNotes[c][i] == '0' )
|
if( m_TapNotes[c][i] == '0' )
|
||||||
continue; // no note here
|
continue; // no note here
|
||||||
|
|
||||||
// See if there is a hold step that begins on this beat. Not pretty...
|
// See if there is a hold step that begins on this beat.
|
||||||
bool bHoldNoteOnThisBeat = false;
|
bool bHoldNoteOnThisBeat = false;
|
||||||
for( int j=0; j<m_iNumHoldNotes; j++ )
|
for( int j=0; j<m_iNumHoldNotes; j++ )
|
||||||
{
|
{
|
||||||
@@ -233,56 +288,6 @@ void NoteField::DrawPrimitives()
|
|||||||
CreateTapNoteInstance( instances[iCount++], c, (float)i );
|
CreateTapNoteInstance( instances[iCount++], c, (float)i );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw all HoldNotes in this column
|
|
||||||
//
|
|
||||||
for( i=0; i<m_iNumHoldNotes; i++ )
|
|
||||||
{
|
|
||||||
HoldNote &hn = m_HoldNotes[i];
|
|
||||||
|
|
||||||
if( hn.m_iTrack != c ) // this HoldNote doesn't belong to this column
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// If no part of this HoldNote is on the screen, skip it
|
|
||||||
if( !( iIndexFirstArrowToDraw <= hn.m_iEndIndex && hn.m_iEndIndex <= iIndexLastArrowToDraw ||
|
|
||||||
iIndexFirstArrowToDraw <= hn.m_iStartIndex && hn.m_iStartIndex <= iIndexLastArrowToDraw ||
|
|
||||||
hn.m_iStartIndex < iIndexFirstArrowToDraw && hn.m_iEndIndex > iIndexLastArrowToDraw ) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const int iCol = hn.m_iTrack;
|
|
||||||
const float fHoldNoteLife = m_HoldNoteLife[i];
|
|
||||||
const bool bActive = NoteRowToBeat(hn.m_iStartIndex) > m_fSongBeat && m_fSongBeat < NoteRowToBeat(hn.m_iEndIndex);
|
|
||||||
|
|
||||||
|
|
||||||
// draw the gray parts
|
|
||||||
for( float j=(float)hn.m_iStartIndex;
|
|
||||||
j<=hn.m_iEndIndex;
|
|
||||||
j+=INDICIES_BETWEEN_HOLD_BITS/m_PlayerOptions.m_fArrowScrollSpeed ) // for each arrow in the run
|
|
||||||
{
|
|
||||||
// check if this arrow is off the the screen
|
|
||||||
if( j < iIndexFirstArrowToDraw || iIndexLastArrowToDraw < j)
|
|
||||||
continue; // skip this arrow
|
|
||||||
|
|
||||||
if( fHoldNoteLife > 0 && m_Mode == MODE_DANCING && NoteRowToBeat(j) < m_fSongBeat )
|
|
||||||
continue; // don't draw
|
|
||||||
|
|
||||||
CreateHoldNoteInstance( instances[iCount++], bActive, j, hn, fHoldNoteLife );
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw the first arrow on top of the others
|
|
||||||
j = (float)hn.m_iStartIndex;
|
|
||||||
|
|
||||||
if( fHoldNoteLife > 0 && m_Mode == MODE_DANCING && NoteRowToBeat(j) < m_fSongBeat )
|
|
||||||
; // don't draw
|
|
||||||
else
|
|
||||||
CreateHoldNoteInstance( instances[iCount++], bActive, j, hn, fHoldNoteLife );
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool bDrawAddPass = m_PlayerOptions.m_AppearanceType != PlayerOptions::APPEARANCE_VISIBLE;
|
|
||||||
if( iCount > 0 )
|
if( iCount > 0 )
|
||||||
m_ColorNote[c].DrawList( iCount, instances, bDrawAddPass );
|
m_ColorNote[c].DrawList( iCount, instances, bDrawAddPass );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ protected:
|
|||||||
ColorNote m_ColorNote[MAX_NOTE_TRACKS];
|
ColorNote m_ColorNote[MAX_NOTE_TRACKS];
|
||||||
|
|
||||||
// used in MODE_EDIT
|
// used in MODE_EDIT
|
||||||
Quad m_rectMeasureBar;
|
Quad m_rectMeasureBar;
|
||||||
BitmapText m_textMeasureNumber;
|
BitmapText m_textMeasureNumber;
|
||||||
Quad m_rectMarkerBar;
|
Quad m_rectMarkerBar;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include "math.h" // for fabs()
|
#include "math.h" // for fabs()
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#include "GameInput.h"
|
#include "GameInput.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -54,6 +54,7 @@ Notes::Notes()
|
|||||||
|
|
||||||
Notes::~Notes()
|
Notes::~Notes()
|
||||||
{
|
{
|
||||||
|
DeleteNoteData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notes::WriteToCacheFile( FILE* file )
|
void Notes::WriteToCacheFile( FILE* file )
|
||||||
@@ -156,7 +157,7 @@ bool Notes::LoadFromBMSFile( const CString &sPath )
|
|||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( sPath, CFile::modeRead|CFile::shareDenyNone ) )
|
if( !file.Open( sPath, CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
{
|
{
|
||||||
FatalError( ssprintf("Failed to open %s.", sPath) );
|
throw RageException( ssprintf("Failed to open %s.", sPath) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -434,7 +435,7 @@ void DWIcharToNote( char c, InstrumentNumber i, DanceNote ¬e1Out, DanceNote &
|
|||||||
case 'K': note1Out = DANCE_NOTE_PAD1_UP; note2Out = DANCE_NOTE_PAD1_UPRIGHT; break;
|
case 'K': note1Out = DANCE_NOTE_PAD1_UP; note2Out = DANCE_NOTE_PAD1_UPRIGHT; break;
|
||||||
case 'L': note1Out = DANCE_NOTE_PAD1_UPRIGHT; note2Out = DANCE_NOTE_PAD1_RIGHT; break;
|
case 'L': note1Out = DANCE_NOTE_PAD1_UPRIGHT; note2Out = DANCE_NOTE_PAD1_RIGHT; break;
|
||||||
case 'M': note1Out = DANCE_NOTE_PAD1_UPLEFT; note2Out = DANCE_NOTE_PAD1_UPRIGHT; break;
|
case 'M': note1Out = DANCE_NOTE_PAD1_UPLEFT; note2Out = DANCE_NOTE_PAD1_UPRIGHT; break;
|
||||||
default: FatalError( "Encountered invalid DWI note characer '%c'", c ); break;
|
default: throw RageException( "Encountered invalid DWI note characer '%c'", c ); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( i )
|
switch( i )
|
||||||
@@ -634,7 +635,7 @@ bool Notes::LoadFromNotesFile( const CString &sPath )
|
|||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( sPath, CFile::modeRead|CFile::shareDenyNone ) )
|
if( !file.Open( sPath, CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
FatalError( "Error opening DWI file '%s'.", sPath );
|
throw RageException( "Error opening DWI file '%s'.", sPath );
|
||||||
|
|
||||||
// read the whole file into a sFileText
|
// read the whole file into a sFileText
|
||||||
CString sFileText;
|
CString sFileText;
|
||||||
@@ -709,7 +710,7 @@ void Notes::SaveToSMDir( CString sSongDir )
|
|||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( sNewNotesFilePath, CFile::modeWrite | CFile::modeCreate ) )
|
if( !file.Open( sNewNotesFilePath, CFile::modeWrite | CFile::modeCreate ) )
|
||||||
FatalError( "Error opening Notes file '%s' for writing.", sNewNotesFilePath );
|
throw RageException( "Error opening Notes file '%s' for writing.", sNewNotesFilePath );
|
||||||
|
|
||||||
file.WriteString( ssprintf("#TYPE:%s;\n", NotesTypeToString(m_NotesType)) );
|
file.WriteString( ssprintf("#TYPE:%s;\n", NotesTypeToString(m_NotesType)) );
|
||||||
file.WriteString( ssprintf("#DESCRIPTION:%s;\n", m_sDescription) );
|
file.WriteString( ssprintf("#DESCRIPTION:%s;\n", m_sDescription) );
|
||||||
|
|||||||
+74
-112
@@ -18,6 +18,7 @@
|
|||||||
#include "ArrowEffects.h"
|
#include "ArrowEffects.h"
|
||||||
#include "GameManager.h"
|
#include "GameManager.h"
|
||||||
#include "InputMapper.h"
|
#include "InputMapper.h"
|
||||||
|
#include "SongManager.h"
|
||||||
|
|
||||||
|
|
||||||
// these two items are in the
|
// these two items are in the
|
||||||
@@ -47,7 +48,13 @@ Player::Player()
|
|||||||
}
|
}
|
||||||
m_TapNoteScores[i] = TNS_NONE;
|
m_TapNoteScores[i] = TNS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_iNumHoldNotes = 0;
|
m_iNumHoldNotes = 0;
|
||||||
|
for( i=0; i<MAX_HOLD_NOTE_ELEMENTS; i++ )
|
||||||
|
{
|
||||||
|
m_HoldNoteScores[i] = HNS_NONE;
|
||||||
|
m_fHoldNoteLife[i] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
m_pLifeMeter = NULL;
|
m_pLifeMeter = NULL;
|
||||||
m_pScore = NULL;
|
m_pScore = NULL;
|
||||||
@@ -75,6 +82,8 @@ void Player::Load( PlayerNumber player_no, StyleDef* pStyleDef, NoteData* pNoteD
|
|||||||
|
|
||||||
m_pLifeMeter = pLM;
|
m_pLifeMeter = pLM;
|
||||||
m_pScore = pScore;
|
m_pScore = pScore;
|
||||||
|
if( m_pScore )
|
||||||
|
m_pScore->Init( player_no, m_PlayerOptions, pNoteData->GetNumTapNotes(), SONGMAN->GetCurrentNotes(player_no)->m_iMeter );
|
||||||
|
|
||||||
if( !po.m_bHoldNotes )
|
if( !po.m_bHoldNotes )
|
||||||
this->RemoveHoldNotes();
|
this->RemoveHoldNotes();
|
||||||
@@ -125,8 +134,9 @@ void Player::Update( float fDeltaTime, float fSongBeat, float fMaxBeatDifference
|
|||||||
{
|
{
|
||||||
HoldNote &hn = m_HoldNotes[i];
|
HoldNote &hn = m_HoldNotes[i];
|
||||||
HoldNoteScore &hns = m_HoldNoteScores[i];
|
HoldNoteScore &hns = m_HoldNoteScores[i];
|
||||||
|
float &fLife = m_fHoldNoteLife[i];
|
||||||
|
|
||||||
if( hns.m_Result != HNR_NONE ) // if this HoldNote already has a result
|
if( hns != HNS_NONE ) // if this HoldNote already has a result
|
||||||
continue; // we don't need to update the logic for this one
|
continue; // we don't need to update the logic for this one
|
||||||
|
|
||||||
float fStartBeat = NoteRowToBeat( (float)hn.m_iStartIndex );
|
float fStartBeat = NoteRowToBeat( (float)hn.m_iStartIndex );
|
||||||
@@ -136,40 +146,52 @@ void Player::Update( float fDeltaTime, float fSongBeat, float fMaxBeatDifference
|
|||||||
const StyleInput StyleI( m_PlayerNumber, hn.m_iTrack );
|
const StyleInput StyleI( m_PlayerNumber, hn.m_iTrack );
|
||||||
const GameInput GameI = GAMEMAN->GetCurrentStyleDef()->StyleInputToGameInput( StyleI );
|
const GameInput GameI = GAMEMAN->GetCurrentStyleDef()->StyleInputToGameInput( StyleI );
|
||||||
|
|
||||||
|
|
||||||
// update the life
|
// update the life
|
||||||
if( fStartBeat < m_fSongBeat && m_fSongBeat < fEndBeat ) // if the song beat is in the range of this hold
|
if( fStartBeat < m_fSongBeat && m_fSongBeat < fEndBeat ) // if the song beat is in the range of this hold
|
||||||
{
|
{
|
||||||
const bool bIsHoldingButton = INPUTMAPPER->IsButtonDown( GameI );
|
const bool bIsHoldingButton = INPUTMAPPER->IsButtonDown( GameI );
|
||||||
|
// if they got a bad score or haven't stepped on the corresponding tap yet
|
||||||
|
const bool bSteppedOnTapNote = m_TapNoteScores[hn.m_iStartIndex] >= TNS_GREAT;
|
||||||
|
|
||||||
if( bIsHoldingButton )
|
|
||||||
|
if( bIsHoldingButton && bSteppedOnTapNote )
|
||||||
{
|
{
|
||||||
hns.m_fLife += fDeltaTime/HOLD_ARROW_NG_TIME;
|
// Increase life
|
||||||
hns.m_fLife = min( hns.m_fLife, 1 ); // clamp
|
fLife += fDeltaTime/HOLD_ARROW_NG_TIME;
|
||||||
|
fLife = min( fLife, 1 ); // clamp
|
||||||
|
|
||||||
|
m_NoteField.m_HoldNotes[i].m_iStartIndex = BeatToNoteRow( m_fSongBeat ); // move the start of this Hold
|
||||||
|
|
||||||
m_GhostArrowRow.HoldNote( iCol ); // update the "electric ghost" effect
|
m_GhostArrowRow.HoldNote( iCol ); // update the "electric ghost" effect
|
||||||
}
|
}
|
||||||
else // !bIsHoldingButton
|
else // !bIsHoldingButton
|
||||||
{
|
{
|
||||||
hns.m_fLife -= fDeltaTime/HOLD_ARROW_NG_TIME;
|
if( m_fSongBeat-fStartBeat > fMaxBeatDifference )
|
||||||
hns.m_fLife = max( hns.m_fLife, 0 ); // clamp
|
{
|
||||||
|
// Decrease life
|
||||||
|
fLife -= fDeltaTime/HOLD_ARROW_NG_TIME;
|
||||||
|
fLife = max( fLife, 0 ); // clamp
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_NoteField.SetHoldNoteLife( i, hns.m_fLife ); // update the NoteField display
|
m_NoteField.SetHoldNoteLife( i, fLife ); // update the NoteField display
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for NG
|
// check for NG
|
||||||
if( hns.m_fLife == 0 ) // the player has not pressed the button for a long time!
|
if( fLife == 0 ) // the player has not pressed the button for a long time!
|
||||||
{
|
{
|
||||||
hns.m_Result = HNR_NG;
|
hns = HNS_NG;
|
||||||
m_HoldJudgement[iCol].SetHoldJudgement( HNR_NG );
|
m_HoldJudgement[iCol].SetHoldJudgement( HNS_NG );
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for OK
|
// check for OK
|
||||||
if( m_fSongBeat > fEndBeat ) // if this HoldNote is in the past
|
if( m_fSongBeat > fEndBeat ) // if this HoldNote is in the past
|
||||||
{
|
{
|
||||||
// this implies that hns.m_fLife > 0, or else we would have marked it NG above
|
// At this point fLife > 0, or else we would have marked it NG above
|
||||||
hns.m_fLife = 1;
|
fLife = 1;
|
||||||
hns.m_Result = HNR_OK;
|
hns = HNS_OK;
|
||||||
m_HoldJudgement[iCol].SetHoldJudgement( HNR_OK );
|
m_HoldJudgement[iCol].SetHoldJudgement( HNS_OK );
|
||||||
m_NoteField.SetHoldNoteLife( i, hns.m_fLife ); // update the NoteField display
|
m_NoteField.SetHoldNoteLife( i, fLife ); // update the NoteField display
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,77 +289,6 @@ void Player::HandlePlayerStep( float fSongBeat, int col, float fMaxBeatDiff )
|
|||||||
m_GrayArrowRow.Step( col );
|
m_GrayArrowRow.Step( col );
|
||||||
|
|
||||||
CheckForCompleteRow( fSongBeat, col, fMaxBeatDiff );
|
CheckForCompleteRow( fSongBeat, col, fMaxBeatDiff );
|
||||||
|
|
||||||
//
|
|
||||||
// check if we stepped on the TapNote part of a HoldNote
|
|
||||||
//
|
|
||||||
for( int i=0; i<m_iNumHoldNotes; i++ ) // for each HoldNote
|
|
||||||
{
|
|
||||||
HoldNote& hn = m_HoldNotes[i];
|
|
||||||
HoldNoteScore& hns = m_HoldNoteScores[i];
|
|
||||||
|
|
||||||
if( hns.m_Result != HNR_NONE ) // if this note already has a score
|
|
||||||
continue; // we don't need to update its logic
|
|
||||||
|
|
||||||
if( hns.m_TapNoteScore != TNS_NONE ) // the TapNote already has a score
|
|
||||||
continue; // no need to continue;
|
|
||||||
|
|
||||||
if( col == m_HoldNotes[i].m_iTrack ) // the player's step is the same as this HoldNote
|
|
||||||
{
|
|
||||||
float fBeatDifference = fabsf( NoteRowToBeat(hn.m_iStartIndex) - fSongBeat );
|
|
||||||
|
|
||||||
if( fBeatDifference <= fMaxBeatDiff )
|
|
||||||
{
|
|
||||||
float fBeatsUntilStep = NoteRowToBeat( (float)hn.m_iStartIndex ) - fSongBeat;
|
|
||||||
float fPercentFromPerfect = fabsf( fBeatsUntilStep / fMaxBeatDiff );
|
|
||||||
|
|
||||||
//LOG->WriteLine( "fBeatsUntilStep: %f, fPercentFromPerfect: %f",
|
|
||||||
// fBeatsUntilStep, fPercentFromPerfect );
|
|
||||||
|
|
||||||
// compute what the score should be for the note we stepped on
|
|
||||||
TapNoteScore &score = hns.m_TapNoteScore;
|
|
||||||
if( fPercentFromPerfect < 0.25f ) score = TNS_PERFECT;
|
|
||||||
else if( fPercentFromPerfect < 0.50f ) score = TNS_GREAT;
|
|
||||||
else if( fPercentFromPerfect < 0.75f ) score = TNS_GOOD;
|
|
||||||
else score = TNS_BOO;
|
|
||||||
|
|
||||||
// update the judgement, score, and life
|
|
||||||
m_Judgement.SetJudgement( score );
|
|
||||||
m_pScore->AddToScore( score, m_Combo.GetCurrentCombo() );
|
|
||||||
m_pLifeMeter->ChangeLife( score );
|
|
||||||
|
|
||||||
// show the gray arrow ghost
|
|
||||||
m_GhostArrowRow.TapNote( col, score, m_Combo.GetCurrentCombo() > 100 );
|
|
||||||
|
|
||||||
// update the combo display
|
|
||||||
switch( score )
|
|
||||||
{
|
|
||||||
case TNS_PERFECT:
|
|
||||||
case TNS_GREAT:
|
|
||||||
m_Combo.ContinueCombo();
|
|
||||||
break;
|
|
||||||
case TNS_GOOD:
|
|
||||||
case TNS_BOO:
|
|
||||||
m_Combo.EndCombo();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// zoom the judgement and combo like a heart beat
|
|
||||||
float fStartZoom;
|
|
||||||
switch( score )
|
|
||||||
{
|
|
||||||
case TNS_PERFECT: fStartZoom = 1.5f; break;
|
|
||||||
case TNS_GREAT: fStartZoom = 1.3f; break;
|
|
||||||
case TNS_GOOD: fStartZoom = 1.2f; break;
|
|
||||||
case TNS_BOO: fStartZoom = 1.0f; break;
|
|
||||||
}
|
|
||||||
m_frameJudgeAndCombo.SetZoom( fStartZoom );
|
|
||||||
m_frameJudgeAndCombo.BeginTweening( 0.2f );
|
|
||||||
m_frameJudgeAndCombo.SetTweenZoom( 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -436,12 +387,19 @@ void Player::OnRowDestroyed( float fSongBeat, int col, float fMaxBeatDiff, int i
|
|||||||
m_GhostArrowRow.TapNote( c, score, m_Combo.GetCurrentCombo()>100 ); // show the ghost arrow for this column
|
m_GhostArrowRow.TapNote( c, score, m_Combo.GetCurrentCombo()>100 ); // show the ghost arrow for this column
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int iNumNotesDestroyed = 0;
|
||||||
|
for( c=0; c<m_iNumTracks; c++ ) // for each column
|
||||||
|
{
|
||||||
|
if( m_TapNotesOriginal[c][iIndexThatWasSteppedOn] != '0' ) // if there is an original note note in this column
|
||||||
|
iNumNotesDestroyed++;
|
||||||
|
}
|
||||||
|
|
||||||
// update the combo display
|
// update the combo display
|
||||||
switch( score )
|
switch( score )
|
||||||
{
|
{
|
||||||
case TNS_PERFECT:
|
case TNS_PERFECT:
|
||||||
case TNS_GREAT:
|
case TNS_GREAT:
|
||||||
m_Combo.ContinueCombo();
|
m_Combo.ContinueCombo( iNumNotesDestroyed );
|
||||||
break;
|
break;
|
||||||
case TNS_GOOD:
|
case TNS_GOOD:
|
||||||
case TNS_BOO:
|
case TNS_BOO:
|
||||||
@@ -464,47 +422,51 @@ void Player::OnRowDestroyed( float fSongBeat, int col, float fMaxBeatDiff, int i
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ScoreSummary Player::GetScoreSummary()
|
void Player::GetGameplayStatistics( GameplayStatistics& GSout )
|
||||||
{
|
{
|
||||||
ScoreSummary scoreSummary;
|
GSout.pSong = SONGMAN->GetCurrentSong();
|
||||||
|
Notes* pNotes = SONGMAN->GetCurrentNotes(m_PlayerNumber);
|
||||||
|
GSout.dc = pNotes->m_DifficultyClass;
|
||||||
|
GSout.meter = pNotes->m_iMeter;
|
||||||
|
GSout.iPossibleDancePoints = ((NoteData*)this)->GetPossibleDancePoints();
|
||||||
|
GSout.iActualDancePoints = 0;
|
||||||
|
|
||||||
for( int i=0; i<MAX_TAP_NOTE_ROWS; i++ )
|
for( int i=0; i<MAX_TAP_NOTE_ROWS; i++ )
|
||||||
{
|
{
|
||||||
switch( m_TapNoteScores[i] )
|
switch( m_TapNoteScores[i] )
|
||||||
{
|
{
|
||||||
case TNS_PERFECT: scoreSummary.perfect++; break;
|
case TNS_PERFECT: GSout.perfect++; break;
|
||||||
case TNS_GREAT: scoreSummary.great++; break;
|
case TNS_GREAT: GSout.great++; break;
|
||||||
case TNS_GOOD: scoreSummary.good++; break;
|
case TNS_GOOD: GSout.good++; break;
|
||||||
case TNS_BOO: scoreSummary.boo++; break;
|
case TNS_BOO: GSout.boo++; break;
|
||||||
case TNS_MISS: scoreSummary.miss++; break;
|
case TNS_MISS: GSout.miss++; break;
|
||||||
case TNS_NONE: break;
|
case TNS_NONE: break;
|
||||||
default: ASSERT( false );
|
default: ASSERT( false );
|
||||||
}
|
}
|
||||||
|
GSout.iActualDancePoints += TapNoteScoreToDancePoints( m_TapNoteScores[i] );
|
||||||
}
|
}
|
||||||
for( i=0; i<m_iNumHoldNotes; i++ )
|
for( i=0; i<m_iNumHoldNotes; i++ )
|
||||||
{
|
{
|
||||||
switch( m_HoldNoteScores[i].m_TapNoteScore )
|
switch( m_HoldNoteScores[i] )
|
||||||
{
|
{
|
||||||
case TNS_PERFECT: scoreSummary.perfect++; break;
|
case HNS_NG: GSout.ng++; break;
|
||||||
case TNS_GREAT: scoreSummary.great++; break;
|
case HNS_OK: GSout.ok++; break;
|
||||||
case TNS_GOOD: scoreSummary.good++; break;
|
case HNS_NONE: break;
|
||||||
case TNS_BOO: scoreSummary.boo++; break;
|
|
||||||
case TNS_MISS: scoreSummary.miss++; break;
|
|
||||||
case TNS_NONE: break;
|
|
||||||
default: ASSERT( false );
|
|
||||||
}
|
|
||||||
switch( m_HoldNoteScores[i].m_Result )
|
|
||||||
{
|
|
||||||
case HNR_NG: scoreSummary.ng++; break;
|
|
||||||
case HNR_OK: scoreSummary.ok++; break;
|
|
||||||
case HNR_NONE: break;
|
|
||||||
default: ASSERT( false );
|
default: ASSERT( false );
|
||||||
}
|
}
|
||||||
|
GSout.iActualDancePoints += HoldNoteScoreToDancePoints( m_HoldNoteScores[i] );
|
||||||
}
|
}
|
||||||
scoreSummary.max_combo = m_Combo.GetMaxCombo();
|
GSout.max_combo = m_Combo.GetMaxCombo();
|
||||||
scoreSummary.score = m_pScore ? m_pScore->GetScore() : 0;
|
GSout.score = m_pScore ? m_pScore->GetScore() : 0;
|
||||||
|
|
||||||
return scoreSummary;
|
GSout.failed = this->m_pLifeMeter->HasFailed();
|
||||||
|
|
||||||
|
|
||||||
|
for( int r=0; r<NUM_RADAR_VALUES; r++ )
|
||||||
|
{
|
||||||
|
GSout.fRadarPossible[r] = this->GetRadarValue( (RadarCatrgory)r, SONGMAN->GetCurrentSong()->GetMusicLengthSeconds() );
|
||||||
|
GSout.fRadarActual[r] = randomf(0, GSout.fRadarPossible[r]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "PrefsManager.h" // for ScoreSummary
|
#include "PrefsManager.h" // for GameplayStatistics
|
||||||
#include "Notes.h"
|
#include "Notes.h"
|
||||||
#include "Sprite.h"
|
#include "Sprite.h"
|
||||||
#include "BitmapText.h"
|
#include "BitmapText.h"
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
#include "GhostArrowRow.h"
|
#include "GhostArrowRow.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct GameplayStatistics;
|
||||||
|
|
||||||
class Player : public NoteData, public ActorFrame
|
class Player : public NoteData, public ActorFrame
|
||||||
{
|
{
|
||||||
@@ -48,7 +48,7 @@ public:
|
|||||||
void HandlePlayerStep( float fSongBeat, int col, float fMaxBeatDiff );
|
void HandlePlayerStep( float fSongBeat, int col, float fMaxBeatDiff );
|
||||||
int UpdateTapNotesMissedOlderThan( float fMissIfOlderThanThisBeat );
|
int UpdateTapNotesMissedOlderThan( float fMissIfOlderThanThisBeat );
|
||||||
|
|
||||||
ScoreSummary GetScoreSummary();
|
void GetGameplayStatistics( GameplayStatistics& GSout );
|
||||||
|
|
||||||
bool IsThereANoteAtIndex( int iIndex );
|
bool IsThereANoteAtIndex( int iIndex );
|
||||||
|
|
||||||
@@ -63,6 +63,12 @@ protected:
|
|||||||
// maintain this extra data in addition to the NoteData
|
// maintain this extra data in addition to the NoteData
|
||||||
TapNote m_TapNotesOriginal[MAX_NOTE_TRACKS][MAX_TAP_NOTE_ROWS]; // the original Notes that were loaded into player
|
TapNote m_TapNotesOriginal[MAX_NOTE_TRACKS][MAX_TAP_NOTE_ROWS]; // the original Notes that were loaded into player
|
||||||
TapNoteScore m_TapNoteScores[MAX_TAP_NOTE_ROWS];
|
TapNoteScore m_TapNoteScores[MAX_TAP_NOTE_ROWS];
|
||||||
|
float m_fHoldNoteLife[MAX_TAP_NOTE_ROWS]; // 1.0 means this HoldNote has full life.
|
||||||
|
// 0.0 means this HoldNote is dead
|
||||||
|
// When this value hits 0.0 for the first time,
|
||||||
|
// m_HoldScore becomes HSS_NG.
|
||||||
|
// If the life is > 0.0 when the HoldNote ends, then
|
||||||
|
// m_HoldScore becomes HSS_OK.
|
||||||
HoldNoteScore m_HoldNoteScores[MAX_HOLD_NOTE_ELEMENTS];
|
HoldNoteScore m_HoldNoteScores[MAX_HOLD_NOTE_ELEMENTS];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Desc: Holds user-chosen preferences and saves it between sessions. This class
|
Desc: Holds user-chosen preferences and saves it between sessions. This class
|
||||||
also has temporary holders for information that passed between windows - e.g.
|
also has temporary holders for information that passed between windows - e.g.
|
||||||
ScoreSummary.
|
GameplayStatistics.
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
Chris Danford
|
Chris Danford
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
|
|
||||||
const int NUM_PAD_TO_DEVICE_SLOTS = 3; // three device inputs may map to one pad input
|
const int NUM_PAD_TO_DEVICE_SLOTS = 3; // three device inputs may map to one pad input
|
||||||
const int MAX_NUM_STAGES = 10;
|
|
||||||
|
|
||||||
class PrefsManager
|
class PrefsManager
|
||||||
{
|
{
|
||||||
@@ -54,8 +53,6 @@ public:
|
|||||||
|
|
||||||
PlayerOptions m_PlayerOptions[NUM_PLAYERS];
|
PlayerOptions m_PlayerOptions[NUM_PLAYERS];
|
||||||
SongOptions m_SongOptions;
|
SongOptions m_SongOptions;
|
||||||
|
|
||||||
ScoreSummary m_ScoreSummary[NUM_PLAYERS][MAX_NUM_STAGES]; // for passing from Dancing to Results
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
#include "DXUtil.h"
|
#include "DXUtil.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -122,7 +122,7 @@ void RageBitmapTexture::Create(
|
|||||||
fmtTexture = D3DFMT_A8R8G8B8;
|
fmtTexture = D3DFMT_A8R8G8B8;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FatalError( "Invalid color depth: %d bits", dwTextureColorDepth );
|
throw RageException( "Invalid color depth: %d bits", dwTextureColorDepth );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ void RageBitmapTexture::Create(
|
|||||||
m_sFilePath,
|
m_sFilePath,
|
||||||
&ddii ) ) )
|
&ddii ) ) )
|
||||||
{
|
{
|
||||||
FatalErrorHr( hr, "D3DXGetImageInfoFromFile() failed for file '%s'.", m_sFilePath );
|
throw RageException( hr, "D3DXGetImageInfoFromFile() failed for file '%s'.", m_sFilePath );
|
||||||
}
|
}
|
||||||
|
|
||||||
// find out what the min texture size is
|
// find out what the min texture size is
|
||||||
@@ -166,7 +166,7 @@ void RageBitmapTexture::Create(
|
|||||||
NULL, // no palette
|
NULL, // no palette
|
||||||
&m_pd3dTexture ) ) )
|
&m_pd3dTexture ) ) )
|
||||||
{
|
{
|
||||||
FatalErrorHr( hr, "D3DXCreateTextureFromFileEx() failed for file '%s'.", m_sFilePath );
|
throw RageException( hr, "D3DXCreateTextureFromFileEx() failed for file '%s'.", m_sFilePath );
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
@@ -177,7 +177,7 @@ void RageBitmapTexture::Create(
|
|||||||
|
|
||||||
D3DSURFACE_DESC ddsd;
|
D3DSURFACE_DESC ddsd;
|
||||||
if ( FAILED( hr = m_pd3dTexture->GetLevelDesc( 0, &ddsd ) ) )
|
if ( FAILED( hr = m_pd3dTexture->GetLevelDesc( 0, &ddsd ) ) )
|
||||||
FatalErrorHr( hr, "Could not get level Description of D3DX texture!" );
|
throw RageException( hr, "Could not get level Description of D3DX texture!" );
|
||||||
|
|
||||||
// save information about the texture
|
// save information about the texture
|
||||||
m_iTextureWidth = ddsd.Width;
|
m_iTextureWidth = ddsd.Width;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
RageDisplay* DISPLAY = NULL;
|
RageDisplay* DISPLAY = NULL;
|
||||||
|
|
||||||
@@ -28,9 +28,8 @@ RageDisplay::RageDisplay( HWND hWnd )
|
|||||||
m_pd3d = NULL;
|
m_pd3d = NULL;
|
||||||
m_pd3dDevice = NULL;
|
m_pd3dDevice = NULL;
|
||||||
m_pVB = NULL;
|
m_pVB = NULL;
|
||||||
m_pIB = NULL;
|
|
||||||
|
|
||||||
m_dwLastUpdateTicks = GetTickCount();
|
m_fLastUpdateTime = TIMER->GetTimeSinceStart();
|
||||||
m_iFramesRenderedSinceLastCheck = 0;
|
m_iFramesRenderedSinceLastCheck = 0;
|
||||||
m_fFPS = 0;
|
m_fFPS = 0;
|
||||||
|
|
||||||
@@ -43,16 +42,16 @@ RageDisplay::RageDisplay( HWND hWnd )
|
|||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
// Edwin Evans: Catch any exception. It won't be caught by main exception handler.
|
// Edwin Evans: Catch any exception. It won't be caught by main exception handler.
|
||||||
FatalError( "Unknown exception in Direct3DCreate8." );
|
throw RageException( "Unknown exception in Direct3DCreate8." );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( NULL == m_pd3d )
|
if( NULL == m_pd3d )
|
||||||
FatalError( "Direct3DCreate8 failed." );
|
throw RageException( "Direct3DCreate8 failed." );
|
||||||
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
if( FAILED( hr = m_pd3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &m_DeviceCaps) ) )
|
if( FAILED( hr = m_pd3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &m_DeviceCaps) ) )
|
||||||
{
|
{
|
||||||
FatalError(
|
throw RageException(
|
||||||
"There was an error while initializing your video card.\n\n"
|
"There was an error while initializing your video card.\n\n"
|
||||||
"Your system is reporting that Direct3D8 hardware acceleration\n"
|
"Your system is reporting that Direct3D8 hardware acceleration\n"
|
||||||
"is not available. In most cases, you can download an updated\n"
|
"is not available. In most cases, you can download an updated\n"
|
||||||
@@ -92,7 +91,6 @@ RageDisplay::RageDisplay( HWND hWnd )
|
|||||||
RageDisplay::~RageDisplay()
|
RageDisplay::~RageDisplay()
|
||||||
{
|
{
|
||||||
ReleaseVertexBuffer();
|
ReleaseVertexBuffer();
|
||||||
ReleaseIndexBuffer();
|
|
||||||
// Release our D3D Device
|
// Release our D3D Device
|
||||||
SAFE_RELEASE( m_pd3dDevice );
|
SAFE_RELEASE( m_pd3dDevice );
|
||||||
m_pd3d->Release();
|
m_pd3d->Release();
|
||||||
@@ -141,7 +139,7 @@ bool RageDisplay::SwitchDisplayMode(
|
|||||||
arrayBackBufferFormats.Add( D3DFMT_A8R8G8B8 );
|
arrayBackBufferFormats.Add( D3DFMT_A8R8G8B8 );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FatalError( ssprintf("Invalid BPP '%u' specified", dwBPP) );
|
throw RageException( ssprintf("Invalid BPP '%u' specified", dwBPP) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,11 +236,13 @@ bool RageDisplay::SwitchDisplayMode(
|
|||||||
LOG->WriteLineHr( hr, "failed to create device: %d, %u, %u, %u.", bWindowed, dwWidth, dwHeight, dwBPP );
|
LOG->WriteLineHr( hr, "failed to create device: %d, %u, %u, %u.", bWindowed, dwWidth, dwHeight, dwBPP );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
LOG->WriteLine(
|
||||||
|
"Video card info:\n"
|
||||||
|
" - available texture mem is %u\n",
|
||||||
|
m_pd3dDevice->GetAvailableTextureMem()
|
||||||
|
);
|
||||||
if( m_pVB == NULL )
|
if( m_pVB == NULL )
|
||||||
CreateVertexBuffer();
|
CreateVertexBuffer();
|
||||||
|
|
||||||
if( m_pIB == NULL )
|
|
||||||
CreateIndexBuffer();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -336,9 +336,9 @@ HRESULT RageDisplay::BeginFrame()
|
|||||||
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
|
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
|
||||||
|
|
||||||
|
|
||||||
// tile, don't crop texture coords
|
// Don't tile texture coords. This creates ugly wrapping artifacts on textures that have to be rescaled.
|
||||||
// m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSU, D3DTADDRESS_BORDER );
|
//m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSU, D3DTADDRESS_BORDER );
|
||||||
// m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSV, D3DTADDRESS_BORDER );
|
//m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ADDRESSV, D3DTADDRESS_BORDER );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -354,12 +354,12 @@ HRESULT RageDisplay::EndFrame()
|
|||||||
// update stats
|
// update stats
|
||||||
m_iFramesRenderedSinceLastCheck++;
|
m_iFramesRenderedSinceLastCheck++;
|
||||||
|
|
||||||
DWORD dwThisTicks = GetTickCount();
|
float fTimeNow = TIMER->GetTimeSinceStart();
|
||||||
if( dwThisTicks - m_dwLastUpdateTicks > 1000 ) // update stats every 1 sec.
|
if( fTimeNow - m_fLastUpdateTime > 1.0f ) // update stats every 1 sec.
|
||||||
{
|
{
|
||||||
m_fFPS = (float)m_iFramesRenderedSinceLastCheck;
|
m_fFPS = (float)m_iFramesRenderedSinceLastCheck;
|
||||||
m_iFramesRenderedSinceLastCheck = 0;
|
m_iFramesRenderedSinceLastCheck = 0;
|
||||||
m_dwLastUpdateTicks = dwThisTicks;
|
m_fLastUpdateTime = fTimeNow;
|
||||||
|
|
||||||
LOG->WriteLine( "FPS: %.0f", m_fFPS );
|
LOG->WriteLine( "FPS: %.0f", m_fFPS );
|
||||||
}
|
}
|
||||||
@@ -401,7 +401,7 @@ void RageDisplay::CreateVertexBuffer()
|
|||||||
MAX_NUM_VERTICIES * sizeof(RAGEVERTEX),
|
MAX_NUM_VERTICIES * sizeof(RAGEVERTEX),
|
||||||
D3DUSAGE_WRITEONLY, D3DFVF_RAGEVERTEX,
|
D3DUSAGE_WRITEONLY, D3DFVF_RAGEVERTEX,
|
||||||
D3DPOOL_MANAGED, &m_pVB ) ) )
|
D3DPOOL_MANAGED, &m_pVB ) ) )
|
||||||
FatalErrorHr( hr, "Vertex Buffer Could Not Be Created" );
|
throw RageException( hr, "Vertex Buffer Could Not Be Created" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -410,21 +410,3 @@ void RageDisplay::ReleaseVertexBuffer()
|
|||||||
SAFE_RELEASE( m_pVB );
|
SAFE_RELEASE( m_pVB );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageDisplay::CreateIndexBuffer()
|
|
||||||
{
|
|
||||||
HRESULT hr;
|
|
||||||
if( FAILED( hr = GetDevice()->CreateIndexBuffer(
|
|
||||||
MAX_NUM_INDICIES,
|
|
||||||
D3DUSAGE_WRITEONLY,
|
|
||||||
D3DFMT_INDEX16,
|
|
||||||
D3DPOOL_MANAGED,
|
|
||||||
&m_pIB ) ) )
|
|
||||||
FatalErrorHr( hr, "Index Buffer Could Not Be Created" );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RageDisplay::ReleaseIndexBuffer()
|
|
||||||
{
|
|
||||||
SAFE_RELEASE( m_pIB );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
LPDIRECT3DVERTEXBUFFER8 GetVertexBuffer() { return m_pVB; };
|
LPDIRECT3DVERTEXBUFFER8 GetVertexBuffer() { return m_pVB; };
|
||||||
LPDIRECT3DINDEXBUFFER8 GetIndexBuffer() { return m_pIB; };
|
|
||||||
|
|
||||||
inline void ResetMatrixStack()
|
inline void ResetMatrixStack()
|
||||||
{
|
{
|
||||||
@@ -177,15 +176,11 @@ private:
|
|||||||
void CreateVertexBuffer();
|
void CreateVertexBuffer();
|
||||||
void ReleaseVertexBuffer();
|
void ReleaseVertexBuffer();
|
||||||
|
|
||||||
LPDIRECT3DINDEXBUFFER8 m_pIB;
|
|
||||||
void CreateIndexBuffer();
|
|
||||||
void ReleaseIndexBuffer();
|
|
||||||
|
|
||||||
// OpenGL-like matrix stack
|
// OpenGL-like matrix stack
|
||||||
CArray<D3DXMATRIX, D3DXMATRIX&> m_MatrixStack;
|
CArray<D3DXMATRIX, D3DXMATRIX&> m_MatrixStack;
|
||||||
|
|
||||||
// for performance stats
|
// for performance stats
|
||||||
DWORD m_dwLastUpdateTicks;
|
float m_fLastUpdateTime;
|
||||||
int m_iFramesRenderedSinceLastCheck;
|
int m_iFramesRenderedSinceLastCheck;
|
||||||
float m_fFPS;
|
float m_fFPS;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: RageLog
|
||||||
|
|
||||||
|
Desc: See header.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "RageException.h"
|
||||||
|
#include "RageUtil.h"
|
||||||
|
|
||||||
|
#include "dxerr8.h"
|
||||||
|
#pragma comment(lib, "DxErr8.lib")
|
||||||
|
|
||||||
|
|
||||||
|
RageException::RageException( LPCTSTR fmt, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
va_start(va, fmt);
|
||||||
|
m_sError = vssprintf( fmt, va );
|
||||||
|
#ifdef _DEBUG
|
||||||
|
DebugBreak();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
RageException::RageException( HRESULT hr, LPCTSTR fmt, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
va_start(va, fmt);
|
||||||
|
m_sError = vssprintf( fmt, va );
|
||||||
|
m_sError += ssprintf( "(%s)", DXGetErrorString8(hr) );
|
||||||
|
#ifdef _DEBUG
|
||||||
|
DebugBreak();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: RageError
|
||||||
|
|
||||||
|
Desc: Class for thowing fatal error exceptions
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class RageException
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RageException( LPCTSTR fmt, ...);
|
||||||
|
RageException( HRESULT hr, LPCTSTR fmt, ...);
|
||||||
|
|
||||||
|
CString GetError() { return m_sError; };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CString m_sError;
|
||||||
|
};
|
||||||
|
|
||||||
+16
-16
@@ -25,7 +25,7 @@
|
|||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
RageInput* INPUTMAN = NULL; // globally accessable input device
|
RageInput* INPUTMAN = NULL; // globally accessable input device
|
||||||
@@ -245,7 +245,7 @@ BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance,
|
|||||||
&pInput->m_pJoystick[i++],
|
&pInput->m_pJoystick[i++],
|
||||||
NULL );
|
NULL );
|
||||||
if( FAILED( hr ) )
|
if( FAILED( hr ) )
|
||||||
FatalErrorHr( hr, "Error in CreateDevice() for joystick %d.", i );
|
throw RageException( hr, "Error in CreateDevice() for joystick %d.", i );
|
||||||
|
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
@@ -322,7 +322,7 @@ HRESULT RageInput::Initialize()
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
if( FAILED(hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION,
|
if( FAILED(hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION,
|
||||||
IID_IDirectInput8, (VOID**)&m_pDI, NULL ) ) )
|
IID_IDirectInput8, (VOID**)&m_pDI, NULL ) ) )
|
||||||
FatalErrorHr( hr, "DirectInput8Create failed." );
|
throw RageException( hr, "DirectInput8Create failed." );
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// Create the keyboard device
|
// Create the keyboard device
|
||||||
@@ -330,21 +330,21 @@ HRESULT RageInput::Initialize()
|
|||||||
|
|
||||||
// Create our DirectInput Object for the Keyboard
|
// Create our DirectInput Object for the Keyboard
|
||||||
if( FAILED( hr = m_pDI->CreateDevice( GUID_SysKeyboard, &m_pKeyboard, NULL ) ) )
|
if( FAILED( hr = m_pDI->CreateDevice( GUID_SysKeyboard, &m_pKeyboard, NULL ) ) )
|
||||||
FatalErrorHr( hr, "CreateDevice keyboard failed." );
|
throw RageException( hr, "CreateDevice keyboard failed." );
|
||||||
|
|
||||||
// Set our Cooperation Level with each Device
|
// Set our Cooperation Level with each Device
|
||||||
if( FAILED( hr = m_pKeyboard->SetCooperativeLevel(m_hWnd, DISCL_FOREGROUND |
|
if( FAILED( hr = m_pKeyboard->SetCooperativeLevel(m_hWnd, DISCL_FOREGROUND |
|
||||||
DISCL_NOWINKEY |
|
DISCL_NOWINKEY |
|
||||||
DISCL_NONEXCLUSIVE) ) )
|
DISCL_NONEXCLUSIVE) ) )
|
||||||
FatalErrorHr( hr, "m_pKeyboard->SetCooperativeLevel failed." );
|
throw RageException( hr, "m_pKeyboard->SetCooperativeLevel failed." );
|
||||||
|
|
||||||
// Set the Data Format of each device
|
// Set the Data Format of each device
|
||||||
if( FAILED( hr = m_pKeyboard->SetDataFormat(&c_dfDIKeyboard) ) )
|
if( FAILED( hr = m_pKeyboard->SetDataFormat(&c_dfDIKeyboard) ) )
|
||||||
FatalErrorHr( hr, "m_pKeyboard->SetDataFormat failed." );
|
throw RageException( hr, "m_pKeyboard->SetDataFormat failed." );
|
||||||
|
|
||||||
// Acquire the Keyboard Device
|
// Acquire the Keyboard Device
|
||||||
//if( FAILED( hr = m_pKeyboard->Acquire() ) )
|
//if( FAILED( hr = m_pKeyboard->Acquire() ) )
|
||||||
// FatalErrorHr( "m_pKeyboard->Acquire failed.", hr );
|
// throw RageException( "m_pKeyboard->Acquire failed.", hr );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -354,13 +354,13 @@ HRESULT RageInput::Initialize()
|
|||||||
|
|
||||||
// Obtain an interface to the system mouse device.
|
// Obtain an interface to the system mouse device.
|
||||||
if( FAILED( hr = m_pDI->CreateDevice( GUID_SysMouse, &m_pMouse, NULL ) ) )
|
if( FAILED( hr = m_pDI->CreateDevice( GUID_SysMouse, &m_pMouse, NULL ) ) )
|
||||||
FatalErrorHr( hr, "CreateDevice mouse failed." );
|
throw RageException( hr, "CreateDevice mouse failed." );
|
||||||
|
|
||||||
if( FAILED( hr = m_pMouse->SetCooperativeLevel( m_hWnd, DISCL_NONEXCLUSIVE|DISCL_FOREGROUND ) ) )
|
if( FAILED( hr = m_pMouse->SetCooperativeLevel( m_hWnd, DISCL_NONEXCLUSIVE|DISCL_FOREGROUND ) ) )
|
||||||
FatalErrorHr( hr, "m_pMouse->SetCooperativeLevel failed." );
|
throw RageException( hr, "m_pMouse->SetCooperativeLevel failed." );
|
||||||
|
|
||||||
if( FAILED( hr = m_pMouse->SetDataFormat( &c_dfDIMouse2 ) ) )
|
if( FAILED( hr = m_pMouse->SetDataFormat( &c_dfDIMouse2 ) ) )
|
||||||
FatalErrorHr( hr, "m_pMouse->SetDataFormat failed." );
|
throw RageException( hr, "m_pMouse->SetDataFormat failed." );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DIPROPDWORD dipdw;
|
DIPROPDWORD dipdw;
|
||||||
@@ -373,7 +373,7 @@ HRESULT RageInput::Initialize()
|
|||||||
if( FAILED( m_pMouse->SetProperty( DIPROP_AXISMODE, &dipdw.diph ) ) )
|
if( FAILED( m_pMouse->SetProperty( DIPROP_AXISMODE, &dipdw.diph ) ) )
|
||||||
return E_FAIL;*/
|
return E_FAIL;*/
|
||||||
//if( FAILED( hr = m_pMouse->Acquire()))
|
//if( FAILED( hr = m_pMouse->Acquire()))
|
||||||
// FatalErrorHr( "m_pMouse->Acquire failed.", hr );
|
// throw RageException( "m_pMouse->Acquire failed.", hr );
|
||||||
|
|
||||||
m_RelPosition_x = 0;
|
m_RelPosition_x = 0;
|
||||||
m_RelPosition_y = 0;
|
m_RelPosition_y = 0;
|
||||||
@@ -390,7 +390,7 @@ HRESULT RageInput::Initialize()
|
|||||||
EnumJoysticksCallback,
|
EnumJoysticksCallback,
|
||||||
(VOID*)this,
|
(VOID*)this,
|
||||||
DIEDFL_ATTACHEDONLY ) ) )
|
DIEDFL_ATTACHEDONLY ) ) )
|
||||||
FatalErrorHr( hr, "m_pDI->EnumDevices failed." );
|
throw RageException( hr, "m_pDI->EnumDevices failed." );
|
||||||
|
|
||||||
for( int i=0; i<NUM_JOYSTICKS; i++ )
|
for( int i=0; i<NUM_JOYSTICKS; i++ )
|
||||||
{
|
{
|
||||||
@@ -401,14 +401,14 @@ HRESULT RageInput::Initialize()
|
|||||||
// passing a DIJOYSTATE2 structure to IDirectInputDevice::GetDeviceState().
|
// passing a DIJOYSTATE2 structure to IDirectInputDevice::GetDeviceState().
|
||||||
if( m_pJoystick[i] )
|
if( m_pJoystick[i] )
|
||||||
if( FAILED( hr = m_pJoystick[i]->SetDataFormat( &c_dfDIJoystick2 ) ) )
|
if( FAILED( hr = m_pJoystick[i]->SetDataFormat( &c_dfDIJoystick2 ) ) )
|
||||||
FatalErrorHr( hr, "m_pJoystick[i]->SetDataFormat failed." );
|
throw RageException( hr, "m_pJoystick[i]->SetDataFormat failed." );
|
||||||
|
|
||||||
|
|
||||||
// Set the cooperative level to let DInput know how this device should
|
// Set the cooperative level to let DInput know how this device should
|
||||||
// interact with the system and with other DInput applications.
|
// interact with the system and with other DInput applications.
|
||||||
if( m_pJoystick[i] )
|
if( m_pJoystick[i] )
|
||||||
if( FAILED( hr = m_pJoystick[i]->SetCooperativeLevel( m_hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND ) ) )
|
if( FAILED( hr = m_pJoystick[i]->SetCooperativeLevel( m_hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND ) ) )
|
||||||
FatalErrorHr( hr, "m_pJoystick[i]->SetCooperativeLevel failed." );
|
throw RageException( hr, "m_pJoystick[i]->SetCooperativeLevel failed." );
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -426,12 +426,12 @@ HRESULT RageInput::Initialize()
|
|||||||
// of enumerating device objects (axes, buttons, etc.).
|
// of enumerating device objects (axes, buttons, etc.).
|
||||||
if( m_pJoystick[i] )
|
if( m_pJoystick[i] )
|
||||||
if ( FAILED( hr = m_pJoystick[i]->EnumObjects( EnumAxesCallback, (VOID*)m_pJoystick[i], DIDFT_AXIS ) ) )
|
if ( FAILED( hr = m_pJoystick[i]->EnumObjects( EnumAxesCallback, (VOID*)m_pJoystick[i], DIDFT_AXIS ) ) )
|
||||||
FatalErrorHr( hr, "m_pJoystick[i]->EnumObjects failed." );
|
throw RageException( hr, "m_pJoystick[i]->EnumObjects failed." );
|
||||||
|
|
||||||
// Acquire the newly created devices
|
// Acquire the newly created devices
|
||||||
if( m_pJoystick[i] )
|
if( m_pJoystick[i] )
|
||||||
if( FAILED( hr = m_pJoystick[i]->Acquire() ) )
|
if( FAILED( hr = m_pJoystick[i]->Acquire() ) )
|
||||||
FatalErrorHr( hr, "m_pJoystick[i]->Acquire failed." );
|
throw RageException( hr, "m_pJoystick[i]->Acquire failed." );
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
#include "dxerr8.h"
|
#include "dxerr8.h"
|
||||||
#pragma comment(lib, "DxErr8.lib")
|
#pragma comment(lib, "DxErr8.lib")
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#include "DXUtil.h"
|
#include "DXUtil.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
@@ -318,26 +318,26 @@ VOID RageMovieTexture::Create()
|
|||||||
// Initialize the filter graph find and get information about the
|
// Initialize the filter graph find and get information about the
|
||||||
// video (dimensions, color depth, etc.)
|
// video (dimensions, color depth, etc.)
|
||||||
if( FAILED( hr = InitDShowTextureRenderer() ) )
|
if( FAILED( hr = InitDShowTextureRenderer() ) )
|
||||||
FatalErrorHr( hr, "Could not initialize the DirectShow Texture Renderer!" );
|
throw RageException( hr, "Could not initialize the DirectShow Texture Renderer!" );
|
||||||
|
|
||||||
if( FAILED( hr = CreateD3DTexture() ) )
|
if( FAILED( hr = CreateD3DTexture() ) )
|
||||||
FatalErrorHr( hr, "Could not create the D3D Texture!" );
|
throw RageException( hr, "Could not create the D3D Texture!" );
|
||||||
|
|
||||||
// Pass the D3D texture to our TextureRenderer so it knows
|
// Pass the D3D texture to our TextureRenderer so it knows
|
||||||
// where to render new movie frames to.
|
// where to render new movie frames to.
|
||||||
if( FAILED( hr = m_pCTR->SetRenderTarget( this ) ) )
|
if( FAILED( hr = m_pCTR->SetRenderTarget( this ) ) )
|
||||||
FatalErrorHr( hr, "RageMovieTexture: SetRenderTarget failed." );
|
throw RageException( hr, "RageMovieTexture: SetRenderTarget failed." );
|
||||||
|
|
||||||
// Start the graph running
|
// Start the graph running
|
||||||
if( FAILED( hr = PlayMovie() ) )
|
if( FAILED( hr = PlayMovie() ) )
|
||||||
FatalErrorHr( hr, "Could not run the DirectShow graph." );
|
throw RageException( hr, "Could not run the DirectShow graph." );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HandleDivXError()
|
void HandleDivXError()
|
||||||
{
|
{
|
||||||
FatalError(
|
throw RageException(
|
||||||
"Could not locate the DivX video codec.\n"
|
"Could not locate the DivX video codec.\n"
|
||||||
"DivX is required to movie textures and must\n"
|
"DivX is required to movie textures and must\n"
|
||||||
"be installed before running the application.\n\n"
|
"be installed before running the application.\n\n"
|
||||||
@@ -359,17 +359,17 @@ HRESULT RageMovieTexture::InitDShowTextureRenderer()
|
|||||||
|
|
||||||
// Create the filter graph
|
// Create the filter graph
|
||||||
if( FAILED( m_pGB.CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC) ) )
|
if( FAILED( m_pGB.CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC) ) )
|
||||||
FatalErrorHr( hr, "Could not create CLSID_FilterGraph!" );
|
throw RageException( hr, "Could not create CLSID_FilterGraph!" );
|
||||||
|
|
||||||
// Create the Texture Renderer object
|
// Create the Texture Renderer object
|
||||||
m_pCTR = new CTextureRenderer(NULL, &hr);
|
m_pCTR = new CTextureRenderer(NULL, &hr);
|
||||||
if( FAILED(hr) )
|
if( FAILED(hr) )
|
||||||
FatalErrorHr( hr, "Could not create texture renderer object!" );
|
throw RageException( hr, "Could not create texture renderer object!" );
|
||||||
|
|
||||||
// Get a pointer to the IBaseFilter on the TextureRenderer, add it to graph
|
// Get a pointer to the IBaseFilter on the TextureRenderer, add it to graph
|
||||||
pFTR = m_pCTR;
|
pFTR = m_pCTR;
|
||||||
if( FAILED( hr = m_pGB->AddFilter(pFTR, L"TEXTURERENDERER" ) ) )
|
if( FAILED( hr = m_pGB->AddFilter(pFTR, L"TEXTURERENDERER" ) ) )
|
||||||
FatalErrorHr( hr, "Could not add renderer filter to graph!" );
|
throw RageException( hr, "Could not add renderer filter to graph!" );
|
||||||
|
|
||||||
// convert movie file path to wide char string
|
// convert movie file path to wide char string
|
||||||
WCHAR wFileName[MAX_PATH];
|
WCHAR wFileName[MAX_PATH];
|
||||||
@@ -385,21 +385,21 @@ HRESULT RageMovieTexture::InitDShowTextureRenderer()
|
|||||||
if( FAILED( hr = m_pGB->AddSourceFilter( wFileName, L"SOURCE", &pFSrc ) ) ) // if this fails, it's probably because the user doesn't have DivX installed
|
if( FAILED( hr = m_pGB->AddSourceFilter( wFileName, L"SOURCE", &pFSrc ) ) ) // if this fails, it's probably because the user doesn't have DivX installed
|
||||||
{
|
{
|
||||||
HandleDivXError();
|
HandleDivXError();
|
||||||
FatalErrorHr( hr, "Could not create source filter to graph!" );
|
throw RageException( hr, "Could not create source filter to graph!" );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the source's output and the renderer's input
|
// Find the source's output and the renderer's input
|
||||||
if( FAILED( hr = pFTR->FindPin( L"In", &pFTRPinIn ) ) )
|
if( FAILED( hr = pFTR->FindPin( L"In", &pFTRPinIn ) ) )
|
||||||
FatalErrorHr( hr, "Could not find input pin!" );
|
throw RageException( hr, "Could not find input pin!" );
|
||||||
|
|
||||||
if( FAILED( hr = pFSrc->FindPin( L"Output", &pFSrcPinOut ) ) )
|
if( FAILED( hr = pFSrc->FindPin( L"Output", &pFSrcPinOut ) ) )
|
||||||
FatalErrorHr( hr, "Could not find output pin!" );
|
throw RageException( hr, "Could not find output pin!" );
|
||||||
|
|
||||||
// Connect these two filters
|
// Connect these two filters
|
||||||
if( FAILED( hr = m_pGB->Connect( pFSrcPinOut, pFTRPinIn ) ) )
|
if( FAILED( hr = m_pGB->Connect( pFSrcPinOut, pFTRPinIn ) ) )
|
||||||
{
|
{
|
||||||
HandleDivXError();
|
HandleDivXError();
|
||||||
FatalErrorHr( hr, "Could not connect pins!" );
|
throw RageException( hr, "Could not connect pins!" );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the graph's media control, event & position interfaces
|
// Get the graph's media control, event & position interfaces
|
||||||
@@ -429,25 +429,25 @@ HRESULT RageMovieTexture::CreateD3DTexture()
|
|||||||
m_iSourceHeight, m_iSourceHeight,
|
m_iSourceHeight, m_iSourceHeight,
|
||||||
1, 0,
|
1, 0,
|
||||||
D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pd3dTexture[0] ) ) )
|
D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pd3dTexture[0] ) ) )
|
||||||
FatalErrorHr( hr, "Could not create the D3DX texture!" );
|
throw RageException( hr, "Could not create the D3DX texture!" );
|
||||||
|
|
||||||
if( FAILED( hr = D3DXCreateTexture(m_pd3dDevice,
|
if( FAILED( hr = D3DXCreateTexture(m_pd3dDevice,
|
||||||
m_iSourceHeight, m_iSourceHeight,
|
m_iSourceHeight, m_iSourceHeight,
|
||||||
1, 0,
|
1, 0,
|
||||||
D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pd3dTexture[1] ) ) )
|
D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pd3dTexture[1] ) ) )
|
||||||
FatalErrorHr( hr, "Could not create the D3DX texture!" );
|
throw RageException( hr, "Could not create the D3DX texture!" );
|
||||||
|
|
||||||
// D3DXCreateTexture can silently change the parameters on us
|
// D3DXCreateTexture can silently change the parameters on us
|
||||||
D3DSURFACE_DESC ddsd;
|
D3DSURFACE_DESC ddsd;
|
||||||
if ( FAILED( hr = m_pd3dTexture[0]->GetLevelDesc( 0, &ddsd ) ) )
|
if ( FAILED( hr = m_pd3dTexture[0]->GetLevelDesc( 0, &ddsd ) ) )
|
||||||
FatalErrorHr( hr, "Could not get level Description of D3DX texture!" );
|
throw RageException( hr, "Could not get level Description of D3DX texture!" );
|
||||||
|
|
||||||
m_iTextureWidth = ddsd.Width;
|
m_iTextureWidth = ddsd.Width;
|
||||||
m_iTextureHeight = ddsd.Height;
|
m_iTextureHeight = ddsd.Height;
|
||||||
m_TextureFormat = ddsd.Format;
|
m_TextureFormat = ddsd.Format;
|
||||||
if( m_TextureFormat != D3DFMT_A8R8G8B8 &&
|
if( m_TextureFormat != D3DFMT_A8R8G8B8 &&
|
||||||
m_TextureFormat != D3DFMT_A1R5G5B5 )
|
m_TextureFormat != D3DFMT_A1R5G5B5 )
|
||||||
FatalError( "Texture is format we can't handle! Format = 0x%x!", m_TextureFormat );
|
throw RageException( "Texture is format we can't handle! Format = 0x%x!", m_TextureFormat );
|
||||||
|
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
@@ -459,7 +459,7 @@ HRESULT RageMovieTexture::PlayMovie()
|
|||||||
|
|
||||||
// Start the graph running;
|
// Start the graph running;
|
||||||
if( FAILED( hr = m_pMC->Run() ) )
|
if( FAILED( hr = m_pMC->Run() ) )
|
||||||
FatalErrorHr( hr, "Could not run the DirectShow graph." );
|
throw RageException( hr, "Could not run the DirectShow graph." );
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#include "RageSound.h"
|
#include "RageSound.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
#include "bass/bass.h"
|
#include "bass/bass.h"
|
||||||
#pragma comment(lib, "bass/bass.lib")
|
#pragma comment(lib, "bass/bass.lib")
|
||||||
@@ -27,15 +27,15 @@ RageSound::RageSound( HWND hWnd )
|
|||||||
LOG->WriteLine( "RageSound::RageSound()" );
|
LOG->WriteLine( "RageSound::RageSound()" );
|
||||||
// save the HWND
|
// save the HWND
|
||||||
if( !hWnd )
|
if( !hWnd )
|
||||||
FatalError( "RageSound called with NULL hWnd." );
|
throw RageException( "RageSound called with NULL hWnd." );
|
||||||
m_hWndApp = hWnd;
|
m_hWndApp = hWnd;
|
||||||
|
|
||||||
if( BASS_GetVersion() != MAKELONG(1,5) )
|
if( BASS_GetVersion() != MAKELONG(1,5) )
|
||||||
FatalError( "BASS version 1.5 DLL could not be loaded. Verify that Bass.dll exists in the program directory.");
|
throw RageException( "BASS version 1.5 DLL could not be loaded. Verify that Bass.dll exists in the program directory.");
|
||||||
|
|
||||||
if( !BASS_Init( -1, 44100, BASS_DEVICE_LEAVEVOL|BASS_DEVICE_LATENCY, m_hWndApp ) )
|
if( !BASS_Init( -1, 44100, BASS_DEVICE_LEAVEVOL|BASS_DEVICE_LATENCY, m_hWndApp ) )
|
||||||
{
|
{
|
||||||
FatalError(
|
throw RageException(
|
||||||
"There was an error while initializing your sound card.\n\n"
|
"There was an error while initializing your sound card.\n\n"
|
||||||
"The most likely cause of this problem is that you do not have a sound card\n"
|
"The most likely cause of this problem is that you do not have a sound card\n"
|
||||||
"installed, or that you have not yet installed a driver for your sound card.\n"
|
"installed, or that you have not yet installed a driver for your sound card.\n"
|
||||||
@@ -80,10 +80,10 @@ void RageSound::PlayOnceStreamed( CString sPath )
|
|||||||
{
|
{
|
||||||
HSTREAM hStream = BASS_StreamCreateFile( FALSE, (void*)((LPCTSTR)sPath), 0, 0, BASS_STREAM_AUTOFREE );
|
HSTREAM hStream = BASS_StreamCreateFile( FALSE, (void*)((LPCTSTR)sPath), 0, 0, BASS_STREAM_AUTOFREE );
|
||||||
if( hStream == NULL )
|
if( hStream == NULL )
|
||||||
FatalError( "RageSound: Error creating stream." );
|
throw RageException( "RageSound: Error creating stream." );
|
||||||
|
|
||||||
if( FALSE == BASS_StreamPlay( hStream, FALSE, 0 ) )
|
if( FALSE == BASS_StreamPlay( hStream, FALSE, 0 ) )
|
||||||
FatalError( "RageSound: Error playing a sound stream." );
|
throw RageException( "RageSound: Error playing a sound stream." );
|
||||||
|
|
||||||
// this stream will free itself when stopped
|
// this stream will free itself when stopped
|
||||||
}
|
}
|
||||||
@@ -99,6 +99,9 @@ void RageSound::PlayOnceStreamedFromDir( CString sDir )
|
|||||||
GetDirListing( sDir + "*.wav", arraySoundFiles );
|
GetDirListing( sDir + "*.wav", arraySoundFiles );
|
||||||
GetDirListing( sDir + "*.ogg", arraySoundFiles );
|
GetDirListing( sDir + "*.ogg", arraySoundFiles );
|
||||||
|
|
||||||
int index = rand() % arraySoundFiles.GetSize();
|
if( arraySoundFiles.GetSize() != 0 )
|
||||||
PlayOnceStreamed( sDir + arraySoundFiles[index] );
|
{
|
||||||
|
int index = rand() % arraySoundFiles.GetSize();
|
||||||
|
PlayOnceStreamed( sDir + arraySoundFiles[index] );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
#include "RageMovieTexture.h"
|
#include "RageMovieTexture.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
RageTextureManager* TEXTUREMAN = NULL;
|
RageTextureManager* TEXTUREMAN = NULL;
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ void RageTextureManager::UnloadTexture( CString sTexturePath )
|
|||||||
}
|
}
|
||||||
else // texture not found
|
else // texture not found
|
||||||
{
|
{
|
||||||
FatalError( "Tried to Unload texture '%s' that wasn't loaded.", sTexturePath );
|
throw RageException( "Tried to Unload texture '%s' that wasn't loaded.", sTexturePath );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
File: RageTimer.cpp
|
||||||
|
|
||||||
|
Desc: See header.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "RageTimer.h"
|
||||||
|
#include "RageLog.h"
|
||||||
|
#include "DXUtil.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RageTimer* TIMER = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
const float SECS_IN_DAY = 60*60*24;
|
||||||
|
|
||||||
|
RageTimer::RageTimer()
|
||||||
|
{
|
||||||
|
m_fTimeSinceStart = m_fLastDeltaTime = 0;
|
||||||
|
DXUtil_Timer( TIMER_START ); // Start the accurate timer
|
||||||
|
}
|
||||||
|
|
||||||
|
RageTimer::~RageTimer()
|
||||||
|
{
|
||||||
|
DXUtil_Timer( TIMER_STOP );
|
||||||
|
}
|
||||||
|
|
||||||
|
float RageTimer::GetDeltaTime()
|
||||||
|
{
|
||||||
|
m_fLastDeltaTime = DXUtil_Timer( TIMER_GETELAPSEDTIME );
|
||||||
|
m_fTimeSinceStart += m_fLastDeltaTime;
|
||||||
|
if( m_fTimeSinceStart > SECS_IN_DAY )
|
||||||
|
m_fTimeSinceStart = SECS_IN_DAY;
|
||||||
|
return m_fLastDeltaTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
float RageTimer::PeekDeltaTime()
|
||||||
|
{
|
||||||
|
return m_fLastDeltaTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
float RageTimer::GetTimeSinceStart()
|
||||||
|
{
|
||||||
|
return m_fTimeSinceStart;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
File: RageTimer.h
|
||||||
|
|
||||||
|
Desc: Timer services.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RageTimer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RageTimer();
|
||||||
|
~RageTimer();
|
||||||
|
float GetDeltaTime(); // time between last call to GetDeltaTime()
|
||||||
|
float PeekDeltaTime();
|
||||||
|
float GetTimeSinceStart(); // seconds since the program was started
|
||||||
|
|
||||||
|
private:
|
||||||
|
float m_fLastDeltaTime;
|
||||||
|
float m_fTimeSinceStart; // seconds since the program was started
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern RageTimer* TIMER; // global and accessable from anywhere in our program
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "RandomSample.h"
|
#include "RandomSample.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
RandomSample::RandomSample()
|
RandomSample::RandomSample()
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
Desc: A graphic displayed in the ScoreDisplayRolling during Dancing.
|
Desc: A graphic displayed in the ScoreDisplayRolling during Dancing.
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -32,24 +33,27 @@ ScoreDisplayRolling::ScoreDisplayRolling()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScoreDisplayRolling::SetScore( int iNewScore )
|
void ScoreDisplayRolling::Init( PlayerNumber pn, PlayerOptions po, int iTotalTapNotes, int iNotesMeter )
|
||||||
{
|
{
|
||||||
SetScore( (float)iNewScore );
|
m_PlayerNumber = pn;
|
||||||
|
m_PlayerOptions = po;
|
||||||
|
m_iTotalTapNotes = iTotalTapNotes;
|
||||||
|
m_iNotesMeter = iNotesMeter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScoreDisplayRolling::SetScore( float fNewScore )
|
void ScoreDisplayRolling::SetScore( int iNewScore )
|
||||||
{
|
{
|
||||||
m_fScore = fNewScore;
|
m_iScore = iNewScore;
|
||||||
|
|
||||||
float fDelta = m_fScore - m_fTrailingScore;
|
float fDelta = m_iScore - m_fTrailingScore;
|
||||||
|
|
||||||
m_fScoreVelocity = fDelta / SCORE_TWEEN_TIME; // in score units per second
|
m_fScoreVelocity = fDelta / SCORE_TWEEN_TIME; // in score units per second
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float ScoreDisplayRolling::GetScore()
|
int ScoreDisplayRolling::GetScore()
|
||||||
{
|
{
|
||||||
return m_fScore;
|
return m_iScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -57,13 +61,13 @@ void ScoreDisplayRolling::Update( float fDeltaTime )
|
|||||||
{
|
{
|
||||||
BitmapText::Update( fDeltaTime );
|
BitmapText::Update( fDeltaTime );
|
||||||
|
|
||||||
float fDeltaBefore = m_fScore - m_fTrailingScore;
|
float fDeltaBefore = m_iScore - m_fTrailingScore;
|
||||||
m_fTrailingScore += m_fScoreVelocity * fDeltaTime;
|
m_fTrailingScore += m_fScoreVelocity * fDeltaTime;
|
||||||
float fDeltaAfter = m_fScore - m_fTrailingScore;
|
float fDeltaAfter = m_iScore - m_fTrailingScore;
|
||||||
|
|
||||||
if( fDeltaBefore * fDeltaAfter < 0 ) // the sign changed
|
if( fDeltaBefore * fDeltaAfter < 0 ) // the sign changed
|
||||||
{
|
{
|
||||||
m_fTrailingScore = m_fScore;
|
m_fTrailingScore = (float)m_iScore;
|
||||||
m_fScoreVelocity = 0;
|
m_fScoreVelocity = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +75,7 @@ void ScoreDisplayRolling::Update( float fDeltaTime )
|
|||||||
|
|
||||||
void ScoreDisplayRolling::Draw()
|
void ScoreDisplayRolling::Draw()
|
||||||
{
|
{
|
||||||
if( m_fScore == 0 )
|
if( m_iScore == 0 )
|
||||||
{
|
{
|
||||||
CString sFormat = ssprintf( "%%%d.0d", NUM_SCORE_DIGITS );
|
CString sFormat = ssprintf( "%%%d.0d", NUM_SCORE_DIGITS );
|
||||||
SetText( ssprintf(sFormat, 0) );
|
SetText( ssprintf(sFormat, 0) );
|
||||||
@@ -89,81 +93,50 @@ void ScoreDisplayRolling::Draw()
|
|||||||
|
|
||||||
void ScoreDisplayRolling::AddToScore( TapNoteScore score, int iCurCombo )
|
void ScoreDisplayRolling::AddToScore( TapNoteScore score, int iCurCombo )
|
||||||
{
|
{
|
||||||
// The scoring system for DDR versions 1 and 2 (including the Plus remixes) is as follows:
|
//A single step's points are calculated as follows:
|
||||||
// For every step:
|
//
|
||||||
//
|
//Let p = score multiplier (Perfect = 10, Great = 5, other = 0)
|
||||||
// Multiplier (M) = (# of Notes in your current combo / 4) rounded down
|
//N = total number of steps and freeze steps
|
||||||
// "Good" step = M * 100 (and this ends your combo)
|
//n = number of the current step or freeze step (varies from 1 to N)
|
||||||
// "Great" step = M * M * 100
|
//B = Base value of the song (1,000,000 X the number of feet difficulty) - All edit data is rated as 5 feet
|
||||||
// "Perfect" step = M * M * 300
|
//So, the score for one step is:
|
||||||
//
|
//one_step_score = p * (B/S) * n
|
||||||
// e.g. When you get a 259 combo, the 260th step will earn you:
|
//Where S = The sum of all integers from 1 to N (the total number of steps/freeze steps)
|
||||||
//
|
//
|
||||||
// M = (260 / 4) rounded down
|
//*IMPORTANT* : Double steps (U+L, D+R, etc.) count as two steps instead of one, so if you get a double L+R on the 112th step of a song, you score is calculated with a Perfect/Great/whatever for both the 112th and 113th steps. Got it? Now, through simple algebraic manipulation
|
||||||
// = 65
|
//S = 1+...+N = (1+N)*N/2 (1 through N added together)
|
||||||
// step = M x M X 100
|
//Okay, time for an example:
|
||||||
// = 65 x 65 x 100
|
//
|
||||||
// = 422,500
|
//So, for example, suppose we wanted to calculate the step score of a "Great" on the 57th step of a 441 step, 8-foot difficulty song (I'm just making this one up):
|
||||||
// Perfect step = Great step score x 3
|
//
|
||||||
// = 422,500 x 3
|
//S = (1 + 441)*441 / 2
|
||||||
// = 1,267,500
|
//= 194,222 / 2
|
||||||
|
//= 97,461
|
||||||
|
//StepScore = p * (B/S) * n
|
||||||
|
//= 5 * (8,000,000 / 97,461) * 57
|
||||||
|
//= 5 * (82) * 57 (The 82 is rounded down from 82.08411...)
|
||||||
|
//= 23,370
|
||||||
|
//Remember this is just the score for the step, not the cumulative score up to the 57th step. Also, please note that I am currently checking into rounding errors with the system and if there are any, how they are resolved in the system.
|
||||||
|
//
|
||||||
|
//Note: if you got all Perfect on this song, you would get (p=10)*B, which is 80,000,000. In fact, the maximum possible score for any song is the number of feet difficulty X 10,000,000.
|
||||||
|
|
||||||
float M = iCurCombo/4.0f;
|
int p; // score multiplier
|
||||||
|
|
||||||
float fScoreToAdd = 0;
|
|
||||||
switch( score )
|
switch( score )
|
||||||
{
|
{
|
||||||
case TNS_MISS: break;
|
case TNS_GREAT: p = 10; break;
|
||||||
case TNS_BOO: break;
|
case TNS_PERFECT: p = 5; break;
|
||||||
case TNS_GOOD: fScoreToAdd = M * 100 + 100; break;
|
default: p = 0; break;
|
||||||
case TNS_GREAT: fScoreToAdd = M * M * 100 + 300; break;
|
|
||||||
case TNS_PERFECT: fScoreToAdd = M * M * 300 + 500; break;
|
|
||||||
}
|
}
|
||||||
m_fScore += fScoreToAdd;
|
|
||||||
ASSERT( m_fScore >= 0 );
|
|
||||||
|
|
||||||
|
int N = m_iTotalTapNotes;
|
||||||
|
int n = iCurCombo;
|
||||||
|
int B = m_iNotesMeter * 1000000;
|
||||||
|
int S = (1+N)*N/2;
|
||||||
|
|
||||||
/* Score implementation by Chris Gomez, February 6th, 2002 The
|
int one_step_score = p * (B/S) * n;
|
||||||
scoring system for 5th mix is much more complicated than the original
|
|
||||||
scoring system. We don't have bonuses yet, so they're not included in
|
|
||||||
this code. Max score is (feet + 1) * 5,000,000. Scores are clamped
|
|
||||||
to integers; this is fixed on the last step (if it's perfect)
|
|
||||||
|
|
||||||
The base step value is the max score divided by 10, divided by
|
m_iScore += one_step_score;
|
||||||
one-half of the max combo squared plus the max combo. This value is
|
ASSERT( m_iScore >= 0 );
|
||||||
multiplied by 10 for a perfect or 5 for a great, and further
|
|
||||||
multiplied by the number of Notes currently in the combo. */
|
|
||||||
/*
|
|
||||||
int iScoreToAdd = 0; int iBonus = 0;
|
|
||||||
|
|
||||||
Notes *pSteps = GAMEINFO->m_pStepsPlayer[m_PlayerNumber];
|
this->SetScore( m_iScore );
|
||||||
int iNumFeet = pSteps->m_iNumFeet;
|
|
||||||
int iMaxCombo = pSteps->GetNumSteps();
|
|
||||||
|
|
||||||
int iScoreMax = (iNumFeet + 1) * 5000000; //magic numbers. int
|
|
||||||
iBaseScore = (iScoreMax / 10) / ((iMaxCombo * (iMaxCombo + 1)) / 2);
|
|
||||||
|
|
||||||
iCurCombo++; // looks like the current combo counter starts at 0 when
|
|
||||||
iCurCombo++it should start at 1
|
|
||||||
// this was messing with the scoring, so it had to be fixed.
|
|
||||||
|
|
||||||
switch (score)
|
|
||||||
{
|
|
||||||
case miss:
|
|
||||||
case boo:
|
|
||||||
case good:
|
|
||||||
break;
|
|
||||||
case great:
|
|
||||||
iScoreToAdd = 5 * iBaseScore * iCurCombo;
|
|
||||||
break;
|
|
||||||
case perfect:
|
|
||||||
iScoreToAdd = 10 * iBaseScore * iCurCombo;
|
|
||||||
if(BeatToStepIndex(pSteps->GetLastBeat()) == iMaxCombo)
|
|
||||||
for(int i = 1; i <= iMaxCombo; i++)
|
|
||||||
iBonus += 10 * iBaseScore * i;
|
|
||||||
iScoreToAdd += iBonus;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
this->SetScore( m_fScore );
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,16 +24,22 @@ class ScoreDisplayRolling : public BitmapText
|
|||||||
public:
|
public:
|
||||||
ScoreDisplayRolling();
|
ScoreDisplayRolling();
|
||||||
|
|
||||||
void SetScore( float fNewScore );
|
void Init( PlayerNumber pn, PlayerOptions po, int iTotalTapNotes, int iNotesMeter );
|
||||||
|
|
||||||
void SetScore( int iNewScore );
|
void SetScore( int iNewScore );
|
||||||
float GetScore();
|
int GetScore();
|
||||||
void AddToScore( TapNoteScore score, int iCurCombo );
|
void AddToScore( TapNoteScore score, int iCurCombo );
|
||||||
|
|
||||||
virtual void Update( float fDeltaTime );
|
virtual void Update( float fDeltaTime );
|
||||||
virtual void Draw();
|
virtual void Draw();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
float m_fScore;
|
PlayerNumber m_PlayerNumber;
|
||||||
|
PlayerOptions m_PlayerOptions;
|
||||||
|
int m_iTotalTapNotes;
|
||||||
|
int m_iNotesMeter;
|
||||||
|
|
||||||
|
int m_iScore;
|
||||||
|
|
||||||
float m_fTrailingScore;
|
float m_fTrailingScore;
|
||||||
float m_fScoreVelocity;
|
float m_fScoreVelocity;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Screen.h"
|
#include "Screen.h"
|
||||||
|
#include "GameManager.h"
|
||||||
|
|
||||||
Screen::Screen()
|
Screen::Screen()
|
||||||
{
|
{
|
||||||
@@ -50,6 +51,9 @@ void Screen::Input( const DeviceInput& DeviceI, const InputEventType type, const
|
|||||||
if( !MenuI.IsValid() )
|
if( !MenuI.IsValid() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if( !GAMEMAN->IsPlayerEnabled(MenuI.player) )
|
||||||
|
return;
|
||||||
|
|
||||||
switch( MenuI.button )
|
switch( MenuI.button )
|
||||||
{
|
{
|
||||||
case MENU_BUTTON_UP: this->MenuUp( MenuI.player, type ); return;
|
case MENU_BUTTON_UP: this->MenuUp( MenuI.player, type ); return;
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
{
|
{
|
||||||
// allocate a new Notes
|
// allocate a new Notes
|
||||||
SONGMAN->GetCurrentSong()->m_arrayNotes.SetSize( SONGMAN->GetCurrentSong()->m_arrayNotes.GetSize() + 1 );
|
SONGMAN->GetCurrentSong()->m_arrayNotes.SetSize( SONGMAN->GetCurrentSong()->m_arrayNotes.GetSize() + 1 );
|
||||||
pNotes = &SONGMAN->GetCurrentSong()->m_arrayNotes[ SONGMAN->GetCurrentSong()->m_arrayNotes.GetSize()-1 ];
|
pNotes = SONGMAN->GetCurrentSong()->m_arrayNotes[ SONGMAN->GetCurrentSong()->m_arrayNotes.GetSize()-1 ];
|
||||||
pNotes->m_NotesType = GAMEMAN->m_CurNotesType;
|
pNotes->m_NotesType = GAMEMAN->m_CurNotesType;
|
||||||
pNotes->m_sDescription = "Untitled";
|
pNotes->m_sDescription = "Untitled";
|
||||||
pNotes->m_iMeter = 1;
|
pNotes->m_iMeter = 1;
|
||||||
|
|||||||
@@ -89,14 +89,14 @@ ScreenEditMenu::ScreenEditMenu()
|
|||||||
|
|
||||||
m_textExplanation.Load( THEME->GetPathTo(FONT_NORMAL) );
|
m_textExplanation.Load( THEME->GetPathTo(FONT_NORMAL) );
|
||||||
m_textExplanation.SetXY( EXPLANATION_X, EXPLANATION_Y );
|
m_textExplanation.SetXY( EXPLANATION_X, EXPLANATION_Y );
|
||||||
m_textExplanation.SetText( ssprintf("This mode will allow you to\nedit an existing or\n create a new Notes Notes.") );
|
m_textExplanation.SetText( ssprintf("This mode will allow you to\nedit existing notes patterns,\n or create new ones from scratch.") );
|
||||||
m_textExplanation.SetZoom( 0.7f );
|
m_textExplanation.SetZoom( 0.7f );
|
||||||
this->AddActor( &m_textExplanation );
|
this->AddActor( &m_textExplanation );
|
||||||
|
|
||||||
m_Menu.Load(
|
m_Menu.Load(
|
||||||
THEME->GetPathTo(GRAPHIC_EDIT_BACKGROUND),
|
THEME->GetPathTo(GRAPHIC_EDIT_BACKGROUND),
|
||||||
THEME->GetPathTo(GRAPHIC_EDIT_TOP_EDGE),
|
THEME->GetPathTo(GRAPHIC_EDIT_TOP_EDGE),
|
||||||
ssprintf("%s %s change music NEXT to continue", CString(char(1)), CString(char(2)) )
|
ssprintf("%s %s change music START to continue", CString(char(1)), CString(char(2)) )
|
||||||
);
|
);
|
||||||
this->AddActor( &m_Menu );
|
this->AddActor( &m_Menu );
|
||||||
|
|
||||||
@@ -144,6 +144,17 @@ void ScreenEditMenu::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
||||||
break;
|
break;
|
||||||
case SM_GoToNextState:
|
case SM_GoToNextState:
|
||||||
|
// set the current style based on the notes type
|
||||||
|
switch( GetSelectedNotesType() )
|
||||||
|
{
|
||||||
|
case NOTES_TYPE_DANCE_SINGLE: GAMEMAN->m_CurStyle = STYLE_DANCE_SINGLE; break;
|
||||||
|
case NOTES_TYPE_DANCE_DOUBLE: GAMEMAN->m_CurStyle = STYLE_DANCE_DOUBLE; break;
|
||||||
|
case NOTES_TYPE_DANCE_COUPLE: GAMEMAN->m_CurStyle = STYLE_DANCE_COUPLE; break;
|
||||||
|
case NOTES_TYPE_DANCE_SOLO: GAMEMAN->m_CurStyle = STYLE_DANCE_SOLO; break;
|
||||||
|
case NOTES_TYPE_PUMP_SINGLE: GAMEMAN->m_CurStyle = STYLE_PUMP_SINGLE; break;
|
||||||
|
case NOTES_TYPE_PUMP_DOUBLE: GAMEMAN->m_CurStyle = STYLE_PUMP_DOUBLE; break;
|
||||||
|
}
|
||||||
|
|
||||||
SCREENMAN->SetNewScreen( new ScreenEdit );
|
SCREENMAN->SetNewScreen( new ScreenEdit );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,19 +28,22 @@
|
|||||||
// Defines specific to GameScreenTitleMenu
|
// Defines specific to GameScreenTitleMenu
|
||||||
//
|
//
|
||||||
|
|
||||||
const float LIFE_X[NUM_PLAYERS] = { CENTER_X-180, CENTER_X+180 };
|
const float LIFE_LOCAL_X[NUM_PLAYERS] = { -180, +180 };
|
||||||
const float LIFE_Y = SCREEN_TOP+28;
|
const float LIFE_LOCAL_Y[NUM_PLAYERS] = { -10, -10 };
|
||||||
|
|
||||||
const float SCORE_X[NUM_PLAYERS] = { CENTER_X-214, CENTER_X+214 };
|
const float STAGE_NUMBER_LOCAL_X = 0;
|
||||||
const float SCORE_Y = SCREEN_BOTTOM-38;
|
const float STAGE_NUMBER_LOCAL_Y = +20;
|
||||||
|
|
||||||
const float PLAYER_OPTIONS_X[NUM_PLAYERS] = { CENTER_X-214, CENTER_X+214 };
|
const float SCORE_LOCAL_X[NUM_PLAYERS] = { -214, +214 };
|
||||||
const float PLAYER_OPTIONS_Y[NUM_PLAYERS] = { SCREEN_BOTTOM-60, SCREEN_BOTTOM-40 };
|
const float SCORE_LOCAL_Y[NUM_PLAYERS] = { -6, -6 };
|
||||||
|
|
||||||
const float DIFFICULTY_X[NUM_PLAYERS] = { SCREEN_LEFT+70, SCREEN_RIGHT-70 };
|
const float PLAYER_OPTIONS_LOCAL_X[NUM_PLAYERS] = { -214, +214 };
|
||||||
const float DIFFICULTY_Y = SCREEN_BOTTOM-80;
|
const float PLAYER_OPTIONS_LOCAL_Y[NUM_PLAYERS] = { -10, +10 };
|
||||||
|
|
||||||
const float MAX_SECONDS_CAN_BE_OFF_BY = 0.20f;
|
const float DIFFICULTY_X[NUM_PLAYERS] = { SCREEN_LEFT+60, SCREEN_RIGHT-60 };
|
||||||
|
const float DIFFICULTY_Y[NUM_PLAYERS] = { SCREEN_BOTTOM-70, SCREEN_BOTTOM-70 };
|
||||||
|
|
||||||
|
const float MAX_SECONDS_CAN_BE_OFF_BY = 0.25f;
|
||||||
|
|
||||||
const float TIME_BETWEEN_DANCING_COMMENTS = 15;
|
const float TIME_BETWEEN_DANCING_COMMENTS = 15;
|
||||||
|
|
||||||
@@ -67,86 +70,105 @@ ScreenGameplay::ScreenGameplay()
|
|||||||
{
|
{
|
||||||
LOG->WriteLine( "ScreenGameplay::ScreenGameplay()" );
|
LOG->WriteLine( "ScreenGameplay::ScreenGameplay()" );
|
||||||
|
|
||||||
|
m_pCurSong = NULL;
|
||||||
|
|
||||||
|
switch( PREFSMAN->m_PlayMode )
|
||||||
|
{
|
||||||
|
case PLAY_MODE_ARCADE:
|
||||||
|
{
|
||||||
|
m_apSongQueue.Add( SONGMAN->GetCurrentSong() );
|
||||||
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
m_apNotesQueue[p].Add( SONGMAN->GetCurrentNotes(PlayerNumber(p)) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PLAY_MODE_ONI:
|
||||||
|
{
|
||||||
|
Course* pCourse = SONGMAN->m_pCurCourse;
|
||||||
|
ASSERT( pCourse != NULL );
|
||||||
|
for( int i=0; i<pCourse->m_iStages; i++ )
|
||||||
|
{
|
||||||
|
m_apSongQueue.Add( pCourse->m_apSongs[i] );
|
||||||
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
m_apNotesQueue[p].Add( pCourse->m_apNotes[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
m_DancingState = STATE_INTRO;
|
m_DancingState = STATE_INTRO;
|
||||||
m_fTimeLeftBeforeDancingComment = TIME_BETWEEN_DANCING_COMMENTS;
|
m_fTimeLeftBeforeDancingComment = TIME_BETWEEN_DANCING_COMMENTS;
|
||||||
|
m_bBothHaveFailed = false;
|
||||||
m_bHasFailed = false;
|
|
||||||
m_pSong = SONGMAN->GetCurrentSong();
|
|
||||||
|
|
||||||
|
|
||||||
m_Background.LoadFromSong( m_pSong );
|
|
||||||
m_Background.SetDiffuseColor( D3DXCOLOR(0.4f,0.4f,0.4f,1) );
|
m_Background.SetDiffuseColor( D3DXCOLOR(0.4f,0.4f,0.4f,1) );
|
||||||
this->AddActor( &m_Background );
|
this->AddActor( &m_Background );
|
||||||
|
|
||||||
|
|
||||||
// Get the current StyleDef definition (used below)
|
|
||||||
StyleDef* pStyleDef = GAMEMAN->GetCurrentStyleDef();
|
|
||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
float fDifficultyY = DIFFICULTY_Y;
|
|
||||||
if( PREFSMAN->m_PlayerOptions[p].m_bReverseScroll )
|
|
||||||
fDifficultyY = SCREEN_HEIGHT - DIFFICULTY_Y;
|
|
||||||
m_DifficultyBanner[p].SetXY( DIFFICULTY_X[p], fDifficultyY );
|
|
||||||
m_DifficultyBanner[p].SetFromNotes( SONGMAN->GetCurrentNotes((PlayerNumber)p) );
|
|
||||||
this->AddActor( &m_DifficultyBanner[p] );
|
|
||||||
|
|
||||||
|
|
||||||
NoteData* pOriginalNoteData = SONGMAN->GetCurrentNotes((PlayerNumber)p)->GetNoteData();
|
|
||||||
|
|
||||||
NoteData newNoteData;
|
|
||||||
GAMEMAN->GetCurrentStyleDef()->GetTransformedNoteDataForStyle( (PlayerNumber)p, pOriginalNoteData, newNoteData );
|
|
||||||
|
|
||||||
m_Player[p].SetX( (float) GAMEMAN->GetCurrentStyleDef()->m_iCenterX[p] );
|
m_Player[p].SetX( (float) GAMEMAN->GetCurrentStyleDef()->m_iCenterX[p] );
|
||||||
m_Player[p].Load(
|
|
||||||
(PlayerNumber)p,
|
|
||||||
GAMEMAN->GetCurrentStyleDef(),
|
|
||||||
&newNoteData,
|
|
||||||
PREFSMAN->m_PlayerOptions[p],
|
|
||||||
&m_LifeMeter[p],
|
|
||||||
&m_ScoreDisplay[p]
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
this->AddActor( &m_Player[p] );
|
this->AddActor( &m_Player[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////
|
||||||
|
// Add all Actors to m_frameTop
|
||||||
|
//////////////////////////////////
|
||||||
|
this->AddActor( &m_frameTop );
|
||||||
|
|
||||||
|
// LifeMeter goes underneath top frame
|
||||||
for( p=0; p<NUM_PLAYERS; p++ )
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
m_quadLifeMeterBG[p].SetXY( LIFE_X[p], LIFE_Y );
|
m_quadLifeMeterBG[p].SetXY( LIFE_LOCAL_X[p], LIFE_LOCAL_Y[p] );
|
||||||
m_quadLifeMeterBG[p].SetDiffuseColor( D3DXCOLOR(0,0,0,1) );
|
m_quadLifeMeterBG[p].SetDiffuseColor( D3DXCOLOR(0,0,0,1) );
|
||||||
m_quadLifeMeterBG[p].SetZoomX( 256 );
|
m_quadLifeMeterBG[p].SetZoomX( 256 );
|
||||||
m_quadLifeMeterBG[p].SetZoomY( (p==PLAYER_1) ? 20.0f : -20.0f );
|
m_quadLifeMeterBG[p].SetZoomY( (p==PLAYER_1) ? 20.0f : -20.0f );
|
||||||
this->AddActor( &m_quadLifeMeterBG[p] );
|
m_frameTop.AddActor( &m_quadLifeMeterBG[p] );
|
||||||
|
|
||||||
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
m_LifeMeter[p].SetPlayerOptions( PREFSMAN->m_PlayerOptions[p] );
|
m_LifeMeter[p].SetPlayerOptions( PREFSMAN->m_PlayerOptions[p] );
|
||||||
m_LifeMeter[p].SetXY( LIFE_X[p], LIFE_Y );
|
m_LifeMeter[p].SetXY( LIFE_LOCAL_X[p], LIFE_LOCAL_Y[p] );
|
||||||
m_LifeMeter[p].SetZoomX( 256 );
|
m_LifeMeter[p].SetZoomX( 256 );
|
||||||
m_LifeMeter[p].SetZoomY( (p==PLAYER_1) ? 20.0f : -20.0f );
|
m_LifeMeter[p].SetZoomY( (p==PLAYER_1) ? 20.0f : -20.0f );
|
||||||
this->AddActor( &m_LifeMeter[p] );
|
m_frameTop.AddActor( &m_LifeMeter[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sprTopFrame.Load( THEME->GetPathTo(GRAPHIC_GAMEPLAY_TOP_FRAME) );
|
// TopFrame goes above LifeMeter
|
||||||
m_sprTopFrame.SetXY( CENTER_X, SCREEN_TOP + m_sprTopFrame.GetZoomedHeight()/2 );
|
m_sprTopFrame.Load( THEME->GetPathTo(GRAPHIC_GAMEPLAY_TOP_FRAME_ARCADE) );
|
||||||
this->AddActor( &m_sprTopFrame );
|
m_frameTop.AddActor( &m_sprTopFrame );
|
||||||
|
|
||||||
|
m_frameTop.SetXY( CENTER_X, SCREEN_TOP + m_sprTopFrame.GetZoomedHeight()/2 );
|
||||||
|
|
||||||
|
m_textStageNumber.Load( THEME->GetPathTo(FONT_HEADER2) );
|
||||||
|
m_textStageNumber.TurnShadowOff();
|
||||||
|
m_textStageNumber.SetXY( STAGE_NUMBER_LOCAL_X, STAGE_NUMBER_LOCAL_Y );
|
||||||
|
CString sStageText = PREFSMAN->GetStageText();
|
||||||
|
m_textStageNumber.SetText( sStageText );
|
||||||
|
if( stricmp(sStageText, "Final") == 0 )
|
||||||
|
m_textStageNumber.SetDiffuseColor( D3DXCOLOR(1,0.1f,0.1f,1) ); // red
|
||||||
|
else
|
||||||
|
m_textStageNumber.SetDiffuseColor( D3DXCOLOR(0.3f,1,0.3f,1) ); // green
|
||||||
|
m_frameTop.AddActor( &m_textStageNumber );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////
|
||||||
|
// Add all Actors to m_frameBottom
|
||||||
|
//////////////////////////////////
|
||||||
|
this->AddActor( &m_frameBottom );
|
||||||
|
|
||||||
m_sprBottomFrame.Load( THEME->GetPathTo(GRAPHIC_GAMEPLAY_BOTTOM_FRAME) );
|
m_sprBottomFrame.Load( THEME->GetPathTo(GRAPHIC_GAMEPLAY_BOTTOM_FRAME) );
|
||||||
m_sprBottomFrame.SetXY( CENTER_X, SCREEN_BOTTOM - m_sprBottomFrame.GetZoomedHeight()/2 );
|
m_frameBottom.AddActor( &m_sprBottomFrame );
|
||||||
this->AddActor( &m_sprBottomFrame );
|
|
||||||
|
|
||||||
m_textStageNumber.Load( THEME->GetPathTo(FONT_HEADER1) );
|
m_frameBottom.SetXY( CENTER_X, SCREEN_BOTTOM - m_sprBottomFrame.GetZoomedHeight()/2 );
|
||||||
m_textStageNumber.TurnShadowOff();
|
|
||||||
m_textStageNumber.SetXY( CENTER_X, 60 );
|
|
||||||
m_textStageNumber.SetDiffuseColor( D3DXCOLOR(0.3f,1,1,1) );
|
|
||||||
m_textStageNumber.SetText( PREFSMAN->GetStageText() );
|
|
||||||
this->AddActor( &m_textStageNumber );
|
|
||||||
|
|
||||||
|
|
||||||
for( p=0; p<NUM_PLAYERS; p++ )
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
@@ -154,21 +176,40 @@ ScreenGameplay::ScreenGameplay()
|
|||||||
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
m_ScoreDisplay[p].SetXY( SCORE_X[p], SCORE_Y );
|
m_ScoreDisplay[p].SetXY( SCORE_LOCAL_X[p], SCORE_LOCAL_Y[p] );
|
||||||
m_ScoreDisplay[p].SetZoom( 0.8f );
|
m_ScoreDisplay[p].SetZoom( 0.8f );
|
||||||
this->AddActor( &m_ScoreDisplay[p] );
|
m_frameBottom.AddActor( &m_ScoreDisplay[p] );
|
||||||
|
|
||||||
m_textPlayerOptions[p].Load( THEME->GetPathTo(FONT_NORMAL) );
|
m_textPlayerOptions[p].Load( THEME->GetPathTo(FONT_NORMAL) );
|
||||||
m_textPlayerOptions[p].TurnShadowOff();
|
m_textPlayerOptions[p].TurnShadowOff();
|
||||||
m_textPlayerOptions[p].SetXY( PLAYER_OPTIONS_X[p], PLAYER_OPTIONS_Y[p] );
|
m_textPlayerOptions[p].SetXY( PLAYER_OPTIONS_LOCAL_X[p], PLAYER_OPTIONS_LOCAL_Y[p] );
|
||||||
m_textPlayerOptions[p].SetZoom( 0.5f );
|
m_textPlayerOptions[p].SetZoom( 0.5f );
|
||||||
m_textPlayerOptions[p].SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
m_textPlayerOptions[p].SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
||||||
m_textPlayerOptions[p].SetText( PREFSMAN->m_PlayerOptions[p].GetString() );
|
m_textPlayerOptions[p].SetText( PREFSMAN->m_PlayerOptions[p].GetString() );
|
||||||
this->AddActor( &m_textPlayerOptions[p] );
|
m_frameBottom.AddActor( &m_textPlayerOptions[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Get the current StyleDef definition (used below)
|
||||||
|
StyleDef* pStyleDef = GAMEMAN->GetCurrentStyleDef();
|
||||||
|
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
{
|
||||||
|
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
float fDifficultyY = DIFFICULTY_Y[p];
|
||||||
|
if( PREFSMAN->m_PlayerOptions[p].m_bReverseScroll )
|
||||||
|
fDifficultyY = SCREEN_HEIGHT - DIFFICULTY_Y[p];
|
||||||
|
m_DifficultyBanner[p].SetXY( DIFFICULTY_X[p], fDifficultyY );
|
||||||
|
this->AddActor( &m_DifficultyBanner[p] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_StarWipe.SetClosed();
|
m_StarWipe.SetClosed();
|
||||||
@@ -195,7 +236,6 @@ ScreenGameplay::ScreenGameplay()
|
|||||||
this->AddActor( &m_sprFailed );
|
this->AddActor( &m_sprFailed );
|
||||||
|
|
||||||
|
|
||||||
m_soundMusic.Load( m_pSong->GetMusicPath() );
|
|
||||||
|
|
||||||
m_soundFail.Load( THEME->GetPathTo(SOUND_GAMEPLAY_FAILED) );
|
m_soundFail.Load( THEME->GetPathTo(SOUND_GAMEPLAY_FAILED) );
|
||||||
m_announcerReady.Load( ANNOUNCER->GetPathTo(ANNOUNCER_GAMEPLAY_READY) );
|
m_announcerReady.Load( ANNOUNCER->GetPathTo(ANNOUNCER_GAMEPLAY_READY) );
|
||||||
@@ -208,12 +248,11 @@ ScreenGameplay::ScreenGameplay()
|
|||||||
m_soundAssistTick.Load( THEME->GetPathTo(SOUND_GAMEPLAY_ASSIST_TICK) );
|
m_soundAssistTick.Load( THEME->GetPathTo(SOUND_GAMEPLAY_ASSIST_TICK) );
|
||||||
|
|
||||||
|
|
||||||
|
LoadNextSong();
|
||||||
|
|
||||||
// Send some messages every have second to we can get the introduction rolling
|
// Send some messages every have second to we can get the introduction rolling
|
||||||
for( int i=0; i<30; i++ )
|
for( int i=0; i<30; i++ )
|
||||||
this->SendScreenMessage( ScreenMessage(SM_User+i), i/2.0f );
|
this->SendScreenMessage( ScreenMessage(SM_User+i), i/2.0f );
|
||||||
|
|
||||||
|
|
||||||
m_StarWipe.SetClosed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenGameplay::~ScreenGameplay()
|
ScreenGameplay::~ScreenGameplay()
|
||||||
@@ -223,6 +262,56 @@ ScreenGameplay::~ScreenGameplay()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenGameplay::LoadNextSong()
|
||||||
|
{
|
||||||
|
int p;
|
||||||
|
|
||||||
|
m_pCurSong = m_apSongQueue[m_apSongQueue.GetSize()-1];
|
||||||
|
m_apSongQueue.RemoveAt(m_apSongQueue.GetSize()-1);
|
||||||
|
|
||||||
|
Notes* pNotes[NUM_PLAYERS];
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
{
|
||||||
|
pNotes[p] = m_apNotesQueue[p][m_apNotesQueue[p].GetSize()-1];
|
||||||
|
m_apNotesQueue[p].RemoveAt(m_apNotesQueue[p].GetSize()-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get the current StyleDef definition (used below)
|
||||||
|
StyleDef* pStyleDef = GAMEMAN->GetCurrentStyleDef();
|
||||||
|
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
{
|
||||||
|
if( !GAMEMAN->IsPlayerEnabled(PlayerNumber(p)) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
m_DifficultyBanner[p].SetFromNotes( PlayerNumber(p), pNotes[p] );
|
||||||
|
|
||||||
|
|
||||||
|
NoteData* pOriginalNoteData = pNotes[p]->GetNoteData();
|
||||||
|
|
||||||
|
NoteData newNoteData;
|
||||||
|
pStyleDef->GetTransformedNoteDataForStyle( (PlayerNumber)p, pOriginalNoteData, newNoteData );
|
||||||
|
|
||||||
|
m_Player[p].Load(
|
||||||
|
(PlayerNumber)p,
|
||||||
|
GAMEMAN->GetCurrentStyleDef(),
|
||||||
|
&newNoteData,
|
||||||
|
PREFSMAN->m_PlayerOptions[p],
|
||||||
|
&m_LifeMeter[p],
|
||||||
|
&m_ScoreDisplay[p]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_soundMusic.Load( m_pCurSong->GetMusicPath() );
|
||||||
|
|
||||||
|
m_Background.LoadFromSong( m_pCurSong );
|
||||||
|
m_Background.SetDiffuseColor( D3DXCOLOR(0.5f,0.5f,0.5f,1) );
|
||||||
|
m_Background.BeginTweeningQueued( 2 );
|
||||||
|
m_Background.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScreenGameplay::Update( float fDeltaTime )
|
void ScreenGameplay::Update( float fDeltaTime )
|
||||||
{
|
{
|
||||||
//LOG->WriteLine( "ScreenGameplay::Update(%f)", fDeltaTime );
|
//LOG->WriteLine( "ScreenGameplay::Update(%f)", fDeltaTime );
|
||||||
@@ -232,7 +321,7 @@ void ScreenGameplay::Update( float fDeltaTime )
|
|||||||
float fSongBeat, fBPS;
|
float fSongBeat, fBPS;
|
||||||
float fPositionSeconds = m_soundMusic.GetPositionSeconds();
|
float fPositionSeconds = m_soundMusic.GetPositionSeconds();
|
||||||
|
|
||||||
m_pSong->GetBeatAndBPSFromElapsedTime( fPositionSeconds, fSongBeat, fBPS );
|
m_pCurSong->GetBeatAndBPSFromElapsedTime( fPositionSeconds, fSongBeat, fBPS );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -254,7 +343,7 @@ void ScreenGameplay::Update( float fDeltaTime )
|
|||||||
case SongOptions::FAIL_ARCADE:
|
case SongOptions::FAIL_ARCADE:
|
||||||
case SongOptions::FAIL_END_OF_SONG:
|
case SongOptions::FAIL_END_OF_SONG:
|
||||||
|
|
||||||
if( m_bHasFailed )
|
if( m_bBothHaveFailed )
|
||||||
break; // if they have already failed, don't bother checking again
|
break; // if they have already failed, don't bother checking again
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -282,7 +371,7 @@ void ScreenGameplay::Update( float fDeltaTime )
|
|||||||
|
|
||||||
if( bAllFailed )
|
if( bAllFailed )
|
||||||
{
|
{
|
||||||
m_bHasFailed = true;
|
m_bBothHaveFailed = true;
|
||||||
SCREENMAN->SendMessageToTopScreen( SM_LifeIs0, 0 );
|
SCREENMAN->SendMessageToTopScreen( SM_LifeIs0, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -329,7 +418,7 @@ void ScreenGameplay::Update( float fDeltaTime )
|
|||||||
// will start coming out the speaker. Compensate for this by boosting
|
// will start coming out the speaker. Compensate for this by boosting
|
||||||
// fPositionSeconds ahead
|
// fPositionSeconds ahead
|
||||||
fPositionSeconds += (SOUND->GetPlayLatency()+0.06f) * m_soundMusic.GetPlaybackRate(); // HACK: Add 0.06 seconds to make them play a tiny bit earlier
|
fPositionSeconds += (SOUND->GetPlayLatency()+0.06f) * m_soundMusic.GetPlaybackRate(); // HACK: Add 0.06 seconds to make them play a tiny bit earlier
|
||||||
m_pSong->GetBeatAndBPSFromElapsedTime( fPositionSeconds, fSongBeat, fBPS );
|
m_pCurSong->GetBeatAndBPSFromElapsedTime( fPositionSeconds, fSongBeat, fBPS );
|
||||||
|
|
||||||
int iIndexNow = BeatToNoteIndexNotRounded( fSongBeat );
|
int iIndexNow = BeatToNoteIndexNotRounded( fSongBeat );
|
||||||
static int iIndexLastCrossed = 0;
|
static int iIndexLastCrossed = 0;
|
||||||
@@ -369,7 +458,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
//LOG->WriteLine( "ScreenGameplay::Input()" );
|
//LOG->WriteLine( "ScreenGameplay::Input()" );
|
||||||
|
|
||||||
float fSongBeat, fBPS;
|
float fSongBeat, fBPS;
|
||||||
m_pSong->GetBeatAndBPSFromElapsedTime( m_soundMusic.GetPositionSeconds(), fSongBeat, fBPS );
|
m_pCurSong->GetBeatAndBPSFromElapsedTime( m_soundMusic.GetPositionSeconds(), fSongBeat, fBPS );
|
||||||
|
|
||||||
|
|
||||||
if( MenuI.IsValid() )
|
if( MenuI.IsValid() )
|
||||||
@@ -378,9 +467,9 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
{
|
{
|
||||||
case MENU_BUTTON_BACK:
|
case MENU_BUTTON_BACK:
|
||||||
if( m_DancingState == STATE_DANCING
|
if( m_DancingState == STATE_DANCING
|
||||||
&& !m_bHasFailed )
|
&& !m_bBothHaveFailed )
|
||||||
{
|
{
|
||||||
m_bHasFailed = true;
|
m_bBothHaveFailed = true;
|
||||||
SCREENMAN->SendMessageToTopScreen( SM_BeginFailed, 0 );
|
SCREENMAN->SendMessageToTopScreen( SM_BeginFailed, 0 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -450,7 +539,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
if( m_DancingState == STATE_OUTRO ) // gameplay already ended
|
if( m_DancingState == STATE_OUTRO ) // gameplay already ended
|
||||||
return; // ignore
|
return; // ignore
|
||||||
|
|
||||||
if( m_bHasFailed ) // fail them
|
if( m_bBothHaveFailed ) // fail them
|
||||||
{
|
{
|
||||||
this->SendScreenMessage( SM_BeginFailed, 0 );
|
this->SendScreenMessage( SM_BeginFailed, 0 );
|
||||||
}
|
}
|
||||||
@@ -473,10 +562,16 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
SCREENMAN->SendMessageToTopScreen( SM_GoToResults, 1 );
|
SCREENMAN->SendMessageToTopScreen( SM_GoToResults, 1 );
|
||||||
break;
|
break;
|
||||||
case SM_GoToResults:
|
case SM_GoToResults:
|
||||||
// send score summaries to the PREFSMAN object so ScreenResults can grab it.
|
{
|
||||||
PREFSMAN->m_ScoreSummary[PLAYER_1][PREFSMAN->m_iNumArcadeStages-1] = m_Player[PLAYER_1].GetScoreSummary();
|
// send score summaries to the PREFSMAN object so ScreenResults can grab it.
|
||||||
PREFSMAN->m_ScoreSummary[PLAYER_2][PREFSMAN->m_iNumArcadeStages-1] = m_Player[PLAYER_2].GetScoreSummary();
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
SCREENMAN->SetNewScreen( new ScreenResults(false) );
|
{
|
||||||
|
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
||||||
|
continue; // skip
|
||||||
|
m_Player[p].GetGameplayStatistics( SONGMAN->m_GameplayStatistics[PREFSMAN->m_iNumArcadeStages-1][p] );
|
||||||
|
}
|
||||||
|
SCREENMAN->SetNewScreen( new ScreenResults(false) );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
@@ -526,6 +621,16 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
SCREENMAN->SetNewScreen( new ScreenGameOver );
|
SCREENMAN->SetNewScreen( new ScreenGameOver );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenGameplay::TweenOnScreen()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenGameplay::TweenOffScreen()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,28 +45,37 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void TweenOnScreen();
|
||||||
|
void TweenOffScreen();
|
||||||
|
void LoadNextSong();
|
||||||
|
|
||||||
DancingState m_DancingState;
|
|
||||||
|
|
||||||
float m_fTimeLeftBeforeDancingComment; // this counter is only running while STATE_DANCING
|
DancingState m_DancingState;
|
||||||
|
|
||||||
Song* m_pSong;
|
Song* m_pCurSong; // nearest songs are on back of queue
|
||||||
bool m_bHasFailed;
|
CArray<Song*,Song*> m_apSongQueue; // nearest songs are on back of queue
|
||||||
|
CArray<Notes*,Notes*> m_apNotesQueue[NUM_PLAYERS]; // nearest notes are on back of queue
|
||||||
|
bool m_bBothHaveFailed;
|
||||||
|
|
||||||
Background m_Background;
|
float m_fTimeLeftBeforeDancingComment; // this counter is only running while STATE_DANCING
|
||||||
|
|
||||||
Quad m_quadLifeMeterBG[NUM_PLAYERS];
|
|
||||||
LifeMeterBar m_LifeMeter[NUM_PLAYERS];
|
|
||||||
|
|
||||||
Sprite m_sprTopFrame;
|
Background m_Background;
|
||||||
Sprite m_sprBottomFrame;
|
|
||||||
BitmapText m_textPlayerOptions[NUM_PLAYERS];
|
|
||||||
|
|
||||||
|
|
||||||
|
ActorFrame m_frameTop;
|
||||||
|
Sprite m_sprTopFrame;
|
||||||
|
Quad m_quadLifeMeterBG[NUM_PLAYERS]; // just a black quad to fill in hole for the life meter
|
||||||
|
LifeMeterBar m_LifeMeter[NUM_PLAYERS];
|
||||||
|
BitmapText m_textStageNumber;
|
||||||
|
|
||||||
|
|
||||||
|
ActorFrame m_frameBottom;
|
||||||
|
Sprite m_sprBottomFrame;
|
||||||
ScoreDisplayRolling m_ScoreDisplay[NUM_PLAYERS];
|
ScoreDisplayRolling m_ScoreDisplay[NUM_PLAYERS];
|
||||||
|
BitmapText m_textPlayerOptions[NUM_PLAYERS];
|
||||||
|
|
||||||
|
|
||||||
BitmapText m_textStageNumber;
|
|
||||||
|
|
||||||
TransitionStarWipe m_StarWipe;
|
TransitionStarWipe m_StarWipe;
|
||||||
|
|
||||||
FocusingSprite m_sprReady;
|
FocusingSprite m_sprReady;
|
||||||
@@ -74,7 +83,7 @@ private:
|
|||||||
FocusingSprite m_sprCleared;
|
FocusingSprite m_sprCleared;
|
||||||
MotionBlurSprite m_sprFailed;
|
MotionBlurSprite m_sprFailed;
|
||||||
|
|
||||||
Player m_Player[NUM_PLAYERS];
|
Player m_Player[NUM_PLAYERS];
|
||||||
|
|
||||||
DifficultyBanner m_DifficultyBanner[NUM_PLAYERS];
|
DifficultyBanner m_DifficultyBanner[NUM_PLAYERS];
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ const CString CREDIT_LINES[] =
|
|||||||
"",
|
"",
|
||||||
"GRAPHICS:",
|
"GRAPHICS:",
|
||||||
"TofuBoy (Lucas Tang)",
|
"TofuBoy (Lucas Tang)",
|
||||||
"Brian 'Bork' Bugh",
|
|
||||||
"DJ McFox (Ryan McKanna)",
|
"DJ McFox (Ryan McKanna)",
|
||||||
|
"SPiGuMuS",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
@@ -52,11 +52,16 @@ const CString CREDIT_LINES[] =
|
|||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
"SOUND:",
|
||||||
|
"Kyle 'Keel' Ward",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
"PROGRAMMING:",
|
"PROGRAMMING:",
|
||||||
"Parasyte (Chris Gomez)",
|
|
||||||
"Lord Frieza (Andrew Livy)",
|
|
||||||
"Ben Nordstrom",
|
|
||||||
"Chris Danford",
|
"Chris Danford",
|
||||||
|
"Lord Frieza (Andrew Livy)",
|
||||||
|
"Parasyte (Chris Gomez)",
|
||||||
|
"Ben Nordstrom",
|
||||||
"angedelamort (Sauleil Lamarre)",
|
"angedelamort (Sauleil Lamarre)",
|
||||||
"Edwin Evans",
|
"Edwin Evans",
|
||||||
"Brian 'Bork' Bugh",
|
"Brian 'Bork' Bugh",
|
||||||
@@ -77,14 +82,15 @@ const CString CREDIT_LINES[] =
|
|||||||
"SPECIAL THANKS TO:",
|
"SPECIAL THANKS TO:",
|
||||||
"SimWolf",
|
"SimWolf",
|
||||||
"Dance With Intensity",
|
"Dance With Intensity",
|
||||||
"The Melting Pot",
|
"DDR Llama",
|
||||||
"Lagged",
|
|
||||||
"DDRJamz Global BBS",
|
|
||||||
"DDRManiaX",
|
"DDRManiaX",
|
||||||
|
"Lagged",
|
||||||
|
"The Melting Pot",
|
||||||
|
"DDRJamz Global BBS",
|
||||||
"BemaniRuler",
|
"BemaniRuler",
|
||||||
"Brendan Walker",
|
"Brendan Walker",
|
||||||
"WaffleKing (Eric Webster)",
|
"Eric 'WaffleKing' Webster",
|
||||||
"Foobly (Mark Verrey)",
|
"Mark 'Foobly' Verrey",
|
||||||
"Mandarin Blue",
|
"Mandarin Blue",
|
||||||
"Anne Kiel",
|
"Anne Kiel",
|
||||||
"BeMaNiFiNiNaTiC",
|
"BeMaNiFiNiNaTiC",
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ const float HEADER_Y = 50;
|
|||||||
const float HELP_X = CENTER_X;
|
const float HELP_X = CENTER_X;
|
||||||
const float HELP_Y = SCREEN_HEIGHT-35;
|
const float HELP_Y = SCREEN_HEIGHT-35;
|
||||||
const float ITEM_GAP_X = 12;
|
const float ITEM_GAP_X = 12;
|
||||||
|
const float LABELS_X = 80;
|
||||||
|
const float LINE_START_Y= 80;
|
||||||
|
const float LINE_GAP_Y = 36;
|
||||||
|
|
||||||
|
|
||||||
const ScreenMessage SM_PlaySample = ScreenMessage(SM_User-4);
|
const ScreenMessage SM_PlaySample = ScreenMessage(SM_User-4);
|
||||||
@@ -48,7 +51,7 @@ ScreenOptions::ScreenOptions( CString sBackgroundPath, CString sTopEdgePath )
|
|||||||
m_Menu.Load(
|
m_Menu.Load(
|
||||||
sBackgroundPath,
|
sBackgroundPath,
|
||||||
sTopEdgePath,
|
sTopEdgePath,
|
||||||
ssprintf("%s %s to change line %s %s to select between options then press NEXT", CString(char(3)), CString(char(4)), CString(char(1)), CString(char(2)) )
|
ssprintf("%s %s to change line %s %s to select between options then press START", CString(char(3)), CString(char(4)), CString(char(1)), CString(char(2)) )
|
||||||
);
|
);
|
||||||
this->AddActor( &m_Menu );
|
this->AddActor( &m_Menu );
|
||||||
m_Menu.TweenOnScreenFromBlack( SM_None );
|
m_Menu.TweenOnScreenFromBlack( SM_None );
|
||||||
@@ -135,13 +138,13 @@ void ScreenOptions::InitOptionsText()
|
|||||||
{
|
{
|
||||||
OptionLineData &optline = m_OptionLineData[i];
|
OptionLineData &optline = m_OptionLineData[i];
|
||||||
|
|
||||||
float fY = 60.0f + 40*i;
|
float fY = LINE_START_Y + LINE_GAP_Y*i;
|
||||||
|
|
||||||
BitmapText &title = m_textOptionLineTitles[i];
|
BitmapText &title = m_textOptionLineTitles[i];
|
||||||
|
|
||||||
title.Load( THEME->GetPathTo(FONT_HEADER2) );
|
title.Load( THEME->GetPathTo(FONT_HEADER2) );
|
||||||
title.SetText( optline.szTitle );
|
title.SetText( optline.szTitle );
|
||||||
title.SetXY( 80, fY );
|
title.SetXY( LABELS_X, fY );
|
||||||
title.SetZoom( 0.7f );
|
title.SetZoom( 0.7f );
|
||||||
title.SetVertAlign( Actor::align_middle );
|
title.SetVertAlign( Actor::align_middle );
|
||||||
this->AddActor( &title );
|
this->AddActor( &title );
|
||||||
@@ -173,12 +176,10 @@ void ScreenOptions::InitOptionsText()
|
|||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
||||||
Quad &highlight = m_SelectionHighlight[p];
|
Quad &highlight = m_SelectionHighlight[p];
|
||||||
this->AddActor( &highlight );
|
|
||||||
|
|
||||||
for( int i=0; i<m_iNumOptionLines; i++ ) // foreach options line
|
for( int i=0; i<m_iNumOptionLines; i++ ) // foreach options line
|
||||||
{
|
{
|
||||||
Quad &underline = m_OptionUnderline[p][i];
|
Quad &underline = m_OptionUnderline[p][i];
|
||||||
this->AddActor( &underline );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ void ScreenPlayerOptions::ImportOptions()
|
|||||||
for( int s=0; i<m_OptionLineData[PO_SKIN].iNumOptions; s++ ) // foreach skin
|
for( int s=0; i<m_OptionLineData[PO_SKIN].iNumOptions; s++ ) // foreach skin
|
||||||
if( m_OptionLineData[PO_SKIN].szOptionsText[s] == GAMEMAN->m_sCurrentSkin[p] )
|
if( m_OptionLineData[PO_SKIN].szOptionsText[s] == GAMEMAN->m_sCurrentSkin[p] )
|
||||||
{
|
{
|
||||||
m_iSelectedOption[p][PO_DRAIN] = s;
|
m_iSelectedOption[p][PO_SKIN] = s;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -137,12 +137,8 @@ void ScreenPlayerOptions::ExportOptions()
|
|||||||
po.m_bHoldNotes = (m_iSelectedOption[p][PO_HOLD_NOTES] == 1);
|
po.m_bHoldNotes = (m_iSelectedOption[p][PO_HOLD_NOTES] == 1);
|
||||||
po.m_DrainType = (PlayerOptions::DrainType)m_iSelectedOption[p][PO_DRAIN];
|
po.m_DrainType = (PlayerOptions::DrainType)m_iSelectedOption[p][PO_DRAIN];
|
||||||
|
|
||||||
for( int s=0; s<m_OptionLineData[PO_SKIN].iNumOptions; s++ ) // foreach skin
|
int iSelectedSkin = m_iSelectedOption[p][PO_SKIN];
|
||||||
if( m_OptionLineData[PO_SKIN].szOptionsText[s] == GAMEMAN->m_sCurrentSkin[p] )
|
GAMEMAN->m_sCurrentSkin[p] = m_OptionLineData[PO_SKIN].szOptionsText[iSelectedSkin];
|
||||||
{
|
|
||||||
m_iSelectedOption[p][PO_DRAIN] = s;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,254 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: ScreenSelectCourse
|
||||||
|
|
||||||
|
Desc: See header.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "ScreenSelectCourse.h"
|
||||||
|
#include "ScreenManager.h"
|
||||||
|
#include "PrefsManager.h"
|
||||||
|
#include "SongManager.h"
|
||||||
|
#include "GameManager.h"
|
||||||
|
#include "RageMusic.h"
|
||||||
|
#include "ScreenTitleMenu.h"
|
||||||
|
#include "GameConstantsAndTypes.h"
|
||||||
|
#include "ThemeManager.h"
|
||||||
|
#include "ScreenGameplay.h"
|
||||||
|
#include "ScreenPrompt.h"
|
||||||
|
#include "ScreenPlayerOptions.h"
|
||||||
|
#include "RageLog.h"
|
||||||
|
#include "InputMapper.h"
|
||||||
|
#include "InputQueue.h"
|
||||||
|
#include "ScreenStage.h"
|
||||||
|
#include "AnnouncerManager.h"
|
||||||
|
|
||||||
|
|
||||||
|
const float COURSE_INFO_FRAME_X = 160;
|
||||||
|
const float COURSE_INFO_FRAME_Y = SCREEN_TOP+118;
|
||||||
|
|
||||||
|
const float COURSE_CONTENTS_FRAME_X = 160;
|
||||||
|
const float COURSE_CONTENTS_FRAME_Y = CENTER_Y+100;
|
||||||
|
|
||||||
|
const float WHEEL_X = CENTER_X+160;
|
||||||
|
const float WHEEL_Y = CENTER_Y+8;
|
||||||
|
|
||||||
|
const float TWEEN_TIME = 0.5f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const ScreenMessage SM_GoToPrevState = ScreenMessage(SM_User+1);
|
||||||
|
const ScreenMessage SM_GoToNextState = ScreenMessage(SM_User+2);
|
||||||
|
const ScreenMessage SM_ConfirmChange = ScreenMessage(SM_User+3);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ScreenSelectCourse::ScreenSelectCourse()
|
||||||
|
{
|
||||||
|
LOG->WriteLine( "ScreenSelectCourse::ScreenSelectCourse()" );
|
||||||
|
|
||||||
|
// for debugging
|
||||||
|
if( GAMEMAN->m_CurStyle == STYLE_NONE )
|
||||||
|
GAMEMAN->m_CurStyle = STYLE_DANCE_SINGLE;
|
||||||
|
|
||||||
|
m_Menu.Load(
|
||||||
|
THEME->GetPathTo(GRAPHIC_SELECT_COURSE_BACKGROUND),
|
||||||
|
THEME->GetPathTo(GRAPHIC_SELECT_COURSE_TOP_EDGE),
|
||||||
|
ssprintf("%c or %c change course then press START",
|
||||||
|
char(1), char(2), char(3), char(3), char(4), char(4), char(3), char(4), char(3), char(4) )
|
||||||
|
);
|
||||||
|
this->AddActor( &m_Menu );
|
||||||
|
|
||||||
|
m_CourseInfoFrame.SetXY( COURSE_INFO_FRAME_X, COURSE_INFO_FRAME_Y );
|
||||||
|
this->AddActor( &m_CourseInfoFrame );
|
||||||
|
|
||||||
|
m_CourseContentsFrame.SetXY( COURSE_CONTENTS_FRAME_X, COURSE_CONTENTS_FRAME_Y );
|
||||||
|
this->AddActor( &m_CourseContentsFrame );
|
||||||
|
|
||||||
|
m_MusicWheel.SetXY( WHEEL_X, WHEEL_Y );
|
||||||
|
this->AddActor( &m_MusicWheel );
|
||||||
|
|
||||||
|
m_textHoldForOptions.Load( THEME->GetPathTo(FONT_STAGE) );
|
||||||
|
m_textHoldForOptions.SetXY( CENTER_X, CENTER_Y );
|
||||||
|
m_textHoldForOptions.SetText( "hold START for options" );
|
||||||
|
m_textHoldForOptions.SetZoom( 1 );
|
||||||
|
m_textHoldForOptions.SetZoomY( 0 );
|
||||||
|
m_textHoldForOptions.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
|
m_textHoldForOptions.SetZ( -2 );
|
||||||
|
this->AddActor( &m_textHoldForOptions );
|
||||||
|
|
||||||
|
|
||||||
|
m_soundSelect.Load( THEME->GetPathTo(SOUND_MENU_START) );
|
||||||
|
m_soundChangeNotes.Load( THEME->GetPathTo(SOUND_SELECT_MUSIC_CHANGE_NOTES) );
|
||||||
|
|
||||||
|
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_COURSE_INTRO) );
|
||||||
|
|
||||||
|
|
||||||
|
AfterCourseChange();
|
||||||
|
TweenOnScreen();
|
||||||
|
m_Menu.TweenOnScreenFromMenu( SM_None );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ScreenSelectCourse::~ScreenSelectCourse()
|
||||||
|
{
|
||||||
|
LOG->WriteLine( "ScreenSelectCourse::~ScreenSelectCourse()" );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenSelectCourse::DrawPrimitives()
|
||||||
|
{
|
||||||
|
m_Menu.DrawBottomLayer();
|
||||||
|
Screen::DrawPrimitives();
|
||||||
|
m_Menu.DrawTopLayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenSelectCourse::TweenOnScreen()
|
||||||
|
{
|
||||||
|
m_CourseInfoFrame.SetXY( COURSE_INFO_FRAME_X - 400, COURSE_INFO_FRAME_Y );
|
||||||
|
m_CourseInfoFrame.BeginTweening( TWEEN_TIME, Actor::TWEEN_BIAS_END );
|
||||||
|
m_CourseInfoFrame.SetTweenXY( COURSE_INFO_FRAME_X, COURSE_INFO_FRAME_Y );
|
||||||
|
|
||||||
|
m_MusicWheel.TweenOnScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenSelectCourse::TweenOffScreen()
|
||||||
|
{
|
||||||
|
m_CourseInfoFrame.BeginTweening( TWEEN_TIME, Actor::TWEEN_BOUNCE_END );
|
||||||
|
m_CourseInfoFrame.SetTweenXY( COURSE_INFO_FRAME_X - 400, COURSE_INFO_FRAME_Y );
|
||||||
|
|
||||||
|
m_MusicWheel.TweenOffScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenSelectCourse::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
|
||||||
|
{
|
||||||
|
LOG->WriteLine( "ScreenSelectCourse::Input()" );
|
||||||
|
|
||||||
|
if( m_Menu.IsClosing() )
|
||||||
|
return; // ignore
|
||||||
|
|
||||||
|
if( MenuI.player == PLAYER_NONE )
|
||||||
|
return;
|
||||||
|
|
||||||
|
Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenSelectCourse::HandleScreenMessage( const ScreenMessage SM )
|
||||||
|
{
|
||||||
|
Screen::HandleScreenMessage( SM );
|
||||||
|
|
||||||
|
switch( SM )
|
||||||
|
{
|
||||||
|
case SM_MenuTimer:
|
||||||
|
MenuStart(PLAYER_1);
|
||||||
|
break;
|
||||||
|
case SM_GoToPrevState:
|
||||||
|
SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
||||||
|
break;
|
||||||
|
case SM_GoToNextState:
|
||||||
|
|
||||||
|
// find out if the Next button is being held down on any of the pads
|
||||||
|
bool bIsHoldingNext;
|
||||||
|
bIsHoldingNext = false;
|
||||||
|
int player;
|
||||||
|
for( player=0; player<NUM_PLAYERS; player++ )
|
||||||
|
{
|
||||||
|
MenuInput mi( (PlayerNumber)player, MENU_BUTTON_START );
|
||||||
|
if( INPUTMAPPER->IsButtonDown( mi ) )
|
||||||
|
bIsHoldingNext = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( bIsHoldingNext )
|
||||||
|
{
|
||||||
|
SCREENMAN->SetNewScreen( new ScreenPlayerOptions );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MUSIC->Stop();
|
||||||
|
|
||||||
|
SCREENMAN->SetNewScreen( new ScreenStage(false) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenSelectCourse::MenuLeft( const PlayerNumber p, const InputEventType type )
|
||||||
|
{
|
||||||
|
m_MusicWheel.PrevMusic();
|
||||||
|
|
||||||
|
AfterCourseChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenSelectCourse::MenuRight( const PlayerNumber p, const InputEventType type )
|
||||||
|
{
|
||||||
|
m_MusicWheel.NextMusic();
|
||||||
|
|
||||||
|
AfterCourseChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenSelectCourse::MenuStart( const PlayerNumber p )
|
||||||
|
{
|
||||||
|
// this needs to check whether valid Notes are selected!
|
||||||
|
m_MusicWheel.Select();
|
||||||
|
|
||||||
|
switch( m_MusicWheel.GetSelectedType() )
|
||||||
|
{
|
||||||
|
case TYPE_COURSE:
|
||||||
|
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_MUSIC_COMMENT_GENERAL) );
|
||||||
|
|
||||||
|
TweenOffScreen();
|
||||||
|
|
||||||
|
m_soundSelect.PlayRandom();
|
||||||
|
|
||||||
|
// show "hold START for options"
|
||||||
|
m_textHoldForOptions.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
|
m_textHoldForOptions.BeginTweeningQueued( 0.25f ); // fade in
|
||||||
|
m_textHoldForOptions.SetTweenZoomY( 1 );
|
||||||
|
m_textHoldForOptions.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
||||||
|
m_textHoldForOptions.BeginTweeningQueued( 2.0f ); // sleep
|
||||||
|
m_textHoldForOptions.BeginTweeningQueued( 0.25f ); // fade out
|
||||||
|
m_textHoldForOptions.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
|
m_textHoldForOptions.SetTweenZoomY( 0 );
|
||||||
|
|
||||||
|
m_Menu.TweenOffScreenToBlack( SM_None, false );
|
||||||
|
|
||||||
|
this->SendScreenMessage( SM_GoToNextState, 2.5f );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenSelectCourse::MenuBack( const PlayerNumber p )
|
||||||
|
{
|
||||||
|
MUSIC->Stop();
|
||||||
|
|
||||||
|
m_Menu.TweenOffScreenToBlack( SM_GoToPrevState, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScreenSelectCourse::AfterCourseChange()
|
||||||
|
{
|
||||||
|
switch( m_MusicWheel.GetSelectedType() )
|
||||||
|
{
|
||||||
|
case TYPE_COURSE:
|
||||||
|
{
|
||||||
|
Course* pCourse = m_MusicWheel.GetSelectedCourse();
|
||||||
|
m_CourseInfoFrame.SetFromCourse( pCourse );
|
||||||
|
m_CourseContentsFrame.SetFromCourse( pCourse );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Class: ScreenSelectCourse
|
||||||
|
|
||||||
|
Desc: The screen in PLAY_MODE_ONI where you choose a Course.
|
||||||
|
|
||||||
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Screen.h"
|
||||||
|
#include "Sprite.h"
|
||||||
|
#include "BitmapText.h"
|
||||||
|
#include "RandomStream.h"
|
||||||
|
#include "GameConstantsAndTypes.h"
|
||||||
|
#include "MusicWheel.h"
|
||||||
|
#include "CourseInfoFrame.h"
|
||||||
|
#include "CourseContentsFrame.h"
|
||||||
|
#include "MenuElements.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ScreenSelectCourse : public Screen
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ScreenSelectCourse();
|
||||||
|
virtual ~ScreenSelectCourse();
|
||||||
|
|
||||||
|
virtual void DrawPrimitives();
|
||||||
|
|
||||||
|
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
|
||||||
|
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||||
|
|
||||||
|
void TweenOnScreen();
|
||||||
|
void TweenOffScreen();
|
||||||
|
|
||||||
|
void MenuLeft( const PlayerNumber p, const InputEventType type );
|
||||||
|
void MenuRight( const PlayerNumber p, const InputEventType type );
|
||||||
|
void MenuStart( const PlayerNumber p );
|
||||||
|
void MenuBack( const PlayerNumber p );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void AfterCourseChange();
|
||||||
|
|
||||||
|
MenuElements m_Menu;
|
||||||
|
|
||||||
|
CourseInfoFrame m_CourseInfoFrame;
|
||||||
|
CourseContentsFrame m_CourseContentsFrame;
|
||||||
|
MusicWheel m_MusicWheel;
|
||||||
|
|
||||||
|
BitmapText m_textHoldForOptions;
|
||||||
|
|
||||||
|
RandomSample m_soundSelect;
|
||||||
|
RandomSample m_soundChangeNotes;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -20,34 +20,45 @@
|
|||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
#include "AnnouncerManager.h"
|
#include "AnnouncerManager.h"
|
||||||
|
#include "ScreenSelectCourse.h"
|
||||||
|
|
||||||
|
|
||||||
const float EXPLANATION_X = CENTER_X - 150;
|
const float MORE_ARROWS_X[NUM_PAGES] = { SCREEN_RIGHT-60, SCREEN_WIDTH + SCREEN_LEFT+60};
|
||||||
const float EXPLANATION_Y = CENTER_Y - 170;
|
const float MORE_ARROWS_Y[NUM_PAGES] = { CENTER_Y-150, CENTER_Y-150 };
|
||||||
|
const float EXPLANATION_X[NUM_PAGES] = { CENTER_X - 150, SCREEN_WIDTH + CENTER_X + 150 };
|
||||||
|
const float EXPLANATION_Y[NUM_PAGES] = { CENTER_Y - 170, CENTER_Y - 170 };
|
||||||
|
const float EXPLANATION_OFF_SCREEN_X[NUM_PAGES] = { EXPLANATION_X[0]-400, EXPLANATION_X[1]+400 };
|
||||||
|
const float EXPLANATION_OFF_SCREEN_Y[NUM_PAGES] = { EXPLANATION_Y[0], EXPLANATION_Y[1] };
|
||||||
|
|
||||||
const float DIFFICULTY_CLASS_X[NUM_DIFFICULTY_CLASSES] = {
|
const float DIFFICULTY_ITEM_X[NUM_DIFFICULTY_ITEMS] = {
|
||||||
CENTER_X-200,
|
CENTER_X-200, // easy
|
||||||
CENTER_X,
|
CENTER_X, // medium
|
||||||
CENTER_X+200
|
CENTER_X+200, // hard
|
||||||
|
SCREEN_WIDTH+CENTER_X, // Oni, page 2
|
||||||
};
|
};
|
||||||
// these sprites are bottom aligned!
|
// these sprites are bottom aligned!
|
||||||
const float DIFFICULTY_CLASS_Y[NUM_DIFFICULTY_CLASSES] = {
|
const float DIFFICULTY_ITEM_Y[NUM_DIFFICULTY_ITEMS] = {
|
||||||
|
CENTER_Y-40,
|
||||||
|
CENTER_Y-60,
|
||||||
CENTER_Y-40,
|
CENTER_Y-40,
|
||||||
CENTER_Y-60,
|
CENTER_Y-60,
|
||||||
CENTER_Y-40
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const float DIFFICULTY_ARROW_Y[NUM_DIFFICULTY_CLASSES] = {
|
const float DIFFICULTY_ARROW_Y[NUM_DIFFICULTY_ITEMS] = {
|
||||||
DIFFICULTY_CLASS_Y[0]+205,
|
DIFFICULTY_ITEM_Y[0]+205,
|
||||||
DIFFICULTY_CLASS_Y[1]+205,
|
DIFFICULTY_ITEM_Y[1]+205,
|
||||||
DIFFICULTY_CLASS_Y[2]+205
|
DIFFICULTY_ITEM_Y[2]+205,
|
||||||
|
DIFFICULTY_ITEM_Y[3]+205,
|
||||||
};
|
};
|
||||||
const float DIFFICULTY_ARROW_X[NUM_DIFFICULTY_CLASSES][NUM_PLAYERS] = {
|
const float DIFFICULTY_ARROW_X[NUM_DIFFICULTY_ITEMS][NUM_PLAYERS] = {
|
||||||
{ DIFFICULTY_CLASS_X[0]-40, DIFFICULTY_CLASS_X[0]+40 },
|
{ DIFFICULTY_ITEM_X[0]-40, DIFFICULTY_ITEM_X[0]+40 },
|
||||||
{ DIFFICULTY_CLASS_X[1]-40, DIFFICULTY_CLASS_X[1]+40 },
|
{ DIFFICULTY_ITEM_X[1]-40, DIFFICULTY_ITEM_X[1]+40 },
|
||||||
{ DIFFICULTY_CLASS_X[2]-40, DIFFICULTY_CLASS_X[2]+40 },
|
{ DIFFICULTY_ITEM_X[2]-40, DIFFICULTY_ITEM_X[2]+40 },
|
||||||
|
{ DIFFICULTY_ITEM_X[3]-40, DIFFICULTY_ITEM_X[3]+40 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const float ARROW_SHADOW_OFFSET = 10;
|
const float ARROW_SHADOW_OFFSET = 10;
|
||||||
|
|
||||||
|
|
||||||
@@ -61,20 +72,17 @@ ScreenSelectDifficulty::ScreenSelectDifficulty()
|
|||||||
{
|
{
|
||||||
LOG->WriteLine( "ScreenSelectDifficulty::ScreenSelectDifficulty()" );
|
LOG->WriteLine( "ScreenSelectDifficulty::ScreenSelectDifficulty()" );
|
||||||
|
|
||||||
|
int p;
|
||||||
|
|
||||||
m_Menu.Load(
|
m_Menu.Load(
|
||||||
THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_BACKGROUND) ,
|
THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_BACKGROUND) ,
|
||||||
THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_TOP_EDGE),
|
THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_TOP_EDGE),
|
||||||
ssprintf("Use %c %c to select, then press NEXT", char(1), char(2))
|
ssprintf("Use %c %c to select, then press START", char(1), char(2))
|
||||||
);
|
);
|
||||||
this->AddActor( &m_Menu );
|
this->AddActor( &m_Menu );
|
||||||
|
|
||||||
|
|
||||||
m_sprExplanation.Load( THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_EXPLANATION) );
|
for( int d=0; d<NUM_DIFFICULTY_ITEMS; d++ )
|
||||||
m_sprExplanation.SetXY( EXPLANATION_X, EXPLANATION_Y );
|
|
||||||
this->AddActor( &m_sprExplanation );
|
|
||||||
|
|
||||||
for( int d=0; d<NUM_DIFFICULTY_CLASSES; d++ )
|
|
||||||
{
|
{
|
||||||
ThemeElement te_header;
|
ThemeElement te_header;
|
||||||
ThemeElement te_picture;
|
ThemeElement te_picture;
|
||||||
@@ -83,22 +91,37 @@ ScreenSelectDifficulty::ScreenSelectDifficulty()
|
|||||||
case 0: te_header = GRAPHIC_SELECT_DIFFICULTY_EASY_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_EASY_PICTURE; break;
|
case 0: te_header = GRAPHIC_SELECT_DIFFICULTY_EASY_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_EASY_PICTURE; break;
|
||||||
case 1: te_header = GRAPHIC_SELECT_DIFFICULTY_MEDIUM_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_MEDIUM_PICTURE; break;
|
case 1: te_header = GRAPHIC_SELECT_DIFFICULTY_MEDIUM_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_MEDIUM_PICTURE; break;
|
||||||
case 2: te_header = GRAPHIC_SELECT_DIFFICULTY_HARD_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_HARD_PICTURE; break;
|
case 2: te_header = GRAPHIC_SELECT_DIFFICULTY_HARD_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_HARD_PICTURE; break;
|
||||||
|
case 3: te_header = GRAPHIC_SELECT_DIFFICULTY_ONI_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_ONI_PICTURE; break;
|
||||||
|
case 4: te_header = GRAPHIC_SELECT_DIFFICULTY_ENDLESS_HEADER; te_picture = GRAPHIC_SELECT_DIFFICULTY_ENDLESS_PICTURE; break;
|
||||||
}
|
}
|
||||||
m_sprDifficultyPicture[d].Load( THEME->GetPathTo(te_picture) );
|
m_sprPicture[d].Load( THEME->GetPathTo(te_picture) );
|
||||||
m_sprDifficultyPicture[d].SetXY( DIFFICULTY_CLASS_X[d], DIFFICULTY_CLASS_Y[d] );
|
m_sprPicture[d].SetXY( DIFFICULTY_ITEM_X[d], DIFFICULTY_ITEM_Y[d] );
|
||||||
m_sprDifficultyPicture[d].SetVertAlign( align_bottom );
|
m_sprPicture[d].SetVertAlign( align_bottom );
|
||||||
m_sprDifficultyPicture[d].TurnShadowOff();
|
m_sprPicture[d].TurnShadowOff();
|
||||||
this->AddActor( &m_sprDifficultyPicture[d] );
|
m_framePages.AddActor( &m_sprPicture[d] );
|
||||||
|
|
||||||
m_sprDifficultyHeader[d].Load( THEME->GetPathTo(te_header) );
|
|
||||||
m_sprDifficultyHeader[d].SetXY( DIFFICULTY_CLASS_X[d], DIFFICULTY_CLASS_Y[d] );
|
|
||||||
m_sprDifficultyHeader[d].SetVertAlign( align_top );
|
|
||||||
m_sprDifficultyHeader[d].TurnShadowOff();
|
|
||||||
this->AddActor( &m_sprDifficultyHeader[d] );
|
|
||||||
|
|
||||||
|
m_sprHeader[d].Load( THEME->GetPathTo(te_header) );
|
||||||
|
m_sprHeader[d].SetXY( DIFFICULTY_ITEM_X[d], DIFFICULTY_ITEM_Y[d] );
|
||||||
|
m_sprHeader[d].SetVertAlign( align_top );
|
||||||
|
m_sprHeader[d].TurnShadowOff();
|
||||||
|
m_framePages.AddActor( &m_sprHeader[d] );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
for( p=0; p<NUM_PAGES; p++ )
|
||||||
|
{
|
||||||
|
m_sprMoreArrows[p].Load( THEME->GetPathTo( p==0 ? GRAPHIC_ARROWS_RIGHT : GRAPHIC_ARROWS_LEFT ) );
|
||||||
|
m_sprMoreArrows[p].SetXY( MORE_ARROWS_X[p], MORE_ARROWS_Y[p] );
|
||||||
|
m_framePages.AddActor( &m_sprMoreArrows[p] );
|
||||||
|
|
||||||
|
m_sprExplanation[p].Load( THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_EXPLANATION) );
|
||||||
|
m_sprExplanation[p].SetXY( EXPLANATION_X[p], EXPLANATION_Y[p] );
|
||||||
|
m_sprExplanation[p].StopAnimating();
|
||||||
|
m_sprExplanation[p].SetState( p );
|
||||||
|
m_framePages.AddActor( &m_sprExplanation[p] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
m_iSelection[p] = 0;
|
m_iSelection[p] = 0;
|
||||||
m_bChosen[p] = false;
|
m_bChosen[p] = false;
|
||||||
@@ -106,32 +129,31 @@ ScreenSelectDifficulty::ScreenSelectDifficulty()
|
|||||||
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ThemeElement te;
|
m_sprArrowShadow[p].Load( THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_ARROWS) );
|
||||||
switch( p )
|
m_sprArrowShadow[p].StopAnimating();
|
||||||
{
|
m_sprArrowShadow[p].SetState( p );
|
||||||
case PLAYER_1: te = GRAPHIC_SELECT_DIFFICULTY_ARROW_P1; break;
|
|
||||||
case PLAYER_2: te = GRAPHIC_SELECT_DIFFICULTY_ARROW_P2; break;
|
|
||||||
default: ASSERT( false );
|
|
||||||
}
|
|
||||||
m_sprArrowShadow[p].Load( THEME->GetPathTo(te) );
|
|
||||||
m_sprArrowShadow[p].TurnShadowOff();
|
m_sprArrowShadow[p].TurnShadowOff();
|
||||||
m_sprArrowShadow[p].SetDiffuseColor( D3DXCOLOR(0,0,0,0.6f) );
|
m_sprArrowShadow[p].SetDiffuseColor( D3DXCOLOR(0,0,0,0.6f) );
|
||||||
this->AddActor( &m_sprArrowShadow[p] );
|
m_framePages.AddActor( &m_sprArrowShadow[p] );
|
||||||
|
|
||||||
m_sprArrow[p].Load( THEME->GetPathTo(te) );
|
m_sprArrow[p].Load( THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_ARROWS) );
|
||||||
|
m_sprArrow[p].StopAnimating();
|
||||||
|
m_sprArrow[p].SetState( p );
|
||||||
m_sprArrow[p].TurnShadowOff();
|
m_sprArrow[p].TurnShadowOff();
|
||||||
m_sprArrow[p].SetDiffuseColor( PlayerToColor((PlayerNumber)p) );
|
m_sprArrow[p].SetDiffuseColor( PlayerToColor((PlayerNumber)p) );
|
||||||
m_sprArrow[p].SetEffectGlowing();
|
m_sprArrow[p].SetEffectGlowing();
|
||||||
this->AddActor( &m_sprArrow[p] );
|
m_framePages.AddActor( &m_sprArrow[p] );
|
||||||
|
|
||||||
m_sprOK[p].Load( THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_OK) );
|
m_sprOK[p].Load( THEME->GetPathTo(GRAPHIC_SELECT_DIFFICULTY_OK) );
|
||||||
this->AddActor( &m_sprOK[p] );
|
m_framePages.AddActor( &m_sprOK[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->AddActor( &m_framePages );
|
||||||
|
|
||||||
m_soundChange.Load( THEME->GetPathTo(SOUND_SELECT_DIFFICULTY_CHANGE) );
|
m_soundChange.Load( THEME->GetPathTo(SOUND_SELECT_DIFFICULTY_CHANGE) );
|
||||||
m_soundSelect.Load( THEME->GetPathTo(SOUND_MENU_START) );
|
m_soundSelect.Load( THEME->GetPathTo(SOUND_MENU_START) );
|
||||||
|
|
||||||
|
m_bPlayedChallengeSound = false;
|
||||||
|
|
||||||
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_INTRO) );
|
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_INTRO) );
|
||||||
|
|
||||||
@@ -185,7 +207,21 @@ void ScreenSelectDifficulty::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
||||||
break;
|
break;
|
||||||
case SM_GoToNextState:
|
case SM_GoToNextState:
|
||||||
SCREENMAN->SetNewScreen( new ScreenSelectGroup );
|
switch( m_iSelection[PLAYER_1] )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2: // something on page 1 was chosen
|
||||||
|
SCREENMAN->SetNewScreen( new ScreenSelectGroup );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
PREFSMAN->m_PlayMode = PLAY_MODE_ONI;
|
||||||
|
SCREENMAN->SetNewScreen( new ScreenSelectCourse );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(0); // bad selection
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SM_StartTweeningOffScreen:
|
case SM_StartTweeningOffScreen:
|
||||||
TweenOffScreen();
|
TweenOffScreen();
|
||||||
@@ -204,36 +240,73 @@ void ScreenSelectDifficulty::MenuLeft( const PlayerNumber p )
|
|||||||
if( m_bChosen[p] )
|
if( m_bChosen[p] )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_iSelection[p]--;
|
ChangeTo( p, m_iSelection[p], m_iSelection[p]-1 );
|
||||||
|
|
||||||
m_sprArrow[p].BeginTweening( 0.2f, TWEEN_BIAS_BEGIN );
|
|
||||||
m_sprArrow[p].SetTweenX( DIFFICULTY_ARROW_X[m_iSelection[p]][p] - ARROW_SHADOW_OFFSET );
|
|
||||||
m_sprArrow[p].SetTweenY( DIFFICULTY_ARROW_Y[m_iSelection[p]] - ARROW_SHADOW_OFFSET );
|
|
||||||
|
|
||||||
m_sprArrowShadow[p].BeginTweening( 0.2f, TWEEN_BIAS_BEGIN );
|
|
||||||
m_sprArrowShadow[p].SetTweenX( DIFFICULTY_ARROW_X[m_iSelection[p]][p] );
|
|
||||||
m_sprArrowShadow[p].SetTweenY( DIFFICULTY_ARROW_Y[m_iSelection[p]] );
|
|
||||||
|
|
||||||
m_soundChange.PlayRandom();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScreenSelectDifficulty::MenuRight( const PlayerNumber p )
|
void ScreenSelectDifficulty::MenuRight( const PlayerNumber p )
|
||||||
{
|
{
|
||||||
if( m_iSelection[p] == 2 ) // can't go right any more
|
if( m_iSelection[p] == NUM_DIFFICULTY_ITEMS-1 ) // can't go right any more
|
||||||
return;
|
return;
|
||||||
if( m_bChosen[p] )
|
if( m_bChosen[p] )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_iSelection[p]++;
|
ChangeTo( p, m_iSelection[p], m_iSelection[p]+1 );
|
||||||
|
}
|
||||||
|
|
||||||
m_sprArrow[p].BeginTweening( 0.2f, TWEEN_BIAS_BEGIN );
|
void ScreenSelectDifficulty::ChangeTo( const PlayerNumber pn, int iSelectionWas, int iSelectionIs )
|
||||||
m_sprArrow[p].SetTweenX( DIFFICULTY_ARROW_X[m_iSelection[p]][p] - ARROW_SHADOW_OFFSET );
|
{
|
||||||
m_sprArrow[p].SetTweenY( DIFFICULTY_ARROW_Y[m_iSelection[p]] - ARROW_SHADOW_OFFSET );
|
bool bChangedPagesFrom1To2 = iSelectionWas < 3 && iSelectionIs >= 3;
|
||||||
|
bool bChangedPagesFrom2To1 = iSelectionWas >= 3 && iSelectionIs < 3;
|
||||||
|
bool bChangedPages = bChangedPagesFrom1To2 || bChangedPagesFrom2To1;
|
||||||
|
bool bSelectedSomethingOnPage1 = iSelectionIs < 3;
|
||||||
|
bool bSelectedSomethingOnPage2 = iSelectionIs >= 3;
|
||||||
|
|
||||||
m_sprArrowShadow[p].BeginTweening( 0.2f, TWEEN_BIAS_BEGIN );
|
if( bSelectedSomethingOnPage2 )
|
||||||
m_sprArrowShadow[p].SetTweenX( DIFFICULTY_ARROW_X[m_iSelection[p]][p] );
|
{
|
||||||
m_sprArrowShadow[p].SetTweenY( DIFFICULTY_ARROW_Y[m_iSelection[p]] );
|
// change both players
|
||||||
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
m_iSelection[p] = iSelectionIs;
|
||||||
|
}
|
||||||
|
else if( bChangedPagesFrom2To1 )
|
||||||
|
{
|
||||||
|
// change only the player who pressed the button
|
||||||
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
m_iSelection[p] = 2;
|
||||||
|
}
|
||||||
|
else // moving around in page 1
|
||||||
|
{
|
||||||
|
// change only the player who pressed the button
|
||||||
|
m_iSelection[pn] = iSelectionIs;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( !m_bPlayedChallengeSound && bChangedPagesFrom1To2 )
|
||||||
|
{
|
||||||
|
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_CHALLENGE) );
|
||||||
|
m_bPlayedChallengeSound = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( bChangedPagesFrom1To2 || bChangedPagesFrom2To1 )
|
||||||
|
{
|
||||||
|
m_framePages.BeginTweening( 0.2f );
|
||||||
|
m_framePages.SetTweenX( bSelectedSomethingOnPage1 ? 0.0f : -SCREEN_WIDTH );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
{
|
||||||
|
if( bSelectedSomethingOnPage2 || bChangedPagesFrom2To1 || p==pn )
|
||||||
|
{
|
||||||
|
m_sprArrow[p].BeginTweening( 0.2f, bChangedPages ? TWEEN_LINEAR : TWEEN_BIAS_BEGIN );
|
||||||
|
m_sprArrow[p].SetTweenX( DIFFICULTY_ARROW_X[m_iSelection[p]][p] - ARROW_SHADOW_OFFSET );
|
||||||
|
m_sprArrow[p].SetTweenY( DIFFICULTY_ARROW_Y[m_iSelection[p]] - ARROW_SHADOW_OFFSET );
|
||||||
|
|
||||||
|
m_sprArrowShadow[p].BeginTweening( 0.2f, bChangedPages ? TWEEN_LINEAR : TWEEN_BIAS_BEGIN );
|
||||||
|
m_sprArrowShadow[p].SetTweenX( DIFFICULTY_ARROW_X[m_iSelection[p]][p] );
|
||||||
|
m_sprArrowShadow[p].SetTweenY( DIFFICULTY_ARROW_Y[m_iSelection[p]] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_soundChange.PlayRandom();
|
m_soundChange.PlayRandom();
|
||||||
}
|
}
|
||||||
@@ -252,6 +325,19 @@ void ScreenSelectDifficulty::MenuStart( PlayerNumber pn )
|
|||||||
case 0: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_EASY) ); break;
|
case 0: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_EASY) ); break;
|
||||||
case 1: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_MEDIUM) ); break;
|
case 1: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_MEDIUM) ); break;
|
||||||
case 2: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_HARD) ); break;
|
case 2: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_HARD) ); break;
|
||||||
|
case 3: SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_DIFFICULTY_COMMENT_ONI) ); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( iSelection >= 3 ) // chose something on page 2
|
||||||
|
{
|
||||||
|
// choose this for all the other players too
|
||||||
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
|
{
|
||||||
|
if( m_bChosen[p] )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
MenuStart( (PlayerNumber)p );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sprArrow[pn].BeginTweeningQueued( 0.2f );
|
m_sprArrow[pn].BeginTweeningQueued( 0.2f );
|
||||||
@@ -289,11 +375,19 @@ void ScreenSelectDifficulty::MenuBack( const PlayerNumber p )
|
|||||||
|
|
||||||
void ScreenSelectDifficulty::TweenOffScreen()
|
void ScreenSelectDifficulty::TweenOffScreen()
|
||||||
{
|
{
|
||||||
m_sprExplanation.SetXY( EXPLANATION_X, EXPLANATION_Y );
|
int p;
|
||||||
m_sprExplanation.BeginTweening( 0.5, Actor::TWEEN_BOUNCE_BEGIN );
|
|
||||||
m_sprExplanation.SetTweenXY( EXPLANATION_X-400, EXPLANATION_Y );
|
|
||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
for( p=0; p<NUM_PAGES; p++ )
|
||||||
|
{
|
||||||
|
m_sprExplanation[p].SetXY( EXPLANATION_X[p], EXPLANATION_Y[p] );
|
||||||
|
m_sprExplanation[p].BeginTweening( 0.5, Actor::TWEEN_BOUNCE_BEGIN );
|
||||||
|
m_sprExplanation[p].SetTweenXY( EXPLANATION_OFF_SCREEN_X[p], EXPLANATION_OFF_SCREEN_Y[p] );
|
||||||
|
|
||||||
|
m_sprMoreArrows[p].BeginTweening( 0.5 );
|
||||||
|
m_sprMoreArrows[p].SetTweenDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
||||||
continue;
|
continue;
|
||||||
@@ -308,39 +402,51 @@ void ScreenSelectDifficulty::TweenOffScreen()
|
|||||||
m_sprArrowShadow[p].SetTweenDiffuseColor( D3DXCOLOR(0,0,0,0) );
|
m_sprArrowShadow[p].SetTweenDiffuseColor( D3DXCOLOR(0,0,0,0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( int d=0; d<NUM_DIFFICULTY_CLASSES; d++ )
|
for( int d=0; d<NUM_DIFFICULTY_ITEMS; d++ )
|
||||||
{
|
{
|
||||||
|
if( d >= 3 ) // this item is on page 2
|
||||||
|
continue; // don't tween
|
||||||
|
|
||||||
const float fPauseTime = d*0.2f;
|
const float fPauseTime = d*0.2f;
|
||||||
|
|
||||||
// pause
|
// pause
|
||||||
m_sprDifficultyHeader[d].BeginTweeningQueued( fPauseTime );
|
m_sprHeader[d].BeginTweeningQueued( fPauseTime );
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].BeginTweeningQueued( fPauseTime );
|
m_sprPicture[d].BeginTweeningQueued( fPauseTime );
|
||||||
|
|
||||||
// roll up
|
// roll up
|
||||||
m_sprDifficultyHeader[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_BEGIN );
|
m_sprHeader[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_BEGIN );
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_BEGIN );
|
m_sprPicture[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_BEGIN );
|
||||||
m_sprDifficultyPicture[d].SetTweenZoomY( 0 );
|
m_sprPicture[d].SetTweenZoomY( 0 );
|
||||||
|
|
||||||
// fly off
|
// fly off
|
||||||
m_sprDifficultyHeader[d].BeginTweeningQueued( 0.4f, TWEEN_BIAS_END );
|
m_sprHeader[d].BeginTweeningQueued( 0.4f, TWEEN_BIAS_END );
|
||||||
m_sprDifficultyHeader[d].SetTweenXY( DIFFICULTY_CLASS_X[d]-700, DIFFICULTY_CLASS_Y[d] );
|
m_sprHeader[d].SetTweenXY( DIFFICULTY_ITEM_X[d]-700, DIFFICULTY_ITEM_Y[d] );
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].BeginTweeningQueued( 0.4f, TWEEN_BIAS_END );
|
m_sprPicture[d].BeginTweeningQueued( 0.4f, TWEEN_BIAS_END );
|
||||||
m_sprDifficultyPicture[d].SetTweenXY( DIFFICULTY_CLASS_X[d]-700, DIFFICULTY_CLASS_Y[d] );
|
m_sprPicture[d].SetTweenXY( DIFFICULTY_ITEM_X[d]-700, DIFFICULTY_ITEM_Y[d] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenSelectDifficulty::TweenOnScreen()
|
void ScreenSelectDifficulty::TweenOnScreen()
|
||||||
{
|
{
|
||||||
|
int p;
|
||||||
|
|
||||||
m_Menu.TweenOnScreenFromMenu( SM_None );
|
m_Menu.TweenOnScreenFromMenu( SM_None );
|
||||||
|
|
||||||
m_sprExplanation.SetXY( EXPLANATION_X-400, EXPLANATION_Y );
|
for( p=0; p<NUM_PAGES; p++ )
|
||||||
m_sprExplanation.BeginTweening( 0.3f, Actor::TWEEN_BOUNCE_END );
|
{
|
||||||
m_sprExplanation.SetTweenXY( EXPLANATION_X, EXPLANATION_Y );
|
m_sprExplanation[p].SetXY( EXPLANATION_OFF_SCREEN_X[p], EXPLANATION_OFF_SCREEN_Y[p] );
|
||||||
|
m_sprExplanation[p].BeginTweening( 0.3f, Actor::TWEEN_BOUNCE_END );
|
||||||
|
m_sprExplanation[p].SetTweenXY( EXPLANATION_X[p], EXPLANATION_Y[p] );
|
||||||
|
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
m_sprMoreArrows[p].SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
|
m_sprMoreArrows[p].BeginTweening( 0.5 );
|
||||||
|
m_sprMoreArrows[p].SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( p=0; p<NUM_PLAYERS; p++ )
|
||||||
{
|
{
|
||||||
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
if( !GAMEMAN->IsPlayerEnabled((PlayerNumber)p) )
|
||||||
continue;
|
continue;
|
||||||
@@ -365,33 +471,38 @@ void ScreenSelectDifficulty::TweenOnScreen()
|
|||||||
m_sprArrowShadow[p].SetTweenDiffuseColor( colorOriginal );
|
m_sprArrowShadow[p].SetTweenDiffuseColor( colorOriginal );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( int d=0; d<NUM_DIFFICULTY_CLASSES; d++ )
|
for( int d=0; d<NUM_DIFFICULTY_ITEMS; d++ )
|
||||||
{
|
{
|
||||||
const float fPauseTime = d*0.2f;
|
const float fPauseTime = d*0.2f;
|
||||||
|
|
||||||
// set off screen
|
bool bIsOnPage1 = m_iSelection[PLAYER_1] >= 3;
|
||||||
m_sprDifficultyHeader[d].SetXY( DIFFICULTY_CLASS_X[d]-700, DIFFICULTY_CLASS_Y[d] );
|
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].SetXY( DIFFICULTY_CLASS_X[d]-700, DIFFICULTY_CLASS_Y[d] );
|
if( bIsOnPage1 && d >= 3 ) // they are on page 1, but this item is on page 2
|
||||||
m_sprDifficultyPicture[d].SetZoomY( 0 );
|
continue; // don't tween
|
||||||
|
|
||||||
|
// set off screen
|
||||||
|
m_sprHeader[d].SetXY( DIFFICULTY_ITEM_X[d]-700, DIFFICULTY_ITEM_Y[d] );
|
||||||
|
|
||||||
|
m_sprPicture[d].SetXY( DIFFICULTY_ITEM_X[d]-700, DIFFICULTY_ITEM_Y[d] );
|
||||||
|
m_sprPicture[d].SetZoomY( 0 );
|
||||||
|
|
||||||
// pause
|
// pause
|
||||||
m_sprDifficultyHeader[d].BeginTweeningQueued( fPauseTime );
|
m_sprHeader[d].BeginTweeningQueued( fPauseTime );
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].BeginTweeningQueued( fPauseTime );
|
m_sprPicture[d].BeginTweeningQueued( fPauseTime );
|
||||||
|
|
||||||
// fly on
|
// fly on
|
||||||
m_sprDifficultyHeader[d].BeginTweeningQueued( 0.5f, TWEEN_BIAS_BEGIN );
|
m_sprHeader[d].BeginTweeningQueued( 0.5f, TWEEN_BIAS_BEGIN );
|
||||||
m_sprDifficultyHeader[d].SetTweenXY( DIFFICULTY_CLASS_X[d], DIFFICULTY_CLASS_Y[d] );
|
m_sprHeader[d].SetTweenXY( DIFFICULTY_ITEM_X[d], DIFFICULTY_ITEM_Y[d] );
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].BeginTweeningQueued( 0.5f, TWEEN_BIAS_BEGIN );
|
m_sprPicture[d].BeginTweeningQueued( 0.5f, TWEEN_BIAS_BEGIN );
|
||||||
m_sprDifficultyPicture[d].SetTweenXY( DIFFICULTY_CLASS_X[d], DIFFICULTY_CLASS_Y[d] );
|
m_sprPicture[d].SetTweenXY( DIFFICULTY_ITEM_X[d], DIFFICULTY_ITEM_Y[d] );
|
||||||
|
|
||||||
// roll down
|
// roll down
|
||||||
m_sprDifficultyHeader[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_END );
|
m_sprHeader[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_END );
|
||||||
|
|
||||||
m_sprDifficultyPicture[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_END );
|
m_sprPicture[d].BeginTweeningQueued( 0.3f, TWEEN_BOUNCE_END );
|
||||||
m_sprDifficultyPicture[d].SetTweenZoomY( 1 );
|
m_sprPicture[d].SetTweenZoomY( 1 );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
Desc: Select the game mode (single, versus, double).
|
Desc: Select the game mode (single, versus, double).
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -16,6 +17,8 @@
|
|||||||
#include "MenuElements.h"
|
#include "MenuElements.h"
|
||||||
|
|
||||||
|
|
||||||
|
const int NUM_DIFFICULTY_ITEMS = NUM_DIFFICULTY_CLASSES + 1; // easy, medium, hard, Oni
|
||||||
|
const int NUM_PAGES = 2; // easy-medium-hard, Oni
|
||||||
|
|
||||||
class ScreenSelectDifficulty : public Screen
|
class ScreenSelectDifficulty : public Screen
|
||||||
{
|
{
|
||||||
@@ -36,19 +39,26 @@ public:
|
|||||||
void TweenOnScreen();
|
void TweenOnScreen();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void ChangeTo( const PlayerNumber pn, int iSelectionWas, int iSelectionIs );
|
||||||
|
|
||||||
MenuElements m_Menu;
|
MenuElements m_Menu;
|
||||||
|
|
||||||
Sprite m_sprDifficultyHeader[NUM_DIFFICULTY_CLASSES];
|
ActorFrame m_framePages; // 2 pages
|
||||||
Sprite m_sprDifficultyPicture[NUM_DIFFICULTY_CLASSES];
|
|
||||||
|
Sprite m_sprHeader[NUM_DIFFICULTY_ITEMS];
|
||||||
|
Sprite m_sprPicture[NUM_DIFFICULTY_ITEMS];
|
||||||
|
Sprite m_sprExplanation[NUM_PAGES];
|
||||||
|
Sprite m_sprMoreArrows[NUM_PAGES];
|
||||||
|
|
||||||
Sprite m_sprArrow[NUM_PLAYERS];
|
Sprite m_sprArrow[NUM_PLAYERS];
|
||||||
Sprite m_sprArrowShadow[NUM_PLAYERS];
|
Sprite m_sprArrowShadow[NUM_PLAYERS];
|
||||||
Sprite m_sprOK[NUM_PLAYERS];
|
Sprite m_sprOK[NUM_PLAYERS];
|
||||||
Sprite m_sprExplanation;
|
|
||||||
|
|
||||||
RandomSample m_soundChange;
|
RandomSample m_soundChange;
|
||||||
RandomSample m_soundSelect;
|
RandomSample m_soundSelect;
|
||||||
|
|
||||||
|
bool m_bPlayedChallengeSound;
|
||||||
|
|
||||||
int m_iSelection[NUM_PLAYERS];
|
int m_iSelection[NUM_PLAYERS];
|
||||||
bool m_bChosen[NUM_PLAYERS];
|
bool m_bChosen[NUM_PLAYERS];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ ScreenSelectGroup::ScreenSelectGroup()
|
|||||||
m_Menu.Load(
|
m_Menu.Load(
|
||||||
THEME->GetPathTo(GRAPHIC_SELECT_GROUP_BACKGROUND) ,
|
THEME->GetPathTo(GRAPHIC_SELECT_GROUP_BACKGROUND) ,
|
||||||
THEME->GetPathTo(GRAPHIC_SELECT_GROUP_TOP_EDGE),
|
THEME->GetPathTo(GRAPHIC_SELECT_GROUP_TOP_EDGE),
|
||||||
ssprintf("Use %c %c to select, then press NEXT", char(1), char(2))
|
ssprintf("Use %c %c to select, then press START", char(1), char(2))
|
||||||
);
|
);
|
||||||
this->AddActor( &m_Menu );
|
this->AddActor( &m_Menu );
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
/*
|
/*
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
File: ScreenSelectMusic.cpp
|
Class: ScreenSelectMusic
|
||||||
|
|
||||||
Desc: Testing the Screen class.
|
Desc: See header.
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -110,7 +111,7 @@ ScreenSelectMusic::ScreenSelectMusic()
|
|||||||
|
|
||||||
m_textHoldForOptions.Load( THEME->GetPathTo(FONT_STAGE) );
|
m_textHoldForOptions.Load( THEME->GetPathTo(FONT_STAGE) );
|
||||||
m_textHoldForOptions.SetXY( CENTER_X, CENTER_Y );
|
m_textHoldForOptions.SetXY( CENTER_X, CENTER_Y );
|
||||||
m_textHoldForOptions.SetText( "hold NEXT for options" );
|
m_textHoldForOptions.SetText( "press START again for options" );
|
||||||
m_textHoldForOptions.SetZoom( 1 );
|
m_textHoldForOptions.SetZoom( 1 );
|
||||||
m_textHoldForOptions.SetZoomY( 0 );
|
m_textHoldForOptions.SetZoomY( 0 );
|
||||||
m_textHoldForOptions.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
m_textHoldForOptions.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
@@ -123,6 +124,8 @@ ScreenSelectMusic::ScreenSelectMusic()
|
|||||||
|
|
||||||
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_MUSIC_INTRO) );
|
SOUND->PlayOnceStreamedFromDir( ANNOUNCER->GetPathTo(ANNOUNCER_SELECT_MUSIC_INTRO) );
|
||||||
|
|
||||||
|
m_bMadeChoice = false;
|
||||||
|
m_bGoToOptions = false;
|
||||||
|
|
||||||
AfterMusicChange();
|
AfterMusicChange();
|
||||||
TweenOnScreen();
|
TweenOnScreen();
|
||||||
@@ -214,10 +217,21 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, const InputEventType
|
|||||||
{
|
{
|
||||||
LOG->WriteLine( "ScreenSelectMusic::Input()" );
|
LOG->WriteLine( "ScreenSelectMusic::Input()" );
|
||||||
|
|
||||||
|
if( MenuI.player == PLAYER_NONE )
|
||||||
|
return;
|
||||||
|
|
||||||
if( m_Menu.IsClosing() )
|
if( m_Menu.IsClosing() )
|
||||||
return; // ignore
|
return; // ignore
|
||||||
|
|
||||||
if( MenuI.player == PLAYER_NONE )
|
if( m_bMadeChoice && !m_bGoToOptions && MenuI.button == MENU_BUTTON_START )
|
||||||
|
{
|
||||||
|
m_bGoToOptions = true;
|
||||||
|
m_textHoldForOptions.SetText( "Entering Options..." );
|
||||||
|
SOUND->PlayOnceStreamed( THEME->GetPathTo(SOUND_MENU_START) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_bMadeChoice )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( INPUTQUEUE->MatchesPattern(MenuI.player, EASIER_DIFFICULTY_PATTERN, EASIER_DIFFICULTY_PATTERN_SIZE) )
|
if( INPUTQUEUE->MatchesPattern(MenuI.player, EASIER_DIFFICULTY_PATTERN, EASIER_DIFFICULTY_PATTERN_SIZE) )
|
||||||
@@ -301,7 +315,7 @@ void ScreenSelectMusic::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
bIsHoldingNext = true;
|
bIsHoldingNext = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( bIsHoldingNext )
|
if( bIsHoldingNext || m_bGoToOptions )
|
||||||
{
|
{
|
||||||
SCREENMAN->SetNewScreen( new ScreenPlayerOptions );
|
SCREENMAN->SetNewScreen( new ScreenPlayerOptions );
|
||||||
}
|
}
|
||||||
@@ -368,9 +382,11 @@ void ScreenSelectMusic::MenuStart( const PlayerNumber p )
|
|||||||
|
|
||||||
TweenOffScreen();
|
TweenOffScreen();
|
||||||
|
|
||||||
|
m_bMadeChoice = true;
|
||||||
|
|
||||||
m_soundSelect.PlayRandom();
|
m_soundSelect.PlayRandom();
|
||||||
|
|
||||||
// show "hold NEXT for options"
|
// show "hold START for options"
|
||||||
m_textHoldForOptions.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
m_textHoldForOptions.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
|
||||||
m_textHoldForOptions.BeginTweeningQueued( 0.25f ); // fade in
|
m_textHoldForOptions.BeginTweeningQueued( 0.25f ); // fade in
|
||||||
m_textHoldForOptions.SetTweenZoomY( 1 );
|
m_textHoldForOptions.SetTweenZoomY( 1 );
|
||||||
@@ -411,6 +427,9 @@ void ScreenSelectMusic::AfterNotesChange( const PlayerNumber p )
|
|||||||
|
|
||||||
Notes* pNotes = m_arrayNotes.GetSize()>0 ? m_arrayNotes[m_iSelection[p]] : NULL;
|
Notes* pNotes = m_arrayNotes.GetSize()>0 ? m_arrayNotes[m_iSelection[p]] : NULL;
|
||||||
|
|
||||||
|
if( pNotes )
|
||||||
|
PREFSMAN->m_PreferredDifficultyClass[p] = pNotes->m_DifficultyClass;
|
||||||
|
|
||||||
SONGMAN->SetCurrentNotes( p, pNotes );
|
SONGMAN->SetCurrentNotes( p, pNotes );
|
||||||
|
|
||||||
m_DifficultyIcon[p].SetFromNotes( pNotes );
|
m_DifficultyIcon[p].SetFromNotes( pNotes );
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
File: ScreenSelectMusic.h
|
Class: ScreenSelectMusic
|
||||||
|
|
||||||
Desc: Select the game mode (single, versus, double).
|
Desc: The screen in PLAY_MODE_ARCADE where you choose a Song and Notes.
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||||
|
Chris Danford
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -62,6 +63,8 @@ protected:
|
|||||||
FootMeter m_FootMeter[NUM_PLAYERS];
|
FootMeter m_FootMeter[NUM_PLAYERS];
|
||||||
MusicWheel m_MusicWheel;
|
MusicWheel m_MusicWheel;
|
||||||
|
|
||||||
|
bool m_bMadeChoice;
|
||||||
|
bool m_bGoToOptions;
|
||||||
BitmapText m_textHoldForOptions;
|
BitmapText m_textHoldForOptions;
|
||||||
|
|
||||||
RandomSample m_soundSelect;
|
RandomSample m_soundSelect;
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ ScreenSelectStyle::ScreenSelectStyle()
|
|||||||
m_Menu.Load(
|
m_Menu.Load(
|
||||||
THEME->GetPathTo(GRAPHIC_SELECT_STYLE_BACKGROUND),
|
THEME->GetPathTo(GRAPHIC_SELECT_STYLE_BACKGROUND),
|
||||||
THEME->GetPathTo(GRAPHIC_SELECT_STYLE_TOP_EDGE),
|
THEME->GetPathTo(GRAPHIC_SELECT_STYLE_TOP_EDGE),
|
||||||
ssprintf("Use %c %c to select, then press NEXT", char(1), char(2) )
|
ssprintf("Use %c %c to select, then press START", char(1), char(2) )
|
||||||
);
|
);
|
||||||
this->AddActor( &m_Menu );
|
this->AddActor( &m_Menu );
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ void ScreenSelectStyle::AfterChange()
|
|||||||
ThemeElement te;
|
ThemeElement te;
|
||||||
|
|
||||||
// Tween Preview
|
// Tween Preview
|
||||||
te = (ThemeElement)(GRAPHIC_SELECT_STYLE_PREVIEW_0+GetSelectedStyle());
|
te = (ThemeElement)(GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_0+GetSelectedStyle());
|
||||||
m_sprPreview.Load( THEME->GetPathTo(te) );
|
m_sprPreview.Load( THEME->GetPathTo(te) );
|
||||||
|
|
||||||
m_sprPreview.StopTweening();
|
m_sprPreview.StopTweening();
|
||||||
@@ -177,7 +177,7 @@ void ScreenSelectStyle::AfterChange()
|
|||||||
|
|
||||||
|
|
||||||
// Tween Info
|
// Tween Info
|
||||||
te = (ThemeElement)(GRAPHIC_SELECT_STYLE_INFO_0+GetSelectedStyle());
|
te = (ThemeElement)(GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_0+GetSelectedStyle());
|
||||||
m_sprInfo.Load( THEME->GetPathTo(te) );
|
m_sprInfo.Load( THEME->GetPathTo(te) );
|
||||||
m_sprInfo.StopTweening();
|
m_sprInfo.StopTweening();
|
||||||
m_sprInfo.SetZoomY( 0 );
|
m_sprInfo.SetZoomY( 0 );
|
||||||
@@ -222,7 +222,6 @@ void ScreenSelectStyle::MenuStart( const PlayerNumber p )
|
|||||||
case STYLE_DANCE_DOUBLE: ae = ANNOUNCER_SELECT_STYLE_COMMENT_DOUBLE; break;
|
case STYLE_DANCE_DOUBLE: ae = ANNOUNCER_SELECT_STYLE_COMMENT_DOUBLE; break;
|
||||||
case STYLE_DANCE_COUPLE: ae = ANNOUNCER_SELECT_STYLE_COMMENT_COUPLE; break;
|
case STYLE_DANCE_COUPLE: ae = ANNOUNCER_SELECT_STYLE_COMMENT_COUPLE; break;
|
||||||
case STYLE_DANCE_SOLO: ae = ANNOUNCER_SELECT_STYLE_COMMENT_SOLO; break;
|
case STYLE_DANCE_SOLO: ae = ANNOUNCER_SELECT_STYLE_COMMENT_SOLO; break;
|
||||||
case STYLE_DANCE_SOLO_VERSUS: ae = ANNOUNCER_SELECT_STYLE_COMMENT_VERSUS; break;
|
|
||||||
case STYLE_PUMP_SINGLE: ae = ANNOUNCER_SELECT_STYLE_COMMENT_SINGLE; break;
|
case STYLE_PUMP_SINGLE: ae = ANNOUNCER_SELECT_STYLE_COMMENT_SINGLE; break;
|
||||||
case STYLE_PUMP_VERSUS: ae = ANNOUNCER_SELECT_STYLE_COMMENT_VERSUS; break;
|
case STYLE_PUMP_VERSUS: ae = ANNOUNCER_SELECT_STYLE_COMMENT_VERSUS; break;
|
||||||
default: ASSERT(0); break; // invalid Style
|
default: ASSERT(0); break; // invalid Style
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "SongManager.h"
|
#include "SongManager.h"
|
||||||
#include "AnnouncerManager.h"
|
#include "AnnouncerManager.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#include "GameManager.h"
|
#include "GameManager.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ ScreenTitleMenu::ScreenTitleMenu()
|
|||||||
this->AddActor( &m_sprLogo );
|
this->AddActor( &m_sprLogo );
|
||||||
|
|
||||||
m_textHelp.Load( THEME->GetPathTo(FONT_NORMAL) );
|
m_textHelp.Load( THEME->GetPathTo(FONT_NORMAL) );
|
||||||
m_textHelp.SetText( ssprintf("Use %c %c to select, then press NEXT", char(3), char(4)) );
|
m_textHelp.SetText( ssprintf("Use %c %c to select, then press START", char(3), char(4)) );
|
||||||
m_textHelp.SetXY( CENTER_X, SCREEN_BOTTOM - 30 );
|
m_textHelp.SetXY( CENTER_X, SCREEN_BOTTOM - 30 );
|
||||||
m_textHelp.SetZoom( 0.5f );
|
m_textHelp.SetZoom( 0.5f );
|
||||||
m_textHelp.SetEffectBlinking();
|
m_textHelp.SetEffectBlinking();
|
||||||
|
|||||||
+41
-33
@@ -15,7 +15,7 @@
|
|||||||
#include "Song.h"
|
#include "Song.h"
|
||||||
#include <math.h> // for fmod
|
#include <math.h> // for fmod
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -76,6 +76,14 @@ Song::Song()
|
|||||||
m_fMusicLength = 0;
|
m_fMusicLength = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Song::~Song()
|
||||||
|
{
|
||||||
|
for( int i=0; i<m_arrayNotes.GetSize(); i++ )
|
||||||
|
SAFE_DELETE( m_arrayNotes[i] );
|
||||||
|
|
||||||
|
m_arrayNotes.RemoveAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Song::GetBeatAndBPSFromElapsedTime( float fElapsedTime, float &fBeatOut, float &fBPSOut )
|
void Song::GetBeatAndBPSFromElapsedTime( float fElapsedTime, float &fBeatOut, float &fBPSOut )
|
||||||
{
|
{
|
||||||
@@ -237,9 +245,9 @@ bool Song::LoadFromSongDir( CString sDir )
|
|||||||
|
|
||||||
|
|
||||||
if( iNumSongFiles > 1 )
|
if( iNumSongFiles > 1 )
|
||||||
FatalError( "There is more than one .song file in '%s'. There should be only one!", sDir );
|
throw RageException( "There is more than one .song file in '%s'. There should be only one!", sDir );
|
||||||
else if( iNumDWIFiles > 1 )
|
else if( iNumDWIFiles > 1 )
|
||||||
FatalError( "There is more than one DWI file in '%s'. There should be only one!", sDir );
|
throw RageException( "There is more than one DWI file in '%s'. There should be only one!", sDir );
|
||||||
else if( iNumSongFiles == 1 )
|
else if( iNumSongFiles == 1 )
|
||||||
LoadFromSMDir( sDir );
|
LoadFromSMDir( sDir );
|
||||||
else if( iNumDWIFiles == 1 )
|
else if( iNumDWIFiles == 1 )
|
||||||
@@ -247,7 +255,7 @@ bool Song::LoadFromSongDir( CString sDir )
|
|||||||
else if( iNumBMSFiles > 0 )
|
else if( iNumBMSFiles > 0 )
|
||||||
LoadFromBMSDir( sDir );
|
LoadFromBMSDir( sDir );
|
||||||
else
|
else
|
||||||
FatalError( "Couldn't find any .song, BMS, or DWI files in '%s'. This is not a valid song directory.", sDir );
|
throw RageException( "Couldn't find any .song, BMS, or DWI files in '%s'. This is not a valid song directory.", sDir );
|
||||||
|
|
||||||
TidyUpData();
|
TidyUpData();
|
||||||
|
|
||||||
@@ -284,7 +292,7 @@ bool Song::LoadFromBMSDir( CString sDir )
|
|||||||
GetDirListing( sDir + CString("*.bms"), arrayBMSFileNames );
|
GetDirListing( sDir + CString("*.bms"), arrayBMSFileNames );
|
||||||
|
|
||||||
if( arrayBMSFileNames.GetSize() == 0 )
|
if( arrayBMSFileNames.GetSize() == 0 )
|
||||||
FatalError( ssprintf("Couldn't find any BMS files in '%s'", sDir) );
|
throw RageException( ssprintf("Couldn't find any BMS files in '%s'", sDir) );
|
||||||
|
|
||||||
|
|
||||||
// Load the Song info from the first BMS file. Silly BMS duplicates the song info in every
|
// Load the Song info from the first BMS file. Silly BMS duplicates the song info in every
|
||||||
@@ -295,16 +303,16 @@ bool Song::LoadFromBMSDir( CString sDir )
|
|||||||
// load the Notes from the rest of the BMS files
|
// load the Notes from the rest of the BMS files
|
||||||
for( int i=0; i<arrayBMSFileNames.GetSize(); i++ )
|
for( int i=0; i<arrayBMSFileNames.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
m_arrayNotes.SetSize( m_arrayNotes.GetSize()+1 );
|
Notes* pNewNotes = new Notes;
|
||||||
Notes &new_steps = m_arrayNotes[ m_arrayNotes.GetSize()-1 ];
|
pNewNotes->LoadFromBMSFile( m_sSongDir + arrayBMSFileNames[i] );
|
||||||
new_steps.LoadFromBMSFile( m_sSongDir + arrayBMSFileNames[i] );
|
m_arrayNotes.Add( pNewNotes );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( m_sSongFilePath, CFile::modeRead|CFile::shareDenyNone ) )
|
if( !file.Open( m_sSongFilePath, CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
{
|
{
|
||||||
FatalError( ssprintf("Failed to open %s.", m_sSongFilePath) );
|
throw RageException( ssprintf("Failed to open %s.", m_sSongFilePath) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,7 +469,7 @@ bool Song::LoadFromDWIFile( CString sPath )
|
|||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( GetSongFilePath(), CFile::modeRead|CFile::shareDenyNone ) )
|
if( !file.Open( GetSongFilePath(), CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
FatalError( ssprintf("Error opening DWI file '%s'.", GetSongFilePath()) );
|
throw RageException( ssprintf("Error opening DWI file '%s'.", GetSongFilePath()) );
|
||||||
|
|
||||||
|
|
||||||
// read the whole file into a sFileText
|
// read the whole file into a sFileText
|
||||||
@@ -570,15 +578,15 @@ bool Song::LoadFromDWIFile( CString sPath )
|
|||||||
|
|
||||||
else if( sValueName == "#SINGLE" || sValueName == "#DOUBLE" || sValueName == "#COUPLE" )
|
else if( sValueName == "#SINGLE" || sValueName == "#DOUBLE" || sValueName == "#COUPLE" )
|
||||||
{
|
{
|
||||||
m_arrayNotes.SetSize( m_arrayNotes.GetSize()+1, 1 );
|
Notes* pNewNotes = new Notes;
|
||||||
Notes &new_Notes = m_arrayNotes[ m_arrayNotes.GetSize()-1 ];
|
pNewNotes->LoadFromDWITokens(
|
||||||
new_Notes.LoadFromDWITokens(
|
|
||||||
arrayValueTokens[0],
|
arrayValueTokens[0],
|
||||||
arrayValueTokens[1],
|
arrayValueTokens[1],
|
||||||
arrayValueTokens[2],
|
arrayValueTokens[2],
|
||||||
arrayValueTokens[3],
|
arrayValueTokens[3],
|
||||||
arrayValueTokens.GetSize() == 5 ? arrayValueTokens[4] : ""
|
arrayValueTokens.GetSize() == 5 ? arrayValueTokens[4] : ""
|
||||||
);
|
);
|
||||||
|
m_arrayNotes.Add( pNewNotes );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// do nothing. We don't care about this value name
|
// do nothing. We don't care about this value name
|
||||||
@@ -611,7 +619,7 @@ bool Song::LoadFromSMDir( CString sDir )
|
|||||||
CStringArray arraySongFileNames;
|
CStringArray arraySongFileNames;
|
||||||
GetDirListing( sDir + "*.song", arraySongFileNames );
|
GetDirListing( sDir + "*.song", arraySongFileNames );
|
||||||
if( arraySongFileNames.GetSize() == 0 )
|
if( arraySongFileNames.GetSize() == 0 )
|
||||||
FatalError( "Couldn't find any SM Song files in '%s'", sDir );
|
throw RageException( "Couldn't find any SM Song files in '%s'", sDir );
|
||||||
|
|
||||||
|
|
||||||
// Load the Song info from the first BMS file. Silly BMS duplicates the song info in every
|
// Load the Song info from the first BMS file. Silly BMS duplicates the song info in every
|
||||||
@@ -626,15 +634,15 @@ bool Song::LoadFromSMDir( CString sDir )
|
|||||||
// load the Notes from the rest of the BMS files
|
// load the Notes from the rest of the BMS files
|
||||||
for( i=0; i<arrayNotesFileNames.GetSize(); i++ )
|
for( i=0; i<arrayNotesFileNames.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
m_arrayNotes.SetSize( m_arrayNotes.GetSize()+1 );
|
Notes* pNewNotes = new Notes;
|
||||||
Notes &new_steps = m_arrayNotes[ m_arrayNotes.GetSize()-1 ];
|
pNewNotes->LoadFromNotesFile( m_sSongDir + arrayNotesFileNames[i] );
|
||||||
new_steps.LoadFromNotesFile( m_sSongDir + arrayNotesFileNames[i] );
|
m_arrayNotes.Add( pNewNotes );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( GetSongFilePath(), CFile::modeRead|CFile::shareDenyNone ) )
|
if( !file.Open( GetSongFilePath(), CFile::modeRead|CFile::shareDenyNone ) )
|
||||||
FatalError( "Error opening DWI file '%s'.", GetSongFilePath() );
|
throw RageException( "Error opening DWI file '%s'.", GetSongFilePath() );
|
||||||
|
|
||||||
|
|
||||||
// read the whole file into a sFileText
|
// read the whole file into a sFileText
|
||||||
@@ -771,7 +779,7 @@ void Song::TidyUpData()
|
|||||||
m_sSubTitle.TrimRight();
|
m_sSubTitle.TrimRight();
|
||||||
if( m_sArtist == "" ) m_sArtist = "Unknown artist";
|
if( m_sArtist == "" ) m_sArtist = "Unknown artist";
|
||||||
if( m_BPMSegments.GetSize() == 0 )
|
if( m_BPMSegments.GetSize() == 0 )
|
||||||
FatalError( "No #BPM specified in '%s.'", GetSongFilePath() );
|
throw RageException( "No #BPM specified in '%s.'", GetSongFilePath() );
|
||||||
|
|
||||||
if( m_sMusicPath == "" || !DoesFileExist(GetMusicPath()) )
|
if( m_sMusicPath == "" || !DoesFileExist(GetMusicPath()) )
|
||||||
{
|
{
|
||||||
@@ -784,7 +792,7 @@ void Song::TidyUpData()
|
|||||||
m_sMusicPath = m_sSongDir + arrayPossibleMusic[0];
|
m_sMusicPath = m_sSongDir + arrayPossibleMusic[0];
|
||||||
else
|
else
|
||||||
m_sMusicPath = "";
|
m_sMusicPath = "";
|
||||||
// FatalError( ssprintf("Music could not be found. Please check the Song file '%s' and verify the specified #MUSIC exists.", GetSongFilePath()) );
|
// throw RageException( ssprintf("Music could not be found. Please check the Song file '%s' and verify the specified #MUSIC exists.", GetSongFilePath()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save length of music
|
// Save length of music
|
||||||
@@ -823,7 +831,7 @@ void Song::TidyUpData()
|
|||||||
else
|
else
|
||||||
m_sBannerPath = "";
|
m_sBannerPath = "";
|
||||||
|
|
||||||
//FatalError( ssprintf("Banner could not be found. Please check the Song file '%s' and verify the specified #BANNER exists.", GetSongFilePath()) );
|
//throw RageException( ssprintf("Banner could not be found. Please check the Song file '%s' and verify the specified #BANNER exists.", GetSongFilePath()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !DoesFileExist(GetBackgroundPath()) )
|
if( !DoesFileExist(GetBackgroundPath()) )
|
||||||
@@ -873,7 +881,7 @@ void Song::TidyUpData()
|
|||||||
|
|
||||||
for( int i=0; i<m_arrayNotes.GetSize(); i++ )
|
for( int i=0; i<m_arrayNotes.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
Notes* pNM = &m_arrayNotes[i];
|
Notes* pNM = m_arrayNotes[i];
|
||||||
|
|
||||||
float fMusicLength = m_fMusicLength;
|
float fMusicLength = m_fMusicLength;
|
||||||
if( fMusicLength == 0 )
|
if( fMusicLength == 0 )
|
||||||
@@ -891,8 +899,8 @@ void Song::TidyUpData()
|
|||||||
void Song::GetNotesThatMatch( NotesType nt, CArray<Notes*, Notes*>& arrayAddTo )
|
void Song::GetNotesThatMatch( NotesType nt, CArray<Notes*, Notes*>& arrayAddTo )
|
||||||
{
|
{
|
||||||
for( int i=0; i<m_arrayNotes.GetSize(); i++ ) // for each of the Song's Notes
|
for( int i=0; i<m_arrayNotes.GetSize(); i++ ) // for each of the Song's Notes
|
||||||
if( m_arrayNotes[i].m_NotesType == nt )
|
if( m_arrayNotes[i]->m_NotesType == nt )
|
||||||
arrayAddTo.Add( &m_arrayNotes[i] );
|
arrayAddTo.Add( m_arrayNotes[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -942,7 +950,7 @@ void Song::SaveToCacheFile()
|
|||||||
|
|
||||||
fprintf( file, "%d\n", m_arrayNotes.GetSize() );
|
fprintf( file, "%d\n", m_arrayNotes.GetSize() );
|
||||||
for( i=0; i<m_arrayNotes.GetSize(); i++ )
|
for( i=0; i<m_arrayNotes.GetSize(); i++ )
|
||||||
m_arrayNotes[i].WriteToCacheFile( file );
|
m_arrayNotes[i]->WriteToCacheFile( file );
|
||||||
|
|
||||||
fclose( file );
|
fclose( file );
|
||||||
}
|
}
|
||||||
@@ -1015,7 +1023,7 @@ bool Song::LoadFromCacheFile( bool bLoadNoteData )
|
|||||||
fscanf( file, "%d\n", &iNumNotes );
|
fscanf( file, "%d\n", &iNumNotes );
|
||||||
m_arrayNotes.SetSize( iNumNotes );
|
m_arrayNotes.SetSize( iNumNotes );
|
||||||
for( i=0; i<iNumNotes; i++ )
|
for( i=0; i<iNumNotes; i++ )
|
||||||
m_arrayNotes[i].ReadFromCacheFile( file, bLoadNoteData );
|
m_arrayNotes[i]->ReadFromCacheFile( file, bLoadNoteData );
|
||||||
|
|
||||||
fclose( file );
|
fclose( file );
|
||||||
return true;
|
return true;
|
||||||
@@ -1052,7 +1060,7 @@ void Song::SaveToSMDir()
|
|||||||
|
|
||||||
CStdioFile file;
|
CStdioFile file;
|
||||||
if( !file.Open( m_sSongFilePath, CFile::modeWrite | CFile::modeCreate ) )
|
if( !file.Open( m_sSongFilePath, CFile::modeWrite | CFile::modeCreate ) )
|
||||||
FatalError( "Error opening song file '%s' for writing.", m_sSongFilePath );
|
throw RageException( "Error opening song file '%s' for writing.", m_sSongFilePath );
|
||||||
|
|
||||||
file.WriteString( ssprintf("#MAINTITLE:%s;\n", m_sMainTitle) );
|
file.WriteString( ssprintf("#MAINTITLE:%s;\n", m_sMainTitle) );
|
||||||
file.WriteString( ssprintf("#SUBTITLE:%s;\n", m_sSubTitle) );
|
file.WriteString( ssprintf("#SUBTITLE:%s;\n", m_sSubTitle) );
|
||||||
@@ -1134,20 +1142,20 @@ void Song::SaveToSMDir()
|
|||||||
//
|
//
|
||||||
for( i=0; i<m_arrayNotes.GetSize(); i++ )
|
for( i=0; i<m_arrayNotes.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
m_arrayNotes[i].SaveToSMDir( m_sSongDir );
|
m_arrayNotes[i]->SaveToSMDir( m_sSongDir );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Grade Song::GetGradeForDifficultyClass( NotesType nt, DifficultyClass dc )
|
Grade Song::GetGradeForDifficultyClass( NotesType nt, DifficultyClass dc )
|
||||||
{
|
{
|
||||||
CArray<Notes*, Notes*> arrayNotess;
|
CArray<Notes*, Notes*> aNotes;
|
||||||
this->GetNotesThatMatch( nt, arrayNotess );
|
this->GetNotesThatMatch( nt, aNotes );
|
||||||
SortNotesArrayByDifficultyClass( arrayNotess );
|
SortNotesArrayByDifficultyClass( aNotes );
|
||||||
|
|
||||||
for( int i=0; i<arrayNotess.GetSize(); i++ )
|
for( int i=0; i<aNotes.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
Notes* pNotes = arrayNotess[i];
|
Notes* pNotes = aNotes[i];
|
||||||
if( pNotes->m_DifficultyClass == dc )
|
if( pNotes->m_DifficultyClass == dc )
|
||||||
return pNotes->m_TopGrade;
|
return pNotes->m_TopGrade;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "SongManager.h"
|
#include "SongManager.h"
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#include "PrefsManager.h"
|
#include "PrefsManager.h"
|
||||||
|
|
||||||
SongManager* SONGMAN = NULL; // global and accessable from anywhere in our program
|
SongManager* SONGMAN = NULL; // global and accessable from anywhere in our program
|
||||||
@@ -36,44 +36,48 @@ const int NUM_GROUP_COLORS = sizeof(GROUP_COLORS) / sizeof(D3DXCOLOR);
|
|||||||
|
|
||||||
SongManager::SongManager()
|
SongManager::SongManager()
|
||||||
{
|
{
|
||||||
for( int i=0; i<MAX_SONG_QUEUE_SIZE; i++ )
|
m_pCurSong = NULL;
|
||||||
{
|
for( int p=0; p<NUM_PLAYERS; p++ )
|
||||||
m_pCurSong[i] = NULL;
|
m_pCurNotes[p] = NULL;
|
||||||
for( int p=0; p<NUM_PLAYERS; p++ )
|
m_pCurCourse = NULL;
|
||||||
m_pCurNotes[i][p] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
InitSongArrayFromDisk();
|
InitSongArrayFromDisk();
|
||||||
ReadStatisticsFromDisk();
|
ReadStatisticsFromDisk();
|
||||||
|
|
||||||
|
InitCoursesFromDisk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SongManager::~SongManager()
|
SongManager::~SongManager()
|
||||||
{
|
{
|
||||||
SaveStatisticsToDisk();
|
SaveStatisticsToDisk();
|
||||||
CleanUpSongArray();
|
FreeSongArray();
|
||||||
m_arrayGroupNames.RemoveAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Song* SongManager::GetCurrentSong()
|
Song* SongManager::GetCurrentSong()
|
||||||
{
|
{
|
||||||
return m_pCurSong[ PREFSMAN->GetStageIndex() ];
|
return m_pCurSong;
|
||||||
}
|
}
|
||||||
|
|
||||||
Notes* SongManager::GetCurrentNotes( PlayerNumber p )
|
Notes* SongManager::GetCurrentNotes( PlayerNumber p )
|
||||||
{
|
{
|
||||||
return m_pCurNotes[ PREFSMAN->GetStageIndex() ][p];
|
return m_pCurNotes[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongManager::SetCurrentSong( Song* pSong )
|
void SongManager::SetCurrentSong( Song* pSong )
|
||||||
{
|
{
|
||||||
m_pCurSong[ PREFSMAN->GetStageIndex() ] = pSong;
|
m_pCurSong = pSong;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongManager::SetCurrentNotes( PlayerNumber p, Notes* pNotes )
|
void SongManager::SetCurrentNotes( PlayerNumber p, Notes* pNotes )
|
||||||
{
|
{
|
||||||
m_pCurNotes[ PREFSMAN->GetStageIndex() ][p] = pNotes;
|
m_pCurNotes[p] = pNotes;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameplayStatistics SongManager::GetLatestGameplayStatistics( PlayerNumber p )
|
||||||
|
{
|
||||||
|
return m_GameplayStatistics[ PREFSMAN->GetStageIndex() ][p];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -82,7 +86,7 @@ void SongManager::InitSongArrayFromDisk()
|
|||||||
LoadStepManiaSongDir( "Songs" );
|
LoadStepManiaSongDir( "Songs" );
|
||||||
//LoadDWISongDir( "DWI Support" );
|
//LoadDWISongDir( "DWI Support" );
|
||||||
|
|
||||||
// computer group names
|
// compute group names
|
||||||
CArray<Song*, Song*> arraySongs;
|
CArray<Song*, Song*> arraySongs;
|
||||||
arraySongs.Copy( m_pSongs );
|
arraySongs.Copy( m_pSongs );
|
||||||
SortSongPointerArrayByGroup( arraySongs );
|
SortSongPointerArrayByGroup( arraySongs );
|
||||||
@@ -122,7 +126,7 @@ void SongManager::LoadStepManiaSongDir( CString sDir )
|
|||||||
GetDirListing( ssprintf("%s\\%s\\*.ogg", sDir, sGroupDirName), arrayFiles );
|
GetDirListing( ssprintf("%s\\%s\\*.ogg", sDir, sGroupDirName), arrayFiles );
|
||||||
GetDirListing( ssprintf("%s\\%s\\*.wav", sDir, sGroupDirName), arrayFiles );
|
GetDirListing( ssprintf("%s\\%s\\*.wav", sDir, sGroupDirName), arrayFiles );
|
||||||
if( arrayFiles.GetSize() > 0 )
|
if( arrayFiles.GetSize() > 0 )
|
||||||
FatalError(
|
throw RageException(
|
||||||
ssprintf( "The song folder '%s' must be placed inside of a group folder.\n\n"
|
ssprintf( "The song folder '%s' must be placed inside of a group folder.\n\n"
|
||||||
"All song folders must be placed below a group folder. For example, 'Songs\\DDR 4th Mix\\B4U'. See the StepMania readme for more info.",
|
"All song folders must be placed below a group folder. For example, 'Songs\\DDR 4th Mix\\B4U'. See the StepMania readme for more info.",
|
||||||
ssprintf("%s\\%s", sDir, sGroupDirName ) )
|
ssprintf("%s\\%s", sDir, sGroupDirName ) )
|
||||||
@@ -215,14 +219,12 @@ void SongManager::LoadDWISongDir( CString DWIHome )
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
void SongManager::CleanUpSongArray()
|
void SongManager::FreeSongArray()
|
||||||
{
|
{
|
||||||
for( int i=0; i<m_pSongs.GetSize(); i++ )
|
for( int i=0; i<m_pSongs.GetSize(); i++ )
|
||||||
{
|
|
||||||
SAFE_DELETE( m_pSongs[i] );
|
SAFE_DELETE( m_pSongs[i] );
|
||||||
}
|
|
||||||
|
|
||||||
m_pSongs.RemoveAll();
|
m_pSongs.RemoveAll();
|
||||||
|
|
||||||
m_mapGroupToBannerPath.RemoveAll();
|
m_mapGroupToBannerPath.RemoveAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +232,7 @@ void SongManager::CleanUpSongArray()
|
|||||||
void SongManager::ReloadSongArray()
|
void SongManager::ReloadSongArray()
|
||||||
{
|
{
|
||||||
InitSongArrayFromDisk();
|
InitSongArrayFromDisk();
|
||||||
CleanUpSongArray();
|
FreeSongArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -286,9 +288,9 @@ void SongManager::ReadStatisticsFromDisk()
|
|||||||
Notes* pNotes = NULL;
|
Notes* pNotes = NULL;
|
||||||
for( i=0; i<pSong->m_arrayNotes.GetSize(); i++ )
|
for( i=0; i<pSong->m_arrayNotes.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
if( pSong->m_arrayNotes[i].m_sDescription == szStepsName ) // match!
|
if( pSong->m_arrayNotes[i]->m_sDescription == szStepsName ) // match!
|
||||||
{
|
{
|
||||||
pNotes = &pSong->m_arrayNotes[i];
|
pNotes = pSong->m_arrayNotes[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -327,7 +329,7 @@ void SongManager::SaveStatisticsToDisk()
|
|||||||
|
|
||||||
for( int j=0; j<pSong->m_arrayNotes.GetSize(); j++ ) // for each Notes
|
for( int j=0; j<pSong->m_arrayNotes.GetSize(); j++ ) // for each Notes
|
||||||
{
|
{
|
||||||
Notes* pNotes = &pSong->m_arrayNotes[j];
|
Notes* pNotes = pSong->m_arrayNotes[j];
|
||||||
|
|
||||||
if( pNotes->m_TopGrade == GRADE_NO_DATA )
|
if( pNotes->m_TopGrade == GRADE_NO_DATA )
|
||||||
continue; // skip
|
continue; // skip
|
||||||
@@ -398,3 +400,63 @@ CString SongManager::ShortenGroupName( const CString &sOrigGroupName )
|
|||||||
sShortName.Replace( "DANCE DANCE REVOLUTION", "DDR" );
|
sShortName.Replace( "DANCE DANCE REVOLUTION", "DDR" );
|
||||||
return sShortName;
|
return sShortName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SongManager::InitCoursesFromDisk()
|
||||||
|
{
|
||||||
|
CStringArray saGroupNames;
|
||||||
|
this->GetGroupNames( saGroupNames );
|
||||||
|
for( int g=0; g<saGroupNames.GetSize(); g++ ) // foreach Group
|
||||||
|
{
|
||||||
|
CString sGroupName = saGroupNames[g];
|
||||||
|
CString sShortGroupName = this->ShortenGroupName( sGroupName );
|
||||||
|
|
||||||
|
CArray<Song*, Song*> apSongs;
|
||||||
|
this->GetSongsInGroup( sGroupName, apSongs );
|
||||||
|
|
||||||
|
for( NotesType nt=NotesType(0); nt<NUM_NOTES_TYPES; nt=NotesType(nt+1) ) // foreach NotesType
|
||||||
|
{
|
||||||
|
|
||||||
|
for( DifficultyClass dc=CLASS_MEDIUM; dc<=CLASS_HARD; dc=DifficultyClass(dc+1) ) // foreach DifficultyClass
|
||||||
|
{
|
||||||
|
Course course;
|
||||||
|
course.m_sName = sShortGroupName + " ";
|
||||||
|
switch( dc )
|
||||||
|
{
|
||||||
|
case CLASS_EASY: course.m_sName += "Easy"; break;
|
||||||
|
case CLASS_MEDIUM: course.m_sName += "Medium"; break;
|
||||||
|
case CLASS_HARD: course.m_sName += "Hard"; break;
|
||||||
|
}
|
||||||
|
course.m_NotesType = nt;
|
||||||
|
|
||||||
|
|
||||||
|
for( int s=0; s<apSongs.GetSize(); s++ )
|
||||||
|
{
|
||||||
|
Song* pSong = apSongs[s];
|
||||||
|
|
||||||
|
CArray<Notes*, Notes*> apNotes;
|
||||||
|
pSong->GetNotesThatMatch( course.m_NotesType, apNotes );
|
||||||
|
|
||||||
|
// search for first Notes matching this DifficultyClass
|
||||||
|
for( int n=0; n<apNotes.GetSize(); n++ )
|
||||||
|
{
|
||||||
|
Notes* pNotes = apNotes[n];
|
||||||
|
|
||||||
|
if( pNotes->m_DifficultyClass == dc )
|
||||||
|
{
|
||||||
|
course.AddStage( pSong, pNotes );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( course.m_iStages > 0 )
|
||||||
|
m_aCourses.Add( course );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SongManager::ReloadCourses()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,9 +13,13 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Song.h"
|
#include "Song.h"
|
||||||
|
#include "Course.h"
|
||||||
|
#include "GamePlayStatistics.h"
|
||||||
//#include <d3dxmath.h> // for D3DXCOLOR
|
//#include <d3dxmath.h> // for D3DXCOLOR
|
||||||
|
|
||||||
const int MAX_SONG_QUEUE_SIZE = 30;
|
const int MAX_SONG_QUEUE_SIZE = 400; // this has to be gigantic to fit an "endless" number of songs
|
||||||
|
const int MAX_NUM_STAGES = 10; // the max number of stages that can be played in arcade mode
|
||||||
|
|
||||||
|
|
||||||
class SongManager
|
class SongManager
|
||||||
{
|
{
|
||||||
@@ -23,23 +27,26 @@ public:
|
|||||||
SongManager();
|
SongManager();
|
||||||
~SongManager();
|
~SongManager();
|
||||||
|
|
||||||
Song* m_pCurSong[MAX_SONG_QUEUE_SIZE];
|
Song* m_pCurSong;
|
||||||
Notes* m_pCurNotes[MAX_SONG_QUEUE_SIZE][NUM_PLAYERS];
|
Notes* m_pCurNotes[NUM_PLAYERS];
|
||||||
|
Course* m_pCurCourse;
|
||||||
CString m_sPreferredGroup;
|
CString m_sPreferredGroup;
|
||||||
|
|
||||||
|
GameplayStatistics m_GameplayStatistics[MAX_NUM_STAGES][NUM_PLAYERS]; // for passing from Dancing to Results
|
||||||
|
|
||||||
|
|
||||||
CArray<Song*, Song*> m_pSongs; // all songs that can be played
|
CArray<Song*, Song*> m_pSongs; // all songs that can be played
|
||||||
|
|
||||||
void InitSongArrayFromDisk();
|
void InitSongArrayFromDisk();
|
||||||
|
void FreeSongArray();
|
||||||
|
void ReloadSongArray();
|
||||||
|
|
||||||
|
|
||||||
Song* GetCurrentSong();
|
Song* GetCurrentSong();
|
||||||
Notes* GetCurrentNotes( PlayerNumber p );
|
Notes* GetCurrentNotes( PlayerNumber p );
|
||||||
void SetCurrentSong( Song* pSong );
|
void SetCurrentSong( Song* pSong );
|
||||||
void SetCurrentNotes( PlayerNumber p, Notes* pNotes );
|
void SetCurrentNotes( PlayerNumber p, Notes* pNotes );
|
||||||
|
GameplayStatistics GetLatestGameplayStatistics( PlayerNumber p );
|
||||||
|
|
||||||
void CleanUpSongArray();
|
|
||||||
void ReloadSongArray();
|
|
||||||
|
|
||||||
|
|
||||||
void ReadStatisticsFromDisk();
|
void ReadStatisticsFromDisk();
|
||||||
@@ -55,6 +62,13 @@ public:
|
|||||||
void GetSongsInGroup( const CString sGroupName, CArray<Song*,Song*> &AddTo );
|
void GetSongsInGroup( const CString sGroupName, CArray<Song*,Song*> &AddTo );
|
||||||
|
|
||||||
|
|
||||||
|
// for Courses
|
||||||
|
CArray<Course, Course> m_aCourses;
|
||||||
|
|
||||||
|
void InitCoursesFromDisk();
|
||||||
|
void ReloadCourses();
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void LoadStepManiaSongDir( CString sDir );
|
void LoadStepManiaSongDir( CString sDir );
|
||||||
void LoadDWISongDir( CString sDir );
|
void LoadDWISongDir( CString sDir );
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#include "PrefsManager.h"
|
#include "PrefsManager.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -75,12 +75,12 @@ bool Sprite::LoadFromSpriteFile( CString sSpritePath, bool bForceReload, int iMi
|
|||||||
IniFile ini;
|
IniFile ini;
|
||||||
ini.SetPath( m_sSpritePath );
|
ini.SetPath( m_sSpritePath );
|
||||||
if( !ini.ReadFile() )
|
if( !ini.ReadFile() )
|
||||||
FatalError( ssprintf("Error opening Sprite file '%s'.", m_sSpritePath) );
|
throw RageException( ssprintf("Error opening Sprite file '%s'.", m_sSpritePath) );
|
||||||
|
|
||||||
CString sTextureFile;
|
CString sTextureFile;
|
||||||
ini.GetValue( "Sprite", "Texture", sTextureFile );
|
ini.GetValue( "Sprite", "Texture", sTextureFile );
|
||||||
if( sTextureFile == "" )
|
if( sTextureFile == "" )
|
||||||
FatalError( ssprintf("Error reading value 'Texture' from %s.", m_sSpritePath) );
|
throw RageException( ssprintf("Error reading value 'Texture' from %s.", m_sSpritePath) );
|
||||||
|
|
||||||
CString sTexturePath = sFontDir + sTextureFile; // save the path of the new texture
|
CString sTexturePath = sFontDir + sTextureFile; // save the path of the new texture
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ bool Sprite::LoadFromSpriteFile( CString sSpritePath, bool bForceReload, int iMi
|
|||||||
if( !ini.GetValueI( "Sprite", sFrameKey, m_iStateToFrame[i] ) )
|
if( !ini.GetValueI( "Sprite", sFrameKey, m_iStateToFrame[i] ) )
|
||||||
break;
|
break;
|
||||||
if( m_iStateToFrame[i] >= m_pTexture->GetNumFrames() )
|
if( m_iStateToFrame[i] >= m_pTexture->GetNumFrames() )
|
||||||
FatalError( "In '%s', %s is %d, but the texture %s only has %d frames.",
|
throw RageException( "In '%s', %s is %d, but the texture %s only has %d frames.",
|
||||||
m_sSpritePath, sFrameKey, m_iStateToFrame[i], sTexturePath, m_pTexture->GetNumFrames() );
|
m_sSpritePath, sFrameKey, m_iStateToFrame[i], sTexturePath, m_pTexture->GetNumFrames() );
|
||||||
m_fDelay[i] = 0.2f;
|
m_fDelay[i] = 0.2f;
|
||||||
if( !ini.GetValueF( "Sprite", sDelayKey, m_fDelay[i] ) )
|
if( !ini.GetValueF( "Sprite", sDelayKey, m_fDelay[i] ) )
|
||||||
@@ -260,8 +260,6 @@ void Sprite::DrawPrimitives()
|
|||||||
pVB->Unlock();
|
pVB->Unlock();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Set the stage...
|
// Set the stage...
|
||||||
LPDIRECT3DDEVICE8 pd3dDevice = DISPLAY->GetDevice();
|
LPDIRECT3DDEVICE8 pd3dDevice = DISPLAY->GetDevice();
|
||||||
pd3dDevice->SetTexture( 0, m_pTexture->GetD3DTexture() );
|
pd3dDevice->SetTexture( 0, m_pTexture->GetD3DTexture() );
|
||||||
@@ -349,7 +347,6 @@ void Sprite::DrawPrimitives()
|
|||||||
|
|
||||||
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
|
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,8 @@
|
|||||||
#include "RageSound.h"
|
#include "RageSound.h"
|
||||||
#include "RageMusic.h"
|
#include "RageMusic.h"
|
||||||
#include "RageInput.h"
|
#include "RageInput.h"
|
||||||
|
#include "RageTimer.h"
|
||||||
|
#include "RageException.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+147
-161
@@ -48,19 +48,10 @@
|
|||||||
#include "ScreenMusicScroll.h"
|
#include "ScreenMusicScroll.h"
|
||||||
#include "ScreenSelectMusic.h"
|
#include "ScreenSelectMusic.h"
|
||||||
#include "ScreenGameplay.h"
|
#include "ScreenGameplay.h"
|
||||||
|
#include "ScreenSelectDifficulty.h"
|
||||||
// error catcher stuff
|
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#pragma comment(lib, "ErrorCatcher/dbghelp.lib")
|
|
||||||
#if defined(DEBUG) | defined(_DEBUG)
|
|
||||||
#pragma comment(lib, "ErrorCatcher/ErrorCatcherD.lib")
|
|
||||||
#else
|
|
||||||
#pragma comment(lib, "ErrorCatcher/ErrorCatcher.lib")
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#include "dxerr8.h"
|
#include "dxerr8.h"
|
||||||
#include "DXUtil.h"
|
|
||||||
#include <Afxdisp.h>
|
#include <Afxdisp.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -107,6 +98,7 @@ VOID DestroyObjects(); // deallocate game objects when we're done with them
|
|||||||
|
|
||||||
void ApplyGraphicOptions(); // Set the display mode according to the user's preferences
|
void ApplyGraphicOptions(); // Set the display mode according to the user's preferences
|
||||||
|
|
||||||
|
CString g_sErrorString;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Name: WinMain()
|
// Name: WinMain()
|
||||||
@@ -114,98 +106,140 @@ void ApplyGraphicOptions(); // Set the display mode according to the user's pref
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow )
|
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow )
|
||||||
{
|
{
|
||||||
// Initialize ActiveX for Flash
|
#ifdef RELEASE
|
||||||
//AfxEnableControlContainer();
|
try
|
||||||
|
|
||||||
//
|
|
||||||
// Check to see if the app is already running.
|
|
||||||
//
|
|
||||||
g_hMutex = CreateMutex( NULL, TRUE, g_sAppName );
|
|
||||||
if( GetLastError() == ERROR_ALREADY_EXISTS )
|
|
||||||
{
|
|
||||||
CloseHandle( g_hMutex );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Make sure the current directory is the root program directory
|
|
||||||
//
|
|
||||||
if( !DoesFileExist("Songs") )
|
|
||||||
{
|
|
||||||
// change dir to path of the execuctable
|
|
||||||
TCHAR szFullAppPath[MAX_PATH];
|
|
||||||
GetModuleFileName(NULL, szFullAppPath, MAX_PATH);
|
|
||||||
|
|
||||||
// strip off executable name
|
|
||||||
LPSTR pLastBackslash = strrchr(szFullAppPath, '\\');
|
|
||||||
*pLastBackslash = '\0'; // terminate the string
|
|
||||||
|
|
||||||
SetCurrentDirectory( szFullAppPath );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CoInitialize (NULL); // Initialize COM
|
|
||||||
|
|
||||||
// Register the window class
|
|
||||||
WNDCLASS wndClass = {
|
|
||||||
0,
|
|
||||||
WndProc, // callback handler
|
|
||||||
0, // cbClsExtra;
|
|
||||||
0, // cbWndExtra;
|
|
||||||
hInstance,
|
|
||||||
LoadIcon( hInstance, MAKEINTRESOURCE(IDI_ICON) ),
|
|
||||||
LoadCursor( hInstance, IDC_ARROW),
|
|
||||||
(HBRUSH)GetStockObject( BLACK_BRUSH ),
|
|
||||||
NULL, // lpszMenuName;
|
|
||||||
g_sAppClassName // lpszClassName;
|
|
||||||
};
|
|
||||||
RegisterClass( &wndClass );
|
|
||||||
|
|
||||||
|
|
||||||
// Set the window's initial width
|
|
||||||
RECT rcWnd;
|
|
||||||
SetRect( &rcWnd, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
||||||
AdjustWindowRect( &rcWnd, g_dwWindowStyle, FALSE );
|
|
||||||
|
|
||||||
|
|
||||||
// Create our main window
|
|
||||||
g_hWndMain = CreateWindow(
|
|
||||||
g_sAppClassName,// pointer to registered class name
|
|
||||||
g_sAppName, // pointer to window name
|
|
||||||
g_dwWindowStyle, // window StyleDef
|
|
||||||
CW_USEDEFAULT, // horizontal position of window
|
|
||||||
CW_USEDEFAULT, // vertical position of window
|
|
||||||
RECTWIDTH(rcWnd), // window width
|
|
||||||
RECTHEIGHT(rcWnd),// window height
|
|
||||||
NULL, // handle to parent or owner window
|
|
||||||
NULL, // handle to menu, or child-window identifier
|
|
||||||
hInstance, // handle to application instance
|
|
||||||
NULL // pointer to window-creation data
|
|
||||||
);
|
|
||||||
if( NULL == g_hWndMain )
|
|
||||||
exit(1);
|
|
||||||
|
|
||||||
ShowWindow( g_hWndMain, SW_HIDE );
|
|
||||||
|
|
||||||
|
|
||||||
// Don't catch errors if we're running in the debugger. This way, the debugger
|
|
||||||
// will give us a nice stack trace.
|
|
||||||
#ifdef _DEBUG
|
|
||||||
#define bCatchErrors false
|
|
||||||
#else
|
|
||||||
#define bCatchErrors true
|
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
// Initialize ActiveX for Flash
|
||||||
|
//AfxEnableControlContainer();
|
||||||
|
|
||||||
bool bSuccess = RunAndCatchErrors( MainLoop, bCatchErrors );
|
//
|
||||||
|
// Check to see if the app is already running.
|
||||||
|
//
|
||||||
|
g_hMutex = CreateMutex( NULL, TRUE, g_sAppName );
|
||||||
|
if( GetLastError() == ERROR_ALREADY_EXISTS )
|
||||||
|
{
|
||||||
|
CloseHandle( g_hMutex );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure the current directory is the root program directory
|
||||||
|
//
|
||||||
|
if( !DoesFileExist("Songs") )
|
||||||
|
{
|
||||||
|
// change dir to path of the execuctable
|
||||||
|
TCHAR szFullAppPath[MAX_PATH];
|
||||||
|
GetModuleFileName(NULL, szFullAppPath, MAX_PATH);
|
||||||
|
|
||||||
// clean up after a normal exit
|
// strip off executable name
|
||||||
DestroyObjects(); // deallocate our game objects and leave fullscreen
|
LPSTR pLastBackslash = strrchr(szFullAppPath, '\\');
|
||||||
ShowWindow( g_hWndMain, SW_HIDE );
|
*pLastBackslash = '\0'; // terminate the string
|
||||||
|
|
||||||
|
SetCurrentDirectory( szFullAppPath );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if( !bSuccess )
|
CoInitialize (NULL); // Initialize COM
|
||||||
|
|
||||||
|
// Register the window class
|
||||||
|
WNDCLASS wndClass = {
|
||||||
|
0,
|
||||||
|
WndProc, // callback handler
|
||||||
|
0, // cbClsExtra;
|
||||||
|
0, // cbWndExtra;
|
||||||
|
hInstance,
|
||||||
|
LoadIcon( hInstance, MAKEINTRESOURCE(IDI_ICON) ),
|
||||||
|
LoadCursor( hInstance, IDC_ARROW),
|
||||||
|
(HBRUSH)GetStockObject( BLACK_BRUSH ),
|
||||||
|
NULL, // lpszMenuName;
|
||||||
|
g_sAppClassName // lpszClassName;
|
||||||
|
};
|
||||||
|
RegisterClass( &wndClass );
|
||||||
|
|
||||||
|
|
||||||
|
// Set the window's initial width
|
||||||
|
RECT rcWnd;
|
||||||
|
SetRect( &rcWnd, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
||||||
|
AdjustWindowRect( &rcWnd, g_dwWindowStyle, FALSE );
|
||||||
|
|
||||||
|
|
||||||
|
// Create our main window
|
||||||
|
g_hWndMain = CreateWindow(
|
||||||
|
g_sAppClassName,// pointer to registered class name
|
||||||
|
g_sAppName, // pointer to window name
|
||||||
|
g_dwWindowStyle, // window StyleDef
|
||||||
|
CW_USEDEFAULT, // horizontal position of window
|
||||||
|
CW_USEDEFAULT, // vertical position of window
|
||||||
|
RECTWIDTH(rcWnd), // window width
|
||||||
|
RECTHEIGHT(rcWnd),// window height
|
||||||
|
NULL, // handle to parent or owner window
|
||||||
|
NULL, // handle to menu, or child-window identifier
|
||||||
|
hInstance, // handle to application instance
|
||||||
|
NULL // pointer to window-creation data
|
||||||
|
);
|
||||||
|
if( NULL == g_hWndMain )
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
ShowWindow( g_hWndMain, SW_HIDE );
|
||||||
|
|
||||||
|
|
||||||
|
// Load keyboard accelerators
|
||||||
|
HACCEL hAccel = LoadAccelerators( NULL, MAKEINTRESOURCE(IDR_MAIN_ACCEL) );
|
||||||
|
|
||||||
|
// run the game
|
||||||
|
CreateObjects( g_hWndMain ); // Create the game objects
|
||||||
|
|
||||||
|
ShowWindow( g_hWndMain, SW_SHOW );
|
||||||
|
#ifdef RELEASE
|
||||||
|
LOG->HideConsole();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Now we're ready to recieve and process Windows messages.
|
||||||
|
MSG msg;
|
||||||
|
ZeroMemory( &msg, sizeof(msg) );
|
||||||
|
|
||||||
|
while( WM_QUIT != msg.message )
|
||||||
|
{
|
||||||
|
// Look for messages, if none are found then
|
||||||
|
// update the state and display it
|
||||||
|
if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
|
||||||
|
{
|
||||||
|
GetMessage(&msg, NULL, 0, 0 );
|
||||||
|
|
||||||
|
// Translate and dispatch the message
|
||||||
|
if( 0 == TranslateAccelerator( g_hWndMain, hAccel, &msg ) )
|
||||||
|
{
|
||||||
|
TranslateMessage( &msg );
|
||||||
|
DispatchMessage( &msg );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // No messages are waiting. Render a frame during idle time.
|
||||||
|
{
|
||||||
|
Update();
|
||||||
|
Render();
|
||||||
|
if( DISPLAY && DISPLAY->IsWindowed() )
|
||||||
|
::Sleep( 1 ); // give some time to other processes
|
||||||
|
}
|
||||||
|
} // end while( WM_QUIT != msg.message )
|
||||||
|
|
||||||
|
|
||||||
|
// clean up after a normal exit
|
||||||
|
DestroyObjects(); // deallocate our game objects and leave fullscreen
|
||||||
|
ShowWindow( g_hWndMain, SW_HIDE );
|
||||||
|
|
||||||
|
}
|
||||||
|
#ifdef _RELEASE
|
||||||
|
catch( RageException e )
|
||||||
|
{
|
||||||
|
g_sErrorString = e.GetError();
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
g_sErrorString = "access violation or other run-time error.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if( g_sErrorString != "" )
|
||||||
{
|
{
|
||||||
// throw up a pretty error dialog
|
// throw up a pretty error dialog
|
||||||
DialogBox(
|
DialogBox(
|
||||||
@@ -215,6 +249,7 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow )
|
|||||||
ErrorWndProc
|
ErrorWndProc
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
DestroyWindow( g_hWndMain );
|
DestroyWindow( g_hWndMain );
|
||||||
UnregisterClass( g_sAppClassName, hInstance );
|
UnregisterClass( g_sAppClassName, hInstance );
|
||||||
@@ -224,49 +259,6 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow )
|
|||||||
return 0L;
|
return 0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainLoop()
|
|
||||||
{
|
|
||||||
// Load keyboard accelerators
|
|
||||||
HACCEL hAccel = LoadAccelerators( NULL, MAKEINTRESOURCE(IDR_MAIN_ACCEL) );
|
|
||||||
|
|
||||||
// run the game
|
|
||||||
CreateObjects( g_hWndMain ); // Create the game objects
|
|
||||||
|
|
||||||
ShowWindow( g_hWndMain, SW_SHOW );
|
|
||||||
#ifdef RELEASE
|
|
||||||
LOG->HideConsole();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Now we're ready to recieve and process Windows messages.
|
|
||||||
MSG msg;
|
|
||||||
ZeroMemory( &msg, sizeof(msg) );
|
|
||||||
|
|
||||||
while( WM_QUIT != msg.message )
|
|
||||||
{
|
|
||||||
// Look for messages, if none are found then
|
|
||||||
// update the state and display it
|
|
||||||
if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
|
|
||||||
{
|
|
||||||
GetMessage(&msg, NULL, 0, 0 );
|
|
||||||
|
|
||||||
// Translate and dispatch the message
|
|
||||||
if( 0 == TranslateAccelerator( g_hWndMain, hAccel, &msg ) )
|
|
||||||
{
|
|
||||||
TranslateMessage( &msg );
|
|
||||||
DispatchMessage( &msg );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // No messages are waiting. Render a frame during idle time.
|
|
||||||
{
|
|
||||||
Update();
|
|
||||||
Render();
|
|
||||||
if( DISPLAY && DISPLAY->IsWindowed() )
|
|
||||||
::Sleep( 1 ); // give some time to other processes
|
|
||||||
}
|
|
||||||
} // end while( WM_QUIT != msg.message )
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Name: ErrorWndProc()
|
// Name: ErrorWndProc()
|
||||||
@@ -278,11 +270,7 @@ BOOL CALLBACK ErrorWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
CString sMessage = ssprintf("%s", GetError() );
|
CString sMessage = g_sErrorString;
|
||||||
if( GetErrorHr() != 0 )
|
|
||||||
sMessage += ssprintf(" ('%d - %s)'", GetErrorHr(), DXGetErrorString8(GetErrorHr()) );
|
|
||||||
sMessage += ssprintf("\n\nStack Trace: (PDB file required for function names)", GetStackTrace() );
|
|
||||||
sMessage += ssprintf("\n\n%s", GetStackTrace() );
|
|
||||||
sMessage.Replace( "\n", "\r\n" );
|
sMessage.Replace( "\n", "\r\n" );
|
||||||
SendDlgItemMessage(
|
SendDlgItemMessage(
|
||||||
hWnd,
|
hWnd,
|
||||||
@@ -492,15 +480,16 @@ HRESULT CreateObjects( HWND hWnd )
|
|||||||
//
|
//
|
||||||
srand( (unsigned)time(NULL) ); // seed number generator
|
srand( (unsigned)time(NULL) ); // seed number generator
|
||||||
|
|
||||||
LOG = new RageLog();
|
LOG = new RageLog();
|
||||||
SOUND = new RageSound( hWnd );
|
TIMER = new RageTimer;
|
||||||
MUSIC = new RageSoundStream;
|
SOUND = new RageSound( hWnd );
|
||||||
INPUTMAN= new RageInput( hWnd );
|
MUSIC = new RageSoundStream;
|
||||||
|
INPUTMAN = new RageInput( hWnd );
|
||||||
PREFSMAN = new PrefsManager;
|
PREFSMAN = new PrefsManager;
|
||||||
DISPLAY = new RageDisplay( hWnd );
|
DISPLAY = new RageDisplay( hWnd );
|
||||||
SONGMAN = new SongManager; // this takes a long time to load
|
SONGMAN = new SongManager; // this takes a long time to load
|
||||||
GAMEMAN = new GameManager;
|
GAMEMAN = new GameManager;
|
||||||
THEME = new ThemeManager;
|
THEME = new ThemeManager;
|
||||||
ANNOUNCER = new AnnouncerManager;
|
ANNOUNCER = new AnnouncerManager;
|
||||||
INPUTFILTER = new InputFilter();
|
INPUTFILTER = new InputFilter();
|
||||||
INPUTMAPPER = new InputMapper();
|
INPUTMAPPER = new InputMapper();
|
||||||
@@ -524,17 +513,15 @@ HRESULT CreateObjects( HWND hWnd )
|
|||||||
//SCREENMAN->SetNewScreen( new ScreenLoading );
|
//SCREENMAN->SetNewScreen( new ScreenLoading );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenSandbox );
|
//SCREENMAN->SetNewScreen( new ScreenSandbox );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenResults(false) );
|
//SCREENMAN->SetNewScreen( new ScreenResults(false) );
|
||||||
|
//SCREENMAN->SetNewScreen( new ScreenSelectDifficulty );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenPlayerOptions );
|
//SCREENMAN->SetNewScreen( new ScreenPlayerOptions );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
SCREENMAN->SetNewScreen( new ScreenTitleMenu );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenGameplay );
|
//SCREENMAN->SetNewScreen( new ScreenGameplay );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenMusicScroll );
|
//SCREENMAN->SetNewScreen( new ScreenMusicScroll );
|
||||||
SCREENMAN->SetNewScreen( new ScreenSelectMusic );
|
//SCREENMAN->SetNewScreen( new ScreenSelectMusic );
|
||||||
//SCREENMAN->SetNewScreen( new ScreenSelectGroup );
|
//SCREENMAN->SetNewScreen( new ScreenSelectGroup );
|
||||||
|
|
||||||
|
|
||||||
DXUtil_Timer( TIMER_START ); // Start the accurate timer
|
|
||||||
|
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,8 +531,6 @@ HRESULT CreateObjects( HWND hWnd )
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void DestroyObjects()
|
void DestroyObjects()
|
||||||
{
|
{
|
||||||
DXUtil_Timer( TIMER_STOP );
|
|
||||||
|
|
||||||
SAFE_DELETE( SCREENMAN );
|
SAFE_DELETE( SCREENMAN );
|
||||||
SAFE_DELETE( FONT );
|
SAFE_DELETE( FONT );
|
||||||
SAFE_DELETE( TEXTUREMAN );
|
SAFE_DELETE( TEXTUREMAN );
|
||||||
@@ -561,6 +546,7 @@ void DestroyObjects()
|
|||||||
SAFE_DELETE( INPUTMAN );
|
SAFE_DELETE( INPUTMAN );
|
||||||
SAFE_DELETE( MUSIC );
|
SAFE_DELETE( MUSIC );
|
||||||
SAFE_DELETE( SOUND );
|
SAFE_DELETE( SOUND );
|
||||||
|
SAFE_DELETE( TIMER );
|
||||||
SAFE_DELETE( LOG );
|
SAFE_DELETE( LOG );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,7 +613,7 @@ HRESULT InvalidateObjects()
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
float fDeltaTime = DXUtil_Timer( TIMER_GETELAPSEDTIME );
|
float fDeltaTime = TIMER->GetDeltaTime();
|
||||||
|
|
||||||
// This was a hack to fix timing issues with the old ScreenSelectSong
|
// This was a hack to fix timing issues with the old ScreenSelectSong
|
||||||
//
|
//
|
||||||
@@ -702,7 +688,7 @@ void Render()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FatalErrorHr( hr, "Failed to DISPLAY->Reset()" );
|
throw RageException( hr, "Failed to DISPLAY->Reset()" );
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -789,7 +775,7 @@ void ApplyGraphicOptions()
|
|||||||
dwHeight = 240;
|
dwHeight = 240;
|
||||||
if( !DISPLAY->SwitchDisplayMode(bWindowed, dwWidth, dwHeight, dwDisplayBPP) )
|
if( !DISPLAY->SwitchDisplayMode(bWindowed, dwWidth, dwHeight, dwDisplayBPP) )
|
||||||
{
|
{
|
||||||
FatalError( "Tried every possible display mode, and couldn't find one that works." );
|
throw RageException( "Tried every possible display mode, and couldn't find one that works." );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+61
-21
@@ -39,7 +39,7 @@ RSC=rc.exe
|
|||||||
# PROP Use_MFC 1
|
# PROP Use_MFC 1
|
||||||
# PROP Use_Debug_Libraries 0
|
# PROP Use_Debug_Libraries 0
|
||||||
# PROP Output_Dir "../"
|
# PROP Output_Dir "../"
|
||||||
# PROP Intermediate_Dir "../Release-VC6"
|
# PROP Intermediate_Dir "../Release"
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||||
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
|
|||||||
# ADD BSC32 /nologo /o"../StepMania-StackTrace.bsc"
|
# ADD BSC32 /nologo /o"../StepMania-StackTrace.bsc"
|
||||||
LINK32=link.exe
|
LINK32=link.exe
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||||
# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /out:"../StepMania-VC6.exe"
|
# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "StepMania - Win32 Debug"
|
!ELSEIF "$(CFG)" == "StepMania - Win32 Debug"
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ LINK32=link.exe
|
|||||||
# PROP Use_MFC 1
|
# PROP Use_MFC 1
|
||||||
# PROP Use_Debug_Libraries 1
|
# PROP Use_Debug_Libraries 1
|
||||||
# PROP Output_Dir "../"
|
# PROP Output_Dir "../"
|
||||||
# PROP Intermediate_Dir "../Debug-VC6"
|
# PROP Intermediate_Dir "../Debug"
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||||
@@ -79,7 +79,7 @@ BSC32=bscmake.exe
|
|||||||
# ADD BSC32 /nologo
|
# ADD BSC32 /nologo
|
||||||
LINK32=link.exe
|
LINK32=link.exe
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||||
# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /out:"../StepMania-debug-VC6.exe" /pdbtype:sept
|
# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /out:"../StepMania-debug.exe" /pdbtype:sept
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
@@ -108,6 +108,14 @@ SOURCE=.\RageDisplay.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageException.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageException.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageInput.cpp
|
SOURCE=.\RageInput.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -180,6 +188,14 @@ SOURCE=.\RageTextureManager.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageTimer.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageTimer.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageUtil.cpp
|
SOURCE=.\RageUtil.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -216,6 +232,14 @@ SOURCE=.\GameInput.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\GameplayStatistics.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\GameplayStatistics.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\GameTypes.h
|
SOURCE=.\GameTypes.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -488,6 +512,22 @@ SOURCE=.\BPMDisplay.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CourseContentsFrame.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CourseContentsFrame.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CourseInfoFrame.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CourseInfoFrame.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CroppedSprite.cpp
|
SOURCE=.\CroppedSprite.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -496,14 +536,6 @@ SOURCE=.\CroppedSprite.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\DifficultyBanner.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\DifficultyBanner.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\DifficultyIcon.cpp
|
SOURCE=.\DifficultyIcon.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -623,7 +655,7 @@ SOURCE=.\TipDisplay.cpp
|
|||||||
SOURCE=.\TipDisplay.h
|
SOURCE=.\TipDisplay.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Actors used in Dancing"
|
# Begin Group "Actors used in Gameplay"
|
||||||
|
|
||||||
# PROP Default_Filter ""
|
# PROP Default_Filter ""
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -660,6 +692,14 @@ SOURCE=.\Combo.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\DifficultyBanner.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\DifficultyBanner.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\FocusingSprite.cpp
|
SOURCE=.\FocusingSprite.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -770,14 +810,6 @@ SOURCE=.\ScoreDisplayRolling.cpp
|
|||||||
|
|
||||||
SOURCE=.\ScoreDisplayRolling.h
|
SOURCE=.\ScoreDisplayRolling.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\ScoreDisplayRollingWithFrame.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\ScoreDisplayRollingWithFrame.h
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Screens"
|
# Begin Group "Screens"
|
||||||
|
|
||||||
@@ -908,6 +940,14 @@ SOURCE=.\ScreenSandbox.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ScreenSelectCourse.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ScreenSelectCourse.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\ScreenSelectDifficulty.cpp
|
SOURCE=.\ScreenSelectDifficulty.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|||||||
@@ -3,18 +3,6 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
|
|||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
Project: "ErrorCatcher"=.\ErrorCatcher\ErrorCatcher.dsp - Package Owner=<4>
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<4>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Project: "StepMania"=.\StepMania.dsp - Package Owner=<4>
|
Project: "StepMania"=.\StepMania.dsp - Package Owner=<4>
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
@@ -23,9 +11,6 @@ Package=<5>
|
|||||||
|
|
||||||
Package=<4>
|
Package=<4>
|
||||||
{{{
|
{{{
|
||||||
Begin Project Dependency
|
|
||||||
Project_Dep_Name ErrorCatcher
|
|
||||||
End Project Dependency
|
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|||||||
@@ -5,15 +5,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZipArchive", "smpackage\Zip
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smpackage", "smpackage\smpackage.vcproj", "{775C9F19-F852-43AC-8563-D869C027722D}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smpackage", "smpackage\smpackage.vcproj", "{775C9F19-F852-43AC-8563-D869C027722D}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ErrorCatcher", "ErrorCatcher\ErrorCatcher.vcproj", "{88A45E4A-2CEB-404C-88AB-EE07B1844DB0}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfiguration) = preSolution
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
ConfigName.0 = Debug
|
ConfigName.0 = Debug
|
||||||
ConfigName.1 = Release
|
ConfigName.1 = Release
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectDependencies) = postSolution
|
GlobalSection(ProjectDependencies) = postSolution
|
||||||
{670745A6-106B-420D-A2A9-D4F89A23986E}.0 = {88A45E4A-2CEB-404C-88AB-EE07B1844DB0}
|
|
||||||
{775C9F19-F852-43AC-8563-D869C027722D}.0 = {2AF0D4D5-0984-4AD4-A2BD-402D4BE285CE}
|
{775C9F19-F852-43AC-8563-D869C027722D}.0 = {2AF0D4D5-0984-4AD4-A2BD-402D4BE285CE}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfiguration) = postSolution
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
@@ -25,10 +22,6 @@ Global
|
|||||||
{2AF0D4D5-0984-4AD4-A2BD-402D4BE285CE}.Release.ActiveCfg = Release|Win32
|
{2AF0D4D5-0984-4AD4-A2BD-402D4BE285CE}.Release.ActiveCfg = Release|Win32
|
||||||
{775C9F19-F852-43AC-8563-D869C027722D}.Debug.ActiveCfg = Debug|Win32
|
{775C9F19-F852-43AC-8563-D869C027722D}.Debug.ActiveCfg = Debug|Win32
|
||||||
{775C9F19-F852-43AC-8563-D869C027722D}.Release.ActiveCfg = Release|Win32
|
{775C9F19-F852-43AC-8563-D869C027722D}.Release.ActiveCfg = Release|Win32
|
||||||
{88A45E4A-2CEB-404C-88AB-EE07B1844DB0}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{88A45E4A-2CEB-404C-88AB-EE07B1844DB0}.Debug.Build.0 = Debug|Win32
|
|
||||||
{88A45E4A-2CEB-404C-88AB-EE07B1844DB0}.Release.ActiveCfg = Release|Win32
|
|
||||||
{88A45E4A-2CEB-404C-88AB-EE07B1844DB0}.Release.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
CharacterSet="2">
|
CharacterSet="2">
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
AdditionalOptions="/EHa"
|
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,DEBUG"
|
PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,DEBUG"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -236,6 +235,12 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath="ScreenSandbox.h">
|
RelativePath="ScreenSandbox.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="ScreenSelectCourse.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="ScreenSelectCourse.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="ScreenSelectDifficulty.cpp">
|
RelativePath="ScreenSelectDifficulty.cpp">
|
||||||
</File>
|
</File>
|
||||||
@@ -306,6 +311,12 @@
|
|||||||
<Filter
|
<Filter
|
||||||
Name="Data Structures"
|
Name="Data Structures"
|
||||||
Filter="">
|
Filter="">
|
||||||
|
<File
|
||||||
|
RelativePath="Course.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="Course.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Font.cpp">
|
RelativePath=".\Font.cpp">
|
||||||
</File>
|
</File>
|
||||||
@@ -327,6 +338,12 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath=".\GameTypes.h">
|
RelativePath=".\GameTypes.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="GameplayStatistics.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="GameplayStatistics.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Grade.cpp">
|
RelativePath=".\Grade.cpp">
|
||||||
</File>
|
</File>
|
||||||
@@ -499,6 +516,18 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath="BonusInfoFrame.h">
|
RelativePath="BonusInfoFrame.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="CourseContentsFrame.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="CourseContentsFrame.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="CourseInfoFrame.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="CourseInfoFrame.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="CroppedSprite.cpp">
|
RelativePath="CroppedSprite.cpp">
|
||||||
</File>
|
</File>
|
||||||
@@ -735,6 +764,12 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath="RageDisplay.h">
|
RelativePath="RageDisplay.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="RageException.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="RageException.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\RageInput.cpp">
|
RelativePath=".\RageInput.cpp">
|
||||||
</File>
|
</File>
|
||||||
@@ -789,6 +824,12 @@
|
|||||||
<File
|
<File
|
||||||
RelativePath=".\RageTextureManager.h">
|
RelativePath=".\RageTextureManager.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="RageTimer.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="RageTimer.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\RageUtil.cpp">
|
RelativePath=".\RageUtil.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
#include "StyleDef.h"
|
#include "StyleDef.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
#include "GameDef.h"
|
#include "GameDef.h"
|
||||||
#include "IniFile.h"
|
#include "IniFile.h"
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
#include "RageLog.h"
|
#include "RageLog.h"
|
||||||
#include "ErrorCatcher/ErrorCatcher.h"
|
|
||||||
|
|
||||||
|
|
||||||
ThemeManager* THEME = NULL; // global object accessable from anywhere in the program
|
ThemeManager* THEME = NULL; // global object accessable from anywhere in the program
|
||||||
@@ -48,7 +48,7 @@ void ThemeManager::SwitchTheme( CString sThemeName )
|
|||||||
m_sCurThemeName = sThemeName;
|
m_sCurThemeName = sThemeName;
|
||||||
CString sThemeDir = GetThemeDirFromName(m_sCurThemeName);
|
CString sThemeDir = GetThemeDirFromName(m_sCurThemeName);
|
||||||
if( !DoesFileExist( sThemeDir ) )
|
if( !DoesFileExist( sThemeDir ) )
|
||||||
FatalError( "Error loading the theme in diretory '%s'.", sThemeDir );
|
throw RageException( "Error loading the theme in diretory '%s'.", sThemeDir );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -88,7 +88,6 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case GRAPHIC_CAUTION: sAssetPrefix = "Graphics\\Caution"; break;
|
case GRAPHIC_CAUTION: sAssetPrefix = "Graphics\\Caution"; break;
|
||||||
case GRAPHIC_DANCER_P1: sAssetPrefix = "Graphics\\dancer p1"; break;
|
case GRAPHIC_DANCER_P1: sAssetPrefix = "Graphics\\dancer p1"; break;
|
||||||
case GRAPHIC_DANCER_P2: sAssetPrefix = "Graphics\\dancer p2"; break;
|
case GRAPHIC_DANCER_P2: sAssetPrefix = "Graphics\\dancer p2"; break;
|
||||||
case GRAPHIC_DIFFICULTY_ICONS: sAssetPrefix = "Graphics\\select music difficulty icons"; break;
|
|
||||||
case GRAPHIC_EDIT_BACKGROUND: sAssetPrefix = "Graphics\\edit background"; break;
|
case GRAPHIC_EDIT_BACKGROUND: sAssetPrefix = "Graphics\\edit background"; break;
|
||||||
case GRAPHIC_EDIT_TOP_EDGE: sAssetPrefix = "Graphics\\edit top edge"; break;
|
case GRAPHIC_EDIT_TOP_EDGE: sAssetPrefix = "Graphics\\edit top edge"; break;
|
||||||
case GRAPHIC_EDIT_SNAP_INDICATOR: sAssetPrefix = "Graphics\\edit snap indicator"; break;
|
case GRAPHIC_EDIT_SNAP_INDICATOR: sAssetPrefix = "Graphics\\edit snap indicator"; break;
|
||||||
@@ -104,16 +103,17 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case GRAPHIC_GAMEPLAY_COMBO: sAssetPrefix = "Graphics\\gameplay combo"; break;
|
case GRAPHIC_GAMEPLAY_COMBO: sAssetPrefix = "Graphics\\gameplay combo"; break;
|
||||||
case GRAPHIC_GAMEPLAY_DANGER_BACKGROUND: sAssetPrefix = "Graphics\\gameplay danger background"; break;
|
case GRAPHIC_GAMEPLAY_DANGER_BACKGROUND: sAssetPrefix = "Graphics\\gameplay danger background"; break;
|
||||||
case GRAPHIC_GAMEPLAY_DANGER_TEXT: sAssetPrefix = "Graphics\\gameplay danger text"; break;
|
case GRAPHIC_GAMEPLAY_DANGER_TEXT: sAssetPrefix = "Graphics\\gameplay danger text"; break;
|
||||||
case GRAPHIC_GAMEPLAY_DIFFICULTY_FRAME: sAssetPrefix = "Graphics\\gameplay difficulty frame"; break;
|
case GRAPHIC_GAMEPLAY_DIFFICULTY_BANNER_ICONS: sAssetPrefix = "Graphics\\gameplay difficulty banner icons";break;
|
||||||
|
case GRAPHIC_GAMEPLAY_DIFFICULTY_BANNER_FRAME: sAssetPrefix = "Graphics\\gameplay difficulty banner frame";break;
|
||||||
case GRAPHIC_GAMEPLAY_FAILED: sAssetPrefix = "Graphics\\gameplay failed"; break;
|
case GRAPHIC_GAMEPLAY_FAILED: sAssetPrefix = "Graphics\\gameplay failed"; break;
|
||||||
case GRAPHIC_GAMEPLAY_HERE_WE_GO: sAssetPrefix = "Graphics\\gameplay here we go"; break;
|
case GRAPHIC_GAMEPLAY_HERE_WE_GO: sAssetPrefix = "Graphics\\gameplay here we go"; break;
|
||||||
case GRAPHIC_GAMEPLAY_JUDGEMENT: sAssetPrefix = "Graphics\\gameplay judgement 1x9"; break;
|
case GRAPHIC_GAMEPLAY_JUDGEMENT: sAssetPrefix = "Graphics\\gameplay judgement 1x9"; break;
|
||||||
case GRAPHIC_GAMEPLAY_OPENING_STAR: sAssetPrefix = "Graphics\\gameplay opening star"; break;
|
case GRAPHIC_GAMEPLAY_OPENING_STAR: sAssetPrefix = "Graphics\\gameplay opening star"; break;
|
||||||
case GRAPHIC_GAMEPLAY_READY: sAssetPrefix = "Graphics\\gameplay Ready"; break;
|
case GRAPHIC_GAMEPLAY_READY: sAssetPrefix = "Graphics\\gameplay Ready"; break;
|
||||||
case GRAPHIC_GAMEPLAY_TOP_FRAME: sAssetPrefix = "Graphics\\gameplay top frame"; break;
|
case GRAPHIC_GAMEPLAY_TOP_FRAME_ARCADE: sAssetPrefix = "Graphics\\gameplay top frame arcade"; break;
|
||||||
|
case GRAPHIC_GAMEPLAY_TOP_FRAME_ONI: sAssetPrefix = "Graphics\\gameplay top frame oni"; break;
|
||||||
|
case GRAPHIC_GAMEPLAY_ONI_BATTERY: sAssetPrefix = "Graphics\\gameplay oni battery"; break;
|
||||||
case GRAPHIC_KEEP_ALIVE: sAssetPrefix = "Graphics\\keep alive"; break;
|
case GRAPHIC_KEEP_ALIVE: sAssetPrefix = "Graphics\\keep alive"; break;
|
||||||
case GRAPHIC_LIFEMETER_FRAME: sAssetPrefix = "Graphics\\Life Meter Frame"; break;
|
|
||||||
case GRAPHIC_LIFEMETER_PILLS: sAssetPrefix = "Graphics\\life meter pills 17x1"; break;
|
|
||||||
case GRAPHIC_MENU_BOTTOM_EDGE: sAssetPrefix = "Graphics\\menu bottom edge"; break;
|
case GRAPHIC_MENU_BOTTOM_EDGE: sAssetPrefix = "Graphics\\menu bottom edge"; break;
|
||||||
case GRAPHIC_MENU_STYLE_ICONS: sAssetPrefix = "Graphics\\menu style icons"; break;
|
case GRAPHIC_MENU_STYLE_ICONS: sAssetPrefix = "Graphics\\menu style icons"; break;
|
||||||
case GRAPHIC_MUSIC_SCROLL_BACKGROUND: sAssetPrefix = "Graphics\\music scroll background"; break;
|
case GRAPHIC_MUSIC_SCROLL_BACKGROUND: sAssetPrefix = "Graphics\\music scroll background"; break;
|
||||||
@@ -132,10 +132,12 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case GRAPHIC_RESULTS_GRADES: sAssetPrefix = "Graphics\\results grades 1x7"; break;
|
case GRAPHIC_RESULTS_GRADES: sAssetPrefix = "Graphics\\results grades 1x7"; break;
|
||||||
case GRAPHIC_RESULTS_JUDGE_LABELS: sAssetPrefix = "Graphics\\results judge labels 1x6"; break;
|
case GRAPHIC_RESULTS_JUDGE_LABELS: sAssetPrefix = "Graphics\\results judge labels 1x6"; break;
|
||||||
case GRAPHIC_RESULTS_SCORE_LABELS: sAssetPrefix = "Graphics\\results score labels 1x2"; break;
|
case GRAPHIC_RESULTS_SCORE_LABELS: sAssetPrefix = "Graphics\\results score labels 1x2"; break;
|
||||||
case GRAPHIC_RESULTS_SUMMARY_TOP_EDGE: sAssetPrefix = "Graphics\\results summary top edge"; break;
|
case GRAPHIC_RESULTS_SUMMARY_TOP_EDGE: sAssetPrefix = "Graphics\\results summary top edge"; break;
|
||||||
case GRAPHIC_RESULTS_TOP_EDGE: sAssetPrefix = "Graphics\\results top edge"; break;
|
case GRAPHIC_RESULTS_TOP_EDGE: sAssetPrefix = "Graphics\\results top edge"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_ARROW_P1: sAssetPrefix = "Graphics\\select difficulty arrow p1"; break;
|
case GRAPHIC_SELECT_COURSE_INFO_FRAME: sAssetPrefix = "Graphics\\select course info frame"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_ARROW_P2: sAssetPrefix = "Graphics\\select difficulty arrow p2"; break;
|
case GRAPHIC_SELECT_COURSE_TOP_EDGE: sAssetPrefix = "Graphics\\select course top edge"; break;
|
||||||
|
case GRAPHIC_SELECT_COURSE_BACKGROUND: sAssetPrefix = "Graphics\\select course background"; break;
|
||||||
|
case GRAPHIC_SELECT_DIFFICULTY_ARROWS: sAssetPrefix = "Graphics\\select difficulty arrows 1x2"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_BACKGROUND: sAssetPrefix = "Graphics\\select difficulty background"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_BACKGROUND: sAssetPrefix = "Graphics\\select difficulty background"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_EASY_HEADER: sAssetPrefix = "Graphics\\select difficulty easy header"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_EASY_HEADER: sAssetPrefix = "Graphics\\select difficulty easy header"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_EASY_PICTURE: sAssetPrefix = "Graphics\\select difficulty easy picture"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_EASY_PICTURE: sAssetPrefix = "Graphics\\select difficulty easy picture"; break;
|
||||||
@@ -144,6 +146,10 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case GRAPHIC_SELECT_DIFFICULTY_HARD_PICTURE: sAssetPrefix = "Graphics\\select difficulty hard picture"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_HARD_PICTURE: sAssetPrefix = "Graphics\\select difficulty hard picture"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_MEDIUM_HEADER: sAssetPrefix = "Graphics\\select difficulty medium header"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_MEDIUM_HEADER: sAssetPrefix = "Graphics\\select difficulty medium header"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_MEDIUM_PICTURE: sAssetPrefix = "Graphics\\select difficulty medium picture";break;
|
case GRAPHIC_SELECT_DIFFICULTY_MEDIUM_PICTURE: sAssetPrefix = "Graphics\\select difficulty medium picture";break;
|
||||||
|
case GRAPHIC_SELECT_DIFFICULTY_ONI_HEADER: sAssetPrefix = "Graphics\\select difficulty oni header"; break;
|
||||||
|
case GRAPHIC_SELECT_DIFFICULTY_ONI_PICTURE: sAssetPrefix = "Graphics\\select difficulty oni picture"; break;
|
||||||
|
case GRAPHIC_SELECT_DIFFICULTY_ENDLESS_HEADER: sAssetPrefix = "Graphics\\select difficulty endless header"; break;
|
||||||
|
case GRAPHIC_SELECT_DIFFICULTY_ENDLESS_PICTURE: sAssetPrefix = "Graphics\\select difficulty endless picture"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_OK: sAssetPrefix = "Graphics\\select difficulty ok"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_OK: sAssetPrefix = "Graphics\\select difficulty ok"; break;
|
||||||
case GRAPHIC_SELECT_DIFFICULTY_TOP_EDGE: sAssetPrefix = "Graphics\\select difficulty top edge"; break;
|
case GRAPHIC_SELECT_DIFFICULTY_TOP_EDGE: sAssetPrefix = "Graphics\\select difficulty top edge"; break;
|
||||||
case GRAPHIC_SELECT_GAME_BACKGROUND: sAssetPrefix = "Graphics\\select game background"; break;
|
case GRAPHIC_SELECT_GAME_BACKGROUND: sAssetPrefix = "Graphics\\select game background"; break;
|
||||||
@@ -155,6 +161,7 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case GRAPHIC_SELECT_GROUP_INFO_FRAME: sAssetPrefix = "Graphics\\select group info frame"; break;
|
case GRAPHIC_SELECT_GROUP_INFO_FRAME: sAssetPrefix = "Graphics\\select group info frame"; break;
|
||||||
case GRAPHIC_SELECT_GROUP_TOP_EDGE: sAssetPrefix = "Graphics\\select group top edge"; break;
|
case GRAPHIC_SELECT_GROUP_TOP_EDGE: sAssetPrefix = "Graphics\\select group top edge"; break;
|
||||||
case GRAPHIC_SELECT_MUSIC_BACKGROUND: sAssetPrefix = "Graphics\\select music background"; break;
|
case GRAPHIC_SELECT_MUSIC_BACKGROUND: sAssetPrefix = "Graphics\\select music background"; break;
|
||||||
|
case GRAPHIC_SELECT_MUSIC_DIFFICULTY_ICONS: sAssetPrefix = "Graphics\\select music difficulty icons"; break;
|
||||||
case GRAPHIC_SELECT_MUSIC_DIFFICULTY_FRAME: sAssetPrefix = "Graphics\\select music difficulty frame"; break;
|
case GRAPHIC_SELECT_MUSIC_DIFFICULTY_FRAME: sAssetPrefix = "Graphics\\select music difficulty frame"; break;
|
||||||
case GRAPHIC_SELECT_MUSIC_INFO_FRAME: sAssetPrefix = "Graphics\\select music info frame"; break;
|
case GRAPHIC_SELECT_MUSIC_INFO_FRAME: sAssetPrefix = "Graphics\\select music info frame"; break;
|
||||||
case GRAPHIC_SELECT_MUSIC_METER_FRAME: sAssetPrefix = "Graphics\\select music meter frame"; break;
|
case GRAPHIC_SELECT_MUSIC_METER_FRAME: sAssetPrefix = "Graphics\\select music meter frame"; break;
|
||||||
@@ -174,22 +181,22 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case GRAPHIC_SELECT_STYLE_EXPLANATION: sAssetPrefix = "Graphics\\select Style explanation"; break;
|
case GRAPHIC_SELECT_STYLE_EXPLANATION: sAssetPrefix = "Graphics\\select Style explanation"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_TOP_EDGE: sAssetPrefix = "Graphics\\select Style top edge"; break;
|
case GRAPHIC_SELECT_STYLE_TOP_EDGE: sAssetPrefix = "Graphics\\select Style top edge"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_ICONS: sAssetPrefix = "Graphics\\select Style icons"; break;
|
case GRAPHIC_SELECT_STYLE_ICONS: sAssetPrefix = "Graphics\\select Style icons"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_0: sAssetPrefix = "Graphics\\select style info 0"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_0: sAssetPrefix = "Graphics\\select style info game 0 style 0"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_1: sAssetPrefix = "Graphics\\select style info 1"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_1: sAssetPrefix = "Graphics\\select style info game 0 style 1"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_2: sAssetPrefix = "Graphics\\select style info 2"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_2: sAssetPrefix = "Graphics\\select style info game 0 style 2"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_3: sAssetPrefix = "Graphics\\select style info 3"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_3: sAssetPrefix = "Graphics\\select style info game 0 style 3"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_4: sAssetPrefix = "Graphics\\select style info 4"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_4: sAssetPrefix = "Graphics\\select style info game 0 style 4"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_5: sAssetPrefix = "Graphics\\select style info 5"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_1_STYLE_0: sAssetPrefix = "Graphics\\select style info game 1 style 0"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_6: sAssetPrefix = "Graphics\\select style info 6"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_1_STYLE_1: sAssetPrefix = "Graphics\\select style info game 1 style 1"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_INFO_7: sAssetPrefix = "Graphics\\select style info 7"; break;
|
case GRAPHIC_SELECT_STYLE_INFO_GAME_1_STYLE_2: sAssetPrefix = "Graphics\\select style info game 1 style 2"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_0: sAssetPrefix = "Graphics\\select style preview 0"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_0: sAssetPrefix = "Graphics\\select style preview game 0 style 0"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_1: sAssetPrefix = "Graphics\\select style preview 1"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_1: sAssetPrefix = "Graphics\\select style preview game 0 style 1"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_2: sAssetPrefix = "Graphics\\select style preview 2"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_2: sAssetPrefix = "Graphics\\select style preview game 0 style 2"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_3: sAssetPrefix = "Graphics\\select style preview 3"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_3: sAssetPrefix = "Graphics\\select style preview game 0 style 3"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_4: sAssetPrefix = "Graphics\\select style preview 4"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_4: sAssetPrefix = "Graphics\\select style preview game 0 style 4"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_5: sAssetPrefix = "Graphics\\select style preview 5"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_1_STYLE_0: sAssetPrefix = "Graphics\\select style preview game 1 style 0"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_6: sAssetPrefix = "Graphics\\select style preview 6"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_1_STYLE_1: sAssetPrefix = "Graphics\\select style preview game 1 style 1"; break;
|
||||||
case GRAPHIC_SELECT_STYLE_PREVIEW_7: sAssetPrefix = "Graphics\\select style preview 7"; break;
|
case GRAPHIC_SELECT_STYLE_PREVIEW_GAME_1_STYLE_2: sAssetPrefix = "Graphics\\select style preview game 1 style 2"; break;
|
||||||
case GRAPHIC_SONG_OPTIONS_BACKGROUND: sAssetPrefix = "Graphics\\song options background"; break;
|
case GRAPHIC_SONG_OPTIONS_BACKGROUND: sAssetPrefix = "Graphics\\song options background"; break;
|
||||||
case GRAPHIC_SONG_OPTIONS_TOP_EDGE: sAssetPrefix = "Graphics\\song options top edge"; break;
|
case GRAPHIC_SONG_OPTIONS_TOP_EDGE: sAssetPrefix = "Graphics\\song options top edge"; break;
|
||||||
case GRAPHIC_STAGE_UNDERSCORE: sAssetPrefix = "Graphics\\stage underscore"; break;
|
case GRAPHIC_STAGE_UNDERSCORE: sAssetPrefix = "Graphics\\stage underscore"; break;
|
||||||
@@ -216,18 +223,21 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
case SOUND_OPTION_CHANGE_ROW: sAssetPrefix = "Sounds\\option change row"; break;
|
case SOUND_OPTION_CHANGE_ROW: sAssetPrefix = "Sounds\\option change row"; break;
|
||||||
case SOUND_RESULTS_FLY_OFF: sAssetPrefix = "Sounds\\results fly off"; break;
|
case SOUND_RESULTS_FLY_OFF: sAssetPrefix = "Sounds\\results fly off"; break;
|
||||||
case SOUND_RESULTS_SCORE_TICK: sAssetPrefix = "Sounds\\results score tick"; break;
|
case SOUND_RESULTS_SCORE_TICK: sAssetPrefix = "Sounds\\results score tick"; break;
|
||||||
|
case SOUND_RESULTS_EXTRA_STAGE: sAssetPrefix = "Sounds\\results extra stage"; break;
|
||||||
case SOUND_SELECT_DIFFICULTY_CHANGE: sAssetPrefix = "Sounds\\select difficulty change"; break;
|
case SOUND_SELECT_DIFFICULTY_CHANGE: sAssetPrefix = "Sounds\\select difficulty change"; break;
|
||||||
case SOUND_SELECT_GROUP_CHANGE: sAssetPrefix = "Sounds\\select group change"; break;
|
case SOUND_SELECT_GROUP_CHANGE: sAssetPrefix = "Sounds\\select group change"; break;
|
||||||
case SOUND_SELECT_MUSIC_SECTION_EXPAND: sAssetPrefix = "Sounds\\select music section expand"; break;
|
case SOUND_SELECT_MUSIC_SECTION_EXPAND: sAssetPrefix = "Sounds\\select music section expand"; break;
|
||||||
case SOUND_SELECT_MUSIC_CHANGE_MUSIC: sAssetPrefix = "Sounds\\select music change music"; break;
|
case SOUND_SELECT_MUSIC_CHANGE_MUSIC: sAssetPrefix = "Sounds\\select music change music"; break;
|
||||||
case SOUND_SELECT_MUSIC_CHANGE_SORT: sAssetPrefix = "Sounds\\select music change sort"; break;
|
case SOUND_SELECT_MUSIC_CHANGE_SORT: sAssetPrefix = "Sounds\\select music change sort"; break;
|
||||||
case SOUND_SELECT_MUSIC_CHANGE_NOTES: sAssetPrefix = "Sounds\\select music change notes"; break;
|
case SOUND_SELECT_MUSIC_CHANGE_NOTES: sAssetPrefix = "Sounds\\select music change notes"; break;
|
||||||
|
case SOUND_SELECT_MUSIC_WHEEL_LOCKED: sAssetPrefix = "Sounds\\select music wheel locked"; break;
|
||||||
case SOUND_SELECT_STYLE_CHANGE: sAssetPrefix = "Sounds\\select style change"; break;
|
case SOUND_SELECT_STYLE_CHANGE: sAssetPrefix = "Sounds\\select style change"; break;
|
||||||
case SOUND_TITLE_MENU_CHANGE: sAssetPrefix = "Sounds\\title menu change"; break;
|
case SOUND_TITLE_MENU_CHANGE: sAssetPrefix = "Sounds\\title menu change"; break;
|
||||||
|
|
||||||
case FONT_HEADER1: sAssetPrefix = "Fonts\\Header1"; break;
|
case FONT_HEADER1: sAssetPrefix = "Fonts\\Header1"; break;
|
||||||
case FONT_HEADER2: sAssetPrefix = "Fonts\\Header2"; break;
|
case FONT_HEADER2: sAssetPrefix = "Fonts\\Header2"; break;
|
||||||
case FONT_NORMAL: sAssetPrefix = "Fonts\\Normal"; break;
|
case FONT_NORMAL: sAssetPrefix = "Fonts\\Normal"; break;
|
||||||
|
case FONT_ITALIC: sAssetPrefix = "Fonts\\Italic"; break;
|
||||||
case FONT_COMBO_NUMBERS: sAssetPrefix = "Fonts\\Combo Numbers"; break;
|
case FONT_COMBO_NUMBERS: sAssetPrefix = "Fonts\\Combo Numbers"; break;
|
||||||
case FONT_METER: sAssetPrefix = "Fonts\\Meter"; break;
|
case FONT_METER: sAssetPrefix = "Fonts\\Meter"; break;
|
||||||
case FONT_SCORE_NUMBERS: sAssetPrefix = "Fonts\\Score Numbers"; break;
|
case FONT_SCORE_NUMBERS: sAssetPrefix = "Fonts\\Score Numbers"; break;
|
||||||
@@ -284,7 +294,7 @@ CString ThemeManager::GetPathTo( ThemeElement te )
|
|||||||
if( asPossibleElementFilePaths.GetSize() > 0 )
|
if( asPossibleElementFilePaths.GetSize() > 0 )
|
||||||
return asPossibleElementFilePaths[0];
|
return asPossibleElementFilePaths[0];
|
||||||
else
|
else
|
||||||
FatalError( "Theme element '%s' could not be found in '%s' or '%s'.",
|
throw RageException( "Theme element '%s' could not be found in '%s' or '%s'.",
|
||||||
sDefaultThemeDir + sAssetPrefix,
|
sDefaultThemeDir + sAssetPrefix,
|
||||||
GetThemeDirFromName(m_sCurThemeName),
|
GetThemeDirFromName(m_sCurThemeName),
|
||||||
GetThemeDirFromName(DEFAULT_THEME_NAME) );
|
GetThemeDirFromName(DEFAULT_THEME_NAME) );
|
||||||
|
|||||||
@@ -22,10 +22,6 @@ enum ThemeElement {
|
|||||||
GRAPHIC_GAMEPLAY_CLOSING_STAR,
|
GRAPHIC_GAMEPLAY_CLOSING_STAR,
|
||||||
GRAPHIC_DANCER_P1,
|
GRAPHIC_DANCER_P1,
|
||||||
GRAPHIC_DANCER_P2,
|
GRAPHIC_DANCER_P2,
|
||||||
GRAPHIC_GAMEPLAY_BOTTOM_FRAME,
|
|
||||||
GRAPHIC_GAMEPLAY_DIFFICULTY_FRAME,
|
|
||||||
GRAPHIC_GAMEPLAY_TOP_FRAME,
|
|
||||||
GRAPHIC_DIFFICULTY_ICONS,
|
|
||||||
GRAPHIC_EDIT_BACKGROUND,
|
GRAPHIC_EDIT_BACKGROUND,
|
||||||
GRAPHIC_EDIT_TOP_EDGE,
|
GRAPHIC_EDIT_TOP_EDGE,
|
||||||
GRAPHIC_EDIT_SNAP_INDICATOR,
|
GRAPHIC_EDIT_SNAP_INDICATOR,
|
||||||
@@ -44,9 +40,13 @@ enum ThemeElement {
|
|||||||
GRAPHIC_GAMEPLAY_JUDGEMENT,
|
GRAPHIC_GAMEPLAY_JUDGEMENT,
|
||||||
GRAPHIC_GAMEPLAY_READY,
|
GRAPHIC_GAMEPLAY_READY,
|
||||||
GRAPHIC_GAMEPLAY_HERE_WE_GO,
|
GRAPHIC_GAMEPLAY_HERE_WE_GO,
|
||||||
|
GRAPHIC_GAMEPLAY_BOTTOM_FRAME,
|
||||||
|
GRAPHIC_GAMEPLAY_DIFFICULTY_BANNER_ICONS,
|
||||||
|
GRAPHIC_GAMEPLAY_DIFFICULTY_BANNER_FRAME,
|
||||||
|
GRAPHIC_GAMEPLAY_TOP_FRAME_ARCADE,
|
||||||
|
GRAPHIC_GAMEPLAY_TOP_FRAME_ONI,
|
||||||
|
GRAPHIC_GAMEPLAY_ONI_BATTERY,
|
||||||
GRAPHIC_KEEP_ALIVE,
|
GRAPHIC_KEEP_ALIVE,
|
||||||
GRAPHIC_LIFEMETER_FRAME,
|
|
||||||
GRAPHIC_LIFEMETER_PILLS,
|
|
||||||
GRAPHIC_MENU_BOTTOM_EDGE,
|
GRAPHIC_MENU_BOTTOM_EDGE,
|
||||||
GRAPHIC_MENU_STYLE_ICONS,
|
GRAPHIC_MENU_STYLE_ICONS,
|
||||||
GRAPHIC_MUSIC_SORT_ICONS,
|
GRAPHIC_MUSIC_SORT_ICONS,
|
||||||
@@ -67,8 +67,10 @@ enum ThemeElement {
|
|||||||
GRAPHIC_RESULTS_SCORE_LABELS,
|
GRAPHIC_RESULTS_SCORE_LABELS,
|
||||||
GRAPHIC_RESULTS_SUMMARY_TOP_EDGE,
|
GRAPHIC_RESULTS_SUMMARY_TOP_EDGE,
|
||||||
GRAPHIC_RESULTS_TOP_EDGE,
|
GRAPHIC_RESULTS_TOP_EDGE,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_ARROW_P1,
|
GRAPHIC_SELECT_COURSE_INFO_FRAME,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_ARROW_P2,
|
GRAPHIC_SELECT_COURSE_TOP_EDGE,
|
||||||
|
GRAPHIC_SELECT_COURSE_BACKGROUND,
|
||||||
|
GRAPHIC_SELECT_DIFFICULTY_ARROWS,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_BACKGROUND,
|
GRAPHIC_SELECT_DIFFICULTY_BACKGROUND,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_EASY_HEADER,
|
GRAPHIC_SELECT_DIFFICULTY_EASY_HEADER,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_EASY_PICTURE,
|
GRAPHIC_SELECT_DIFFICULTY_EASY_PICTURE,
|
||||||
@@ -77,6 +79,10 @@ enum ThemeElement {
|
|||||||
GRAPHIC_SELECT_DIFFICULTY_HARD_PICTURE,
|
GRAPHIC_SELECT_DIFFICULTY_HARD_PICTURE,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_MEDIUM_HEADER,
|
GRAPHIC_SELECT_DIFFICULTY_MEDIUM_HEADER,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_MEDIUM_PICTURE,
|
GRAPHIC_SELECT_DIFFICULTY_MEDIUM_PICTURE,
|
||||||
|
GRAPHIC_SELECT_DIFFICULTY_ONI_HEADER,
|
||||||
|
GRAPHIC_SELECT_DIFFICULTY_ONI_PICTURE,
|
||||||
|
GRAPHIC_SELECT_DIFFICULTY_ENDLESS_HEADER,
|
||||||
|
GRAPHIC_SELECT_DIFFICULTY_ENDLESS_PICTURE,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_OK,
|
GRAPHIC_SELECT_DIFFICULTY_OK,
|
||||||
GRAPHIC_SELECT_DIFFICULTY_TOP_EDGE,
|
GRAPHIC_SELECT_DIFFICULTY_TOP_EDGE,
|
||||||
GRAPHIC_SELECT_GAME_BACKGROUND,
|
GRAPHIC_SELECT_GAME_BACKGROUND,
|
||||||
@@ -89,6 +95,7 @@ enum ThemeElement {
|
|||||||
GRAPHIC_SELECT_GROUP_TOP_EDGE,
|
GRAPHIC_SELECT_GROUP_TOP_EDGE,
|
||||||
GRAPHIC_SELECT_MUSIC_BACKGROUND,
|
GRAPHIC_SELECT_MUSIC_BACKGROUND,
|
||||||
GRAPHIC_SELECT_MUSIC_DIFFICULTY_FRAME,
|
GRAPHIC_SELECT_MUSIC_DIFFICULTY_FRAME,
|
||||||
|
GRAPHIC_SELECT_MUSIC_DIFFICULTY_ICONS,
|
||||||
GRAPHIC_SELECT_MUSIC_INFO_FRAME,
|
GRAPHIC_SELECT_MUSIC_INFO_FRAME,
|
||||||
GRAPHIC_SELECT_MUSIC_METER_FRAME,
|
GRAPHIC_SELECT_MUSIC_METER_FRAME,
|
||||||
GRAPHIC_SELECT_MUSIC_OPTION_ICONS,
|
GRAPHIC_SELECT_MUSIC_OPTION_ICONS,
|
||||||
@@ -107,22 +114,22 @@ enum ThemeElement {
|
|||||||
GRAPHIC_SELECT_STYLE_TOP_EDGE,
|
GRAPHIC_SELECT_STYLE_TOP_EDGE,
|
||||||
GRAPHIC_SELECT_STYLE_EXPLANATION,
|
GRAPHIC_SELECT_STYLE_EXPLANATION,
|
||||||
GRAPHIC_SELECT_STYLE_ICONS,
|
GRAPHIC_SELECT_STYLE_ICONS,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_0,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_0,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_1,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_1,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_2,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_2,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_3,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_3,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_4,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_0_STYLE_4,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_5,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_1_STYLE_0,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_6,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_1_STYLE_1,
|
||||||
GRAPHIC_SELECT_STYLE_INFO_7,
|
GRAPHIC_SELECT_STYLE_INFO_GAME_1_STYLE_2,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_0,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_0,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_1,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_1,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_2,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_2,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_3,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_3,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_4,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_0_STYLE_4,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_5,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_1_STYLE_0,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_6,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_1_STYLE_1,
|
||||||
GRAPHIC_SELECT_STYLE_PREVIEW_7,
|
GRAPHIC_SELECT_STYLE_PREVIEW_GAME_1_STYLE_2,
|
||||||
GRAPHIC_SONG_OPTIONS_BACKGROUND,
|
GRAPHIC_SONG_OPTIONS_BACKGROUND,
|
||||||
GRAPHIC_SONG_OPTIONS_TOP_EDGE,
|
GRAPHIC_SONG_OPTIONS_TOP_EDGE,
|
||||||
GRAPHIC_STAGE_UNDERSCORE,
|
GRAPHIC_STAGE_UNDERSCORE,
|
||||||
@@ -149,18 +156,21 @@ enum ThemeElement {
|
|||||||
SOUND_OPTION_CHANGE_ROW,
|
SOUND_OPTION_CHANGE_ROW,
|
||||||
SOUND_RESULTS_FLY_OFF,
|
SOUND_RESULTS_FLY_OFF,
|
||||||
SOUND_RESULTS_SCORE_TICK,
|
SOUND_RESULTS_SCORE_TICK,
|
||||||
|
SOUND_RESULTS_EXTRA_STAGE,
|
||||||
SOUND_SELECT_DIFFICULTY_CHANGE,
|
SOUND_SELECT_DIFFICULTY_CHANGE,
|
||||||
SOUND_SELECT_GROUP_CHANGE,
|
SOUND_SELECT_GROUP_CHANGE,
|
||||||
SOUND_SELECT_MUSIC_SECTION_EXPAND,
|
SOUND_SELECT_MUSIC_SECTION_EXPAND,
|
||||||
SOUND_SELECT_MUSIC_CHANGE_MUSIC,
|
SOUND_SELECT_MUSIC_CHANGE_MUSIC,
|
||||||
SOUND_SELECT_MUSIC_CHANGE_SORT,
|
SOUND_SELECT_MUSIC_CHANGE_SORT,
|
||||||
SOUND_SELECT_MUSIC_CHANGE_NOTES,
|
SOUND_SELECT_MUSIC_CHANGE_NOTES,
|
||||||
|
SOUND_SELECT_MUSIC_WHEEL_LOCKED,
|
||||||
SOUND_SELECT_STYLE_CHANGE,
|
SOUND_SELECT_STYLE_CHANGE,
|
||||||
SOUND_TITLE_MENU_CHANGE,
|
SOUND_TITLE_MENU_CHANGE,
|
||||||
|
|
||||||
FONT_HEADER1,
|
FONT_HEADER1,
|
||||||
FONT_HEADER2,
|
FONT_HEADER2,
|
||||||
FONT_NORMAL,
|
FONT_NORMAL,
|
||||||
|
FONT_ITALIC,
|
||||||
FONT_COMBO_NUMBERS,
|
FONT_COMBO_NUMBERS,
|
||||||
FONT_METER,
|
FONT_METER,
|
||||||
FONT_SCORE_NUMBERS,
|
FONT_SCORE_NUMBERS,
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class Song
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Song();
|
Song();
|
||||||
|
~Song();
|
||||||
|
|
||||||
bool LoadFromSongDir( CString sDir ); // calls one of the loads below
|
bool LoadFromSongDir( CString sDir ); // calls one of the loads below
|
||||||
void Save() { SaveToSMDir(); SaveToCacheFile(); };
|
void Save() { SaveToSMDir(); SaveToCacheFile(); };
|
||||||
@@ -62,6 +63,7 @@ public:
|
|||||||
CString GetSongFileDir() {return m_sSongDir; };
|
CString GetSongFileDir() {return m_sSongDir; };
|
||||||
CString GetGroupName() {return m_sGroupName; };
|
CString GetGroupName() {return m_sGroupName; };
|
||||||
CString GetMusicPath() {return m_sMusicPath; };
|
CString GetMusicPath() {return m_sMusicPath; };
|
||||||
|
float GetMusicLengthSeconds() {return m_fMusicLength; };
|
||||||
void GetMusicSampleRange( float &fStartSec, float &fEndSec ) { fStartSec = m_fMusicSampleStartSeconds; fEndSec = m_fMusicSampleStartSeconds + m_fMusicSampleLengthSeconds; };
|
void GetMusicSampleRange( float &fStartSec, float &fEndSec ) { fStartSec = m_fMusicSampleStartSeconds; fEndSec = m_fMusicSampleStartSeconds + m_fMusicSampleLengthSeconds; };
|
||||||
CString GetBannerPath() {return m_sBannerPath; };
|
CString GetBannerPath() {return m_sBannerPath; };
|
||||||
CString GetBackgroundPath() {return m_sBackgroundPath; };
|
CString GetBackgroundPath() {return m_sBackgroundPath; };
|
||||||
@@ -105,7 +107,7 @@ public:
|
|||||||
int iTotalNumTimesPlayed = 0;
|
int iTotalNumTimesPlayed = 0;
|
||||||
for( int i=0; i<m_arrayNotes.GetSize(); i++ )
|
for( int i=0; i<m_arrayNotes.GetSize(); i++ )
|
||||||
{
|
{
|
||||||
iTotalNumTimesPlayed += m_arrayNotes[i].m_iNumTimesPlayed;
|
iTotalNumTimesPlayed += m_arrayNotes[i]->m_iNumTimesPlayed;
|
||||||
}
|
}
|
||||||
return iTotalNumTimesPlayed;
|
return iTotalNumTimesPlayed;
|
||||||
}
|
}
|
||||||
@@ -142,7 +144,7 @@ private:
|
|||||||
CArray<FreezeSegment, FreezeSegment&> m_FreezeSegments; // this must be sorted before gameplay
|
CArray<FreezeSegment, FreezeSegment&> m_FreezeSegments; // this must be sorted before gameplay
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CArray<Notes, Notes&> m_arrayNotes;
|
CArray<Notes*, Notes*> m_arrayNotes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user