Add two new noteskin metrics.

This properly resolves bug tracker issue 190.
This commit is contained in:
Jason Felds
2011-06-13 14:48:15 -04:00
parent bd9c58b37e
commit 7a16ba9c0f
5 changed files with 96 additions and 5 deletions
+5
View File
@@ -10,6 +10,11 @@ StepMania 5.0 Preview 2 | 20110???
2011/06/13 2011/06/13
---------- ----------
* [NoteDisplay] Add two new metrics.
* DrawRollHeadForTapsOnSameRow: bool, similar to DrawHoldHeadForTapsOnSameRow
* TapHoldRollOnRowMeansHold: bool, true means hold and false means roll
* No noteskins should require updating, as these were placed in common/common
for ease of use. [Wolfman2000]
* [LifeMeterBattery] Added DangerThreshold metric. [AJ] * [LifeMeterBattery] Added DangerThreshold metric. [AJ]
* [LifeMeterBattery] Added some important metrics. [AJ] * [LifeMeterBattery] Added some important metrics. [AJ]
* MinScoreToKeepLife='TapNoteScore_*' - any score below this = loss of life. * MinScoreToKeepLife='TapNoteScore_*' - any score below this = loss of life.
+2
View File
@@ -1,5 +1,7 @@
[NoteDisplay] [NoteDisplay]
DrawHoldHeadForTapsOnSameRow=1 DrawHoldHeadForTapsOnSameRow=1
DrawRollHeadForTapsOnSameRow=1
TapHoldRollOnRowMeansHold=1
AnimationIsBeatBased=1 AnimationIsBeatBased=1
TapNoteAnimationLength=1 TapNoteAnimationLength=1
TapMineAnimationLength=1 TapMineAnimationLength=1
+46 -1
View File
@@ -46,6 +46,8 @@ static const NoteType MAX_DISPLAY_NOTE_TYPE = (NoteType)7;
struct NoteMetricCache_t struct NoteMetricCache_t
{ {
bool m_bDrawHoldHeadForTapsOnSameRow; bool m_bDrawHoldHeadForTapsOnSameRow;
bool m_bDrawRollHeadForTapsOnSameRow;
bool m_bTapHoldRollOnRowMeansHold;
float m_fAnimationLength[NUM_NotePart]; float m_fAnimationLength[NUM_NotePart];
bool m_bAnimationIsVivid[NUM_NotePart]; bool m_bAnimationIsVivid[NUM_NotePart];
RageVector2 m_fAdditionTextureCoordOffset[NUM_NotePart]; RageVector2 m_fAdditionTextureCoordOffset[NUM_NotePart];
@@ -69,6 +71,8 @@ struct NoteMetricCache_t
void NoteMetricCache_t::Load( const RString &sButton ) void NoteMetricCache_t::Load( const RString &sButton )
{ {
m_bDrawHoldHeadForTapsOnSameRow = NOTESKIN->GetMetricB(sButton,"DrawHoldHeadForTapsOnSameRow"); m_bDrawHoldHeadForTapsOnSameRow = NOTESKIN->GetMetricB(sButton,"DrawHoldHeadForTapsOnSameRow");
m_bDrawRollHeadForTapsOnSameRow = NOTESKIN->GetMetricB(sButton,"DrawRollHeadForTapsOnSameRow");
m_bTapHoldRollOnRowMeansHold = NOTESKIN->GetMetricB(sButton,"TapHoldRollOnRowMeansHold");
FOREACH_NotePart( p ) FOREACH_NotePart( p )
{ {
const RString &s = NotePartToString(p); const RString &s = NotePartToString(p);
@@ -271,6 +275,11 @@ bool NoteDisplay::DrawHoldHeadForTapsOnSameRow() const
return cache->m_bDrawHoldHeadForTapsOnSameRow; return cache->m_bDrawHoldHeadForTapsOnSameRow;
} }
bool NoteDisplay::DrawRollHeadForTapsOnSameRow() const
{
return cache->m_bDrawRollHeadForTapsOnSameRow;
}
void NoteDisplay::Update( float fDeltaTime ) void NoteDisplay::Update( float fDeltaTime )
{ {
/* This function is static: it's called once per game loop, not once per /* This function is static: it's called once per game loop, not once per
@@ -718,7 +727,13 @@ void NoteDisplay::DrawActor( const TapNote& tn, Actor* pActor, NotePart part, in
} }
} }
void NoteDisplay::DrawTap( const TapNote& tn, int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition, float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar ) void NoteDisplay::DrawTap(const TapNote& tn, int iCol, float fBeat,
bool bOnSameRowAsHoldStart, bool bOnSameRowAsRollStart,
bool bIsAddition, float fPercentFadeToFail,
float fReverseOffsetPixels,
float fDrawDistanceAfterTargetsPixels,
float fDrawDistanceBeforeTargetsPixels,
float fFadeInPercentOfDrawFar)
{ {
Actor* pActor = NULL; Actor* pActor = NULL;
NotePart part = NotePart_Tap; NotePart part = NotePart_Tap;
@@ -738,10 +753,40 @@ void NoteDisplay::DrawTap( const TapNote& tn, int iCol, float fBeat, bool bOnSam
pActor = GetTapActor( m_TapFake, NotePart_Fake, fBeat ); pActor = GetTapActor( m_TapFake, NotePart_Fake, fBeat );
part = NotePart_Fake; part = NotePart_Fake;
} }
// TODO: Simplify all of the below.
else if (bOnSameRowAsHoldStart && bOnSameRowAsRollStart)
{
if (cache->m_bDrawHoldHeadForTapsOnSameRow && cache->m_bDrawRollHeadForTapsOnSameRow)
{
if (cache->m_bTapHoldRollOnRowMeansHold) // another new metric?
{
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false );
}
else
{
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, true, false );
}
}
else if (cache->m_bDrawHoldHeadForTapsOnSameRow)
{
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false );
}
else if (cache->m_bDrawRollHeadForTapsOnSameRow)
{
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, true, false );
}
}
else if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow ) else if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow )
{ {
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false ); pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false );
} }
else if( bOnSameRowAsRollStart && cache->m_bDrawRollHeadForTapsOnSameRow )
{
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, true, false );
}
else else
{ {
pActor = GetTapActor( m_TapNote, NotePart_Tap, fBeat ); pActor = GetTapActor( m_TapNote, NotePart_Tap, fBeat );
+22 -2
View File
@@ -80,14 +80,34 @@ public:
static void Update( float fDeltaTime ); static void Update( float fDeltaTime );
void DrawTap( const TapNote& tn, int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition, /**
float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar ); * @brief Draw the TapNote onto the NoteField.
* @param tn the TapNote in question.
* @param iCol the column.
* @param float fBeat the beat to draw them on.
* @param bOnSameRowAsHoldStart a flag to see if a hold is on the same beat.
* @param bOnSameRowAsRollStart a flag to see if a roll is on the same beat.
* @param bIsAddition a flag to see if this note was added via mods.
* @param fPercentFadeToFail at what point do the notes fade on failure?
* @param fReverseOffsetPixels How are the notes adjusted on Reverse?
* @param fDrawDistanceAfterTargetsPixels how much to draw after the receptors.
* @param fDrawDistanceBeforeTargetsPixels how much ot draw before the receptors.
* @param fFadeInPercentOfDrawFar when to start fading in. */
void DrawTap(const TapNote& tn, int iCol, float fBeat,
bool bOnSameRowAsHoldStart, bool bOnSameRowAsRollBeat,
bool bIsAddition, float fPercentFadeToFail,
float fReverseOffsetPixels,
float fDrawDistanceAfterTargetsPixels,
float fDrawDistanceBeforeTargetsPixels,
float fFadeInPercentOfDrawFar );
void DrawHold( const TapNote& tn, int iCol, int iRow, bool bIsBeingHeld, const HoldNoteResult &Result, void DrawHold( const TapNote& tn, int iCol, int iRow, bool bIsBeingHeld, const HoldNoteResult &Result,
bool bIsAddition, float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, bool bIsAddition, float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels,
float fDrawDistanceBeforeTargetsPixels2, float fFadeInPercentOfDrawFar ); float fDrawDistanceBeforeTargetsPixels2, float fFadeInPercentOfDrawFar );
bool DrawHoldHeadForTapsOnSameRow() const; bool DrawHoldHeadForTapsOnSameRow() const;
bool DrawRollHeadForTapsOnSameRow() const;
private: private:
void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLength, bool bVivid ); void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLength, bool bVivid );
Actor *GetTapActor( NoteColorActor &nca, NotePart part, float fNoteBeat ); Actor *GetTapActor( NoteColorActor &nca, NotePart part, float fNoteBeat );
+21 -2
View File
@@ -1260,7 +1260,9 @@ void NoteField::DrawPrimitives()
{ {
for( int c2=0; c2<m_pNoteData->GetNumTracks(); c2++ ) for( int c2=0; c2<m_pNoteData->GetNumTracks(); c2++ )
{ {
if( m_pNoteData->GetTapNote(c2, q).type == TapNote::hold_head) const TapNote &tmp = m_pNoteData->GetTapNote(c2, q);
if(tmp.type == TapNote::hold_head &&
tmp.subType == TapNote::hold_head_hold)
{ {
bHoldNoteBeginsOnThisBeat = true; bHoldNoteBeginsOnThisBeat = true;
break; break;
@@ -1268,6 +1270,22 @@ void NoteField::DrawPrimitives()
} }
} }
// do the same for a roll.
bool bRollNoteBeginsOnThisBeat = false;
if (m_pCurDisplay->display[c].DrawRollHeadForTapsOnSameRow() )
{
for( int c2=0; c2<m_pNoteData->GetNumTracks(); c2++ )
{
const TapNote &tmp = m_pNoteData->GetTapNote(c2, q);
if(tmp.type == TapNote::hold_head &&
tmp.subType == TapNote::hold_head_roll)
{
bRollNoteBeginsOnThisBeat = true;
break;
}
}
}
bool bIsInSelectionRange = false; bool bIsInSelectionRange = false;
if( m_iBeginMarker!=-1 && m_iEndMarker!=-1 ) if( m_iBeginMarker!=-1 && m_iEndMarker!=-1 )
bIsInSelectionRange = m_iBeginMarker<=q && q<m_iEndMarker; bIsInSelectionRange = m_iBeginMarker<=q && q<m_iEndMarker;
@@ -1276,7 +1294,8 @@ void NoteField::DrawPrimitives()
bool bIsHopoPossible = (tn.bHopoPossible); bool bIsHopoPossible = (tn.bHopoPossible);
bool bUseAdditionColoring = bIsAddition || bIsHopoPossible; bool bUseAdditionColoring = bIsAddition || bIsHopoPossible;
NoteDisplayCols *displayCols = tn.pn == PLAYER_INVALID ? m_pCurDisplay : m_pDisplays[tn.pn]; NoteDisplayCols *displayCols = tn.pn == PLAYER_INVALID ? m_pCurDisplay : m_pDisplays[tn.pn];
displayCols->display[c].DrawTap( tn, c, NoteRowToVisibleBeat(m_pPlayerState, q), bHoldNoteBeginsOnThisBeat, displayCols->display[c].DrawTap(tn, c, NoteRowToVisibleBeat(m_pPlayerState, q),
bHoldNoteBeginsOnThisBeat, bRollNoteBeginsOnThisBeat,
bUseAdditionColoring, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail, bUseAdditionColoring, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail,
m_fYReverseOffsetPixels, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels, m_fYReverseOffsetPixels, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels,
FADE_BEFORE_TARGETS_PERCENT ); FADE_BEFORE_TARGETS_PERCENT );