X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Fradar.qc;h=ef209633b76c08f61dec511b18d430cc5a72f44c;hb=060a811f3d8b7aaf8c15b5e450c9975e41a29922;hp=2c71c8e63dc7ab6d37085a4d055fad51722ed390;hpb=26d3e6583da6396f816014eb9a30d36ad26dd4aa;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud/panel/radar.qc b/qcsrc/client/hud/panel/radar.qc index 2c71c8e63..ef209633b 100644 --- a/qcsrc/client/hud/panel/radar.qc +++ b/qcsrc/client/hud/panel/radar.qc @@ -1,21 +1,35 @@ #include "radar.qh" -#include -#include +#include #include #include +#include #include +#include // Radar (#6) -float HUD_Radar_Clickable() +void HUD_Radar_Export(int fh) +{ + // allow saving cvars that aesthetically change the panel into hud skin files + HUD_Write_Cvar("hud_panel_radar_foreground_alpha"); + HUD_Write_Cvar("hud_panel_radar_rotation"); + HUD_Write_Cvar("hud_panel_radar_zoommode"); + HUD_Write_Cvar("hud_panel_radar_scale"); + HUD_Write_Cvar("hud_panel_radar_maximized_scale"); + HUD_Write_Cvar("hud_panel_radar_maximized_size"); + HUD_Write_Cvar("hud_panel_radar_maximized_rotation"); + HUD_Write_Cvar("hud_panel_radar_maximized_zoommode"); +} + +bool HUD_Radar_Clickable() { return hud_panel_radar_mouse && !hud_panel_radar_temp_hidden; } -void HUD_Radar_Show_Maximized(bool doshow,float clickable) +void HUD_Radar_Show_Maximized(bool doshow, bool clickable) { - TC(bool, doshow); + TC(bool, doshow); hud_panel_radar_maximized = doshow; hud_panel_radar_temp_hidden = 0; @@ -23,8 +37,6 @@ void HUD_Radar_Show_Maximized(bool doshow,float clickable) { if (clickable) { - if(autocvar_hud_cursormode) - setcursormode(1); hud_panel_radar_mouse = 1; // we must unset the player's buttons, as they aren't released elsewhere @@ -39,9 +51,6 @@ void HUD_Radar_Show_Maximized(bool doshow,float clickable) { hud_panel_radar_mouse = 0; mouseClicked = 0; - if(autocvar_hud_cursormode) - if(!mv_active) - setcursormode(0); } } void HUD_Radar_Hide_Maximized() @@ -52,9 +61,8 @@ void HUD_Radar_Hide_Maximized() float HUD_Radar_InputEvent(int bInputType, float nPrimary, float nSecondary) { - TC(int, bInputType); - if(!hud_panel_radar_maximized || !hud_panel_radar_mouse || - autocvar__hud_configure || mv_active) + TC(int, bInputType); + if(!hud_panel_radar_maximized || !hud_panel_radar_mouse || autocvar__hud_configure || mv_active) return false; if(bInputType == 3) @@ -64,21 +72,27 @@ float HUD_Radar_InputEvent(int bInputType, float nPrimary, float nSecondary) return true; } + if (bInputType == 2) + return false; + + // at this point bInputType can only be 0 or 1 (key pressed or released) + bool key_pressed = (bInputType == 0); + if(nPrimary == K_MOUSE1) { - if(bInputType == 0) // key pressed + if(key_pressed) mouseClicked |= S_MOUSE1; - else if(bInputType == 1) // key released + else mouseClicked -= (mouseClicked & S_MOUSE1); } else if(nPrimary == K_MOUSE2) { - if(bInputType == 0) // key pressed + if(key_pressed) mouseClicked |= S_MOUSE2; - else if(bInputType == 1) // key released + else mouseClicked -= (mouseClicked & S_MOUSE2); } - else if ( nPrimary == K_ESCAPE && bInputType == 0 ) + else if (nPrimary == K_ESCAPE && key_pressed) { HUD_Radar_Hide_Maximized(); } @@ -97,21 +111,18 @@ float HUD_Radar_InputEvent(int bInputType, float nPrimary, float nSecondary) if ( STAT(HEALTH) <= 0 ) { // Show scoreboard - if ( bInputType < 2 ) + con_keys = findkeysforcommand("+showscores", 0); + keys = tokenize(con_keys); + for (i = 0; i < keys; ++i) { - con_keys = findkeysforcommand("+showscores", 0); - keys = tokenize(con_keys); - for (i = 0; i < keys; ++i) + if ( nPrimary == stof(argv(i)) ) { - if ( nPrimary == stof(argv(i)) ) - { - hud_panel_radar_temp_hidden = bInputType == 0; - return false; - } + hud_panel_radar_temp_hidden = key_pressed; + return false; } } } - else if ( bInputType == 0 ) + else if (key_pressed) HUD_Radar_Hide_Maximized(); return false; @@ -137,14 +148,6 @@ void HUD_Radar_Mouse() return; } - if(!autocvar_hud_cursormode) - { - mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed; - - mousepos_x = bound(0, mousepos_x, vid_conwidth); - mousepos_y = bound(0, mousepos_y, vid_conheight); - } - panel = HUD_PANEL(RADAR); HUD_Panel_LoadCvars(); @@ -170,9 +173,24 @@ void HUD_Radar_Mouse() HUD_Radar_Hide_Maximized(); return; } +} +float HUD_Radar_GetZoomFactor(int zoommode) +{ + switch(zoommode) + { + case 1: return 1 - current_zoomfraction; + case 2: return 0; + case 3: return 1; + } + return current_zoomfraction; +} - draw_cursor_normal(mousepos, '1 1 1', 0.8); +float HUD_Radar_GetAngle(int rotation) +{ + if (rotation) + return 90 * rotation; + return view_angles.y - 90; } void HUD_Radar() @@ -200,7 +218,7 @@ void HUD_Radar() HUD_Panel_LoadCvars(); - float f = 0; + float zoom_factor = 0; if (hud_panel_radar_maximized && !autocvar__hud_configure) { @@ -216,65 +234,16 @@ void HUD_Radar() panel_bg = "gfx/hud/default/border_default"; // fallback if(!radar_panel_modified && panel_bg != panel.current_panel_bg) radar_panel_modified = true; - if(panel.current_panel_bg) - strunzone(panel.current_panel_bg); - panel.current_panel_bg = strzone(panel_bg); + strcpy(panel.current_panel_bg, panel_bg); - switch(hud_panel_radar_maximized_zoommode) - { - default: - case 0: - f = current_zoomfraction; - break; - case 1: - f = 1 - current_zoomfraction; - break; - case 2: - f = 0; - break; - case 3: - f = 1; - break; - } - - switch(hud_panel_radar_maximized_rotation) - { - case 0: - teamradar_angle = view_angles.y - 90; - break; - default: - teamradar_angle = 90 * hud_panel_radar_maximized_rotation; - break; - } + zoom_factor = HUD_Radar_GetZoomFactor(hud_panel_radar_maximized_zoommode); + teamradar_angle = HUD_Radar_GetAngle(hud_panel_radar_maximized_rotation); } + if (!hud_panel_radar_maximized && !autocvar__hud_configure) { - switch(hud_panel_radar_zoommode) - { - default: - case 0: - f = current_zoomfraction; - break; - case 1: - f = 1 - current_zoomfraction; - break; - case 2: - f = 0; - break; - case 3: - f = 1; - break; - } - - switch(hud_panel_radar_rotation) - { - case 0: - teamradar_angle = view_angles.y - 90; - break; - default: - teamradar_angle = 90 * hud_panel_radar_rotation; - break; - } + zoom_factor = HUD_Radar_GetZoomFactor(hud_panel_radar_zoommode); + teamradar_angle = HUD_Radar_GetAngle(hud_panel_radar_rotation); } vector pos, mySize; @@ -317,10 +286,10 @@ void HUD_Radar() else { vector c0, c1, c2, c3, span; - c0 = rotate(mi_min, teamradar_angle * DEG2RAD); - c1 = rotate(mi_max, teamradar_angle * DEG2RAD); - c2 = rotate('1 0 0' * mi_min.x + '0 1 0' * mi_max.y, teamradar_angle * DEG2RAD); - c3 = rotate('1 0 0' * mi_max.x + '0 1 0' * mi_min.y, teamradar_angle * DEG2RAD); + c0 = Rotate(mi_min, teamradar_angle * DEG2RAD); + c1 = Rotate(mi_max, teamradar_angle * DEG2RAD); + c2 = Rotate('1 0 0' * mi_min.x + '0 1 0' * mi_max.y, teamradar_angle * DEG2RAD); + c3 = Rotate('1 0 0' * mi_max.x + '0 1 0' * mi_min.y, teamradar_angle * DEG2RAD); span = '0 0 0'; span.x = max(c0_x, c1_x, c2_x, c3_x) - min(c0_x, c1_x, c2_x, c3_x); span.y = max(c0_y, c1_y, c2_y, c3_y) - min(c0_y, c1_y, c2_y, c3_y); @@ -336,28 +305,21 @@ void HUD_Radar() if(bigsize > normalsize) normalsize = bigsize; - teamradar_size = - f * bigsize - + (1 - f) * normalsize; - teamradar_origin3d_in_texcoord = teamradar_3dcoord_to_texcoord( - f * mi_center - + (1 - f) * view_origin); + teamradar_size = zoom_factor * bigsize + (1 - zoom_factor) * normalsize; + teamradar_origin3d_in_texcoord = teamradar_3dcoord_to_texcoord(zoom_factor * mi_center + (1 - zoom_factor) * view_origin); - drawsetcliparea( - pos.x, - pos.y, - mySize.x, - mySize.y - ); + drawsetcliparea(pos.x, pos.y, mySize.x, mySize.y); draw_teamradar_background(hud_panel_radar_foreground_alpha); IL_EACH(g_radarlinks, true, draw_teamradar_link(it.origin, it.velocity, it.team)); + bool mutator_returnvalue = MUTATOR_CALLHOOK(TeamRadar_Draw); // TODO: allow players to show on the radar as well! + IL_EACH(g_radaricons, it.teamradar_icon, { if ( hud_panel_radar_mouse ) - if ( it.health >= 0 ) - if ( it.team == myteam + 1 || gametype == MAPINFO_TYPE_RACE || !teamplay ) + if ( GetResource(it, RES_HEALTH) >= 0 ) + if ( it.team == myteam + 1 || mutator_returnvalue || !teamplay ) { vector coord = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(it.origin)); if(vdist((mousepos - coord), <, 8)) @@ -369,7 +331,7 @@ void HUD_Radar() drawpic(coord - '8 8 0', "gfx/teamradar_icon_glow", '16 16 0', brightcolor, panel_fg_alpha, 0); } } - entity icon = RadarIcons_from(it.teamradar_icon); + entity icon = REGISTRY_GET(RadarIcons, it.teamradar_icon); draw_teamradar_icon(it.origin, icon, it, spritelookupcolor(it, icon.netname, it.teamradar_color), panel_fg_alpha); }); AL_EACH(_entcs, e, it != NULL, { @@ -384,11 +346,11 @@ void HUD_Radar() if ( hud_panel_radar_mouse ) { - string message = "Click to select teleport destination"; + string message = _("Click to select teleport destination"); if ( STAT(HEALTH) <= 0 ) { - message = "Click to select spawn location"; + message = _("Click to select spawn location"); } drawcolorcodedstring(pos + '0.5 0 0' * (mySize_x - stringwidth(message, true, hud_fontsize)) - '0 1 0' * hud_fontsize_y * 2,