From be4efcd0c22c4cf575431457d7776d499b74af4a Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 1 Mar 2007 02:19:49 +0000 Subject: [PATCH] Represent alignment as a float; eliminates selects. (I havn't yet decided whether these should be -1.0 ... +1.0, indicating "fully left aligned" and "fully right aligned", or 0.0 ... 1.0, indicating "anchor to this fractional position in m_size". It may become the latter.) --- stepmania/src/Actor.cpp | 23 +++++-------------- stepmania/src/Actor.h | 8 +++---- stepmania/src/ActorMultiTexture.cpp | 24 +++++++------------- stepmania/src/BitmapText.cpp | 34 ++++++++++++----------------- stepmania/src/Sprite.cpp | 24 +++++++------------- 5 files changed, 40 insertions(+), 73 deletions(-) diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index d1ac020b36..48784e165c 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -72,8 +72,8 @@ void Actor::InitState() m_start.Init(); m_current.Init(); - m_HorizAlign = HorizAlign_Center; - m_VertAlign = VertAlign_Middle; + m_fHorizAlign = 0.0f; + m_fVertAlign = 0.0f; m_Effect = no_effect; m_fSecsIntoEffect = 0; @@ -166,8 +166,8 @@ Actor::Actor( const Actor &cpy ): CPY( m_bFirstUpdate ); - CPY( m_HorizAlign ); - CPY( m_VertAlign ); + CPY( m_fHorizAlign ); + CPY( m_fVertAlign ); CPY( m_Effect ); CPY( m_fSecsIntoEffect ); @@ -730,19 +730,8 @@ void Actor::ScaleTo( const RectF &rect, StretchType st ) break; } - switch( m_HorizAlign ) - { - case HorizAlign_Left: SetX( rect.left ); break; - case HorizAlign_Center: SetX( rect.left + rect_width/2 ); break; - case HorizAlign_Right: SetX( rect.left + rect_width ); break; - } - - switch( m_VertAlign ) - { - case VertAlign_Top: SetY( rect.top ); break; - case VertAlign_Middle: SetY( rect.top + rect_height/2 ); break; - case VertAlign_Bottom: SetY( rect.top + rect_height ); break; - } + SetX( rect.left + rect_width * SCALE( m_fHorizAlign, -1.0f, +1.0f, 0.0f, 1.0f ) ); + SetY( rect.top + rect_height * SCALE( m_fVertAlign, -1.0f, +1.0f, 0.0f, 1.0f ) ); SetZoom( fNewZoom ); } diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 6f90ef8191..1c87494ad8 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -251,8 +251,8 @@ public: // // Alignment settings. These need to be virtual for BitmapText // - virtual void SetHorizAlign( HorizAlign ha ) { m_HorizAlign = ha; } - virtual void SetVertAlign( VertAlign va ) { m_VertAlign = va; } + virtual void SetHorizAlign( HorizAlign ha ) { m_fHorizAlign = (ha == HorizAlign_Left)? -1.0f: (ha == HorizAlign_Center)? 0.0f: +1.0f; } + virtual void SetVertAlign( VertAlign va ) { m_fVertAlign = (va == VertAlign_Top)? -1.0f: (va == VertAlign_Middle)? 0.0f: +1.0f; } // @@ -423,8 +423,8 @@ protected: // // Stuff for alignment // - HorizAlign m_HorizAlign; - VertAlign m_VertAlign; + float m_fHorizAlign; /* -1 left 0 center +1 right */ + float m_fVertAlign; /* -1 top 0 center +1 bottom */ // diff --git a/stepmania/src/ActorMultiTexture.cpp b/stepmania/src/ActorMultiTexture.cpp index 488f8344a8..75e1179bea 100644 --- a/stepmania/src/ActorMultiTexture.cpp +++ b/stepmania/src/ActorMultiTexture.cpp @@ -83,23 +83,15 @@ void ActorMultiTexture::DrawPrimitives() { Actor::SetGlobalRenderStates(); // set Actor-specified render states + RageVector2 center = m_size; + center.x *= m_fHorizAlign * -0.5f; + center.y *= m_fVertAlign * -0.5f; + RectF quadVerticies; - - switch( m_HorizAlign ) - { - case HorizAlign_Left: quadVerticies.left = 0; quadVerticies.right = m_size.x; break; - case HorizAlign_Center: quadVerticies.left = -m_size.x/2; quadVerticies.right = m_size.x/2; break; - case HorizAlign_Right: quadVerticies.left = -m_size.x; quadVerticies.right = 0; break; - default: ASSERT( false ); - } - - switch( m_VertAlign ) - { - case VertAlign_Top: quadVerticies.top = 0; quadVerticies.bottom = m_size.y; break; - case VertAlign_Middle: quadVerticies.top = -m_size.y/2; quadVerticies.bottom = m_size.y/2; break; - case VertAlign_Bottom: quadVerticies.top = -m_size.y; quadVerticies.bottom = 0; break; - default: ASSERT(0); - } + quadVerticies.left = center.x - m_size.x/2.0f; + quadVerticies.right = center.x + m_size.x/2.0f; + quadVerticies.top = center.y - m_size.y/2.0f; + quadVerticies.bottom = center.y + m_size.y/2.0f; DISPLAY->ClearAllTextures(); for( size_t i = 0; i < m_aTextureUnits.size(); ++i ) diff --git a/stepmania/src/BitmapText.cpp b/stepmania/src/BitmapText.cpp index 127e331927..55ec5927e2 100644 --- a/stepmania/src/BitmapText.cpp +++ b/stepmania/src/BitmapText.cpp @@ -188,14 +188,12 @@ void BitmapText::BuildChars() /* There's padding between every line: */ m_size.y += iPadding * int(m_wTextLines.size()-1); - int iY; // the top position of the first row of characters - switch( m_VertAlign ) - { - case VertAlign_Top: iY = 0; break; - case VertAlign_Middle: iY = -lrintf(m_size.y/2.0f); break; - case VertAlign_Bottom: iY = -(int)m_size.y; break; - default: ASSERT( false ); - } + RageVector2 center = m_size; +// center.x *= m_fHorizAlign*-0.5f; + center.y *= m_fVertAlign*-0.5f; + + // the top position of the first row of characters + int iY = lrintf(center.y - m_size.y/2.0f); for( unsigned i=0; i