Pass the initial tap note score to ChangeLife for hold notes; it's needed to
handle Oni penalties correctly. (not actually doing that yet)
This commit is contained in:
@@ -28,8 +28,12 @@ public:
|
|||||||
virtual void Update( float fDeltaTime ) { ActorFrame::Update(fDeltaTime); };
|
virtual void Update( float fDeltaTime ) { ActorFrame::Update(fDeltaTime); };
|
||||||
|
|
||||||
virtual void SongEnded() {};
|
virtual void SongEnded() {};
|
||||||
|
/* Change life after receiving a tap note grade. This *is* called for
|
||||||
|
* the head of hold notes. */
|
||||||
virtual void ChangeLife( TapNoteScore score ) = 0;
|
virtual void ChangeLife( TapNoteScore score ) = 0;
|
||||||
virtual void ChangeLife( HoldNoteScore score ) = 0;
|
/* Change life after receiving a hold note grade. tscore is the score
|
||||||
|
* received for the initial tap note. */
|
||||||
|
virtual void ChangeLife( HoldNoteScore score, TapNoteScore tscore ) = 0;
|
||||||
virtual void OnDancePointsChange() = 0; // look in GAMESTATE and update the display
|
virtual void OnDancePointsChange() = 0; // look in GAMESTATE and update the display
|
||||||
virtual bool IsInDanger() = 0;
|
virtual bool IsInDanger() = 0;
|
||||||
virtual bool IsHot() = 0;
|
virtual bool IsHot() = 0;
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
|
|||||||
m_fLifeVelocity += fDeltaLife;
|
m_fLifeVelocity += fDeltaLife;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LifeMeterBar::ChangeLife( HoldNoteScore score )
|
void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public:
|
|||||||
virtual void DrawPrimitives();
|
virtual void DrawPrimitives();
|
||||||
|
|
||||||
virtual void ChangeLife( TapNoteScore score );
|
virtual void ChangeLife( TapNoteScore score );
|
||||||
virtual void ChangeLife( HoldNoteScore score );
|
virtual void ChangeLife( HoldNoteScore score, TapNoteScore tscore );
|
||||||
virtual void AfterLifeChanged();
|
virtual void AfterLifeChanged();
|
||||||
virtual void OnDancePointsChange() {}; // this life meter doesn't care
|
virtual void OnDancePointsChange() {}; // this life meter doesn't care
|
||||||
virtual bool IsInDanger();
|
virtual bool IsInDanger();
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score )
|
|||||||
m_bFailedEarlier = true;
|
m_bFailedEarlier = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LifeMeterBattery::ChangeLife( HoldNoteScore score )
|
void LifeMeterBattery::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
|
||||||
{
|
{
|
||||||
switch( score )
|
switch( score )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public:
|
|||||||
|
|
||||||
virtual void SongEnded();
|
virtual void SongEnded();
|
||||||
virtual void ChangeLife( TapNoteScore score );
|
virtual void ChangeLife( TapNoteScore score );
|
||||||
virtual void ChangeLife( HoldNoteScore score );
|
virtual void ChangeLife( HoldNoteScore score, TapNoteScore tscore );
|
||||||
virtual void OnDancePointsChange(); // look in GAMESTATE and update the display
|
virtual void OnDancePointsChange(); // look in GAMESTATE and update the display
|
||||||
virtual bool IsInDanger();
|
virtual bool IsInDanger();
|
||||||
virtual bool IsHot();
|
virtual bool IsHot();
|
||||||
|
|||||||
+15
-10
@@ -212,12 +212,13 @@ void Player::Update( float fDeltaTime )
|
|||||||
const StyleInput StyleI( m_PlayerNumber, hn.m_iTrack );
|
const StyleInput StyleI( m_PlayerNumber, hn.m_iTrack );
|
||||||
const GameInput GameI = GAMESTATE->GetCurrentStyleDef()->StyleInputToGameInput( StyleI );
|
const GameInput GameI = GAMESTATE->GetCurrentStyleDef()->StyleInputToGameInput( StyleI );
|
||||||
|
|
||||||
if( hn.m_fStartBeat < fSongBeat && fSongBeat < hn.m_fEndBeat ) // if the song beat is in the range of this hold
|
|
||||||
{
|
|
||||||
const bool bIsHoldingButton = INPUTMAPPER->IsButtonDown( GameI ) || PREFSMAN->m_bAutoPlay || GAMESTATE->m_bDemonstration;
|
|
||||||
// if they got a bad score or haven't stepped on the corresponding tap yet
|
// if they got a bad score or haven't stepped on the corresponding tap yet
|
||||||
const TapNoteScore tns = m_TapNoteScores[hn.m_iTrack][iHoldStartIndex];
|
const TapNoteScore tns = m_TapNoteScores[hn.m_iTrack][iHoldStartIndex];
|
||||||
|
|
||||||
|
if( hn.m_fStartBeat < fSongBeat && fSongBeat < hn.m_fEndBeat ) // if the song beat is in the range of this hold
|
||||||
|
{
|
||||||
const bool bSteppedOnTapNote = tns != TNS_NONE && tns != TNS_MISS; // did they step on the start of this hold?
|
const bool bSteppedOnTapNote = tns != TNS_NONE && tns != TNS_MISS; // did they step on the start of this hold?
|
||||||
|
const bool bIsHoldingButton = INPUTMAPPER->IsButtonDown( GameI ) || PREFSMAN->m_bAutoPlay || GAMESTATE->m_bDemonstration;
|
||||||
|
|
||||||
m_NoteField.m_bIsHoldingHoldNote[i] = bIsHoldingButton && bSteppedOnTapNote; // set host flag so NoteField can do intelligent drawing
|
m_NoteField.m_bIsHoldingHoldNote[i] = bIsHoldingButton && bSteppedOnTapNote; // set host flag so NoteField can do intelligent drawing
|
||||||
|
|
||||||
@@ -250,7 +251,7 @@ void Player::Update( float fDeltaTime )
|
|||||||
if( 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 = HNS_NG;
|
hns = HNS_NG;
|
||||||
HandleNoteScore( hns );
|
HandleNoteScore( hns, tns );
|
||||||
m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( HNS_NG );
|
m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( HNS_NG );
|
||||||
m_NoteField.m_HoldNoteScores[i] = HNS_NG; // update the NoteField display
|
m_NoteField.m_HoldNoteScores[i] = HNS_NG; // update the NoteField display
|
||||||
}
|
}
|
||||||
@@ -261,7 +262,7 @@ void Player::Update( float fDeltaTime )
|
|||||||
// At this point 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
|
||||||
fLife = 1;
|
fLife = 1;
|
||||||
hns = HNS_OK;
|
hns = HNS_OK;
|
||||||
HandleNoteScore( hns );
|
HandleNoteScore( hns, tns );
|
||||||
m_GhostArrowRow.TapNote( StyleI.col, TNS_PERFECT, true ); // bright ghost flash
|
m_GhostArrowRow.TapNote( StyleI.col, TNS_PERFECT, true ); // bright ghost flash
|
||||||
m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( HNS_OK );
|
m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( HNS_OK );
|
||||||
m_NoteField.m_fHoldNoteLife[i] = fLife; // update the NoteField display
|
m_NoteField.m_fHoldNoteLife[i] = fLife; // update the NoteField display
|
||||||
@@ -665,7 +666,7 @@ void Player::HandleNoteScore( TapNoteScore score, int iNumTapsInRow )
|
|||||||
m_pScore->SetScore( fScore );
|
m_pScore->SetScore( fScore );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::HandleNoteScore( HoldNoteScore score )
|
void Player::HandleNoteScore( HoldNoteScore score, TapNoteScore TapNoteScore )
|
||||||
{
|
{
|
||||||
// don't accumulate points if AutoPlay is on.
|
// don't accumulate points if AutoPlay is on.
|
||||||
if( PREFSMAN->m_bAutoPlay && !GAMESTATE->m_bDemonstration )
|
if( PREFSMAN->m_bAutoPlay && !GAMESTATE->m_bDemonstration )
|
||||||
@@ -675,10 +676,14 @@ void Player::HandleNoteScore( HoldNoteScore score )
|
|||||||
GAMESTATE->m_iActualDancePoints[m_PlayerNumber] += HoldNoteScoreToDancePoints( score );
|
GAMESTATE->m_iActualDancePoints[m_PlayerNumber] += HoldNoteScoreToDancePoints( score );
|
||||||
GAMESTATE->m_HoldNoteScores[m_PlayerNumber][score] ++;
|
GAMESTATE->m_HoldNoteScores[m_PlayerNumber][score] ++;
|
||||||
|
|
||||||
if( m_pLifeMeter )
|
if( m_pLifeMeter ) {
|
||||||
m_pLifeMeter->ChangeLife( score );
|
if( score == HNS_NG ) {
|
||||||
if( m_pLifeMeter )
|
m_pLifeMeter->ChangeLife( score, TapNoteScore );
|
||||||
m_pLifeMeter->OnDancePointsChange(); // refresh Oni life meter
|
|
||||||
|
// refresh Oni life meter
|
||||||
|
m_pLifeMeter->OnDancePointsChange();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float Player::GetMaxBeatDifference()
|
float Player::GetMaxBeatDifference()
|
||||||
|
|||||||
Reference in New Issue
Block a user