summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4756f15)
raw | patch | inline | side by side (parent: 4756f15)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Tue, 8 Jun 2021 03:05:25 +0000 (06:05 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 9 Jun 2023 07:41:59 +0000 (10:41 +0300) |
src/game/Doom2DF.lpr | patch | blob | history | |
src/game/g_netmaster.pas | patch | blob | history | |
src/game/opengl/r_game.pas | patch | blob | history | |
src/game/opengl/r_netmaster.pas | [new file with mode: 0644] | patch | blob |
diff --git a/src/game/Doom2DF.lpr b/src/game/Doom2DF.lpr
index 179df4e35cc588c3e711d1efd4c4b910f2d8a692..8ee5396710b5d96c35dd0962b55b6c4f2d79af56 100644 (file)
--- a/src/game/Doom2DF.lpr
+++ b/src/game/Doom2DF.lpr
r_items in 'opengl/r_items.pas',
r_map in 'opengl/r_map.pas',
r_monsters in 'opengl/r_monsters.pas',
+ r_netmaster in 'opengl/r_netmaster.pas',
r_panel in 'opengl/r_panel.pas',
r_weapons in 'opengl/r_weapons.pas',
index e6e7a6c5eed31414263719c61717a372ccf56d2f..ba175406ab78a14a15e317d2b949b180b712adc4 100644 (file)
--- a/src/game/g_netmaster.pas
+++ b/src/game/g_netmaster.pas
procedure g_Net_Slist_ShutdownAll ();
procedure g_Serverlist_GenerateTable (SL: TNetServerList; var ST: TNetServerTable);
-procedure g_Serverlist_Draw (var SL: TNetServerList; var ST: TNetServerTable);
procedure g_Serverlist_Control (var SL: TNetServerList; var ST: TNetServerTable);
+function GetServerFromTable (Index: Integer; SL: TNetServerList; ST: TNetServerTable): TNetServer;
+
function GetTimerMS (): Int64;
+ var (* private state *)
+ slSelection: Byte = 0;
+ slReadUrgent: Boolean = False;
implementation
NetMEvent: ENetEvent;
mlist: array of TMasterHost = nil;
- slSelection: Byte = 0;
slFetched: Boolean = False;
slDirPressed: Boolean = False;
- slReadUrgent: Boolean = False;
reportsEnabled: Boolean = true;
end;
-//==========================================================================
-//
-// g_Serverlist_Draw
-//
-//==========================================================================
-procedure g_Serverlist_Draw (var SL: TNetServerList; var ST: TNetServerTable);
-var
- Srv: TNetServer;
- sy, i, y, mw, mx, l, motdh: Integer;
- cw: Byte = 0;
- ch: Byte = 0;
- ww: Word = 0;
- hh: Word = 0;
- ip: AnsiString;
-begin
- ip := '';
- sy := 0;
-
- e_CharFont_GetSize(gMenuFont, _lc[I_NET_SLIST], ww, hh);
- e_CharFont_Print(gMenuFont, (gScreenWidth div 2) - (ww div 2), 16, _lc[I_NET_SLIST]);
-
- e_TextureFontGetSize(gStdFont, cw, ch);
-
- ip := _lc[I_NET_SLIST_HELP];
- mw := (Length(ip) * cw) div 2;
-
- motdh := gScreenHeight - 49 - ch * b_Text_LineCount(slMOTD);
-
- e_DrawFillQuad(16, 64, gScreenWidth-16, motdh, 64, 64, 64, 110);
- e_DrawQuad(16, 64, gScreenWidth-16, motdh, 255, 127, 0);
-
- e_TextureFontPrintEx(gScreenWidth div 2 - mw, gScreenHeight-24, ip, gStdFont, 225, 225, 225, 1);
-
- // MOTD
- if slMOTD <> '' then
- begin
- e_DrawFillQuad(16, motdh, gScreenWidth-16, gScreenHeight-44, 64, 64, 64, 110);
- e_DrawQuad(16, motdh, gScreenWidth-16, gScreenHeight-44, 255, 127, 0);
- e_TextureFontPrintFmt(20, motdh + 3, slMOTD, gStdFont, False, True);
- end;
-
- // Urgent message
- if not slReadUrgent and (slUrgent <> '') then
- begin
- e_DrawFillQuad(17, 65, gScreenWidth-17, motdh-1, 64, 64, 64, 128);
- e_DrawFillQuad(gScreenWidth div 2 - 256, gScreenHeight div 2 - 60,
- gScreenWidth div 2 + 256, gScreenHeight div 2 + 60, 64, 64, 64, 128);
- e_DrawQuad(gScreenWidth div 2 - 256, gScreenHeight div 2 - 60,
- gScreenWidth div 2 + 256, gScreenHeight div 2 + 60, 255, 127, 0);
- e_DrawLine(1, gScreenWidth div 2 - 256, gScreenHeight div 2 - 40,
- gScreenWidth div 2 + 256, gScreenHeight div 2 - 40, 255, 127, 0);
- l := Length(_lc[I_NET_SLIST_URGENT]) div 2;
- e_TextureFontPrint(gScreenWidth div 2 - cw * l, gScreenHeight div 2 - 58,
- _lc[I_NET_SLIST_URGENT], gStdFont);
- l := Length(slUrgent) div 2;
- e_TextureFontPrintFmt(gScreenWidth div 2 - 253, gScreenHeight div 2 - 38,
- slUrgent, gStdFont, False, True);
- l := Length(_lc[I_NET_SLIST_URGENT_CONT]) div 2;
- e_TextureFontPrint(gScreenWidth div 2 - cw * l, gScreenHeight div 2 + 41,
- _lc[I_NET_SLIST_URGENT_CONT], gStdFont);
- e_DrawLine(1, gScreenWidth div 2 - 256, gScreenHeight div 2 + 40,
- gScreenWidth div 2 + 256, gScreenHeight div 2 + 40, 255, 127, 0);
- Exit;
- end;
-
- if SL = nil then
- begin
- l := Length(slWaitStr) div 2;
- e_DrawFillQuad(17, 65, gScreenWidth-17, motdh-1, 64, 64, 64, 128);
- e_DrawQuad(gScreenWidth div 2 - 192, gScreenHeight div 2 - 10,
- gScreenWidth div 2 + 192, gScreenHeight div 2 + 11, 255, 127, 0);
- e_TextureFontPrint(gScreenWidth div 2 - cw * l, gScreenHeight div 2 - ch div 2,
- slWaitStr, gStdFont);
- Exit;
- end;
-
- y := 90;
- if (slSelection < Length(ST)) then
- begin
- I := slSelection;
- sy := y + 42 * I - 4;
- Srv := GetServerFromTable(I, SL, ST);
- ip := _lc[I_NET_ADDRESS] + ' ' + Srv.IP + ':' + IntToStr(Srv.Port);
- if Srv.Password then
- ip := ip + ' ' + _lc[I_NET_SERVER_PASSWORD] + ' ' + _lc[I_MENU_YES]
- else
- ip := ip + ' ' + _lc[I_NET_SERVER_PASSWORD] + ' ' + _lc[I_MENU_NO];
- end else
- if Length(ST) > 0 then
- slSelection := 0;
-
- mw := (gScreenWidth - 188);
- mx := 16 + mw;
-
- e_DrawFillQuad(16 + 1, sy, gScreenWidth - 16 - 1, sy + 40, 64, 64, 64, 0);
- e_DrawLine(1, 16 + 1, sy, gScreenWidth - 16 - 1, sy, 205, 205, 205);
- e_DrawLine(1, 16 + 1, sy + 41, gScreenWidth - 16 - 1, sy + 41, 255, 255, 255);
-
- e_DrawLine(1, 16, 85, gScreenWidth - 16, 85, 255, 127, 0);
- e_DrawLine(1, 16, motdh-20, gScreenWidth-16, motdh-20, 255, 127, 0);
-
- e_DrawLine(1, mx - 70, 64, mx - 70, motdh, 255, 127, 0);
- e_DrawLine(1, mx, 64, mx, motdh-20, 255, 127, 0);
- e_DrawLine(1, mx + 52, 64, mx + 52, motdh-20, 255, 127, 0);
- e_DrawLine(1, mx + 104, 64, mx + 104, motdh-20, 255, 127, 0);
-
- e_TextureFontPrintEx(18, 68, 'NAME/MAP', gStdFont, 255, 127, 0, 1);
- e_TextureFontPrintEx(mx - 68, 68, 'PING', gStdFont, 255, 127, 0, 1);
- e_TextureFontPrintEx(mx + 2, 68, 'MODE', gStdFont, 255, 127, 0, 1);
- e_TextureFontPrintEx(mx + 54, 68, 'PLRS', gStdFont, 255, 127, 0, 1);
- e_TextureFontPrintEx(mx + 106, 68, 'VER', gStdFont, 255, 127, 0, 1);
-
- y := 90;
- for I := 0 to High(ST) do
- begin
- Srv := GetServerFromTable(I, SL, ST);
- // Name and map
- e_TextureFontPrintEx(18, y, Srv.Name, gStdFont, 255, 255, 255, 1);
- e_TextureFontPrintEx(18, y + 16, Srv.Map, gStdFont, 210, 210, 210, 1);
-
- // Ping and similar count
- if (Srv.Ping < 0) or (Srv.Ping > 999) then
- e_TextureFontPrintEx(mx - 68, y, _lc[I_NET_SLIST_NO_ACCESS], gStdFont, 255, 0, 0, 1)
- else
- if Srv.Ping = 0 then
- e_TextureFontPrintEx(mx - 68, y, '<1' + _lc[I_NET_SLIST_PING_MS], gStdFont, 255, 255, 255, 1)
- else
- e_TextureFontPrintEx(mx - 68, y, IntToStr(Srv.Ping) + _lc[I_NET_SLIST_PING_MS], gStdFont, 255, 255, 255, 1);
-
- if Length(ST[I].Indices) > 1 then
- e_TextureFontPrintEx(mx - 68, y + 16, '< ' + IntToStr(Length(ST[I].Indices)) + ' >', gStdFont, 210, 210, 210, 1);
-
- // Game mode
- e_TextureFontPrintEx(mx + 2, y, g_Game_ModeToText(Srv.GameMode), gStdFont, 255, 255, 255, 1);
-
- // Players
- e_TextureFontPrintEx(mx + 54, y, IntToStr(Srv.Players) + '/' + IntToStr(Srv.MaxPlayers), gStdFont, 255, 255, 255, 1);
- e_TextureFontPrintEx(mx + 54, y + 16, IntToStr(Srv.LocalPl) + '+' + IntToStr(Srv.Bots), gStdFont, 210, 210, 210, 1);
-
- // Version
- e_TextureFontPrintEx(mx + 106, y, IntToStr(Srv.Protocol), gStdFont, 255, 255, 255, 1);
-
- y := y + 42;
- end;
-
- e_TextureFontPrintEx(20, motdh-20+3, ip, gStdFont, 205, 205, 205, 1);
- ip := IntToStr(Length(ST)) + _lc[I_NET_SLIST_SERVERS];
- e_TextureFontPrintEx(gScreenWidth - 48 - (Length(ip) + 1)*cw,
- motdh-20+3, ip, gStdFont, 205, 205, 205, 1);
-end;
-
-
//==========================================================================
//
// g_Serverlist_GenerateTable
index d4e596cdbea6f059b84d1e9e310a40098da426b4..d752fdc5ec818c284faf23aa38a2bdd0ebe86ca2 100644 (file)
g_textures, e_input, e_sound,
g_language, g_console, g_menu, g_triggers, g_player, g_options, g_monsters, g_map, g_panel, g_window,
g_items, g_weapons, g_gfx, g_phys, g_net, g_gui, g_netmaster,
- g_game, r_console, r_gfx, r_items, r_map, r_panel, r_monsters, r_weapons
+ g_game, r_console, r_gfx, r_items, r_map, r_panel, r_monsters, r_weapons, r_netmaster
;
var
// end;
r_Game_DrawMenuBackground('MENU_BACKGROUND');
e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
- g_Serverlist_Draw(slCurrent, slTable);
+ r_Serverlist_Draw(slCurrent, slTable);
end;
end;
diff --git a/src/game/opengl/r_netmaster.pas b/src/game/opengl/r_netmaster.pas
--- /dev/null
@@ -0,0 +1,178 @@
+(* Copyright (C) Doom 2D: Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License ONLY.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$INCLUDE ../../shared/a_modes.inc}
+unit r_netmaster;
+
+interface
+
+ uses g_netmaster;
+
+ procedure r_Serverlist_Draw (var SL: TNetServerList; var ST: TNetServerTable);
+
+implementation
+
+ uses
+ SysUtils, Classes, Math,
+ e_graphics,
+ g_basic, g_language, g_game, g_menu
+ ;
+
+procedure r_Serverlist_Draw (var SL: TNetServerList; var ST: TNetServerTable);
+var
+ Srv: TNetServer;
+ sy, i, y, mw, mx, l, motdh: Integer;
+ cw: Byte = 0;
+ ch: Byte = 0;
+ ww: Word = 0;
+ hh: Word = 0;
+ ip: AnsiString;
+begin
+ ip := '';
+ sy := 0;
+
+ e_CharFont_GetSize(gMenuFont, _lc[I_NET_SLIST], ww, hh);
+ e_CharFont_Print(gMenuFont, (gScreenWidth div 2) - (ww div 2), 16, _lc[I_NET_SLIST]);
+
+ e_TextureFontGetSize(gStdFont, cw, ch);
+
+ ip := _lc[I_NET_SLIST_HELP];
+ mw := (Length(ip) * cw) div 2;
+
+ motdh := gScreenHeight - 49 - ch * b_Text_LineCount(slMOTD);
+
+ e_DrawFillQuad(16, 64, gScreenWidth-16, motdh, 64, 64, 64, 110);
+ e_DrawQuad(16, 64, gScreenWidth-16, motdh, 255, 127, 0);
+
+ e_TextureFontPrintEx(gScreenWidth div 2 - mw, gScreenHeight-24, ip, gStdFont, 225, 225, 225, 1);
+
+ // MOTD
+ if slMOTD <> '' then
+ begin
+ e_DrawFillQuad(16, motdh, gScreenWidth-16, gScreenHeight-44, 64, 64, 64, 110);
+ e_DrawQuad(16, motdh, gScreenWidth-16, gScreenHeight-44, 255, 127, 0);
+ e_TextureFontPrintFmt(20, motdh + 3, slMOTD, gStdFont, False, True);
+ end;
+
+ // Urgent message
+ if not slReadUrgent and (slUrgent <> '') then
+ begin
+ e_DrawFillQuad(17, 65, gScreenWidth-17, motdh-1, 64, 64, 64, 128);
+ e_DrawFillQuad(gScreenWidth div 2 - 256, gScreenHeight div 2 - 60,
+ gScreenWidth div 2 + 256, gScreenHeight div 2 + 60, 64, 64, 64, 128);
+ e_DrawQuad(gScreenWidth div 2 - 256, gScreenHeight div 2 - 60,
+ gScreenWidth div 2 + 256, gScreenHeight div 2 + 60, 255, 127, 0);
+ e_DrawLine(1, gScreenWidth div 2 - 256, gScreenHeight div 2 - 40,
+ gScreenWidth div 2 + 256, gScreenHeight div 2 - 40, 255, 127, 0);
+ l := Length(_lc[I_NET_SLIST_URGENT]) div 2;
+ e_TextureFontPrint(gScreenWidth div 2 - cw * l, gScreenHeight div 2 - 58,
+ _lc[I_NET_SLIST_URGENT], gStdFont);
+ l := Length(slUrgent) div 2;
+ e_TextureFontPrintFmt(gScreenWidth div 2 - 253, gScreenHeight div 2 - 38,
+ slUrgent, gStdFont, False, True);
+ l := Length(_lc[I_NET_SLIST_URGENT_CONT]) div 2;
+ e_TextureFontPrint(gScreenWidth div 2 - cw * l, gScreenHeight div 2 + 41,
+ _lc[I_NET_SLIST_URGENT_CONT], gStdFont);
+ e_DrawLine(1, gScreenWidth div 2 - 256, gScreenHeight div 2 + 40,
+ gScreenWidth div 2 + 256, gScreenHeight div 2 + 40, 255, 127, 0);
+ Exit;
+ end;
+
+ if SL = nil then
+ begin
+ l := Length(slWaitStr) div 2;
+ e_DrawFillQuad(17, 65, gScreenWidth-17, motdh-1, 64, 64, 64, 128);
+ e_DrawQuad(gScreenWidth div 2 - 192, gScreenHeight div 2 - 10,
+ gScreenWidth div 2 + 192, gScreenHeight div 2 + 11, 255, 127, 0);
+ e_TextureFontPrint(gScreenWidth div 2 - cw * l, gScreenHeight div 2 - ch div 2,
+ slWaitStr, gStdFont);
+ Exit;
+ end;
+
+ y := 90;
+ if (slSelection < Length(ST)) then
+ begin
+ I := slSelection;
+ sy := y + 42 * I - 4;
+ Srv := GetServerFromTable(I, SL, ST);
+ ip := _lc[I_NET_ADDRESS] + ' ' + Srv.IP + ':' + IntToStr(Srv.Port);
+ if Srv.Password then
+ ip := ip + ' ' + _lc[I_NET_SERVER_PASSWORD] + ' ' + _lc[I_MENU_YES]
+ else
+ ip := ip + ' ' + _lc[I_NET_SERVER_PASSWORD] + ' ' + _lc[I_MENU_NO];
+ end else
+ if Length(ST) > 0 then
+ slSelection := 0;
+
+ mw := (gScreenWidth - 188);
+ mx := 16 + mw;
+
+ e_DrawFillQuad(16 + 1, sy, gScreenWidth - 16 - 1, sy + 40, 64, 64, 64, 0);
+ e_DrawLine(1, 16 + 1, sy, gScreenWidth - 16 - 1, sy, 205, 205, 205);
+ e_DrawLine(1, 16 + 1, sy + 41, gScreenWidth - 16 - 1, sy + 41, 255, 255, 255);
+
+ e_DrawLine(1, 16, 85, gScreenWidth - 16, 85, 255, 127, 0);
+ e_DrawLine(1, 16, motdh-20, gScreenWidth-16, motdh-20, 255, 127, 0);
+
+ e_DrawLine(1, mx - 70, 64, mx - 70, motdh, 255, 127, 0);
+ e_DrawLine(1, mx, 64, mx, motdh-20, 255, 127, 0);
+ e_DrawLine(1, mx + 52, 64, mx + 52, motdh-20, 255, 127, 0);
+ e_DrawLine(1, mx + 104, 64, mx + 104, motdh-20, 255, 127, 0);
+
+ e_TextureFontPrintEx(18, 68, 'NAME/MAP', gStdFont, 255, 127, 0, 1);
+ e_TextureFontPrintEx(mx - 68, 68, 'PING', gStdFont, 255, 127, 0, 1);
+ e_TextureFontPrintEx(mx + 2, 68, 'MODE', gStdFont, 255, 127, 0, 1);
+ e_TextureFontPrintEx(mx + 54, 68, 'PLRS', gStdFont, 255, 127, 0, 1);
+ e_TextureFontPrintEx(mx + 106, 68, 'VER', gStdFont, 255, 127, 0, 1);
+
+ y := 90;
+ for I := 0 to High(ST) do
+ begin
+ Srv := GetServerFromTable(I, SL, ST);
+ // Name and map
+ e_TextureFontPrintEx(18, y, Srv.Name, gStdFont, 255, 255, 255, 1);
+ e_TextureFontPrintEx(18, y + 16, Srv.Map, gStdFont, 210, 210, 210, 1);
+
+ // Ping and similar count
+ if (Srv.Ping < 0) or (Srv.Ping > 999) then
+ e_TextureFontPrintEx(mx - 68, y, _lc[I_NET_SLIST_NO_ACCESS], gStdFont, 255, 0, 0, 1)
+ else
+ if Srv.Ping = 0 then
+ e_TextureFontPrintEx(mx - 68, y, '<1' + _lc[I_NET_SLIST_PING_MS], gStdFont, 255, 255, 255, 1)
+ else
+ e_TextureFontPrintEx(mx - 68, y, IntToStr(Srv.Ping) + _lc[I_NET_SLIST_PING_MS], gStdFont, 255, 255, 255, 1);
+
+ if Length(ST[I].Indices) > 1 then
+ e_TextureFontPrintEx(mx - 68, y + 16, '< ' + IntToStr(Length(ST[I].Indices)) + ' >', gStdFont, 210, 210, 210, 1);
+
+ // Game mode
+ e_TextureFontPrintEx(mx + 2, y, g_Game_ModeToText(Srv.GameMode), gStdFont, 255, 255, 255, 1);
+
+ // Players
+ e_TextureFontPrintEx(mx + 54, y, IntToStr(Srv.Players) + '/' + IntToStr(Srv.MaxPlayers), gStdFont, 255, 255, 255, 1);
+ e_TextureFontPrintEx(mx + 54, y + 16, IntToStr(Srv.LocalPl) + '+' + IntToStr(Srv.Bots), gStdFont, 210, 210, 210, 1);
+
+ // Version
+ e_TextureFontPrintEx(mx + 106, y, IntToStr(Srv.Protocol), gStdFont, 255, 255, 255, 1);
+
+ y := y + 42;
+ end;
+
+ e_TextureFontPrintEx(20, motdh-20+3, ip, gStdFont, 205, 205, 205, 1);
+ ip := IntToStr(Length(ST)) + _lc[I_NET_SLIST_SERVERS];
+ e_TextureFontPrintEx(gScreenWidth - 48 - (Length(ip) + 1)*cw,
+ motdh-20+3, ip, gStdFont, 205, 205, 205, 1);
+end;
+
+end.