prboom-plus/prboom-hbar-gradient.diff
Jan Engelhardt fe064aae55 Restore/update sanitation script
restore patches
restore spec syntax
restore suggests:freedoom
trim description a bit

OBS-URL: https://build.opensuse.org/package/show/games/prboom-plus?expand=0&rev=19
2016-03-29 23:46:33 +00:00

121 lines
3.8 KiB
Diff

From: Jan Engelhardt <jengelh@inai.de>
Date: 2013-05-01 14:27:39.000000000 +0200
Category: improvement
Status: sent Wed, 1 May 2013 14:28:44 +0200
This makes the health bar above shootables use gradiented color.
---
src/gl_drawinfo.c | 4 ++--
src/gl_intern.h | 2 +-
src/gl_main.c | 44 +++++++++++++++++---------------------------
3 files changed, 20 insertions(+), 30 deletions(-)
Index: prboom-plus-2.5.1.4/src/gl_drawinfo.c
===================================================================
--- prboom-plus-2.5.1.4.orig/src/gl_drawinfo.c
+++ prboom-plus-2.5.1.4/src/gl_drawinfo.c
@@ -112,10 +112,10 @@ static void gld_AddDrawRange(int size)
#define SIZEOF8(type) ((sizeof(type)+7)&~7)
void gld_AddDrawItem(GLDrawItemType itemtype, void *itemdata)
{
- int itemsize = 0;
+ unsigned int itemsize = 0;
byte *item_p = NULL;
- static int itemsizes[GLDIT_TYPES] = {
+ static const unsigned int itemsizes[GLDIT_TYPES] = {
0,
SIZEOF8(GLWall), SIZEOF8(GLWall), SIZEOF8(GLWall), SIZEOF8(GLWall), SIZEOF8(GLWall),
SIZEOF8(GLWall), SIZEOF8(GLWall),
Index: prboom-plus-2.5.1.4/src/gl_intern.h
===================================================================
--- prboom-plus-2.5.1.4.orig/src/gl_intern.h
+++ prboom-plus-2.5.1.4/src/gl_intern.h
@@ -218,7 +218,7 @@ typedef struct
typedef struct
{
- int cm;
+ float r,g;
float x1, x2, x3;
float z1, z2, z3;
Index: prboom-plus-2.5.1.4/src/gl_main.c
===================================================================
--- prboom-plus-2.5.1.4.orig/src/gl_main.c
+++ prboom-plus-2.5.1.4/src/gl_main.c
@@ -2339,15 +2339,20 @@ static void gld_AddHealthBar(mobj_t* thi
GLHealthBar hbar;
int health_percent = thing->health * 100 / thing->info->spawnhealth;
- hbar.cm = -1;
- if (health_percent <= health_bar_red)
- hbar.cm = CR_RED;
- else if (health_percent <= health_bar_yellow)
- hbar.cm = CR_YELLOW;
- else if (health_percent <= health_bar_green)
- hbar.cm = CR_GREEN;
+ if (health_percent <= health_bar_red) {
+ hbar.r = 1;
+ hbar.g = 0;
+ } else if (health_percent <= health_bar_yellow) {
+ hbar.r = 1;
+ hbar.g = (double)(health_percent - health_bar_red) /
+ (health_bar_yellow - health_bar_red);
+ } else if (health_percent <= health_bar_green) {
+ /* FullSimplify[1-((percent-yellow)/(green-yellow))] */
+ hbar.r = (double)(health_bar_green - health_percent) /
+ (health_bar_green - health_bar_yellow);
+ hbar.g = 1;
+ }
- if (hbar.cm >= 0)
{
float sx2 = (float)thing->radius / 2.0f / MAP_SCALE;
float sx1 = sx2 - (float)health_percent * (float)thing->radius / 100.0f / MAP_SCALE;
@@ -2371,7 +2376,6 @@ static void gld_AddHealthBar(mobj_t* thi
static void gld_DrawHealthBars(void)
{
int i, count;
- int cm = -1;
count = gld_drawinfo.num_items[GLDIT_HBAR];
if (count > 0)
@@ -2382,31 +2386,17 @@ static void gld_DrawHealthBars(void)
for (i = count - 1; i >= 0; i--)
{
GLHealthBar *hbar = gld_drawinfo.items[GLDIT_HBAR][i].item.hbar;
- if (hbar->cm != cm)
- {
- cm = hbar->cm;
- glColor4f(cm2RGB[cm][0], cm2RGB[cm][1], cm2RGB[cm][2], 1.0f);
- }
+ glColor4f(hbar->r, hbar->g, 0, 1);
glVertex3f(hbar->x1, hbar->y, hbar->z1);
glVertex3f(hbar->x2, hbar->y, hbar->z2);
- }
- glEnd();
-
- if (health_bar_full_length)
- {
- glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
- glBegin(GL_LINES);
- for (i = count - 1; i >= 0; i--)
- {
- GLHealthBar *hbar = gld_drawinfo.items[GLDIT_HBAR][i].item.hbar;
-
+ if (health_bar_full_length) {
+ glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glVertex3f(hbar->x1, hbar->y, hbar->z1);
glVertex3f(hbar->x3, hbar->y, hbar->z3);
}
- glEnd();
}
-
+ glEnd();
gld_EnableTexture2D(GL_TEXTURE0_ARB, true);
}
}