Game Development Reference
In-Depth Information
12. The following internal methods look up for the button and axis with a given color:
sBitmapButton* GetButtonForColour( const vec4& Colour )
const
{
for ( size_t k = 0 ; k < FButtonDesc.size(); k++ )
{
float Distance = (FButtonDesc[k]->FColour -
Colour).Length();
if ( Distance < 0.1f ) return FButtonDesc[k];
}
return NULL;
}
sBitmapAxis* GetAxisForColour( const vec4& Colour ) const
{
for ( size_t k = 0 ; k < FAxisDesc.size(); k++ )
{
float Distance = (FButtonDesc[k]->FColour -
Colour).Length();
if ( Distance < 0.1f ) return FAxisDesc[k];
}
return NULL;
}
13. Two values for each axis are read as the displacement from the center:
void ReadAxis( sBitmapAxis* Axis, const vec2& Pos )
{
if ( !Axis ) { return; }
14. Read axis value based on a center point and a touch point:
float v1 = ( (Axis->FPosition - Pos).x/Axis->FRadius);
float v2 = (-(Axis->FPosition - Pos).y/Axis->FRadius);
this->SetAxisValue( Axis->FAxis1, v1 );
this->SetAxisValue( Axis->FAxis2, v2 );
}
vec4 GetColourAtPoint( const vec2& Pt ) const
{
if ( !FMaskBitmap ) { return vec4( -1 ); }
int x = (int)(Pt.x * 512.0f);
int y = (int)(Pt.y * 512.0f);
int Ofs = (y * 512 + x) * 3;
float r = (float)FMaskBitmap[Ofs + 0] / 255.0f;
float g = (float)FMaskBitmap[Ofs + 1] / 255.0f;
float b = (float)FMaskBitmap[Ofs + 2] / 255.0f;
return vec4( b, g, r, 0.0f );
}
 
Search WWH ::




Custom Search