152 lines
3.6 KiB
C
152 lines
3.6 KiB
C
/***
|
|
*
|
|
* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved.
|
|
*
|
|
* See the file LICENSE attached with the sources for usage details.
|
|
*
|
|
****/
|
|
|
|
vector vHUDSlotNumPos[6] = {
|
|
[168 / 255,72 / 128],
|
|
[188 / 255,72 / 128],
|
|
[208 / 255,72 / 128],
|
|
[168 / 255,92 / 128],
|
|
[188 / 255,92 / 128],
|
|
[208 / 255,92 / 128]
|
|
};
|
|
|
|
void HUD_DrawWeaponSelect_Forward(void)
|
|
{
|
|
player pl = (player)self;
|
|
|
|
if (!pl.activeweapon) {
|
|
return;
|
|
}
|
|
|
|
if (pSeat->fHUDWeaponSelectTime < time) {
|
|
pSeat->fHUDWeaponSelected = pl.activeweapon;
|
|
sound(self, CHAN_ITEM, "common/wpn_hudon.wav", 0.5, ATTN_NONE);
|
|
} else {
|
|
sound(self, CHAN_ITEM, "common/wpn_moveselect.wav", 0.5, ATTN_NONE);
|
|
pSeat->fHUDWeaponSelected--;
|
|
if (pSeat->fHUDWeaponSelected <= 0) {
|
|
pSeat->fHUDWeaponSelected = g_weapons.length - 1;
|
|
}
|
|
}
|
|
|
|
pSeat->fHUDWeaponSelectTime = time + 3;
|
|
|
|
if (!(pl.items & g_weapons[pSeat->fHUDWeaponSelected].id)) {
|
|
HUD_DrawWeaponSelect_Forward();
|
|
}
|
|
}
|
|
|
|
void HUD_DrawWeaponSelect_Back(void)
|
|
{
|
|
player pl = (player)self;
|
|
|
|
if (!pl.activeweapon) {
|
|
return;
|
|
}
|
|
|
|
if (pSeat->fHUDWeaponSelectTime < time) {
|
|
pSeat->fHUDWeaponSelected = pl.activeweapon;
|
|
sound(self, CHAN_ITEM, "common/wpn_hudon.wav", 0.5, ATTN_NONE);
|
|
} else {
|
|
sound(self, CHAN_ITEM, "common/wpn_moveselect.wav", 0.5, ATTN_NONE);
|
|
pSeat->fHUDWeaponSelected++;
|
|
if (pSeat->fHUDWeaponSelected >= g_weapons.length) {
|
|
pSeat->fHUDWeaponSelected = 1;
|
|
}
|
|
}
|
|
|
|
pSeat->fHUDWeaponSelectTime = time + 3;
|
|
|
|
if (!(pl.items & g_weapons[pSeat->fHUDWeaponSelected].id)) {
|
|
HUD_DrawWeaponSelect_Back();
|
|
}
|
|
}
|
|
|
|
void HUD_DrawWeaponSelect_Trigger(void)
|
|
{
|
|
sendevent("PlayerSwitchWeapon", "f", pSeat->fHUDWeaponSelected);
|
|
sound(self, CHAN_ITEM, "common/wpn_select.wav", 0.5f, ATTN_NONE);
|
|
pSeat->fHUDWeaponSelected = pSeat->fHUDWeaponSelectTime = 0;
|
|
}
|
|
|
|
void HUD_DrawWeaponSelect_Last(void)
|
|
{
|
|
|
|
}
|
|
|
|
void HUD_DrawWeaponSelect_Num(vector vPos, float fValue)
|
|
{
|
|
drawsubpic(vPos, [20,20], "sprites/640hud7.spr_0.tga", vHUDSlotNumPos[fValue], [20/255, 20/128], g_hud_color, 1, DRAWFLAG_ADDITIVE);
|
|
}
|
|
|
|
int Weapon_InSlotPos(int slot, int pos)
|
|
{
|
|
player pl = (player)self;
|
|
for (int i = 1; i < g_weapons.length; i++) {
|
|
if (g_weapons[i].slot == slot && g_weapons[i].slot_pos == pos) {
|
|
if (pl.items & g_weapons[i].id) {
|
|
return i;
|
|
} else {
|
|
return -1;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
void HUD_DrawWeaponSelect(void)
|
|
{
|
|
player pl = (player)self;
|
|
if (!pl.activeweapon) {
|
|
return;
|
|
}
|
|
if (pSeat->fHUDWeaponSelectTime < time) {
|
|
if (pSeat->fHUDWeaponSelected) {
|
|
sound(self, CHAN_ITEM, "common/wpn_hudoff.wav", 0.5, ATTN_NONE);
|
|
pSeat->fHUDWeaponSelected = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
vector vSelectPos = video_mins + [16,16];
|
|
|
|
int wantslot = g_weapons[pSeat->fHUDWeaponSelected].slot;
|
|
int wantpos = g_weapons[pSeat->fHUDWeaponSelected].slot_pos;
|
|
int b;
|
|
for (int i = 0; i < 5; i++) {
|
|
int slot_selected = 0;
|
|
vSelectPos[1] = video_mins[1] + 16;
|
|
HUD_DrawWeaponSelect_Num(vSelectPos, i);
|
|
vSelectPos[1] += 20;
|
|
for (int x = 0; x < 32; x++) {
|
|
if (i == wantslot) {
|
|
slot_selected = TRUE;
|
|
if (x == wantpos) {
|
|
// Selected Sprite
|
|
Weapons_HUDPic(pSeat->fHUDWeaponSelected, 1, vSelectPos);
|
|
drawsubpic(vSelectPos, [170,45], "sprites/640hud3.spr_0.tga",
|
|
[0,180/256], [170/256,45/256], g_hud_color, 1, DRAWFLAG_ADDITIVE);
|
|
vSelectPos[1] += 50;
|
|
} else if ((b=Weapon_InSlotPos(i, x)) != -1) {
|
|
// Unselected Sprite
|
|
Weapons_HUDPic(b, 0, vSelectPos);
|
|
vSelectPos[1] += 50;
|
|
}
|
|
} else if (Weapon_InSlotPos(i, x) != -1) {
|
|
HUD_DrawWeaponSelect_Num(vSelectPos, 5);
|
|
vSelectPos[1] += 25;
|
|
}
|
|
}
|
|
|
|
if (slot_selected == TRUE) {
|
|
vSelectPos[0] += 175;
|
|
} else {
|
|
vSelectPos[0] += 25;
|
|
}
|
|
}
|
|
}
|
|
|