gearbox/src/client/vgui_changechar.qc

304 lines
8.7 KiB
Plaintext

/*
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
static string g_charDescrAdrian;
static string g_charDescrBarney;
static string g_charDescrCivRandom;
static string g_charDescrCleansuit;
static string g_charDescrDrillsgt;
static string g_charDescrGina;
static string g_charDescrGordon;
static string g_charDescrGrunt;
static string g_charDescrRandom;
static string g_charDescrOtis;
static string g_charDescrTandom;
static string g_charDescrRecruit;
static string g_charDescrScientist;
static string g_charDescrSquadleader;
static string g_charDescrTower;
static void
OP4Char_Init(void)
{
g_charDescrAdrian = textfile_to_string("classes/short_adrian.txt");
g_charDescrBarney = textfile_to_string("classes/short_barney.txt");
g_charDescrCivRandom = textfile_to_string("classes/short_civ_random.txt");
g_charDescrCleansuit = textfile_to_string("classes/short_cleansuit.txt");
g_charDescrDrillsgt = textfile_to_string("classes/short_drillsgt.txt");
g_charDescrGina = textfile_to_string("classes/short_gina.txt");
g_charDescrGordon = textfile_to_string("classes/short_gordon.txt");
g_charDescrGrunt = textfile_to_string("classes/short_grunt.txt");
g_charDescrRandom = textfile_to_string("classes/short_op4_random.txt");
g_charDescrOtis = textfile_to_string("classes/short_otis.txt");
g_charDescrTandom = textfile_to_string("classes/short_random.txt");
g_charDescrRecruit = textfile_to_string("classes/short_recruit.txt");
g_charDescrScientist = textfile_to_string("classes/short_scientist.txt");
g_charDescrSquadleader = textfile_to_string("classes/short_squadleader.txt");
g_charDescrTower = textfile_to_string("classes/short_tower.txt");
}
static VGUIWindow winCharSelection;
static VGUIPic imgCharPreview;
static VGUILabel lblCharTitle;
static VGUILabel lblCharDescription;
static VGUILabel lblCharCounter;
class OP4CharButton:VGUIButton
{
void OP4CharButton(void);
virtual void OnMouseUp(void);
virtual void OnMouseEntered(void);
};
void
OP4CharButton::OP4CharButton(void)
{
}
void
OP4CharButton::OnMouseUp(void)
{
int classSelection = GetTag();
sendevent("ClassJoin", "f", (float)classSelection);
winCharSelection.Hide();
}
void
OP4CharButton::OnMouseEntered(void)
{
int classSelection = GetTag();
switch (classSelection) {
case 1:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Barney"));
imgCharPreview.SetImage("gfx/vgui/640_barney");
lblCharDescription.SetTitle(g_charDescrBarney);
break;
case 2:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Cleansuit"));
imgCharPreview.SetImage("gfx/vgui/640_cleansuit");
lblCharDescription.SetTitle(g_charDescrCleansuit);
break;
case 3:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Gina"));
imgCharPreview.SetImage("gfx/vgui/640_gina");
lblCharDescription.SetTitle(g_charDescrGina);
break;
case 4:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Gordon"));
imgCharPreview.SetImage("gfx/vgui/640_gordon");
lblCharDescription.SetTitle(g_charDescrGordon);
break;
case 5:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Otis"));
imgCharPreview.SetImage("gfx/vgui/640_otis");
lblCharDescription.SetTitle(g_charDescrOtis);
break;
case 6:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Scientist"));
imgCharPreview.SetImage("gfx/vgui/640_scientist");
lblCharDescription.SetTitle(g_charDescrScientist);
break;
case 0:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Civ_Random"));
imgCharPreview.SetImage("gfx/vgui/640_civ_random");
lblCharDescription.SetTitle(g_charDescrCivRandom);
break;
case 7:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_SquadLeader"));
imgCharPreview.SetImage("gfx/vgui/640_squadleader");
lblCharDescription.SetTitle(g_charDescrSquadleader);
break;
case 8:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_DrillSgt"));
imgCharPreview.SetImage("gfx/vgui/640_drillsgt");
lblCharDescription.SetTitle(g_charDescrDrillsgt);
break;
case 9:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Grunt"));
imgCharPreview.SetImage("gfx/vgui/640_grunt");
lblCharDescription.SetTitle(g_charDescrGrunt);
break;
case 10:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Recruit"));
imgCharPreview.SetImage("gfx/vgui/640_recruit");
lblCharDescription.SetTitle(g_charDescrRecruit);
break;
case 11:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Adrian"));
imgCharPreview.SetImage("gfx/vgui/640_adrian");
lblCharDescription.SetTitle(g_charDescrAdrian);
break;
case 12:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Tower"));
imgCharPreview.SetImage("gfx/vgui/640_tower");
lblCharDescription.SetTitle(g_charDescrTower);
break;
case 13:
lblCharTitle.SetTitle(Titles_GetTextBody("CTFTitle_Op4_Random"));
imgCharPreview.SetImage("gfx/vgui/640_op4_random");
lblCharDescription.SetTitle(g_charDescrTandom);
break;
}
}
/*
Char/Char list:
Barney
CleansuitSci
Gina
Freeman
Otis
Walter(Scientist)
Random
Squad Leader
Drill Sgt
Grunt
Recruit
Shepard
Tower
OP4Random
*/
string g_classnames_blackmesa [] = {
"Barney",
"Cleansuit",
"Gina",
"Gordon",
"Otis",
"Scientist",
"Civ_Random"
};
string g_classnames_opfor [] = {
"SquadLeader",
"DrillSgt",
"Grunt",
"Recruit",
"Adrian",
"Tower",
"Op4_Random"
};
void
VGUI_ChooseClass(float teamChoice)
{
static int initialized;
static OP4CharButton *btns;
static VGUILabel lblSelectChar;
static VGUIFrame frmCharInfo;
if (!teamChoice)
teamChoice = getplayerkeyfloat(player_localnum, "*team");
if (!initialized) {
vector btnpos = [40,80];
initialized = TRUE;
OP4Char_Init();
winCharSelection = spawn(VGUIWindow);
winCharSelection.SetSize([640, 480]);
winCharSelection.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen);
lblSelectChar = spawn(VGUILabel);
lblSelectChar.SetTitle(Titles_GetTextBody("CTFTitle_SelectYourCharacter"));
lblSelectChar.SetTextSize(19);
lblSelectChar.SetPos([40, 38]);
lblSelectChar.SetSize([400, 24]);
frmCharInfo = spawn(VGUIFrame);
frmCharInfo.SetPos([176, 80]);
frmCharInfo.SetSize([424, 312]);
imgCharPreview = spawn(VGUIPic);
imgCharPreview.SetPos([190, 90]);
lblCharTitle = spawn(VGUILabel);
lblCharTitle.SetPos([338, 90]);
lblCharTitle.SetTextSize(19);
lblCharTitle.SetSize([320, 24]);
lblCharCounter = spawn(VGUILabel);
lblCharCounter.SetPos([338, 90 + 32]);
lblCharCounter.SetSize([320, 18]);
lblCharDescription = spawn(VGUILabel);
lblCharDescription.SetPos([338, 90 + 32 + 32]);
lblCharDescription.SetSize([250, 240]);
g_uiDesktop.Add(winCharSelection);
winCharSelection.Add(lblSelectChar);
winCharSelection.Add(frmCharInfo);
winCharSelection.Add(imgCharPreview);
winCharSelection.Add(lblCharTitle);
winCharSelection.Add(lblCharCounter);
winCharSelection.Add(lblCharDescription);
btns = memalloc(sizeof(OP4CharButton) * g_classnames_blackmesa.length);
for (int i = 0; i < g_classnames_blackmesa.length; i++) {
btns[i] = spawn(OP4CharButton);
btns[i].SetTitle(Titles_GetTextBody(g_classnames_blackmesa[i]));
btns[i].SetSize([124, 24]);
btns[i].SetPos(btnpos);
if (i == 7) {
btns[i].SetKeyEquivalent("0");
btns[i].SetTag(0);
} else {
btns[i].SetKeyEquivalent(ftos((float)i+1));
btns[i].SetTag(i+1i);
}
winCharSelection.Add(btns[i]);
btnpos[1] += 32;
}
}
/* relabel the buttons for the currently selected team. */
for (int i = 0; i < g_classnames_blackmesa.length; i++) {
if (teamChoice == 1) {
btns[i].SetTitle(Titles_GetTextBody(g_classnames_blackmesa[i]));
if (i == 6) {
btns[i].SetKeyEquivalent("0");
btns[i].SetTag(0);
} else {
btns[i].SetKeyEquivalent(ftos((float)i+1));
btns[i].SetTag(i+1i);
}
} else {
btns[i].SetTitle(Titles_GetTextBody(g_classnames_opfor[i]));
if (i == 6) {
btns[i].SetTag(13);
btns[i].SetKeyEquivalent("0");
} else {
btns[i].SetTag(6 + i+1i);
btns[i].SetKeyEquivalent(ftos((float)i+1));
}
}
}
winCharSelection.Show();
winCharSelection.SetPos((video_res / 2) - (winCharSelection.GetSize() / 2));
}