Add simpler accessors.

Default wrapping to on when custom coords are enabled.
This commit is contained in:
Glenn Maynard
2003-04-21 02:45:00 +00:00
parent cc2756d2f7
commit 5f791e1510
2 changed files with 41 additions and 23 deletions
+37 -22
View File
@@ -211,12 +211,20 @@ void Sprite::Update( float fDeltaTime )
} }
} }
static void TexCoordsFromRect(RageVertex *v, const RectF &rect) static void TexCoordsFromArray(RageVertex *v, const float *f)
{ {
v[0].t = RageVector2( rect.left, rect.top ); // top left v[0].t = RageVector2( f[0], f[1] ); // top left
v[1].t = RageVector2( rect.left, rect.bottom ); // bottom left v[1].t = RageVector2( f[2], f[3] ); // bottom left
v[2].t = RageVector2( rect.right, rect.bottom ); // bottom right v[2].t = RageVector2( f[4], f[5] ); // bottom right
v[3].t = RageVector2( rect.right, rect.top ); // top right v[3].t = RageVector2( f[6], f[7] ); // top right
}
void TexCoordArrayFromRect(float fImageCoords[8], const RectF &rect)
{
fImageCoords[0] = rect.left; fImageCoords[1] = rect.top; // top left
fImageCoords[2] = rect.left; fImageCoords[3] = rect.bottom; // bottom left
fImageCoords[4] = rect.right; fImageCoords[5] = rect.bottom; // bottom right
fImageCoords[6] = rect.right; fImageCoords[7] = rect.top; // top right
} }
void Sprite::DrawPrimitives() void Sprite::DrawPrimitives()
@@ -257,18 +265,10 @@ void Sprite::DrawPrimitives()
if( m_pTexture ) if( m_pTexture )
{ {
if( m_bUsingCustomTexCoords ) float TexCoords[8];
{ GetActiveTexCoords(TexCoords);
v[0].t = RageVector2( m_CustomTexCoords[0], m_CustomTexCoords[1] ); // bottom left TexCoordsFromArray(v, TexCoords);
v[1].t = RageVector2( m_CustomTexCoords[2], m_CustomTexCoords[3] ); // top left
v[2].t = RageVector2( m_CustomTexCoords[4], m_CustomTexCoords[5] ); // bottom right
v[3].t = RageVector2( m_CustomTexCoords[6], m_CustomTexCoords[7] ); // top right
}
else
{
const RectF *pTexCoordRect = GetCurrentTextureCoordRect();
TexCoordsFromRect(v, *pTexCoordRect);
}
DISPLAY->EnableTextureWrapping(m_bTextureWrapping); DISPLAY->EnableTextureWrapping(m_bTextureWrapping);
} }
@@ -338,20 +338,19 @@ void Sprite::SetState( int iNewState )
void Sprite::SetCustomTextureRect( const RectF &new_texcoord_frect ) void Sprite::SetCustomTextureRect( const RectF &new_texcoord_frect )
{ {
m_bUsingCustomTexCoords = true; m_bUsingCustomTexCoords = true;
m_CustomTexCoords[0] = new_texcoord_frect.left; m_CustomTexCoords[1] = new_texcoord_frect.top; // top left m_bTextureWrapping = true;
m_CustomTexCoords[2] = new_texcoord_frect.left; m_CustomTexCoords[3] = new_texcoord_frect.bottom; // bottom left TexCoordArrayFromRect(m_CustomTexCoords, new_texcoord_frect);
m_CustomTexCoords[4] = new_texcoord_frect.right; m_CustomTexCoords[5] = new_texcoord_frect.bottom; // bottom right
m_CustomTexCoords[6] = new_texcoord_frect.right; m_CustomTexCoords[7] = new_texcoord_frect.top; // top right
} }
void Sprite::SetCustomTextureCoords( float fTexCoords[8] ) // order: bottom left, top left, bottom right, top right void Sprite::SetCustomTextureCoords( float fTexCoords[8] ) // order: bottom left, top left, bottom right, top right
{ {
m_bUsingCustomTexCoords = true; m_bUsingCustomTexCoords = true;
m_bTextureWrapping = true;
for( int i=0; i<8; i++ ) for( int i=0; i<8; i++ )
m_CustomTexCoords[i] = fTexCoords[i]; m_CustomTexCoords[i] = fTexCoords[i];
} }
void Sprite::GetCustomTextureCoords( float fTexCoordsOut[8] ) // order: bottom left, top left, bottom right, top right void Sprite::GetCustomTextureCoords( float fTexCoordsOut[8] ) const // order: bottom left, top left, bottom right, top right
{ {
for( int i=0; i<8; i++ ) for( int i=0; i<8; i++ )
fTexCoordsOut[i] = m_CustomTexCoords[i]; fTexCoordsOut[i] = m_CustomTexCoords[i];
@@ -387,6 +386,22 @@ const RectF *Sprite::GetCurrentTextureCoordRect() const
return m_pTexture->GetTextureCoordRect( uFrameNo ); return m_pTexture->GetTextureCoordRect( uFrameNo );
} }
void Sprite::GetCurrentTextureCoords(float fImageCoords[8]) const
{
const RectF *pTexCoordRect = GetCurrentTextureCoordRect();
TexCoordArrayFromRect(fImageCoords, *pTexCoordRect);
}
/* If we're using custom coordinates, return them; otherwise return the coordinates
* for the current state. */
void Sprite::GetActiveTexCoords(float fImageCoords[8]) const
{
if(m_bUsingCustomTexCoords) GetCustomTextureCoords(fImageCoords);
else GetCurrentTextureCoords(fImageCoords);
}
void Sprite::StopUsingCustomCoords() void Sprite::StopUsingCustomCoords()
{ {
m_bUsingCustomTexCoords = false; m_bUsingCustomTexCoords = false;
+4 -1
View File
@@ -47,13 +47,16 @@ public:
void SetCustomTextureRect( const RectF &new_texcoord_frect ); void SetCustomTextureRect( const RectF &new_texcoord_frect );
void SetCustomTextureCoords( float fTexCoords[8] ); void SetCustomTextureCoords( float fTexCoords[8] );
void GetCustomTextureCoords( float fTexCoordsOut[8] ); void GetCustomTextureCoords( float fTexCoordsOut[8] ) const;
void SetCustomSourceRect( const RectF &rectSourceCoords ); // in source pixel space void SetCustomSourceRect( const RectF &rectSourceCoords ); // in source pixel space
void SetCustomImageRect( RectF rectImageCoords ); // in image pixel space void SetCustomImageRect( RectF rectImageCoords ); // in image pixel space
void SetCustomImageCoords( float fImageCoords[8] ); void SetCustomImageCoords( float fImageCoords[8] );
const RectF *GetCurrentTextureCoordRect() const; const RectF *GetCurrentTextureCoordRect() const;
void StopUsingCustomCoords(); void StopUsingCustomCoords();
void GetActiveTexCoords(float fImageCoords[8]) const;
void GetCurrentTextureCoords(float fImageCoords[8]) const;
protected: protected:
virtual bool LoadFromTexture( RageTextureID ID ); virtual bool LoadFromTexture( RageTextureID ID );
virtual bool LoadFromSpriteFile( RageTextureID ID ); virtual bool LoadFromSpriteFile( RageTextureID ID );