From: FruitieX Date: Wed, 13 Apr 2011 07:49:56 +0000 (+0300) Subject: remove the shownames HUD panel, start implementing the actual drawing/positioning... X-Git-Tag: xonotic-v0.5.0~294 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=08525da2cc369f94d6933c3526aa82805d557ae2;p=xonotic%2Fxonotic-data.pk3dir.git remove the shownames HUD panel, start implementing the actual drawing/positioning code --- diff --git a/qcsrc/client/shownames.qc b/qcsrc/client/shownames.qc new file mode 100644 index 000000000..7b59e35e9 --- /dev/null +++ b/qcsrc/client/shownames.qc @@ -0,0 +1,243 @@ +void Draw_WaypointSprite() +{ + if(!autocvar_hud_shownames) + return; + + string spriteimage; + float t; + + if(self.lifetime) + self.alpha = pow(bound(0, (self.fadetime - time) / self.lifetime, 1), waypointsprite_timealphaexponent); + else + self.alpha = 1; + + if(self.hideflags & 2) + return; // radar only + + if(autocvar_cl_hidewaypoints >= 2) + return; + + if(self.hideflags & 1) + if(autocvar_cl_hidewaypoints) + return; // fixed waypoint + + InterpolateOrigin_Do(); + + t = GetPlayerColor(player_localentnum - 1) + 1; + + spriteimage = ""; + + // choose the sprite + switch(self.rule) + { + case SPRITERULE_DEFAULT: + if(self.team) + { + if(self.team == t) + spriteimage = self.netname; + else + spriteimage = ""; + } + else + spriteimage = self.netname; + break; + case SPRITERULE_TEAMPLAY: + if(t == COLOR_SPECTATOR + 1) + spriteimage = self.netname3; + else if(self.team == t) + spriteimage = self.netname2; + else + spriteimage = self.netname; + break; + default: + error("Invalid waypointsprite rule!"); + break; + } + + if(spriteimage == "") + return; + + float dist; + dist = vlen(self.origin - view_origin); + + float a; + a = self.alpha * autocvar_hud_panel_fg_alpha; + + if(self.maxdistance > waypointsprite_normdistance) + a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent); + else if(self.maxdistance > 0) + a *= pow(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha; + + if(a <= 0) + return; + + // draw the sprite image + vector o; + float rot; + o = project_3d_to_2d(self.origin); + rot = 0; + + if(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight) + { + // scale it to be just in view + vector d; + float f1, f2; + + // get the waypoint angle vector + /* + d_x = view_right * (self.origin - view_origin) * vid_conwidth / vid_width; + d_y = -view_up * (self.origin - view_origin) * vid_conheight / (vid_height * vid_pixelheight); + d_z = 0; + */ + + d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight; + + /* + if(autocvar_v_flipped) + d_x = -d_x; + */ + + f1 = d_x / vid_conwidth; + f2 = d_y / vid_conheight; + + if(max(f1, -f1) > max(f2, -f2)) + { + if(d_z * f1 > 0) + { + // RIGHT edge + d = d * (0.5 / f1); + rot = 3; + } + else + { + // LEFT edge + d = d * (-0.5 / f1); + rot = 1; + } + } + else + { + if(d_z * f2 > 0) + { + // BOTTOM edge + d = d * (0.5 / f2); + rot = 0; + } + else + { + // TOP edge + d = d * (-0.5 / f2); + rot = 2; + } + } + + o = d + '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; + } + o_z = 0; + + float vidscale; + vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height); + + t = stof(db_get(tempdb, strcat("/spriteframes/", spriteimage))); + if(t == 0) + spriteimage = strcat("models/sprites/", spriteimage); + else + spriteimage = strcat("models/sprites/", spriteimage, "_frame", ftos(mod(floor((max(0, time - self.spawntime)) * 2), t))); + + float edgedistance_min, crosshairdistance; + edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y); + + crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) ); + + t = waypointsprite_scale * vidscale; + a *= waypointsprite_alpha; + + { + a = a * (1 - (1 - waypointsprite_distancefadealpha) * (bound(0, dist/waypointsprite_distancefadedistance, 1))); + t = t * (1 - (1 - waypointsprite_distancefadescale) * (bound(0, dist/waypointsprite_distancefadedistance, 1))); + } + if (edgedistance_min < waypointsprite_edgefadedistance) { + a = a * (1 - (1 - waypointsprite_edgefadealpha) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1))); + t = t * (1 - (1 - waypointsprite_edgefadescale) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1))); + } + if(crosshairdistance < waypointsprite_crosshairfadedistance) { + a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1))); + t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1))); + } + drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, '1 1 1', a, DRAWFLAG_MIPMAP); + + if(self.build_finished) + { + if(time < self.build_finished + 0.25) + { + if(time < self.build_started) + self.health = self.build_starthealth; + else if(time < self.build_finished) + self.health = (time - self.build_started) / (self.build_finished - self.build_started) * (1 - self.build_starthealth) + self.build_starthealth; + else + self.health = 1; + } + else + self.health = -1; + } + + if(self.health >= 0) + { + float align; + if(self.build_finished) + align = 0.5; + else + align = 0; + drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, SPRITE_HEALTHBAR_WIDTH * t, SPRITE_HEALTHBAR_HEIGHT * t, SPRITE_HEALTHBAR_MARGIN * t, SPRITE_HEALTHBAR_BORDER * t, align, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL); + } +} + +float shownames_alpha; +void HUD_ShowNames(void) +{ + // for each playerslot etc + + vector iconpos, iconsize; + vector namepos, namesize; + if(mySize_x/mySize_y > 6) + { + iconpos = myPos; + iconsize = eX * 2 * mySize_y + eY * mySize_y; + + namepos = myPos + eX * 2 * mySize_y; + namesize = eX * mySize_x - eX * 2 * mySize_y + eY * mySize_y; + } + else + { + iconpos = myPos + eX * 0.5 * mySize_x - eX * 0.5 * mySize_y; + iconsize = eX * mySize_y + eY * 0.5 * mySize_y; + + namepos = myPos + eY * 0.5 * mySize_y; + namesize = eX * mySize_x + eY * 0.5 * mySize_y; + } + + if(shownames_health > 0) // otherwise player is an enemy + { + // "ghost" backgrounds + drawpic_aspect_skin(iconpos, "health", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL); + drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL); + + drawsetcliparea(0, myPos_y + iconsize_y - iconsize_y * min(1, shownames_health/autocvar_hud_panel_healtharmor_maxhealth), vid_conwidth, myPos_y + iconsize_y); + drawpic_aspect_skin(iconpos, "health", '1 1 0' * iconsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + + drawsetcliparea(0, myPos_y + iconsize_y - iconsize_y * min(1, shownames_armor/autocvar_hud_panel_healtharmor_maxarmor), vid_conwidth, myPos_y + iconsize_y); + drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor", '1 1 0' * iconsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawresetcliparea(); + } + else + { + drawpic_aspect_skin(iconpos, "health_unknown", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha, DRAWFLAG_NORMAL); + drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor_unknown", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha, DRAWFLAG_NORMAL); + } + + if(autocvar__hud_configure) + drawcolorcodedstring_aspect(namepos, "Player1234", namesize, panel_fg_alpha, DRAWFLAG_NORMAL); + else + drawcolorcodedstring_aspect(namepos, shownames_netname, namesize, panel_fg_alpha, DRAWFLAG_NORMAL); +} + diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index bfe3dec49..587cc2799 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -650,8 +650,7 @@ float HUD_PANEL_CHAT = 12; float HUD_PANEL_ENGINEINFO = 13; float HUD_PANEL_INFOMESSAGES = 14; float HUD_PANEL_PHYSICS = 15; -float HUD_PANEL_SHOWNAMES = 16; -float HUD_PANEL_NUM = 17; // always last panel id + 1, please increment when adding a new panel +float HUD_PANEL_NUM = 16; // always last panel id + 1, please increment when adding a new panel string HUD_PANELNAME_WEAPONS = "weapons"; string HUD_PANELNAME_AMMO = "ammo"; @@ -669,7 +668,6 @@ string HUD_PANELNAME_CHAT = "chat"; string HUD_PANELNAME_ENGINEINFO = "engineinfo"; string HUD_PANELNAME_INFOMESSAGES = "infomessages"; string HUD_PANELNAME_PHYSICS = "physics"; -string HUD_PANELNAME_SHOWNAMES = "shownames"; float HUD_MENU_ENABLE = 0; diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 3b6033f6f..d95c99e95 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -220,7 +220,6 @@ switch(id) {\ case HUD_PANEL_ENGINEINFO: panel_name = HUD_PANELNAME_ENGINEINFO; break; \ case HUD_PANEL_INFOMESSAGES: panel_name = HUD_PANELNAME_INFOMESSAGES; break; \ case HUD_PANEL_PHYSICS: panel_name = HUD_PANELNAME_PHYSICS; break; \ - case HUD_PANEL_SHOWNAMES: panel_name = HUD_PANELNAME_SHOWNAMES; break; \ } ENDS_WITH_CURLY_BRACE // Get name of specified panel id diff --git a/qcsrc/menu/classes.c b/qcsrc/menu/classes.c index 80aae373c..61f5a4877 100644 --- a/qcsrc/menu/classes.c +++ b/qcsrc/menu/classes.c @@ -102,7 +102,6 @@ #include "xonotic/dialog_hudpanel_chat.c" #include "xonotic/dialog_hudpanel_engineinfo.c" #include "xonotic/dialog_hudpanel_infomessages.c" -#include "xonotic/dialog_hudpanel_shownames.c" #include "xonotic/dialog_hudpanel_weapons.c" #include "xonotic/dialog_hudpanel_physics.c" #include "xonotic/slider_picmip.c" diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_shownames.c b/qcsrc/menu/xonotic/dialog_hudpanel_shownames.c deleted file mode 100644 index 3b8dc2825..000000000 --- a/qcsrc/menu/xonotic/dialog_hudpanel_shownames.c +++ /dev/null @@ -1,30 +0,0 @@ -#ifdef INTERFACE -CLASS(XonoticHUDShownamesDialog) EXTENDS(XonoticRootDialog) - METHOD(XonoticHUDShownamesDialog, fill, void(entity)) - ATTRIB(XonoticHUDShownamesDialog, title, string, _("Shownames Panel")) - ATTRIB(XonoticHUDShownamesDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) - ATTRIB(XonoticHUDShownamesDialog, intendedWidth, float, 0.4) - ATTRIB(XonoticHUDShownamesDialog, rows, float, 17) - ATTRIB(XonoticHUDShownamesDialog, columns, float, 4) - ATTRIB(XonoticHUDShownamesDialog, name, string, "HUDshownames") -ENDCLASS(XonoticHUDShownamesDialog) -#endif - -#ifdef IMPLEMENTATION -void XonoticHUDShownamesDialog_fill(entity me) -{ - entity e; - string panelname = "shownames"; - float i; - - me.TR(me); - me.TD(me, 1, 4, e = makeXonoticTextSlider("hud_panel_shownames")); - e.addValue(e, _("Panel disabled"), "0"); - e.addValue(e, _("Panel enabled on teammates"), "1"); - e.addValue(e, _("Panel always enabled"), "2"); - e.configureXonoticTextSliderValues(e); - - DIALOG_HUDPANEL_COMMON_NOTOGGLE(); - -} -#endif diff --git a/qcsrc/menu/xonotic/mainwindow.c b/qcsrc/menu/xonotic/mainwindow.c index 1d7d50d87..feec5a9b9 100644 --- a/qcsrc/menu/xonotic/mainwindow.c +++ b/qcsrc/menu/xonotic/mainwindow.c @@ -118,10 +118,6 @@ void MainWindow_configureMainWindow(entity me) i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); - i = spawnXonoticHUDShownamesDialog(); - i.configureDialog(i); - me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); - me.advancedDialog = i = spawnXonoticAdvancedDialog(); i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);