Jelajahi Sumber

* campaigns, part 1
* minor changes

mateuszb 15 tahun lalu
induk
melakukan
4d9d54735f
7 mengubah file dengan 73 tambahan dan 56 penghapusan
  1. 2 0
      client/CKingdomInterface.cpp
  2. 0 2
      client/CKingdomInterface.h
  3. 1 0
      client/CMT.cpp
  4. 55 1
      client/CPreGame.cpp
  5. 13 5
      client/CPreGame.h
  6. 1 1
      lib/Connection.h
  7. 1 47
      lib/map.h

+ 2 - 0
client/CKingdomInterface.cpp

@@ -26,6 +26,8 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/format.hpp>
 #include <boost/format.hpp>
 #include <sstream>
 #include <sstream>
+#include <SDL.h>
+
 using namespace boost::assign;
 using namespace boost::assign;
 using namespace CSDL_Ext;
 using namespace CSDL_Ext;
 
 

+ 0 - 2
client/CKingdomInterface.h

@@ -2,9 +2,7 @@
 #define __CKINGDOMINTERFACE_H__
 #define __CKINGDOMINTERFACE_H__
 
 
 
 
-
 #include "../global.h"
 #include "../global.h"
-#include <SDL.h>
 #include "GUIBase.h"
 #include "GUIBase.h"
 #include "GUIClasses.h"
 #include "GUIClasses.h"
 #include "../hch/CMusicBase.h"
 #include "../hch/CMusicBase.h"

+ 1 - 0
client/CMT.cpp

@@ -42,6 +42,7 @@
 #include "../lib/VCMIDirs.h"
 #include "../lib/VCMIDirs.h"
 #include <cstdlib>
 #include <cstdlib>
 #include "../lib/NetPacks.h"
 #include "../lib/NetPacks.h"
+#include "CMessage.h"
 
 
 #ifdef _WIN32
 #ifdef _WIN32
 #include "SDL_syswm.h"
 #include "SDL_syswm.h"

+ 55 - 1
client/CPreGame.cpp

@@ -30,6 +30,10 @@
 #include "CPlayerInterface.h"
 #include "CPlayerInterface.h"
 #include "../CCallback.h"
 #include "../CCallback.h"
 #include <boost/lexical_cast.hpp>
 #include <boost/lexical_cast.hpp>
+#include <cstdlib>
+#include "CMessage.h"
+#include "../lib/map.h"
+#include "../hch/CCampaignHandler.h"
 /*
 /*
  * CPreGame.cpp, part of VCMI engine
  * CPreGame.cpp, part of VCMI engine
  *
  *
@@ -80,7 +84,7 @@ CMenuScreen::CMenuScreen( EState which )
 			bgAd = new CPicture(BitmapHandler::loadBitmap("ZNEWGAM.bmp"), 114, 312, true);
 			bgAd = new CPicture(BitmapHandler::loadBitmap("ZNEWGAM.bmp"), 114, 312, true);
 			buttons[0] = new AdventureMapButton("", CGI->generaltexth->zelp[10].second, bind(&CGPreGame::openSel, CGP, newGame), 545, 4, "ZTSINGL.DEF", SDLK_s);
 			buttons[0] = new AdventureMapButton("", CGI->generaltexth->zelp[10].second, bind(&CGPreGame::openSel, CGP, newGame), 545, 4, "ZTSINGL.DEF", SDLK_s);
 			buttons[1] = new AdventureMapButton("", CGI->generaltexth->zelp[11].second, 0 /*cb*/, 568, 120, "ZTMULTI.DEF", SDLK_m);
 			buttons[1] = new AdventureMapButton("", CGI->generaltexth->zelp[11].second, 0 /*cb*/, 568, 120, "ZTMULTI.DEF", SDLK_m);
-			buttons[2] = new AdventureMapButton("", CGI->generaltexth->zelp[12].second, 0 /*cb*/, 541, 233, "ZTCAMPN.DEF", SDLK_c);
+			buttons[2] = new AdventureMapButton("", CGI->generaltexth->zelp[12].second, bind(&CMenuScreen::moveTo, this, ref(CGP->scrs[campaignMain])), 541, 233, "ZTCAMPN.DEF", SDLK_c);
 			buttons[3] = new AdventureMapButton("", CGI->generaltexth->zelp[13].second, 0 /*cb*/, 545, 358, "ZTTUTOR.DEF", SDLK_t);
 			buttons[3] = new AdventureMapButton("", CGI->generaltexth->zelp[13].second, 0 /*cb*/, 545, 358, "ZTTUTOR.DEF", SDLK_t);
 			buttons[4] = new AdventureMapButton("", CGI->generaltexth->zelp[14].second, bind(&CMenuScreen::moveTo, this, CGP->scrs[mainMenu]), 582, 464, "ZTBACK.DEF", SDLK_ESCAPE);
 			buttons[4] = new AdventureMapButton("", CGI->generaltexth->zelp[14].second, bind(&CMenuScreen::moveTo, this, CGP->scrs[mainMenu]), 582, 464, "ZTBACK.DEF", SDLK_ESCAPE);
 		}
 		}
@@ -95,6 +99,16 @@ CMenuScreen::CMenuScreen( EState which )
 			buttons[4] = new AdventureMapButton("", CGI->generaltexth->zelp[14].second, bind(&CMenuScreen::moveTo, this, CGP->scrs[mainMenu]), 582, 464, "ZTBACK.DEF", SDLK_ESCAPE);
 			buttons[4] = new AdventureMapButton("", CGI->generaltexth->zelp[14].second, bind(&CMenuScreen::moveTo, this, CGP->scrs[mainMenu]), 582, 464, "ZTBACK.DEF", SDLK_ESCAPE);
 		}
 		}
 		break;
 		break;
+	case campaignMain:
+		{
+			buttons[0] = new AdventureMapButton("", "", 0 /*cb*/, 535, 8, "ZSSSOD.DEF", SDLK_s);
+			buttons[1] = new AdventureMapButton("", "", 0 /*cb*/, 494, 117, "ZSSROE.DEF", SDLK_m);
+			buttons[2] = new AdventureMapButton("", "", 0 /*cb*/, 486, 241, "ZSSARM.DEF", SDLK_c);
+			buttons[3] = new AdventureMapButton("", "", 0 /*cb*/, 550, 358, "ZSSCUS.DEF", SDLK_t);
+			buttons[4] = new AdventureMapButton("", "", bind(&CMenuScreen::moveTo, this, CGP->scrs[newGame]), 582, 464, "ZSSEXIT.DEF", SDLK_ESCAPE);
+			(new CCampaignHandler())->getCampaignHeaders(); //just for testing
+		}
+		break;
 	}
 	}
 
 
 	for(int i = 0; i < ARRAY_COUNT(buttons); i++)
 	for(int i = 0; i < ARRAY_COUNT(buttons); i++)
@@ -1695,3 +1709,43 @@ void CTextInput::setText( const std::string &nText, bool callCb )
 	if(callCb)
 	if(callCb)
 		cb(text);
 		cb(text);
 }
 }
+
+bool mapSorter::operator()( const CMapHeader *a, const CMapHeader *b )
+{
+	switch (sortBy)
+	{
+	case _format:
+		return (a->version<b->version);
+		break;
+	case _loscon:
+		return (a->lossCondition.typeOfLossCon<b->lossCondition.typeOfLossCon);
+		break;
+	case _playerAm:
+		int playerAmntB,humenPlayersB,playerAmntA,humenPlayersA;
+		playerAmntB=humenPlayersB=playerAmntA=humenPlayersA=0;
+		for (int i=0;i<8;i++)
+		{
+			if (a->players[i].canHumanPlay) {playerAmntA++;humenPlayersA++;}
+			else if (a->players[i].canComputerPlay) {playerAmntA++;}
+			if (b->players[i].canHumanPlay) {playerAmntB++;humenPlayersB++;}
+			else if (b->players[i].canComputerPlay) {playerAmntB++;}
+		}
+		if (playerAmntB!=playerAmntA)
+			return (playerAmntA<playerAmntB);
+		else
+			return (humenPlayersA<humenPlayersB);
+		break;
+	case _size:
+		return (a->width<b->width);
+		break;
+	case _viccon:
+		return (a->victoryCondition.condition < b->victoryCondition.condition);
+		break;
+	case _name:
+		return (a->name<b->name);
+		break;
+	default:
+		return (a->name<b->name);
+		break;
+	}
+}

+ 13 - 5
client/CPreGame.h

@@ -4,9 +4,6 @@
 #include <set>
 #include <set>
 #include <SDL.h>
 #include <SDL.h>
 #include "../StartInfo.h"
 #include "../StartInfo.h"
-#include "CMessage.h"
-#include "../lib/map.h"
-#include <cstdlib>
 #include "GUIBase.h"
 #include "GUIBase.h"
 #include "FunctionList.h"
 #include "FunctionList.h"
 
 
@@ -21,11 +18,22 @@
  */
  */
 
 
 struct CMusicHandler;
 struct CMusicHandler;
+class CMapInfo;
+class CMapHeader;
 
 
 enum EState { //where are we?
 enum EState { //where are we?
-	mainMenu, newGame, loadGame, ScenarioList, saveGame, scenarioInfo
+	mainMenu, newGame, loadGame, campaignMain, ScenarioList, saveGame, scenarioInfo
 };
 };
 
 
+enum ESortBy{_playerAm, _size, _format, _name, _viccon, _loscon};
+
+class mapSorter
+{
+public:
+	ESortBy sortBy;
+	bool operator()(const CMapHeader *a, const CMapHeader *b);;
+	mapSorter(ESortBy es):sortBy(es){};
+};
 
 
 class CTextInput : public CIntObject
 class CTextInput : public CIntObject
 {
 {
@@ -216,7 +224,7 @@ class CGPreGame : public CIntObject, public IUpdateable
 {
 {
 public:
 public:
 	SDL_Surface *mainbg;
 	SDL_Surface *mainbg;
-	CMenuScreen *scrs[3];
+	CMenuScreen *scrs[4];
 
 
 	SDL_Surface *nHero, *rHero, *nTown, *rTown; // none/random hero/town imgs
 	SDL_Surface *nHero, *rHero, *nTown, *rTown; // none/random hero/town imgs
 	CDefHandler *bonuses;
 	CDefHandler *bonuses;

+ 1 - 1
lib/Connection.h

@@ -79,7 +79,7 @@ struct TypeComparer
 class DLL_EXPORT CTypeList
 class DLL_EXPORT CTypeList
 {
 {
 	typedef std::multimap<const std::type_info *,ui16,TypeComparer> TTypeMap;
 	typedef std::multimap<const std::type_info *,ui16,TypeComparer> TTypeMap;
-	 TTypeMap types;
+	TTypeMap types;
 public:
 public:
 	CTypeList();
 	CTypeList();
 	ui16 registerType(const std::type_info *type);
 	ui16 registerType(const std::type_info *type);

+ 1 - 47
lib/map.h

@@ -30,7 +30,7 @@ class CGHeroInstance;
 class CGCreature;
 class CGCreature;
 class CQuest;
 class CQuest;
 class CGTownInstance;
 class CGTownInstance;
-enum ESortBy{_playerAm, _size, _format, _name, _viccon, _loscon};
+
 enum EDefType {TOWN_DEF, HERO_DEF, CREATURES_DEF, SEERHUT_DEF, RESOURCE_DEF, TERRAINOBJ_DEF, 
 enum EDefType {TOWN_DEF, HERO_DEF, CREATURES_DEF, SEERHUT_DEF, RESOURCE_DEF, TERRAINOBJ_DEF, 
 	EVENTOBJ_DEF, SIGN_DEF, GARRISON_DEF, ARTIFACT_DEF, WITCHHUT_DEF, SCHOLAR_DEF, PLAYERONLY_DEF, 
 	EVENTOBJ_DEF, SIGN_DEF, GARRISON_DEF, ARTIFACT_DEF, WITCHHUT_DEF, SCHOLAR_DEF, PLAYERONLY_DEF, 
 	SHRINE_DEF, SPELLSCROLL_DEF, PANDORA_DEF, GRAIL_DEF, CREGEN_DEF, CREGEN2_DEF, CREGEN3_DEF, 
 	SHRINE_DEF, SPELLSCROLL_DEF, PANDORA_DEF, GRAIL_DEF, CREGEN_DEF, CREGEN2_DEF, CREGEN3_DEF, 
@@ -260,52 +260,6 @@ public:
 	void countPlayers();
 	void countPlayers();
 };
 };
 
 
-
-class DLL_EXPORT mapSorter
-{
-public:
-	ESortBy sortBy;
-	bool operator()(const CMapHeader *a, const CMapHeader *b)
-	{
-		switch (sortBy)
-		{
-		case _format:
-			return (a->version<b->version);
-			break;
-		case _loscon:
-			return (a->lossCondition.typeOfLossCon<b->lossCondition.typeOfLossCon);
-			break;
-		case _playerAm:
-			int playerAmntB,humenPlayersB,playerAmntA,humenPlayersA;
-			playerAmntB=humenPlayersB=playerAmntA=humenPlayersA=0;
-			for (int i=0;i<8;i++)
-			{
-				if (a->players[i].canHumanPlay) {playerAmntA++;humenPlayersA++;}
-				else if (a->players[i].canComputerPlay) {playerAmntA++;}
-				if (b->players[i].canHumanPlay) {playerAmntB++;humenPlayersB++;}
-				else if (b->players[i].canComputerPlay) {playerAmntB++;}
-			}
-			if (playerAmntB!=playerAmntA)
-				return (playerAmntA<playerAmntB);
-			else
-				return (humenPlayersA<humenPlayersB);
-			break;
-		case _size:
-			return (a->width<b->width);
-			break;
-		case _viccon:
-			return (a->victoryCondition.condition < b->victoryCondition.condition);
-			break;
-		case _name:
-			return (a->name<b->name);
-			break;
-		default:
-			return (a->name<b->name);
-			break;
-		}
-	};
-	mapSorter(ESortBy es):sortBy(es){};
-};
 struct DLL_EXPORT Mapa : public CMapHeader
 struct DLL_EXPORT Mapa : public CMapHeader
 {
 {
 	ui32 checksum;
 	ui32 checksum;