nordsoft 2 роки тому
батько
коміт
1def98a862

+ 1 - 0
Mods/vcmi/config/vcmi/english.json

@@ -38,6 +38,7 @@
 	"vcmi.radialWheel.splitUnit" : "Split creature to another slot",
 
 	"vcmi.mainMenu.tutorialNotImplemented" : "Sorry, tutorial is not implemented yet\n",
+	"vcmi.mainMenu.tutorialNotExist" : "Tutorial map is not found\n",
 	"vcmi.mainMenu.highscoresNotImplemented" : "Sorry, high scores menu is not implemented yet\n",
 	"vcmi.mainMenu.serverConnecting" : "Connecting...",
 	"vcmi.mainMenu.serverAddressEnter" : "Enter address:",

+ 7 - 3
client/lobby/SelectionTab.cpp

@@ -222,9 +222,13 @@ void SelectionTab::toggleMode()
 		switch(tabType)
 		{
 		case ESelectionScreen::newGame:
-			inputName->disable();
-			parseMaps(getFiles("Maps/", EResType::MAP));
-			break;
+			{
+				inputName->disable();
+				auto files = getFiles("Maps/", EResType::MAP);
+				files.erase(ResourceID("Maps/Tutorial.tut", EResType::MAP));
+				parseMaps(files);
+				break;
+			}
 
 		case ESelectionScreen::loadGame:
 			inputName->disable();

+ 31 - 2
client/mainmenu/CMainMenu.cpp

@@ -47,6 +47,7 @@
 #include "../../lib/serializer/CTypeList.h"
 #include "../../lib/filesystem/Filesystem.h"
 #include "../../lib/filesystem/CCompressedStream.h"
+#include "../../lib/mapping/CMapInfo.h"
 #include "../../lib/VCMIDirs.h"
 #include "../../lib/CStopWatch.h"
 #include "../../lib/NetPacksLobby.h"
@@ -183,7 +184,7 @@ static std::function<void()> genCommand(CMenuScreen * menu, std::vector<std::str
 				case 2:
 					return std::bind(CMainMenu::openLobby, ESelectionScreen::campaignList, true, nullptr, ELoadMode::NONE);
 				case 3:
-					return std::bind(CInfoWindow::showInfoDialog, CGI->generaltexth->translate("vcmi.mainMenu.tutorialNotImplemented"), std::vector<std::shared_ptr<CComponent>>(), PlayerColor(1));
+					return std::bind(CMainMenu::startTutorial);
 				}
 				break;
 			}
@@ -198,7 +199,7 @@ static std::function<void()> genCommand(CMenuScreen * menu, std::vector<std::str
 				case 2:
 					return std::bind(CMainMenu::openLobby, ESelectionScreen::loadGame, true, nullptr, ELoadMode::CAMPAIGN);
 				case 3:
-					return std::bind(CInfoWindow::showInfoDialog, CGI->generaltexth->translate("vcmi.mainMenu.tutorialNotImplemented"), std::vector<std::shared_ptr<CComponent>>(), PlayerColor(1));
+					return std::bind(CMainMenu::startTutorial);
 				}
 			}
 			break;
@@ -371,6 +372,34 @@ void CMainMenu::openCampaignScreen(std::string name)
 	logGlobal->error("Unknown campaign set: %s", name);
 }
 
+void CMainMenu::startTutorial()
+{
+	ResourceID tutorialMap("Maps/Tutorial.tut", EResType::MAP);
+	if(!CResourceHandler::get()->existsResource(tutorialMap))
+	{
+		CInfoWindow::showInfoDialog(CGI->generaltexth->translate("vcmi.mainMenu.tutorialNotExist"), std::vector<std::shared_ptr<CComponent>>(), PlayerColor(1));
+		return;
+	}
+		
+	auto mapInfo = std::make_shared<CMapInfo>();
+	mapInfo->mapInit(tutorialMap.getName());
+	
+	CMainMenu::openLobby(ESelectionScreen::newGame, true, nullptr, ELoadMode::NONE);
+	
+	GH.dispatchMainThread([mapInfo](){
+		while(!CSH->c || !CSH->c->handler)
+			boost::this_thread::sleep(boost::posix_time::milliseconds(50));
+		
+		while(!CSH->mi || mapInfo->fileURI != CSH->mi->fileURI)
+		{
+			CSH->setMapInfo(mapInfo);
+			boost::this_thread::sleep(boost::posix_time::milliseconds(50));
+		}
+		
+		CSH->sendStartGame();
+	});
+}
+
 std::shared_ptr<CMainMenu> CMainMenu::create()
 {
 	if(!CMM)

+ 1 - 0
client/mainmenu/CMainMenu.h

@@ -148,6 +148,7 @@ public:
 	static void openLobby(ESelectionScreen screenType, bool host, const std::vector<std::string> * names, ELoadMode loadMode);
 	static void openCampaignLobby(const std::string & campaignFileName);
 	static void openCampaignLobby(std::shared_ptr<CampaignState> campaign);
+	static void startTutorial();
 	void openCampaignScreen(std::string name);
 
 	static std::shared_ptr<CMainMenu> create();

+ 1 - 0
lib/filesystem/ResourceID.cpp

@@ -129,6 +129,7 @@ EResType::Type EResTypeHelper::getTypeFromExtension(std::string extension)
 		{".MSG",   EResType::MASK},
 		{".H3C",   EResType::CAMPAIGN},
 		{".H3M",   EResType::MAP},
+		{".TUT",   EResType::MAP},
 		{".FNT",   EResType::BMP_FONT},
 		{".TTF",   EResType::TTF_FONT},
 		{".BMP",   EResType::IMAGE},