Maelstrom: Added Deathmatch option to the lobby UI

https://github.com/libsdl-org/Maelstrom/commit/b0982971b66192de9826aa64e1fe15f68b34fc95

From b0982971b66192de9826aa64e1fe15f68b34fc95 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 7 Nov 2011 20:37:44 -0500
Subject: [PATCH] Added Deathmatch option to the lobby UI

---
 Maelstrom_Data.zip | Bin 753865 -> 753990 bytes
 netlogic/lobby.cpp |  15 +++++++++++++++
 netlogic/lobby.h   |   2 ++
 3 files changed, 17 insertions(+)

diff --git a/Maelstrom_Data.zip b/Maelstrom_Data.zip
index ad65dd6155bd6b1aeacc59b64fc4ecee4e59ab55..6441862b93d2547cdbe4e41b456d9e7279490120 100644
GIT binary patch
delta 1330
zcmV-21<m@&fiA{^E`WpqgaU*Egam{Iga(8Mgb0KQgbK6^OI3e}q-Q^BS1|o+1ONc9
zG5`P!02}~SNiS?~Vq$qNcx`M|R0#kBkB7KUkB7KUb$AN^0R;5{000CO0002(n_F+<
zI26a9+fR}8`$BF|Sd~h1?R3;GqZzcXD<>Gp)Wj$l73R~A9mk1tBL$M3k=9aGQX8D#
zIX>rqLQZ=7K7fCiER8wBXbCBrfJfqa2QdonuCH#t1wWASG6C*z2#nPP*aH{z`NRi|
z)+nS~c6@dF;FHh@;hHTFtl<&?BbZNsWjcHfHvcB{S0plE{PHm(>j{`mzdU~UI0MPx
zj3`5U_E{Gghxnx*pP|oB5g!S-N9ZA(oDv5ivVcL+o=$(j(+<;MgW&;1#y3QFn^O_K
zKHPsw$5MOtDvN?}cbzePh4X;iM`X82z*b~Sr_pB;guw8EaQ+X(J2w0`qAw(R?tRLp
z1*7WI{Hkwvl%_7`%P!fGG?}ksKtl}qE95^T=6xFN<UWYy&)SC@Gu{U$u|2b1!D_($
z&J0v>xxs%aF6Xn4@fG0;+mrc%!8StP_H$v|FYcSVoA0<IJ+e=%SYqNqd>@~xVlVHN
zX<?=qIXeODapL)LKI$ZvKz$P-C;{1T9Bk>aSW>fQ!*=Cg%m*$A4`)1zDF-)2*Js&L
z#>@gTmKP=~jwwHXfmn>}Y>~YAsRK%Z$r1*WEfRmT6R?1In+sIHv~dBMrX&d^*E<!n
zpMvyNk^-K(KcNy!vsJJ)*pG1HafpV55k_;T4a-o;rqwd>Y?Dmh%hEEfo=>7pZv%by
zCfo}VZ3)gco9G_6Fe|alDnP8&6A;gA`|)7UTW`+Zw3JK9mAER|DqMWJS}eN?%We<L
zdOd%NQ-$LE2Pk>j<$rTQs1XOd1#x&goz13Cc|svP?F)of1g!|b)r!!aA~+o?LKl||
zS`oA&fE%p{-6?|Gp&~e15ws$7@~y$tlF*$b3_6qqS4)DHgia*E(UQ=LB$TGIiK0*h
z;ez~{d!%WeG~FW=?ThkVQg?W&qE*}_9h-lRYNomXh0w!jE|c|(=&V@n=~tChlsYLs
z328*Ia@HdHReb~E867+Vqq*#c6k=CS=fn3b*-4$n+&#)n&5SK|O^$+pCx<N!{AbxF
zDS*rA7QizX@z%rT<e_Mb2=J0xB(p7WXC69*yQm_CcPFi&+LY+1psK-Ro1**kr`3O0
zzB(wbue>x8emLYD|NE6#U17Vq=oUq)e7FAeB2^VzvIJgUs%%}Vbg9y%>h~{I*4XY@
z!%@%dv5NKoDNuuvE>Im7sB-hD%>vcjK58ydjxJETK<NUd3)C^PU)r~Db%koLLX~4|
zjv!sFA@x_%>muIXr{jMeyZu-WtYUw-#rMIBIZzR2brmB6tbF!0<4iGYieXvY6x+#S
zAuXTs!-^-F&5J~#?B{%GIU;kf;ddmxBc-|}*w`@)wW7~*Ch9<<4g~6;EmWsv(2)ck
z3D8knpo7<gmeaYizE$@huCFRvg#7AJ45Z0UjDY@8eB4-le!o8Vb7p4ApA0bXMcRw>
zxAISuXNKk}1=BmWqHKMn{|Ry<ACRcxDUp;fnx)w>mRp0PI#W*GUH=5Pby*7qB@T$B
zXFqCJF#T%;006Htmxz7~B?FI#xR)_=3mlisehVG}@|Wv=3s3>rmpp$9QUXq3mymx8
oR|D{23zv{#3l*3De+xhYab%Z4fD29mg_n?k3o{0?Y6}1W050%s?f?J)

delta 1195
zcmV;c1XTORf-cE{E`WpqgaU*Egam{Iga(8Mgb0KQgbK6^OI3dZk!C-y^#JAW0{{Tj
zE&u=w02}~SNiS?~Vq$qNcx`M|R0#kBRTH;PRTH;Pb$AN^0R;5{000CO0002(n%i#T
zFc5~X;VH7dUm%BakVvH-X;<x1wP<fw4!DqFVibZ3`}FI?apD{x1(I#0wN#bV2Irgc
z%s<qV{<RG;nJRx1gwYgw$OI3>vbJm#oY!mp7yA!V-c4Y%+d!F_Ksz%))1SD(Xn`DW
zMXzi9`!R782QKIW_5w~3Q0$2b)RykALFX@=@r<|%3|?+svM|AD`1EjdI|AY0hzLU)
z`dI@g+u)@c+@a~;BDi93570t5yd}0Bqyoi58_xufYwUm7OANQjRbG&{ULK0@d_TC0
z#v*$*B8z}<UXPic;lw5bm#mi|*o>^aq5Ff_4p1!Hnf!uyO^1IX@13~w#$7zk7)75Z
zSG`<&UgTnb*(tr^Cj09sP+>#k85++K^}gq>`984akJ^V$E7%7;v^}<7z$(CfqXvq&
zzQGZ$&!>Ow<4eP(wkP%lg)M~aHxpsoOz)exn^(RgEwTx%m||i<JP2-;vzG&5nwiN)
zj!por7ka*zj5?0RP%m5rIUxOw?UlDLmc*=C(p~wD{ect0L+^D1N~4{2eViRx%s3ze
zd7-kRxA^Bz5Q~l)FOoDrazG|9X~JN#LTuIquMmH)5`hY+HoiitDPcnK^$x{sMj%a*
zB!wsLk0Zp=XlAbz`oo;KAEF>(n9;t|+F7V@({?iX*~Xcy_o>=a8)M=w8%sE*Z^8`+
zc_qPVts=U6UzmkhrWGL2Y7+!At7b6RuolasH!b24awVurng|!%ZYP$OhozN=rG6Ym
z&qIIF{{c!;cKyG7LD(S<S_$HCIUJ3Kk4Zu%Jmm|7R0OFAz>tbiog(NJDuN~zK`KHO
ziqMgYP@N(e6)J)*6+tROCI2<Fq$E@)31<~bf*~bAN<t-)pi4<8MG`Vo@kClEZ0D7H
z${Fcd6p2M=q^y0BJtd7#Sx-16?G~$<=mLM_KntS@Pu3^aSy9W=uRN*9bW+B|@mzw1
zyQa}=yBiR5w6zFyC%hYyid{aP4Bw+<Cvp~bcQ-aQHa62W*$e(gwkyvb&v~091<t2S
z0FPbdw;oO>cUW75foIeroGpPn_Rt~RX%$JmJ8T8*Oo@sLsu(<4i*<j#tA*vOg5rPr
z!LLTl58H&}zg~%z6}Fl$-K<DuPwNjaQhBk(OW^6HN|U8ZmMU4QzJ94vds;(ncN?t+
ztyuq0fjaBT0##vw$~KS6EKtSmqv8Uk%K{|}lq^uPK<y*@)V_rwD^#V2l=WI}AHgp%
zY=B4LHBoHuTl$$q@gd(lgIMGxG9)q%$Z&YW@`L4xntbFm&iEuHW4fX%^7GN?aq$lC
zqUP~rNV1icn;l>oJ8(p2^2zi1U$^pE3k4+(1CeGwuk`@s?gIb-)Gn6=e+wl6RhRK=
z3m%tAe+wP~b(d&=3s3=Dm$`onQUcLmmkodmR{?XEWq=D;0`y~-zJLo(0SK23feSMR
JHEIh0008`F8u<VK

diff --git a/netlogic/lobby.cpp b/netlogic/lobby.cpp
index 4253fc90..02e3c19a 100644
--- a/netlogic/lobby.cpp
+++ b/netlogic/lobby.cpp
@@ -84,6 +84,12 @@ LobbyDialogDelegate::OnLoad()
 	}
 	m_globalGame->SetClickCallback(this, &LobbyDialogDelegate::GlobalGameChanged);
 
+	m_deathmatch = m_dialog->GetElement<UIElementRadioGroup>("deathmatch");
+	if (!m_deathmatch) {
+		fprintf(stderr, "Warning: Couldn't find radio group 'deathmatch'\n");
+		return false;
+	}
+	m_deathmatch->SetValueCallback(this, &LobbyDialogDelegate::SetDeathmatch);
 	if (!GetElement("gamelist", m_gameListArea)) {
 		return false;
 	}
@@ -148,6 +154,7 @@ LobbyDialogDelegate::OnHide()
 		gStartLevel = 1;
 		gStartLives = 3;
 		gNoDelay = 0;
+		gDeathMatch = m_game.deathMatch;
 
 		for (int i = 0; i < MAX_PLAYERS; ++i) {
 			GameInfoPlayer *player = m_game.GetPlayer(i);
@@ -246,6 +253,12 @@ LobbyDialogDelegate::GlobalGameChanged(void*)
 	}
 }
 
+void
+LobbyDialogDelegate::SetDeathmatch(void*, int value)
+{
+	m_game.deathMatch = (Uint8)value;
+}
+
 void
 LobbyDialogDelegate::JoinGameClicked(void *_element)
 {
@@ -282,6 +295,7 @@ LobbyDialogDelegate::UpdateUI()
 		for (int i = 0; i < MAX_PLAYERS; ++i) {
 			m_game.BindPlayerToUI(i, m_gameInfoPlayers[i]);
 		}
+		m_deathmatch->SetValue(m_game.deathMatch);
 	}
 	if (m_state == STATE_HOSTING) {
 		m_playButton->SetDisabled(false);
@@ -491,6 +505,7 @@ void
 LobbyDialogDelegate::ClearGameInfo()
 {
 	m_game.Reset();
+	m_game.deathMatch = (Uint8)prefs->GetNumber("Network.Deathmatch");
 }
 
 void
diff --git a/netlogic/lobby.h b/netlogic/lobby.h
index 9e6e3d62..92c17e74 100644
--- a/netlogic/lobby.h
+++ b/netlogic/lobby.h
@@ -53,6 +53,7 @@ class LobbyDialogDelegate : public UIDialogDelegate
 	bool GetElement(const char *name, UIElement *&element);
 	void SetHostOrJoin(void*, int value);
 	void GlobalGameChanged(void*);
+	void SetDeathmatch(void*, int value);
 	void JoinGameClicked(void *element);
 
 	void UpdateUI();
@@ -108,6 +109,7 @@ class LobbyDialogDelegate : public UIDialogDelegate
 
 	UIElementRadioGroup *m_hostOrJoin;
 	UIElementCheckbox *m_globalGame;
+	UIElementRadioGroup *m_deathmatch;
 	UIElement *m_gameListArea;
 	UIElement *m_gameListElements[5];
 	UIElement *m_gameInfoArea;