multi_manager entities now behave correctly when calling themselves in MULTITHREADED mode. Remove GS_RENDERFX option. Too many entities rely on its functionality anyway. Fixed some rendermode behaviour - ladders will no longer be visible. You can now see the playermodel (and no longer the viewmodel) in mirrors. Fixed a lot of warnings.
363 lines
11 KiB
C++
363 lines
11 KiB
C++
/*
|
|
* Copyright (c) 2016-2022 Vera Visions LLC.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
CWidget fn_multiplayer;
|
|
|
|
CMainButton mp_btnQuickstart;
|
|
CMainButton mp_btnInternet;
|
|
CMainButton mp_btnSpectate;
|
|
CMainButton mp_btnChat;
|
|
CMainButton mp_btnLAN;
|
|
CMainButton mp_btnCustomize;
|
|
CMainButton mp_btnControls;
|
|
CMainButton mp_btnDone;
|
|
|
|
CWidget fn_multiplayer2;
|
|
CMainButton mp_btn2Resume;
|
|
CMainButton mp_btn2Disconnect;
|
|
CMainButton mp_btn2Internet;
|
|
CMainButton mp_btn2Spectate;
|
|
CMainButton mp_btn2Chat;
|
|
CMainButton mp_btn2LAN;
|
|
CMainButton mp_btn2Customize;
|
|
CMainButton mp_btn2Controls;
|
|
CMainButton mp_btn2Done;
|
|
|
|
CDialog mp_dgConnect;
|
|
int g_connected;
|
|
int g_connectstatus;
|
|
float g_connecttimer;
|
|
|
|
enum
|
|
{
|
|
CONNECT_NONE,
|
|
CONNECT_INTERNET,
|
|
CONNECT_CHAT
|
|
};
|
|
|
|
void
|
|
mp_btndone_start(void)
|
|
{
|
|
static void mp_btndone_end(void) {
|
|
g_menupage = PAGE_MAIN;
|
|
}
|
|
localsound("../media/launch_dnmenu1.wav");
|
|
header.SetStartEndPos(45,45,70,320);
|
|
header.SetStartEndSize(460,80,156,26);
|
|
header.m_lerp = 0.0f;
|
|
header.m_visible = TRUE;
|
|
header.SetHeader(HEAD_MULTI);
|
|
header.SetExecute(mp_btndone_end);
|
|
}
|
|
|
|
void
|
|
mp_btninet_start(void)
|
|
{
|
|
static void mp_btninet_end(void) {
|
|
g_menupage = PAGE_INTERNETGAMES;
|
|
}
|
|
|
|
localsound("../media/launch_upmenu1.wav");
|
|
|
|
if (g_connected == TRUE) {
|
|
header.SetStartEndPos(50,172,45,45);
|
|
header.SetStartEndSize(156,26,460,80);
|
|
header.m_lerp = 0.0f;
|
|
header.m_visible = TRUE;
|
|
header.SetHeader(HEAD_INETGAMES);
|
|
header.SetExecute(mp_btninet_end);
|
|
} else {
|
|
Master_GetInternetList();
|
|
g_connectstatus = CONNECT_INTERNET;
|
|
g_connecttimer = 8.0f;
|
|
}
|
|
}
|
|
|
|
/* this is from m_chatrooms.cpp */
|
|
void
|
|
cr_btnservers_start(void)
|
|
{
|
|
static void cr_btnservers_end(void) {
|
|
g_menupage = PAGE_INTERNETGAMES;
|
|
}
|
|
|
|
/* hack - jump to here so we draw the connection thing */
|
|
g_menupage = PAGE_MULTIPLAYER;
|
|
localsound("../media/launch_upmenu1.wav");
|
|
|
|
if (g_connected == TRUE) {
|
|
header.SetStartEndPos(252,70,45,45);
|
|
header.SetStartEndSize(156,26,460,80);
|
|
header.m_lerp = 0.0f;
|
|
header.m_visible = TRUE;
|
|
header.SetHeader(HEAD_INETGAMES);
|
|
header.SetExecute(cr_btnservers_end);
|
|
} else {
|
|
Master_GetInternetList();
|
|
g_connectstatus = CONNECT_INTERNET;
|
|
g_connecttimer = 8.0f;
|
|
}
|
|
}
|
|
|
|
void
|
|
mp_btnlan_start(void)
|
|
{
|
|
static void mp_btnlan_end(void) {
|
|
g_menupage = PAGE_LANGAMES;
|
|
}
|
|
Master_GetLANList();
|
|
localsound("../media/launch_upmenu1.wav");
|
|
header.SetStartEndPos(50,268,45,45);
|
|
header.SetStartEndSize(156,26,460,80);
|
|
header.m_lerp = 0.0f;
|
|
header.m_visible = TRUE;
|
|
header.SetHeader(HEAD_LAN);
|
|
header.SetExecute(mp_btnlan_end);
|
|
}
|
|
|
|
void
|
|
mp_btnchatrooms_start(void)
|
|
{
|
|
static void mp_btnchatrooms_end(void) {
|
|
g_menupage = PAGE_CHATROOMS;
|
|
}
|
|
localsound("../media/launch_upmenu1.wav");
|
|
header.SetStartEndPos(50,239,45,45);
|
|
header.SetStartEndSize(156,26,460,80);
|
|
header.m_lerp = 0.0f;
|
|
header.m_visible = TRUE;
|
|
header.SetHeader(HEAD_ROOMS);
|
|
header.SetExecute(mp_btnchatrooms_end);
|
|
}
|
|
|
|
void
|
|
mp_btncustomize_start(void)
|
|
{
|
|
static void mp_btncustomize_end(void) {
|
|
g_menupage = PAGE_CUSTOMIZE;
|
|
}
|
|
localsound("../media/launch_upmenu1.wav");
|
|
header.SetStartEndPos(50,300,45,45);
|
|
header.SetStartEndSize(156,26,460,80);
|
|
header.m_lerp = 0.0f;
|
|
header.m_visible = TRUE;
|
|
header.SetHeader(HEAD_CUSTOMIZE);
|
|
header.SetExecute(mp_btncustomize_end);
|
|
}
|
|
|
|
void
|
|
mp_btnresume(void)
|
|
{
|
|
m_hide();
|
|
}
|
|
|
|
void
|
|
mp_btndisconnect(void)
|
|
{
|
|
localcmd("disconnect\n");
|
|
RichPresence_Clear();
|
|
}
|
|
|
|
void
|
|
menu_multiplayer_init(void)
|
|
{
|
|
fn_multiplayer = spawn(CWidget);
|
|
fn_multiplayer2 = spawn(CWidget);
|
|
mp_dgConnect = spawn(CDialog);
|
|
|
|
/* unconnected menu */
|
|
mp_btnQuickstart = spawn(CMainButton);
|
|
mp_btnQuickstart.SetImage(BTN_QUICKSTART);
|
|
//mp_btnQuickstart.SetExecute(btn_console);
|
|
mp_btnQuickstart.SetPos(50,140);
|
|
Widget_Add(fn_multiplayer, mp_btnQuickstart);
|
|
|
|
mp_btnInternet = spawn(CMainButton);
|
|
mp_btnInternet.SetImage(BTN_INTERNET);
|
|
mp_btnInternet.SetExecute(mp_btninet_start);
|
|
mp_btnInternet.SetPos(50,172);
|
|
Widget_Add(fn_multiplayer, mp_btnInternet);
|
|
|
|
mp_btnSpectate = spawn(CMainButton);
|
|
mp_btnSpectate.SetImage(BTN_SPECTATEGAMES);
|
|
//mp_btnSpectate.SetExecute(btn_console);
|
|
mp_btnSpectate.SetPos(50,204);
|
|
Widget_Add(fn_multiplayer, mp_btnSpectate);
|
|
|
|
mp_btnChat = spawn(CMainButton);
|
|
mp_btnChat.SetImage(BTN_CHATROOMS);
|
|
mp_btnChat.SetExecute(mp_btnchatrooms_start);
|
|
mp_btnChat.SetPos(50,236);
|
|
Widget_Add(fn_multiplayer, mp_btnChat);
|
|
|
|
mp_btnLAN = spawn(CMainButton);
|
|
mp_btnLAN.SetImage(BTN_LAN);
|
|
mp_btnLAN.SetExecute(mp_btnlan_start);
|
|
mp_btnLAN.SetPos(50,268);
|
|
Widget_Add(fn_multiplayer, mp_btnLAN);
|
|
|
|
mp_btnCustomize = spawn(CMainButton);
|
|
mp_btnCustomize.SetImage(BTN_CUSTOMIZE);
|
|
mp_btnCustomize.SetExecute(mp_btncustomize_start);
|
|
mp_btnCustomize.SetPos(50,300);
|
|
Widget_Add(fn_multiplayer, mp_btnCustomize);
|
|
|
|
mp_btnControls = spawn(CMainButton);
|
|
mp_btnControls.SetImage(BTN_CONTROLS);
|
|
//mp_btnControls.SetExecute(btn_console);
|
|
mp_btnControls.SetPos(50,332);
|
|
Widget_Add(fn_multiplayer, mp_btnControls);
|
|
|
|
mp_btnDone = spawn(CMainButton);
|
|
mp_btnDone.SetImage(BTN_DONE);
|
|
mp_btnDone.SetExecute(mp_btndone_start);
|
|
mp_btnDone.SetPos(50,364);
|
|
Widget_Add(fn_multiplayer, mp_btnDone);
|
|
|
|
|
|
/* connected menu */
|
|
mp_btn2Resume = spawn(CMainButton);
|
|
mp_btn2Resume.SetImage(BTN_RESUMEGAME);
|
|
mp_btn2Resume.SetExecute(mp_btnresume);
|
|
mp_btn2Resume.SetPos(50,140);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Resume);
|
|
|
|
mp_btn2Disconnect = spawn(CMainButton);
|
|
mp_btn2Disconnect.SetImage(BTN_DISCONNECT);
|
|
mp_btn2Disconnect.SetExecute(mp_btndisconnect);
|
|
mp_btn2Disconnect.SetPos(50,172);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Disconnect);
|
|
|
|
mp_btn2Internet = spawn(CMainButton);
|
|
mp_btn2Internet.SetImage(BTN_INTERNET);
|
|
mp_btn2Internet.SetExecute(mp_btninet_start);
|
|
mp_btn2Internet.SetPos(50,204);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Internet);
|
|
|
|
mp_btn2Spectate = spawn(CMainButton);
|
|
mp_btn2Spectate.SetImage(BTN_SPECTATEGAMES);
|
|
//mp_btnSpectate.SetExecute(btn_console);
|
|
mp_btn2Spectate.SetPos(50,236);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Spectate);
|
|
|
|
mp_btn2Chat = spawn(CMainButton);
|
|
mp_btn2Chat.SetImage(BTN_CHATROOMS);
|
|
mp_btn2Chat.SetExecute(mp_btnchatrooms_start);
|
|
mp_btn2Chat.SetPos(50,268);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Chat);
|
|
|
|
mp_btn2LAN = spawn(CMainButton);
|
|
mp_btn2LAN.SetImage(BTN_LAN);
|
|
mp_btn2LAN.SetExecute(mp_btnlan_start);
|
|
mp_btn2LAN.SetPos(50,300);
|
|
Widget_Add(fn_multiplayer2, mp_btn2LAN);
|
|
|
|
mp_btn2Customize = spawn(CMainButton);
|
|
mp_btn2Customize.SetImage(BTN_CUSTOMIZE);
|
|
mp_btn2Customize.SetExecute(mp_btncustomize_start);
|
|
mp_btn2Customize.SetPos(50,332);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Customize);
|
|
|
|
mp_btn2Controls = spawn(CMainButton);
|
|
mp_btn2Controls.SetImage(BTN_CONTROLS);
|
|
//mp_btn2Controls.SetExecute(btn_console);
|
|
mp_btn2Controls.SetPos(50,364);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Controls);
|
|
|
|
mp_btn2Done = spawn(CMainButton);
|
|
mp_btn2Done.SetImage(BTN_DONE);
|
|
mp_btn2Done.SetExecute(mp_btndone_start);
|
|
mp_btn2Done.SetPos(50,396);
|
|
Widget_Add(fn_multiplayer2, mp_btn2Done);
|
|
|
|
Master_UpdateCache();
|
|
}
|
|
|
|
void
|
|
menu_multiplayer_draw(void)
|
|
{
|
|
Header_Draw(HEAD_MULTI);
|
|
|
|
if (!autocvar__menu_singleplayer && clientstate() == 2 && !g_background) {
|
|
Widget_Draw(fn_multiplayer2);
|
|
|
|
WLabel_Static(215, 148, m_reslbl[IDS_MULTI_RESUMEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 180, m_reslbl[IDS_MULTI_DISCONNECTHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 212, m_reslbl[IDS_MULTI_BROWSEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 244, "Spectate internet games.", HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 276, m_reslbl[IDS_MULTI_CHATHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 308, m_reslbl[IDS_MULTI_LANHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 340, m_reslbl[IDS_MULTI_CUSTOMIZEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 372, m_reslbl[IDS_CFG_CONTROLHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 404, m_reslbl[IDS_MULTI_DONEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
} else {
|
|
Widget_Draw(fn_multiplayer);
|
|
|
|
WLabel_Static(215, 148, m_reslbl[IDS_MAIN_QUICKHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 180, m_reslbl[IDS_MULTI_BROWSEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 212, "Spectate internet games.", HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 244, m_reslbl[IDS_MULTI_CHATHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 276, m_reslbl[IDS_MULTI_LANHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 308, m_reslbl[IDS_MULTI_CUSTOMIZEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 340, m_reslbl[IDS_CFG_CONTROLHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
WLabel_Static(215, 372, m_reslbl[IDS_MULTI_DONEHELP], HELPTXT_SIZE, HELPTXT_SIZE, col_help,
|
|
1.0f, 0, font_label);
|
|
}
|
|
|
|
if (g_connectstatus) {
|
|
if (Master_GetTotalServers() || g_connecttimer <= 0) {
|
|
g_connected = TRUE;
|
|
g_connectstatus = CONNECT_NONE;
|
|
mp_btninet_start();
|
|
}
|
|
mp_dgConnect.Draw();
|
|
WField_Static(162, 180, m_reslbl[IDS_FNET_LOGIN], 320, 260,
|
|
col_prompt_text, 1.0f, 2, font_label_p);
|
|
WField_Static(162, 280, sprintf(m_reslbl[IDS_QUICK_REQUEST],g_connecttimer), 320, 260,
|
|
col_prompt_title, 1.0f, 2, font_label);
|
|
g_connecttimer -= frametime;
|
|
Master_ResortCache();
|
|
}
|
|
}
|
|
|
|
void
|
|
menu_multiplayer_input(float evtype, float scanx, float chary, float devid)
|
|
{
|
|
if (g_connectstatus)
|
|
return;
|
|
|
|
if (!autocvar__menu_singleplayer && clientstate() == 2 && !g_background)
|
|
Widget_Input(fn_multiplayer2, evtype, scanx, chary, devid);
|
|
else
|
|
Widget_Input(fn_multiplayer, evtype, scanx, chary, devid);
|
|
|
|
}
|