void AvHSpriteDrawTiles(int spriteHandle, int numXFrames, int numYFrames, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2)
{
    
    float dx = x2 - x1;
    float dy = y2 - y1;

    float oldDepth = gDepth;

    for (int frameY = 0; frameY < numYFrames; ++frameY)
    {
        for (int frameX = 0; frameX < numXFrames; ++frameX)
        {

            int frame = frameX + frameY * numXFrames;

            float pw = SPR_Width(spriteHandle, frame);
            float ph = SPR_Height(spriteHandle, frame);
            
            float fx1 = ((float)(frameX)) / numXFrames;
            float fy1 = ((float)(frameY)) / numYFrames;
            
            float fx2 = ((float)(frameX + 1)) / numXFrames;
            float fy2 = ((float)(frameY + 1)) / numYFrames;

            gDepth = oldDepth;

            AvHSpriteDraw(spriteHandle, frame,
                 x1 + dx * fx1, y1 + dy * fy1, x1 + dx * fx2, y1 + dy * fy2,
                 0, 0, 1, 1);

        }
    }

}
Beispiel #2
0
int AvHFont::DrawString(int inX, int inY, const char* inString, int r, int g, int b, int inRenderMode) const
{

    int theX = inX;
    int theY = inY;
        
    int theCharHeight = GetStringHeight();

    AvHSpriteBeginFrame();

    AvHSpriteSetVGUIOffset(0,0);

    AvHSpriteSetRenderMode(inRenderMode);
    AvHSpriteSetColor(r / 256.0f, g / 256.0f, b / 256.0f);

    int charWidth  = mSpriteWidth / 16;
    int charHeight = mSpriteHeight / 16;

    for (int i = 0; inString[i] != 0 && inString[i] != '\n'; ++i)
    {

        unsigned char c = inString[i];

        if (c < 32)
        {
            // Unprintable.
            continue;
        }

        theX += mCharWidth[c].a;
        
        float theU = ((c % kNumCharsPerRow) * charWidth) / float(mSpriteWidth);
        float theV = ((c / kNumCharsPerRow) * charHeight) / float(mSpriteHeight);

        AvHSpriteDraw(mSprite, 0, theX, theY, theX + mCharWidth[c].b, theY + theCharHeight,
            theU, theV, theU + mCharWidth[c].b / 256.0f, theV + theCharHeight / 256.0f);
        
        theX += mCharWidth[c].b + mCharWidth[c].c;

    }
    
    AvHSpriteEndFrame();
    AvHSpriteSetColor(1, 1, 1);

    return theX;

}
Beispiel #3
0
int AvHFont::DrawStringReverse(int inX, int inY, const char* inString, int r, int g, int b, int inRenderMode) const
{

    int length = strlen(inString) - 1;

    int theX = inX;
    int theY = inY;
        
    int theCharHeight = GetStringHeight();

    AvHSpriteBeginFrame();
    AvHSpriteSetRenderMode(inRenderMode);
    AvHSpriteSetColor(r / 256.0f, g / 256.0f, b / 256.0f);

    int charWidth  = mSpriteWidth / 16;
    int charHeight = mSpriteHeight / 16;

    for (int i = length; i >= 0; --i)
    {
        
        char c = inString[i];

        if (c < 32)
        {
            // Unprintable.
            continue;
        }

        theX -= mCharWidth[c].c + mCharWidth[c].b;
        
        float theU = ((c % kNumCharsPerRow) * charWidth) / float(mSpriteWidth);
        float theV = ((c / kNumCharsPerRow) * charHeight) / float(mSpriteHeight);

        AvHSpriteDraw(mSprite, 0, theX, theY, theX + mCharWidth[c].b, theY + theCharHeight,
            theU, theV, theU + mCharWidth[c].b / 256.0f, theV + theCharHeight / 256.0f);

        theX -= mCharWidth[c].a;

    }

    AvHSpriteEndFrame();

    return theX;

}