diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fpsgame/fps.cpp | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/src/fpsgame/fps.cpp b/src/fpsgame/fps.cpp index 35a5d65..2f2986e 100644 --- a/src/fpsgame/fps.cpp +++ b/src/fpsgame/fps.cpp @@ -431,6 +431,21 @@ namespace game VARP(teamcolorfrags, 0, 1, 1); + /// xolatile: HUD frag messages + +#define fragmessageduration (2000) + + string hudfragger, hudfragged; + int hudfraggun, hudfragmillis; + + void sethudfragdata(char *fragger, char *fragged, int gunid) + { + copystring(hudfragger, fragger ? fragger : ""); + copystring(hudfragged, fragged); + hudfraggun = gunid; + hudfragmillis = lastmillis; + } + void killed(fpsent *d, fpsent *actor) { if(d->state==CS_EDITING) @@ -470,11 +485,19 @@ namespace game } else { - if(d==player1) conoutf(contype, "\f2%s got fragged by %s", dname, aname); - else conoutf(contype, "\f2%s fragged %s", aname, dname); + if(d==player1) + { + conoutf(contype, "\f2%s got fragged by %s", dname, aname); + sethudfragdata(actor->name, d->name, actor->gunselect); + } + else + { + conoutf(contype, "\f2%s fragged %s", aname, dname); + sethudfragdata(actor->name, d->name, actor->gunselect); + } } deathstate(d); - ai::killed(d, actor); + ai::killed(d, actor); } void timeupdate(int secs) @@ -1039,8 +1062,24 @@ namespace game if(!m_edit) { - if(gameclock) drawgameclock(w, h); - if(hudscore) drawhudscore(w, h); + if(gameclock) drawgameclock(w, h); + if(hudscore) drawhudscore(w, h); + } + + /// Frag message. + + if(hudfragmillis+fragmessageduration > lastmillis) + { + vec2 center = vec2(0.5*w, 0.2*h); + float width = 0, height = 0; + pushhudmatrix(); + hudmatrix.scale(0.8, 0.8, 1); + flushhudmatrix(); + draw_textf("%s", center.x, center.y, hudfragger); + text_boundsf(hudfragger, width, height); + drawicon(HICON_FIST+hudfraggun, center.x+width, center.y, height); + draw_textf("%s", center.x+width+height, center.y, hudfragged); + pophudmatrix(); } } |
