alpha blended damage indicator

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1555 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
driAn
2008-01-04 14:13:54 +00:00
parent eebf549003
commit 28bc92403e
2 changed files with 18 additions and 5 deletions
+12 -4
View File
@@ -122,8 +122,9 @@ void drawcrosshair(bool showteamwarning)
}
VARP(damageindicatorsize, 0, 200, 10000);
VARP(damageindicatordist, 0, 300, 10000);
VARP(damageindicatordist, 0, 500, 10000);
VARP(damageindicatortime, 1, 1000, 10000);
VARP(damageindicatoralpha, 1, 50, 100);
int damagedirections[4] = {0};
void updatedmgindicator(vec &attack)
@@ -151,7 +152,7 @@ void updatedmgindicator(vec &attack)
void drawdmgindicator()
{
if(!damageindicatorsize) return;
glBlendFunc(GL_ONE, GL_ONE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
static Texture *tex = NULL;
if(!tex) tex = textureload("packages/misc/damageindicator.png");
float size = (float)damageindicatorsize;
@@ -160,12 +161,19 @@ void drawdmgindicator()
if(!damagedirections[i] || damagedirections[i] < lastmillis) continue;
float t = damageindicatorsize/(float)(damagedirections[i]-lastmillis);
glPushMatrix();
glColor3ub(150, 0, 0);
glColor4f(0.5f, 0.0f, 0.0f, damageindicatoralpha/100.0f);
glTranslatef(VIRTW/2, VIRTH/2, 0);
glRotatef(i*90, 0, 0, 1);
glTranslatef(0, (float)-damageindicatordist, 0);
glScalef(max(0.0f, 1.0f-t), max(0.0f, 1.0f-t), 0);
quad(tex->id, -size/2.0f, -size/2.0f, size, 0, 0, 1.0f, 1.0f);
glDisable(GL_TEXTURE_2D);
glBegin(GL_TRIANGLES);
glVertex3f(size/2.0f, size/2.0f, 0.0f);
glVertex3f(-size/2.0f, size/2.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glEnd();
glEnable(GL_TEXTURE_2D);
glPopMatrix();
}
}
+6 -1
View File
@@ -276,7 +276,11 @@ int findsoundloc(int sound, physent *p)
void checkplayerloopsounds()
{
if(findsoundloc(S_FOOTSTEPS, player1) == -1) playsound(S_FOOTSTEPS, player1);
if(findsoundloc(S_FOOTSTEPS, player1) == -1)
{
conoutf("play %d", lastmillis);
playsound(S_FOOTSTEPS, player1);
}
loopv(players)
{
playerent *p = players[i];
@@ -341,6 +345,7 @@ void updatechanvol(int chan, int svol, soundloc *sl)
ASSERT(p);
bool nofootsteps = !footsteps || p->state != CS_ALIVE || lastmillis-p->lastpain < 300 || (!p->onfloor && p->timeinair>50) || (!p->move && !p->strafe);
if(nofootsteps) vol = 0; // fade out instead?
else if(p==player1) vol = vol*3/5; // dampen local footsteps
}
}
}