All pastes #586856 Raw Edit

Moose

public cpp v1 · immutable
#586856 ·published 2007-06-24 02:24 UTC
rendered paste body
void printfnt(bool center, int size, double xx, double xy, char* Text, ...){    double x = xx;    double y = xy;    va_list ap;    if(Text == NULL) { return; }    char vString[1024];    va_start(ap, Text);        vsprintf(vString, Text, ap);    va_end(ap);    glBindTexture(GL_TEXTURE_2D, cFont);    float r = 1.0f;    float g = 1.0f;    float b = 1.0f;    int tr = -1, tg = -1, tb = -1;	if(center)	{		double len = 0;		for(int i=0; i<strlen(vString); i++)		{			char Temp[256]; Temp[0] = '\0';            for(int z=i; z<strlen(vString); z++)            {                sprintf(Temp, "%s%c", Temp, vString[z]);                if(vString[z] == ')') { break; }            }            if(sscanf(Temp, "^s(%d, %d, %d)", &tr, &tg, &tb) == 3)            {                i += strlen(Temp);            }			else if(vString[i] == '^')			{				bool Colored = false;				if(vString[i + 1] == 'G') { Colored = true; }				else if(vString[i + 1] == 'g') { Colored = true;  }				else if(vString[i + 1] == 'R') { Colored = true;  }				else if(vString[i + 1] == 'r') { Colored = true;  }				else if(vString[i + 1] == 'B') { Colored = true;  }				else if(vString[i + 1] == 'b') { Colored = true;  }				else if(vString[i + 1] == 'C') { Colored = true;  }				else if(vString[i + 1] == 'c') { Colored = true;  }				else if(vString[i + 1] == 'Y') { Colored = true;  }				else if(vString[i + 1] == 'y') { Colored = true;  }				else if(vString[i + 1] == 'M') { Colored = true;  }				else if(vString[i + 1] == 'm') { Colored = true;  }				else if(vString[i + 1] == 'O') { Colored = true;  }				else if(vString[i + 1] == 'o') { Colored = true;  }				else if(vString[i + 1] == 'P') { Colored = true;  }				else if(vString[i + 1] == 'p') { Colored = true;  }				else if(vString[i + 1] == 'W') { Colored = true;  }				else if(vString[i + 1] == 'w') { Colored = true; }				if(Colored) { i += 2; }			}			len += size / 1.5;		}		x = x - (len / 2);		double ny = y - (size / 2);		if(ny > 0) { y = ny; }	}	tr = -1; tg = -1; tb = -1;    for(int i=0; i<strlen(vString); i++)    {        if(vString[i] == 0 || vString[i] == '\0') { break; }        if(vString[i] == '^' && (vString[i+1] == 's' || vString[i+1] == 's'))        {            char Temp[256]; Temp[0] = '\0';            for(int z=i; z<strlen(vString); z++)            {                sprintf(Temp, "%s%c", Temp, vString[z]);                if(vString[z] == ')') { break; }            }            if(sscanf(Temp, "^s(%d, %d, %d)", &tr, &tg, &tb) == 3)            {                if(tr != 0) { r = float(255 / tr); }				else { r = 0.0f; }                if(tg != 0) { g = float(255 / tg); }				else { g = 0.0f; }                if(tb != 0) { b = float(255 / tb); }				else { b = 0.0f; }                i += strlen(Temp);            }        }		else if(vString[i] == '^')		{			bool Colored = false;			if(vString[i + 1] == 'G') { g = 1.0f; r = 0.0f; b = 0.0f; Colored = true; }			else if(vString[i + 1] == 'g') { g = 0.5f; r = 0.0f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'R') { r = 1.0f; g = 0.0f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'r') { r = 0.5f; g = 0.0f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'B') { b = 1.0f; g = 0.0f; r = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'b') { b = 0.5f; g = 0.0f; r = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'C') { g = 1.0f; b = 1.0f; r = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'c') { g = 0.5f; b = 0.5f; r = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'Y') { r = 1.0f; g = 1.0f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'y') { r = 0.5f; g = 0.5f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'M') { r = 1.0f; b = 1.0f; g = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'm') { r = 0.5f; b = 0.5f; g = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'O') { r = 1.0f; g = 0.5f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'o') { r = 0.5f; g = 0.25f; b = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'P') { b = 1.0f; r = 0.5f; g = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'p') { b = 0.5f; r = 0.25f; g = 0.0f; Colored = true;  }			else if(vString[i + 1] == 'W') { r = 1.0f; b = 1.0f; g = 1.0f; Colored = true;  }			else if(vString[i + 1] == 'w') { r = 0.5f; b = 0.5f; g = 0.5f; Colored = true; }			if(Colored) { i += 2; }		}		if(x + ((double)size / 1.5) > 640 && y >= 480)        {            char Temp[1024]; Temp[0] = '\0';            sprintf(Temp, "^s(%d, %d, %d)", r * 255, g * 255, b * 255);            for(int z=i; z<strlen(vString); z++)            {                sprintf(Temp, "%s%c", Temp, vString[z]);            }            for(int c=0; c<Chat.lines; c++)            {                if(strcmp(Chat.string[c].text, vString) == 0)                {                    Chat.string[c].text[i] = '\0';                }            }            sendChat(Temp);            glBindTexture(GL_TEXTURE_2D, 0);            return;        }        glPushMatrix();        glTranslatef(x, y, 0);        vString[i] -= 32;        float tx = ((int)vString[i] % 16) * 16;        float etx = tx + 16.0f;        float ty = ((int)vString[i] / 16) * 16;        float ety = ty + 16.0f;        tx = tx / 256.0f; etx = etx / 256.0f;        ty = ty / 256.0f; ety = ety / 256.0f;        glBegin(GL_QUADS);            glColor4f(r, g, b, 1.0f);            glTexCoord2f(tx, ty); glVertex3i(0, 0, 0);            glTexCoord2f(etx, ty); glVertex3i(0 + size, 0, 0);            glTexCoord2f(etx, ety); glVertex3i(0 + size, 0 + size, 0);            glTexCoord2f(tx, ety); glVertex3i(0, 0 + size, 0);            glColor4f(1.0f, 1.0f, 1.0f, 1.0f);        glEnd();        glPopMatrix();        x += (double)size / 1.5;        vString[i] += 32;    }    glBindTexture(GL_TEXTURE_2D, 0);    return;}