Files
itgmania212121/stepmania/src/ScreenHowToPlay.cpp
T

212 lines
6.6 KiB
C++
Raw Normal View History

2003-04-05 03:49:03 +00:00
#include "global.h"
#include "stdlib.h"
2003-04-05 03:49:03 +00:00
/*
-----------------------------------------------------------------------------
Class: ScreenHowToPlay
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenHowToPlay.h"
#include "ThemeManager.h"
#include "GameState.h"
#include "GameDef.h"
#include "RageLog.h"
#include "SongManager.h"
#include "NoteFieldPositioning.h"
#include "GameManager.h"
2003-04-05 03:49:03 +00:00
#define SONG_BPM THEME->GetMetricF("ScreenHowToPlay","SongBPM")
#define SECONDS_TO_SHOW THEME->GetMetricF("ScreenHowToPlay","SecondsToShow")
2003-04-05 03:49:03 +00:00
ScreenHowToPlay::ScreenHowToPlay() : ScreenAttract("ScreenHowToPlay")
{
switch(GAMESTATE->m_CurGame) // which style should we use to demonstrate?
{
case GAME_DANCE: GAMESTATE->m_CurStyle = STYLE_DANCE_SINGLE; break;
case GAME_PUMP: GAMESTATE->m_CurStyle = STYLE_PUMP_SINGLE; break;
case GAME_EZ2: GAMESTATE->m_CurStyle = STYLE_EZ2_SINGLE; break;
case GAME_PARA: GAMESTATE->m_CurStyle = STYLE_PARA_SINGLE; break;
case GAME_DS3DDX: GAMESTATE->m_CurStyle = STYLE_DS3DDX_SINGLE; break;
case GAME_BM: GAMESTATE->m_CurStyle = STYLE_BM_SINGLE; break;
default: ASSERT(0); // we should cover all gametypes....
}
2003-04-05 03:49:03 +00:00
2003-08-07 06:36:34 +00:00
StepsType nt = GAMESTATE->GetCurrentStyleDef()->m_StepsType;
int iNumOfTracks = GAMEMAN->NotesTypeToNumTracks( nt );
ASSERT(iNumOfTracks > 0); // crazy to have less than 1 track....
2003-04-05 03:49:03 +00:00
m_LifeMeter.Load( PLAYER_1 );
m_LifeMeter.SetXY( 480, 40 );
this->AddChild( &m_LifeMeter );
// Display character
2003-07-31 22:49:22 +00:00
if( GAMESTATE->m_pCharacters.size() )
{
2003-07-31 22:49:22 +00:00
int iRnd;
iRnd = rand() % ( GAMESTATE->m_pCharacters.size() );
if( iRnd != 0 )
{
m_mCharacter.LoadMilkshapeAscii( GAMESTATE->m_pCharacters[iRnd]->GetModelPath() );
m_mCharacter.LoadMilkshapeAsciiBones("howtoplay", GAMESTATE->m_pCharacters[iRnd]->GetHowToPlayAnimationPath() );
m_mCharacter.SetZoom(20);
m_mCharacter.Command("X,150;Y,300;Zoom,15;RotationY,180;sleep,4.7;linear,1.0;RotationY,360;Zoom,20;X,100;Y,425");
this->AddChild(&m_mCharacter);
}
}
//
2003-04-05 03:49:03 +00:00
NoteData* pND = new NoteData;
pND->SetNumTracks( iNumOfTracks );
/* Old notes.. Until our HowToPlay animation changes, Steps changed.
2003-04-05 03:49:03 +00:00
pND->SetTapNote( 0, ROWS_PER_BEAT*12, TAP_TAP );
pND->SetTapNote( 1, ROWS_PER_BEAT*16, TAP_TAP );
pND->SetTapNote( 2, ROWS_PER_BEAT*20, TAP_TAP );
pND->SetTapNote( 0, ROWS_PER_BEAT*24, TAP_TAP );
pND->SetTapNote( 3, ROWS_PER_BEAT*24, TAP_TAP );
pND->SetTapNote( 0, ROWS_PER_BEAT*28, TAP_TAP );
2003-04-05 21:18:31 +00:00
pND->AddHoldNote( HoldNote(2, 32, 35) );
pND->AddHoldNote( HoldNote(0, 36, 39) );
pND->AddHoldNote( HoldNote(3, 36, 39) );
pND->AddHoldNote( HoldNote(2, 40, 43) );
pND->SetTapNote( 0, ROWS_PER_BEAT*44, TAP_TAP );
pND->SetTapNote( 1, (int)(ROWS_PER_BEAT*44.5f), TAP_TAP );
pND->SetTapNote( 2, ROWS_PER_BEAT*45, TAP_TAP );
pND->SetTapNote( 3, (int)(ROWS_PER_BEAT*45.5f), TAP_TAP );
pND->SetTapNote( 0, ROWS_PER_BEAT*46, TAP_TAP );
pND->SetTapNote( 2, ROWS_PER_BEAT*46, TAP_TAP );
*/
pND->SetTapNote( 1, ROWS_PER_BEAT*16, TAP_TAP );
pND->SetTapNote( 2, ROWS_PER_BEAT*18, TAP_TAP );
pND->SetTapNote( 0, ROWS_PER_BEAT*20, TAP_TAP );
pND->SetTapNote( 0, ROWS_PER_BEAT*22, TAP_TAP );
pND->SetTapNote( 3, ROWS_PER_BEAT*22, TAP_TAP );
2003-04-05 03:49:03 +00:00
m_pSong = new Song;
float fSongBPM = SONG_BPM; // need this on a separate line, otherwise VC6 release build screws up and returns 0
m_pSong->AddBPMSegment( BPMSegment(0.0,fSongBPM) );
/* Same as above
m_pSong->AddStopSegment( StopSegment(12,2) );
2003-04-05 03:49:03 +00:00
m_pSong->AddStopSegment( StopSegment(16,2) );
m_pSong->AddStopSegment( StopSegment(20,2) );
m_pSong->AddStopSegment( StopSegment(24,2) );
m_pSong->AddStopSegment( StopSegment(28,2) );
*/
m_pSong->AddStopSegment( StopSegment(16,2) );
m_pSong->AddStopSegment( StopSegment(18,2) );
m_pSong->AddStopSegment( StopSegment(20,2) );
m_pSong->AddStopSegment( StopSegment(22,2) );
2003-04-05 03:49:03 +00:00
GAMESTATE->m_pCurSong = m_pSong;
GAMESTATE->m_bPastHereWeGo = true;
GAMESTATE->m_PlayerController[PLAYER_1] = PC_AUTOPLAY;
2003-06-30 18:08:27 +00:00
m_Player.Load( PLAYER_1, pND, &m_LifeMeter, NULL, NULL, NULL, NULL, NULL );
/* We need a nice way to fill up the LifeMeter half-way. -- Miryo */
2003-04-05 03:49:03 +00:00
m_Player.SetX( 480 );
2003-05-19 08:47:10 +00:00
m_Player.DontShowJudgement();
2003-04-05 03:49:03 +00:00
this->AddChild( &m_Player );
delete pND;
m_fFakeSecondsIntoSong = 0;
this->ClearMessageQueue();
this->PostScreenMessage( SM_BeginFadingOut, SECONDS_TO_SHOW );
2003-04-05 03:49:03 +00:00
}
ScreenHowToPlay::~ScreenHowToPlay()
{
delete m_pSong;
}
void ScreenHowToPlay::Update( float fDelta )
{
2003-05-28 03:33:46 +00:00
if(GAMESTATE->m_pCurSong != NULL)
{
GAMESTATE->UpdateSongPosition( m_fFakeSecondsIntoSong );
m_fFakeSecondsIntoSong += fDelta;
if( GAMESTATE->m_bFreeze )
{
switch(int(GAMESTATE->m_fSongBeat))
{
case 16: m_mCharacter.SetFrame(30); break;
case 18: m_mCharacter.SetFrame(85); break;
case 20: m_mCharacter.SetFrame(150); break;
case 22: m_mCharacter.SetFrame(270); break;
};
}
else
{
// HowToPlay animations.. This will be retimed soon to be a reasonable speed. This was just a quick'n'dirty way of showing this screen correctly.
// Until we get a better HowToPlay animation done, it has to be this way..
if( (GAMESTATE->m_fSongBeat >= 15.0f && GAMESTATE->m_fSongBeat <= 15.2f) )
{
m_mCharacter.SetFrame(1);
}
if( (GAMESTATE->m_fSongBeat >= 17.0f && GAMESTATE->m_fSongBeat <= 17.2f) )
{
m_mCharacter.SetFrame(55);
}
if( (GAMESTATE->m_fSongBeat >= 19.0f && GAMESTATE->m_fSongBeat <= 19.2f) )
{
m_mCharacter.SetFrame(120);
}
if( (GAMESTATE->m_fSongBeat >= 21.0f && GAMESTATE->m_fSongBeat <= 21.2f) )
{
m_mCharacter.SetFrame(240);
}
// ----------------------------------------------------------------------- */
if( (GAMESTATE->m_fSongBeat >= 0.0f && GAMESTATE->m_fSongBeat <= 15.0f) ||
(GAMESTATE->m_fSongBeat >= 16.8f && GAMESTATE->m_fSongBeat <= 17.0f) ||
(GAMESTATE->m_fSongBeat >= 18.8f && GAMESTATE->m_fSongBeat <= 19.0f) ||
(GAMESTATE->m_fSongBeat >= 20.8f && GAMESTATE->m_fSongBeat <= 21.0f) ||
(GAMESTATE->m_fSongBeat >= 22.8f) )
{
if( (m_mCharacter.GetCurFrame() >=243) || (m_mCharacter.GetCurFrame() <=184) )
m_mCharacter.SetFrame(184);
//Loop for HowToPlay static movement is 184~243
};
2003-07-31 23:17:29 +00:00
m_mCharacter.Update( (0+(fDelta*1.08f)) );
//m_mCharacter.Draw();
};
2003-05-28 03:33:46 +00:00
}
2003-04-05 03:49:03 +00:00
ScreenAttract::Update( fDelta );
}
void ScreenHowToPlay::HandleScreenMessage( const ScreenMessage SM )
{
switch( SM )
{
case SM_BeginFadingOut:
2003-05-28 03:33:46 +00:00
/* We can't do this in ScreenHowToPlay::~ScreenHowToPlay, since that happens
2003-07-31 22:49:22 +00:00
* after the ctor of the next screen; we don't want to mess with its state. */
GAMESTATE->m_pCurSong = NULL;
break;
}
ScreenAttract::HandleScreenMessage( SM );
}