From 8bfc6a1116abf506e52d203722b3095970564114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20W=2E=20Urba=C5=84czyk?= Date: Sun, 2 Jun 2013 19:53:13 +0000 Subject: [PATCH] A patch from O01eg: http://forum.vcmi.eu/viewtopic.php?p=9313#9313 --- client/CPreGame.cpp | 47 +++++++++++++++++++++++++++++++++++++++++---- client/CPreGame.h | 18 ++++++++++++++++- vcmimanual.tex | 4 ++-- 3 files changed, 62 insertions(+), 7 deletions(-) diff --git a/client/CPreGame.cpp b/client/CPreGame.cpp index 133e33c46..1360cf928 100644 --- a/client/CPreGame.cpp +++ b/client/CPreGame.cpp @@ -562,7 +562,7 @@ void CGPreGame::removeFromGui() GH.popInt(GH.topInt()); //remove background } -CSelectionScreen::CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMultiMode MultiPlayer /*= CMenuScreen::SINGLE_PLAYER*/, const std::map *Names /*= NULL*/) +CSelectionScreen::CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMultiMode MultiPlayer /*= CMenuScreen::SINGLE_PLAYER*/, const std::map * Names /*= NULL*/, const std::string & Address /*=""*/, const std::string & Port /*= ""*/) : ISelectionScreenInfo(Names), serverHandlingThread(NULL), mx(new boost::recursive_mutex), serv(NULL), ongoingClosing(false), myNameID(255) { @@ -711,7 +711,7 @@ CSelectionScreen::CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMulti } else { - serv = CServerHandler::justConnectToServer(); + serv = CServerHandler::justConnectToServer(Address, Port); } serv->enterPregameConnectionMode(); @@ -3086,8 +3086,7 @@ void CMultiMode::joinTCP() { Settings name = settings.write["general"]["playerName"]; name->String() = txt->text; - GH.popIntTotally(this); - GH.pushInt(new CSelectionScreen(CMenuScreen::newGame, CMenuScreen::MULTI_NETWORK_GUEST)); + GH.pushInt(new CSimpleJoinScreen); } CHotSeatPlayers::CHotSeatPlayers(const std::string &firstPlayer) @@ -4153,3 +4152,43 @@ void CPrologEpilogVideo::clickLeft( tribool down, bool previousState ) GH.popInt(this); exitCb(); } + +CSimpleJoinScreen::CSimpleJoinScreen() +{ + OBJ_CONSTRUCTION_CAPTURING_ALL; + bg = new CPicture("MUDIALOG.bmp"); // address background + pos = bg->center(); //center, window has size of bg graphic (x,y = 396,278 w=232 h=212) + + Rect boxRect(20, 20, 205, 50); + title = new CTextBox("Enter address:", boxRect, 0, FONT_BIG, CENTER, Colors::WHITE); + + address = new CTextInput(Rect(25, 68, 175, 16), *bg); + address->cb += boost::bind(&CSimpleJoinScreen::onChange, this, _1); + + port = new CTextInput(Rect(25, 115, 175, 16), *bg); + port->cb += boost::bind(&CSimpleJoinScreen::onChange, this, _1); + port->filters.add(boost::bind(&CTextInput::numberFilter, _1, _2, 0, 65535)); + + ok = new CAdventureMapButton(CGI->generaltexth->zelp[560], bind(&CSimpleJoinScreen::enterSelectionScreen, this), 26, 142, "MUBCHCK.DEF", SDLK_RETURN); + cancel = new CAdventureMapButton(CGI->generaltexth->zelp[561], bind(&CGuiHandler::popIntTotally, ref(GH), this), 142, 142, "MUBCANC.DEF", SDLK_ESCAPE); + bar = new CGStatusBar(new CPicture(Rect(7, 186, 218, 18), 0)); + + port->setTxt(boost::lexical_cast(settings["server"]["port"].Float()), true); + address->setTxt(settings["server"]["server"].String(), true); + address->giveFocus(); +} + +void CSimpleJoinScreen::enterSelectionScreen() +{ + std::string textAddress = address->text; + std::string textPort = port->text; + + GH.popIntTotally(this); + GH.pushInt(new CSelectionScreen(CMenuScreen::newGame, CMenuScreen::MULTI_NETWORK_GUEST, NULL, textAddress, textPort)); +} + +void CSimpleJoinScreen::onChange(const std::string & newText) +{ + ok->block(address->text.empty() || port->text.empty()); +} + diff --git a/client/CPreGame.h b/client/CPreGame.h index d9253bcc2..d5e4456b2 100644 --- a/client/CPreGame.h +++ b/client/CPreGame.h @@ -359,7 +359,7 @@ public: bool ongoingClosing; ui8 myNameID; //used when networking - otherwise all player are "mine" - CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMultiMode MultiPlayer = CMenuScreen::SINGLE_PLAYER, const std::map *Names = NULL); + CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMultiMode MultiPlayer = CMenuScreen::SINGLE_PLAYER, const std::map * Names = NULL, const std::string & Address = "", const std::string & Port = ""); ~CSelectionScreen(); void toggleTab(CIntObject *tab); void changeSelection(const CMapInfo *to); @@ -606,5 +606,21 @@ public: void showAll(SDL_Surface *to); }; +/// Simple window to enter the server's address. +class CSimpleJoinScreen : public CIntObject +{ + CPicture * bg; + CTextBox * title; + CAdventureMapButton * ok, * cancel; + CGStatusBar * bar; + CTextInput * address; + CTextInput * port; + + void enterSelectionScreen(); + void onChange(const std::string & newText); +public: + CSimpleJoinScreen(); +}; + extern ISelectionScreenInfo *SEL; extern CGPreGame *CGP; diff --git a/vcmimanual.tex b/vcmimanual.tex index 7a8f40541..637cd1e34 100644 --- a/vcmimanual.tex +++ b/vcmimanual.tex @@ -50,7 +50,7 @@ VCMI supports resolutions higher than original 800x600. Namely these are: Switching resolution may not only change visible area of map, but also alters some interface features such as \hyperref[Stack_Queue]{Stack Queue.}\\ To change resolution or full screen mode use System Options menu when in game. Changes in resolution will take place when you restart VCMI. \\ Fullscreen mode can be toggled anytime using F4 hotkey. -\end{itemize} +%\end{itemize} \label{Mods} \subsection{Game modification} Since 0.9, there is a possibility to edit gameplay settings with config file. You may turn some options on/off or adjust certain values in \texttt{config/defaultMods.json} file. This file is read at game launch and the settings are stored in savegame file, so editing config won't break existing games.\\ @@ -149,7 +149,7 @@ Following cheat codes have been implemented in VCMI. Type them in console: \item \texttt{vcmiforgeofnoldorking} - Hero gets all artifacts except spell book, spell scrolls and war machines \end{itemize} \subsection{Command line} -It is possible to save a starting configuration (such as map and options) in pregame by typing \"\texttt{sinfo} filename\". Then VCMI can be started with option \texttt{-i --start=fname} and it will automatically start the game.\\ +It is possible to save a starting configuration (such as map and options) in pregame by typing "\texttt{sinfo} filename". Then VCMI can be started with option \texttt{-i --start=fname} and it will automatically start the game.\\ \texttt{--onlyAI} command line option allows to run AI-on-AI game (without GUI). Also, typing \texttt{onlyai} in pregame triggers that mode. \newpage \section{Release notes}