apply effect history to frame width
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
#include "PlayerState.h"
|
#include "PlayerState.h"
|
||||||
#include "GameState.h"
|
#include "GameState.h"
|
||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
|
#include "ThemeMetric.h"
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
const float ARROW_SPACING = ARROW_SIZE;// + 2;
|
const float ARROW_SPACING = ARROW_SIZE;// + 2;
|
||||||
@@ -596,6 +597,38 @@ float ArrowEffects::GetZoom( const PlayerState* pPlayerState )
|
|||||||
return fZoom;
|
return fZoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ThemeMetric<float> FRAME_WIDTH_EFFECTS_PIXELS_PER_SECOND( "ArrowEffects", "FrameWidthEffectsPixelsPerSecond" );
|
||||||
|
static ThemeMetric<float> FRAME_WIDTH_EFFECTS_MIN_MULTIPLIER( "ArrowEffects", "FrameWidthEffectsMinMultiplier" );
|
||||||
|
static ThemeMetric<float> FRAME_WIDTH_EFFECTS_MAX_MULTIPLIER( "ArrowEffects", "FrameWidthEffectsMaxMultiplier" );
|
||||||
|
static ThemeMetric<bool> FRAME_WIDTH_LOCK_EFFECTS_TO_OVERLAPPING( "ArrowEffects", "FrameWidthLockEffectsToOverlapping" );
|
||||||
|
static ThemeMetric<float> FRAME_WIDTH_LOCK_EFFECTS_TWEEN_PIXELS( "ArrowEffects", "FrameWidthLockEffectsTweenPixels" );
|
||||||
|
|
||||||
|
float ArrowEffects::GetFrameWidthScale( const PlayerState* pPlayerState, float fYOffset, float fOverlappedTime )
|
||||||
|
{
|
||||||
|
float fFrameWidthMultiplier = 1.0f;
|
||||||
|
|
||||||
|
float fPixelsPerSecond = FRAME_WIDTH_EFFECTS_PIXELS_PER_SECOND;
|
||||||
|
float fSecond = fYOffset / fPixelsPerSecond;
|
||||||
|
float fWidthEffect = pPlayerState->m_EffectHistory.GetSample( fSecond );
|
||||||
|
if( fWidthEffect != 0 && FRAME_WIDTH_LOCK_EFFECTS_TO_OVERLAPPING )
|
||||||
|
{
|
||||||
|
/* Don't display effect data that happened before this hold overlapped the top. */
|
||||||
|
float fFromEndOfOverlapped = fOverlappedTime - fSecond;
|
||||||
|
float fTrailingPixels = FRAME_WIDTH_LOCK_EFFECTS_TWEEN_PIXELS;
|
||||||
|
float fTrailingSeconds = fTrailingPixels / fPixelsPerSecond;
|
||||||
|
float fScaleEffect = SCALE( fFromEndOfOverlapped, 0.0f, fTrailingSeconds, 0.0f, 1.0f );
|
||||||
|
CLAMP( fScaleEffect, 0.0f, 1.0f );
|
||||||
|
fWidthEffect *= fScaleEffect;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( fWidthEffect > 0 )
|
||||||
|
fFrameWidthMultiplier *= SCALE( fWidthEffect, 0.0f, 1.0f, 1.0f, FRAME_WIDTH_EFFECTS_MAX_MULTIPLIER );
|
||||||
|
else if( fWidthEffect < 0 )
|
||||||
|
fFrameWidthMultiplier *= SCALE( fWidthEffect, 0.0f, -1.0f, 1.0f, FRAME_WIDTH_EFFECTS_MIN_MULTIPLIER );
|
||||||
|
|
||||||
|
return fFrameWidthMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (c) 2001-2004 Chris Danford
|
* (c) 2001-2004 Chris Danford
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ public:
|
|||||||
|
|
||||||
// This is the zoom of the individual tracks, not of the whole Player.
|
// This is the zoom of the individual tracks, not of the whole Player.
|
||||||
static float GetZoom( const PlayerState* pPlayerState );
|
static float GetZoom( const PlayerState* pPlayerState );
|
||||||
|
|
||||||
|
static float GetFrameWidthScale( const PlayerState* pPlayerState, float fYOffset, float fOverlappedTime );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -373,6 +373,7 @@ struct StripBuffer
|
|||||||
|
|
||||||
void NoteDisplay::DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, float fPercentFadeToFail, float fColorScale, bool bGlow,
|
void NoteDisplay::DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, float fPercentFadeToFail, float fColorScale, bool bGlow,
|
||||||
float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar,
|
float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar,
|
||||||
|
float fOverlappedTime,
|
||||||
float fYTop, float fYBottom,
|
float fYTop, float fYBottom,
|
||||||
float fYStartPos, float fYEndPos,
|
float fYStartPos, float fYEndPos,
|
||||||
bool bWrapping, bool bAnchorToTop, bool bFlipTextureVertically )
|
bool bWrapping, bool bAnchorToTop, bool bFlipTextureVertically )
|
||||||
@@ -442,10 +443,13 @@ void NoteDisplay::DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, fl
|
|||||||
|
|
||||||
const float fYOffset = ArrowEffects::GetYOffsetFromYPos( m_pPlayerState, iCol, fY, m_fYReverseOffsetPixels );
|
const float fYOffset = ArrowEffects::GetYOffsetFromYPos( m_pPlayerState, iCol, fY, m_fYReverseOffsetPixels );
|
||||||
const float fZ = ArrowEffects::GetZPos( m_pPlayerState, iCol, fYOffset );
|
const float fZ = ArrowEffects::GetZPos( m_pPlayerState, iCol, fYOffset );
|
||||||
|
const float fFrameWidthScale = ArrowEffects::GetFrameWidthScale( m_pPlayerState, fYOffset, fOverlappedTime );
|
||||||
|
const float fScaledFrameWidth = fFrameWidth * fFrameWidthScale;
|
||||||
|
|
||||||
const float fX = ArrowEffects::GetXPos( m_pPlayerState, iCol, fYOffset );
|
const float fX = ArrowEffects::GetXPos( m_pPlayerState, iCol, fYOffset );
|
||||||
const float fXLeft = fX - fFrameWidth/2;
|
const float fXLeft = fX - fScaledFrameWidth/2;
|
||||||
const float fXCenter = fX;
|
const float fXCenter = fX;
|
||||||
const float fXRight = fX + fFrameWidth/2;
|
const float fXRight = fX + fScaledFrameWidth/2;
|
||||||
const float fDistFromTop = fY - fYTop;
|
const float fDistFromTop = fY - fYTop;
|
||||||
float fTexCoordTop = SCALE( fDistFromTop, 0, fFrameHeight, rect.top, rect.bottom );
|
float fTexCoordTop = SCALE( fDistFromTop, 0, fFrameHeight, rect.top, rect.bottom );
|
||||||
fTexCoordTop += fAddToTexCoord;
|
fTexCoordTop += fAddToTexCoord;
|
||||||
@@ -555,6 +559,7 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b
|
|||||||
vpSprTop,
|
vpSprTop,
|
||||||
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
||||||
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
||||||
|
tn.HoldResult.fOverlappedTime,
|
||||||
fYHead-fFrameHeightTop, fYHead,
|
fYHead-fFrameHeightTop, fYHead,
|
||||||
fYStartPos, min(fYEndPos, fYTail),
|
fYStartPos, min(fYEndPos, fYTail),
|
||||||
false, bTopAnchor, bFlipHoldBody );
|
false, bTopAnchor, bFlipHoldBody );
|
||||||
@@ -564,6 +569,7 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b
|
|||||||
vpSprBody,
|
vpSprBody,
|
||||||
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
||||||
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
||||||
|
tn.HoldResult.fOverlappedTime,
|
||||||
fYHead, fYTail,
|
fYHead, fYTail,
|
||||||
fYStartPos, fYEndPos,
|
fYStartPos, fYEndPos,
|
||||||
true, bTopAnchor, bFlipHoldBody );
|
true, bTopAnchor, bFlipHoldBody );
|
||||||
@@ -573,6 +579,7 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b
|
|||||||
vpSprBottom,
|
vpSprBottom,
|
||||||
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
||||||
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
||||||
|
tn.HoldResult.fOverlappedTime,
|
||||||
fYTail, fYTail+fFrameHeightBottom,
|
fYTail, fYTail+fFrameHeightBottom,
|
||||||
max(fYStartPos, fYHead), fYEndPos,
|
max(fYStartPos, fYHead), fYEndPos,
|
||||||
false, bTopAnchor, bFlipHoldBody );
|
false, bTopAnchor, bFlipHoldBody );
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ private:
|
|||||||
float fColorScale,
|
float fColorScale,
|
||||||
bool bGlow, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar );
|
bool bGlow, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar );
|
||||||
void DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, float fPercentFadeToFail, float fColorScale, bool bGlow,
|
void DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, float fPercentFadeToFail, float fColorScale, bool bGlow,
|
||||||
float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar,
|
float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar, float fOverlappedTime,
|
||||||
float fYTop, float fYBottom, float fYStartPos, float fYEndPos, bool bWrapping, bool bAnchorToTop, bool bFlipTextureVertically );
|
float fYTop, float fYBottom, float fYStartPos, float fYEndPos, bool bWrapping, bool bAnchorToTop, bool bFlipTextureVertically );
|
||||||
|
|
||||||
const PlayerState *m_pPlayerState; // to look up PlayerOptions
|
const PlayerState *m_pPlayerState; // to look up PlayerOptions
|
||||||
|
|||||||
Reference in New Issue
Block a user