]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_draw.c
drawrotpic:
[xonotic/darkplaces.git] / gl_draw.c
index d1d52a665f880af3f9659f269cce2c3da21cc743..0ddb11c09e4f6a4c7a838d2aef76fff9a0b8ac83 100644 (file)
--- a/gl_draw.c
+++ b/gl_draw.c
@@ -867,6 +867,59 @@ void DrawQ_Pic(float x, float y, cachepic_t *pic, float width, float height, flo
        R_Mesh_Draw(0, 4, 0, 2, NULL, polygonelements, 0, 0);
 }
 
+void DrawQ_RotPic(float x, float y, cachepic_t *pic, float width, float height, float org_x, float org_y, float angle, float red, float green, float blue, float alpha, int flags)
+{
+       float floats[20];
+       float af = DEG2RAD(-angle); // forward
+       float ar = DEG2RAD(-angle + 90); // right
+       float sinaf = sin(af);
+       float cosaf = cos(af);
+       float sinar = sin(ar);
+       float cosar = cos(ar);
+
+       _DrawQ_ProcessDrawFlag(flags);
+       GL_Color(red, green, blue, alpha);
+
+       R_Mesh_VertexPointer(floats, 0, 0);
+       R_Mesh_ColorPointer(NULL, 0, 0);
+       R_Mesh_ResetTextureState();
+       R_SetupGenericShader(pic != NULL);
+       if (pic)
+       {
+               if (width == 0)
+                       width = pic->width;
+               if (height == 0)
+                       height = pic->height;
+               R_Mesh_TexBind(0, R_GetTexture(pic->tex));
+               R_Mesh_TexCoordPointer(0, 2, floats + 12, 0, 0);
+
+               floats[12] = 0.0f;floats[13] = 0.0f;
+               floats[14] = 1.0f;floats[15] = 0.0f;
+               floats[16] = 1.0f;floats[17] = 1.0f;
+               floats[18] = 0.0f;floats[19] = 1.0f;
+       }
+
+       floats[2] = floats[5] = floats[8] = floats[11] = 0;
+
+// top left
+       floats[0] = x - cosaf*org_x - cosar*org_y;
+       floats[1] = y - sinaf*org_x - sinar*org_y;
+
+// top right
+       floats[3] = x + cosaf*(width-org_x) - cosar*org_y;
+       floats[4] = y + sinaf*(width-org_x) - sinar*org_y;
+
+// bottom right
+       floats[6] = x + cosaf*(width-org_x) + cosar*(height-org_y);
+       floats[7] = y + sinaf*(width-org_x) + sinar*(height-org_y);
+
+// bottom left
+       floats[9]  = x - cosaf*org_x + cosar*(height-org_y);
+       floats[10] = y - sinaf*org_x + sinar*(height-org_y);
+
+       R_Mesh_Draw(0, 4, 0, 2, NULL, polygonelements, 0, 0);
+}
+
 void DrawQ_Fill(float x, float y, float width, float height, float red, float green, float blue, float alpha, int flags)
 {
        float floats[12];
@@ -945,7 +998,7 @@ float DrawQ_TextWidth_Font_UntilWidth_TrackColors(const char *text, size_t *maxl
        size_t i;
        float x = 0;
        char ch;
-       int current_alpha, tempcolorindex;
+       int tempcolorindex;
 
        if (*maxlen < 1)
                *maxlen = 1<<30;
@@ -957,15 +1010,13 @@ float DrawQ_TextWidth_Font_UntilWidth_TrackColors(const char *text, size_t *maxl
 
        maxwidth /= fnt->scale;
 
-       current_alpha = 0xf;
-
        for (i = 0;i < *maxlen && text[i];i++)
        {
                if (text[i] == ' ')
                {
-                       if(x + fnt->width_of[' '] > maxwidth)
+                       if(x + fnt->width_of[(int) ' '] > maxwidth)
                                break; // oops, can't draw this
-                       x += fnt->width_of[' '];
+                       x += fnt->width_of[(int) ' '];
                        continue;
                }
                if (text[i] == STRING_COLOR_TAG && !ignorecolorcodes && i + 1 < *maxlen)
@@ -976,7 +1027,7 @@ float DrawQ_TextWidth_Font_UntilWidth_TrackColors(const char *text, size_t *maxl
                                colorindex = ch - '0';
                 continue;
                        }
-                       else if (ch == STRING_COLOR_RGB_DEFAULT && i + 3 < *maxlen ) // ^x found
+                       else if (ch == STRING_COLOR_RGB_TAG_CHAR && i + 3 < *maxlen ) // ^x found
                        {
                                // building colorindex...
                                ch = tolower(text[i+1]);
@@ -998,7 +1049,7 @@ float DrawQ_TextWidth_Font_UntilWidth_TrackColors(const char *text, size_t *maxl
                                                else tempcolorindex = 0;
                                                if (tempcolorindex)
                                                {
-                                                       colorindex = tempcolorindex | current_alpha;
+                                                       colorindex = tempcolorindex | 0xf;
                                                        // ...done! now colorindex has rgba codes (1,rrrr,gggg,bbbb,aaaa)
                                                        i+=3;
                                                        continue;
@@ -1006,30 +1057,6 @@ float DrawQ_TextWidth_Font_UntilWidth_TrackColors(const char *text, size_t *maxl
                                        }
                                }
                        }
-                       /*else if (ch == 'a' && i + 1 < *maxlen) // ^a found
-                       {
-                               if (colorindex > 9)
-                               {
-                                       ch = tolower(text[i+1]);
-                                       if (ch <= '9' && ch >= '0') current_alpha = (ch - '0');
-                                       else if (ch >= 'a' && ch <= 'f') current_alpha = (ch - 87);
-                                       else if (ch == '+' && colorindex > 9)
-                                       {
-                                               current_alpha = colorindex & 0xf;
-                                               if (current_alpha < 0xf)
-                                                       current_alpha++;
-                                       }
-                                       else if (ch == '-' && colorindex > 9)
-                                       {
-                                               current_alpha = colorindex & 0xf;
-                                               if (current_alpha > 0)
-                                                       current_alpha--;
-                                       }
-                                       colorindex = ((colorindex >> 4 ) << 4) + current_alpha;
-                               }
-                               i++;
-                               continue;
-                       }*/
                        else if (ch == STRING_COLOR_TAG) // ^^ found, ignore the first ^ and go to print the second
                                i++;
                        i--;
@@ -1059,8 +1086,8 @@ float DrawQ_String_Font(float startx, float starty, const char *text, size_t max
        float vertex3f[QUADELEMENTS_MAXQUADS*4*3];
        float texcoord2f[QUADELEMENTS_MAXQUADS*4*2];
        float color4f[QUADELEMENTS_MAXQUADS*4*4];
-       char ch;
-       int current_alpha, tempcolorindex;
+       int ch;
+       int tempcolorindex;
 
        int tw, th;
        tw = R_TextureWidth(fnt->tex);
@@ -1103,12 +1130,11 @@ float DrawQ_String_Font(float startx, float starty, const char *text, size_t max
                        x += r_textshadow.value;
                        y += r_textshadow.value;
                }
-               current_alpha = 0xf;
                for (i = 0;i < maxlen && text[i];i++)
                {
                        if (text[i] == ' ')
                        {
-                               x += fnt->width_of[' '] * w;
+                               x += fnt->width_of[(int) ' '] * w;
                                continue;
                        }
                        if (text[i] == STRING_COLOR_TAG && !ignorecolorcodes && i + 1 < maxlen)
@@ -1120,7 +1146,7 @@ float DrawQ_String_Font(float startx, float starty, const char *text, size_t max
                                        DrawQ_GetTextColor(color, colorindex, basered, basegreen, baseblue, basealpha, shadow);
                                        continue;
                                }
-                               else if (ch == STRING_COLOR_RGB_DEFAULT && i+3 < maxlen ) // ^x found
+                               else if (ch == STRING_COLOR_RGB_TAG_CHAR && i+3 < maxlen ) // ^x found
                                {
                                        // building colorindex...
                                        ch = tolower(text[i+1]);
@@ -1142,7 +1168,7 @@ float DrawQ_String_Font(float startx, float starty, const char *text, size_t max
                                                        else tempcolorindex = 0;
                                                        if (tempcolorindex)
                                                        {
-                                                               colorindex = tempcolorindex | current_alpha;
+                                                               colorindex = tempcolorindex | 0xf;
                                                                // ...done! now colorindex has rgba codes (1,rrrr,gggg,bbbb,aaaa)
                                                                //Con_Printf("^1colorindex:^7 %x\n", colorindex);
                                                                DrawQ_GetTextColor(color, colorindex, basered, basegreen, baseblue, basealpha, shadow);
@@ -1152,32 +1178,6 @@ float DrawQ_String_Font(float startx, float starty, const char *text, size_t max
                                                }
                                        }
                                }
-                               /*else if (ch == 'a' && i+1 < maxlen ) // ^a found
-                               {
-                                       if (colorindex > 9) // colorindex is a RGB color
-                                       {
-                                               ch = tolower(text[i+1]);
-                                               if (ch <= '9' && ch >= '0') current_alpha = (ch - '0');
-                                               else if (ch >= 'a' && ch <= 'f') current_alpha = (ch - 87);
-                                               else if (ch == '+' && colorindex > 9)
-                                               {
-                                                       current_alpha = colorindex & 0xf;
-                                                       if (current_alpha < 0xf)
-                                                               current_alpha++;
-                                               }
-                                               else if (ch == '-' && colorindex > 9)
-                                               {
-                                                       current_alpha = colorindex & 0xf;
-                                                       if (current_alpha > 0)
-                                                               current_alpha--;
-                                               }
-                                               colorindex = ((colorindex >> 4 ) << 4) + current_alpha;
-                                               //Con_Printf("^1colorindex:^7 %x\n", colorindex);
-                                               DrawQ_GetTextColor(color, colorindex, basered, basegreen, baseblue, basealpha, shadow);
-                                       }
-                                       i++;
-                                       continue;
-                               }*/
                                else if (ch == STRING_COLOR_TAG)
                                        i++;
                                i--;