From 90f330e2699c5eedfeaf25aa11ba182229cfe180 Mon Sep 17 00:00:00 2001 From: driAn Date: Fri, 4 Jan 2008 12:36:33 +0000 Subject: [PATCH] damage indicator git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1549 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- packages/misc/damageindicator.png | Bin 0 -> 1564 bytes source/src/clientgame.cpp | 3 +- source/src/menus.cpp | 8 +++-- source/src/protos.h | 2 +- source/src/renderhud.cpp | 51 ++++++++++++++++++++++++++++++ source/src/weapon.cpp | 3 +- 6 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 packages/misc/damageindicator.png diff --git a/packages/misc/damageindicator.png b/packages/misc/damageindicator.png new file mode 100644 index 0000000000000000000000000000000000000000..8500de8be9fec244b72fe21a0d868bec7c890a2c GIT binary patch literal 1564 zcmb`H=~EMT7{`CRn}gs|mV{%G!$qNJqczd7a;U6=as&Y>;)omzC`H5xq70xAHi!`_ zN{WgoIz(|O1;MmX3d*runRb*zM+LODh*VCwA}WW_^grlK`{H@NpLyOq&-cai&GPec zH_%_M4*)Rm^liRw7cY%E9D4|Wr03;bE?&rX%eJWrwzRfRhmYdgM*uyX0%d&y8mukB(Lwg?%;mQ+xuNP}RSz?-bIv`dszXtLr3X7b`Q; zHa{4g6W06gp`Cii?pY<8O{6W31vB;%3kOlh?nk*g`$VLN|84+I+5teH24Hqcr^5gw zhyWO&0C36&z)YGO*0u`(R*|RM_JE}4V=u)q#^JbTD(i?NCA|IY3pF)t#p)C*1$w5) zsdTxXqcUHkF%BiT*kgTDMJ&Jaw{cmgwoa%m^eUVD^dYrzq3hs>p+lP|26wsx7^4A; z0FWN}U(v0z>?(Jt(Yn)_`S|{h19Pj2nOM{l8b}@cv2MQG2@Nn{)OAZ%$2L{+YHXOfH7(>LmiMQY%O%ZZyIqomp85KW zJlCYgRRg##j06x$k8;RqWMt=*g|4Q`Ks7j4LOoN3)P1y_my zG9{Tbf-gl7^>7Yf#YcuAyl^o`xrNg#RLj8`{MQO*7yKlga0V@vgE^6e6Xc7jP~;IW zf9~ir+jH^(yN|X|sR#>}f1~G@A@2j(FBaFj86&kONqJxso>|VAvQ{^du|Q$fQP@hx zz||{BHpgGL{r);{6uBvhlfcFlQ3)Rq5IORPAp8E3!$E!IJChzcIELB=Qugp|u@a}l z?`qGAuzcEzhiOO(E|&fI)RSV;c;nvmTF#hI&4q5^YD1=H+QJAzYxYs=VOud3D&NY( zTIpn<&}iqyeK+WOp0b5bgo_(evmWB=&~yV&6Sn)xTu0$1?|8m z%gK$<27JHO3x24bP5|~ zsUygG*c5gUt7NsD(OCl=^QE)EE;Q4g+E5sl1HHA2UPT)sk4;2;Mga|j?5sq0<4Cd= z4uoq&L@=}w^2V`-DA%EdAav++#s?U3P6$M89qZfZF+Peh>CjVsH@!ZFjsco63)@i< z5hTYT6z{r2W`mPxbZCu@OlHop6=1fsC6dd_*YCL7O!xD%`Q&-1Nk4-}XlM#(N;^H2 zlq!|o&+3X$CA0PQh&EDNmKc;IV{?M+RT;nwt@2^^56`mk=sK2*Y$T>I3au(9&7l)` zv<1C)cD6v=RRvEpSTgRHH$|upvAuYzX7Yg~=_EENZ6#Y+#sV@!uHZR1E49CbQ%e%{ zb+8;AtB1KH;BmZMj*es2+m2uQpPu^P#{!c!vtSOge^?x}@p+r4i#Fi7)5oo12bKOe DBH}*w literal 0 HcmV?d00001 diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index 21eca2f5..6f27529a 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -378,7 +378,8 @@ void dodamage(int damage, playerent *pl, playerent *actor, bool gib, bool local) if(pl==player1) { - damageblend(damage); + //damageblend(damage); + updatedmgindicator(actor->o); pl->damageroll(damage); } else damageeffect(damage, pl); diff --git a/source/src/menus.cpp b/source/src/menus.cpp index bdcb1207..ec9dbc73 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -586,9 +586,11 @@ void rendermenumdl() gmenu &m = *curmenu; if(!m.mdl) return; - glPushMatrix (); - + extern int scr_w, scr_h; + + glPushMatrix(); glLoadIdentity(); + glTranslatef(0, 1.5f, -1.0f); glRotatef(90+180, 0, -1, 0); glRotatef(90, -1, 0, 0); glScalef(1, -1, 1); @@ -598,7 +600,7 @@ void rendermenumdl() vec pos; if(isplayermodel) pos = vec(2.0f, 1.2f, -0.4f); else pos = vec(2.0f, 0, 1.7f); - + float yaw = 1.0f; if(m.rotspeed) yaw += lastmillis/5.0f/100.0f*m.rotspeed; diff --git a/source/src/protos.h b/source/src/protos.h index 0a0ad708..89e2e52a 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -124,7 +124,6 @@ struct gmenu void render(); void renderbg(int x1, int y1, int x2, int y2, bool border); - void rendermenumdl(); void refresh(); void open(); void close(); @@ -370,6 +369,7 @@ extern void damageblend(int n); extern void loadingscreen(const char *fmt = NULL, ...); extern void hudoutf(const char *s, ...); extern void show_out_of_renderloop_progress(float bar1, const char *text1, float bar2 = 0, const char *text2 = NULL); +extern void updatedmgindicator(vec &attack); // renderparticles extern void particleinit(); diff --git a/source/src/renderhud.cpp b/source/src/renderhud.cpp index f9cf8cf6..2c7a015b 100644 --- a/source/src/renderhud.cpp +++ b/source/src/renderhud.cpp @@ -121,6 +121,55 @@ void drawcrosshair(bool showteamwarning) glEnd(); } +VARP(damageindicatorsize, 0, 200, 10000); +VARP(damageindicatordist, 0, 300, 10000); +VARP(damageindicatortime, 1, 1000, 10000); +int damagedirections[4] = {0}; + +void updatedmgindicator(vec &attack) +{ + if(!damageindicatorsize) return; + float bestdist = 0.0f; + int bestdir = -1; + loopi(4) + { + vec d; + d.x = (float)(cosf(RAD*(player1->yaw-90+(i*90)))); + d.y = (float)(sinf(RAD*(player1->yaw-90+(i*90)))); + d.z = 0.0f; + d.add(player1->o); + float dist = d.dist(attack); + if(dist < bestdist || bestdir==-1) + { + bestdist = dist; + bestdir = i; + } + } + damagedirections[bestdir] = lastmillis+damageindicatortime; +} + +void drawdmgindicator() +{ + if(!damageindicatorsize) return; + glBlendFunc(GL_ONE, GL_ONE); + static Texture *tex = NULL; + if(!tex) tex = textureload("packages/misc/damageindicator.png"); + float size = (float)damageindicatorsize; + loopi(4) + { + if(!damagedirections[i] || damagedirections[i] < lastmillis) continue; + float t = damageindicatorsize/(float)(damagedirections[i]-lastmillis); + glPushMatrix(); + glColor3ub(150, 0, 0); + 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); + glPopMatrix(); + } +} + void drawequipicons() { glDisable(GL_BLEND); @@ -339,6 +388,8 @@ void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwat else if((player1->weaponsel->type!=GUN_SNIPER || drawteamwarning)) drawcrosshair(drawteamwarning); } + drawdmgindicator(); + if(player1->state==CS_ALIVE) drawequipicons(); glMatrixMode(GL_MODELVIEW); diff --git a/source/src/weapon.cpp b/source/src/weapon.cpp index bfb9adbd..520de196 100644 --- a/source/src/weapon.cpp +++ b/source/src/weapon.cpp @@ -254,7 +254,8 @@ void hit(int damage, playerent *d, playerent *at, const vec &vel, int gun, bool { h.dir = ivec(0, 0, 0); d->damageroll(damage); - damageblend(damage); + //damageblend(damage); + updatedmgindicator(at->o); playsound(S_PAIN6); } else