Fold calls to hud_printf_vulcan_ammo

The conditional is a bit ugly due to the D1 test.

--------

    #include <cstdio>

    void hud_printf_vulcan_ammo(int mline, int x, int y, int line = __builtin_LINE())
    {
	    printf("mline=%2i line=%2i x=%2i y=%2i\n", mline, line, x, y);
    }

    void expanded_form(int full, int vertical, int mline = __builtin_LINE())
    {
	    const int x = 10, y = 20, line_spacing = 5;
	    if (full)
	    {
		    if (!vertical)
			    hud_printf_vulcan_ammo(mline, x, y - line_spacing);
    #if defined(DXX_BUILD_DESCENT_I)
		    else
			    hud_printf_vulcan_ammo(mline, x, y);
    #endif
	    }
	    else
		    hud_printf_vulcan_ammo(mline, x - 2, y - 3);
    }

    void folded_form(int full, int vertical, int mline = __builtin_LINE())
    {
	    const int x = 10, y = 20, line_spacing = 5;
	    int vx, vy;
	    if (full ? (
		    vertical ?
    #if defined(DXX_BUILD_DESCENT_I)
		    (vx = x, vy = y, true)
    #else
		    false
    #endif
		    : (vx = x, vy = y - line_spacing, true)
		    ) : (vx = x - 2, vy = y - 3, true))
		    hud_printf_vulcan_ammo(mline, vx, vy);
    }

    int main()
    {
    #define run(f)	\
	    f(0, 0);	\
	    f(1, 0);	\
	    f(0, 1);	\
	    f(1, 1)
	    run(expanded_form);
	    run(folded_form);
    }

--------
This commit is contained in:
Kp 2016-12-10 17:51:09 +00:00
parent fe0c97ebb9
commit ad055dc60e

View file

@ -1277,17 +1277,32 @@ static void hud_show_primary_weapons_mode(int vertical,int orig_x,int orig_y)
gr_string(x, y, txtweapon, w, h);
if (i == primary_weapon_index_t::VULCAN_INDEX)
{
if (PlayerCfg.CockpitMode[1]==CM_FULL_SCREEN)
{
if (!vertical)
hud_printf_vulcan_ammo(x, y - line_spacing);
/*
* In Descent 1, this will always draw the ammo, but the
* position depends on fullscreen and, if in fullscreen,
* whether in vertical mode.
*
* In Descent 2, this will draw in non-fullscreen and in
* fullscreen non-vertical, but not in fullscreen
* vertical. The fullscreen vertical case is handled
* specially in a large Descent2 block below.
*/
int vx, vy;
if (PlayerCfg.CockpitMode[1] == CM_FULL_SCREEN ? (
vertical ? (
#if defined(DXX_BUILD_DESCENT_I)
else
hud_printf_vulcan_ammo(x, y);
vx = x, vy = y, true
#else
false
#endif
}
else
hud_printf_vulcan_ammo(x - (w+fspacx3), y - ((h+fspacy2)*2));
) : (
vx = x, vy = y - line_spacing, true
)
) : (
vx = x - (w + fspacx3), vy = y - ((h + fspacy2) * 2), true
)
)
hud_printf_vulcan_ammo(vx, vy);
}
}
}