Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
dsda-doom
prboom-hbar-gradient.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File prboom-hbar-gradient.diff of Package dsda-doom
From be1128c66a342ca381532ac3c6bcd286d871fdc3 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt <jengelh@inai.de> Date: Wed, 1 May 2013 09:53:49 +0200 Subject: [PATCH 2/2] Implement color gradient for health bar References: https://github.com/coelckers/prboom-plus/pull/274 --- prboom2/src/gl_intern.h | 2 +- prboom2/src/gl_main.c | 31 +++++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git prboom2/src/gl_intern.h prboom2/src/gl_intern.h index b4be8d56..8c44d9a7 100644 --- prboom2/src/gl_intern.h +++ prboom2/src/gl_intern.h @@ -219,7 +219,7 @@ typedef struct typedef struct { - int cm; + float r,g; float x1, x2, x3; float z1, z2, z3; diff --git prboom2/src/gl_main.c prboom2/src/gl_main.c index 763bcbae..8dcb03fd 100644 --- prboom2/src/gl_main.c +++ prboom2/src/gl_main.c @@ -2340,16 +2340,24 @@ static void gld_AddHealthBar(mobj_t* thing, GLSprite *sprite) { GLHealthBar hbar; int health_percent = thing->health * 100 / thing->info->spawnhealth; + int yr = health_bar_yellow - health_bar_red; - 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; + hbar.r = hbar.g = -1.0f; + if (health_percent <= 0) { + hbar.r = 1.0f; + hbar.g = 0.0f; + } else if (health_percent <= health_bar_red) { + hbar.r = 1.0f; + hbar.g = yr == 0 ? 0 : (float)health_percent / yr; + } else if (health_percent <= health_bar_yellow) { + hbar.r = yr == 0 ? 1 : (float)(health_bar_yellow - health_percent) / yr; + hbar.g = 1.0f; + } else if (health_percent <= health_bar_green) { + hbar.r = 0.0f; + hbar.g = 1.0f; + } - if (hbar.cm >= 0) + if (hbar.r >= 0 && hbar.g >= 0) { float sx2 = (float)thing->radius / 2.0f / MAP_SCALE; float sx1 = sx2 - (float)health_percent * (float)thing->radius / 100.0f / MAP_SCALE; @@ -2373,7 +2381,6 @@ static void gld_AddHealthBar(mobj_t* thing, GLSprite *sprite) static void gld_DrawHealthBars(void) { int i, count; - int cm = -1; count = gld_drawinfo.num_items[GLDIT_HBAR]; if (count > 0) @@ -2384,11 +2391,7 @@ 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.0f, 1.0f); glVertex3f(hbar->x1, hbar->y, hbar->z1); glVertex3f(hbar->x2, hbar->y, hbar->z2); -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor