apply effect history to frame width
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include "PlayerState.h"
|
||||
#include "GameState.h"
|
||||
#include "Style.h"
|
||||
#include "ThemeMetric.h"
|
||||
#include <float.h>
|
||||
|
||||
const float ARROW_SPACING = ARROW_SIZE;// + 2;
|
||||
@@ -596,6 +597,38 @@ float ArrowEffects::GetZoom( const PlayerState* pPlayerState )
|
||||
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
|
||||
* All rights reserved.
|
||||
|
||||
@@ -61,6 +61,8 @@ public:
|
||||
|
||||
// This is the zoom of the individual tracks, not of the whole Player.
|
||||
static float GetZoom( const PlayerState* pPlayerState );
|
||||
|
||||
static float GetFrameWidthScale( const PlayerState* pPlayerState, float fYOffset, float fOverlappedTime );
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -373,6 +373,7 @@ struct StripBuffer
|
||||
|
||||
void NoteDisplay::DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, float fPercentFadeToFail, float fColorScale, bool bGlow,
|
||||
float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar,
|
||||
float fOverlappedTime,
|
||||
float fYTop, float fYBottom,
|
||||
float fYStartPos, float fYEndPos,
|
||||
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 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 fXLeft = fX - fFrameWidth/2;
|
||||
const float fXLeft = fX - fScaledFrameWidth/2;
|
||||
const float fXCenter = fX;
|
||||
const float fXRight = fX + fFrameWidth/2;
|
||||
const float fXRight = fX + fScaledFrameWidth/2;
|
||||
const float fDistFromTop = fY - fYTop;
|
||||
float fTexCoordTop = SCALE( fDistFromTop, 0, fFrameHeight, rect.top, rect.bottom );
|
||||
fTexCoordTop += fAddToTexCoord;
|
||||
@@ -555,6 +559,7 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b
|
||||
vpSprTop,
|
||||
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
||||
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
||||
tn.HoldResult.fOverlappedTime,
|
||||
fYHead-fFrameHeightTop, fYHead,
|
||||
fYStartPos, min(fYEndPos, fYTail),
|
||||
false, bTopAnchor, bFlipHoldBody );
|
||||
@@ -564,6 +569,7 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b
|
||||
vpSprBody,
|
||||
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
||||
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
||||
tn.HoldResult.fOverlappedTime,
|
||||
fYHead, fYTail,
|
||||
fYStartPos, fYEndPos,
|
||||
true, bTopAnchor, bFlipHoldBody );
|
||||
@@ -573,6 +579,7 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b
|
||||
vpSprBottom,
|
||||
iCol, fYStep, fPercentFadeToFail, fColorScale, bGlow,
|
||||
fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar,
|
||||
tn.HoldResult.fOverlappedTime,
|
||||
fYTail, fYTail+fFrameHeightBottom,
|
||||
max(fYStartPos, fYHead), fYEndPos,
|
||||
false, bTopAnchor, bFlipHoldBody );
|
||||
|
||||
@@ -97,7 +97,7 @@ private:
|
||||
float fColorScale,
|
||||
bool bGlow, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar );
|
||||
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 );
|
||||
|
||||
const PlayerState *m_pPlayerState; // to look up PlayerOptions
|
||||
|
||||
Reference in New Issue
Block a user