浏览代码

Patch from keen: compatibility fixes for Mac OS X

Michał W. Urbańczyk 16 年之前
父节点
当前提交
1915811a2e
共有 7 个文件被更改,包括 111 次插入14 次删除
  1. 100 0
      Makefile.x
  2. 1 1
      hch/CBuildingHandler.cpp
  3. 3 1
      hch/CTownHandler.cpp
  4. 2 2
      hch/CVideoHandler.h
  5. 2 2
      lib/NetPacks.h
  6. 1 1
      lib/NetPacksLib.cpp
  7. 2 7
      server/CGameHandler.cpp

+ 100 - 0
Makefile.x

@@ -0,0 +1,100 @@
+CC		= g++
+CFLAGS		= -I/Library/Frameworks/SDL_mixer.framework/Headers -I/Library/Frameworks/SDL.framework/Headers -I/Library/Frameworks/SDL_image.framework/Headers -I/Library/Frameworks/SDL_ttf.framework/Headers -I/opt/local/include
+OPTIM		= -O2
+#DEBUG		= -ggdb -D_DEBUG
+LDFLAGS		= -Wl,-framework,SDL -Wl,-framework,SDL_mixer -Wl,-framework,SDL_image -Wl,-framework,SDL_ttf -Wl,-framework,Cocoa
+BOOSTLIBS	= -L/opt/local/lib -lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt
+LIBS		= $(BOOSTLIBS) -llua -ljpeg -lpng -lm -lpthread -ldl -lauto -lz
+VCMI_CLIENT	= vcmiclient
+VCMI_LIB	= VCMI_Lib.dylib
+VCMI_SERVER	= vcmiserver
+GENIUS_AI	= GeniusAI.dll
+
+CLIENT_SOURCES = AdventureMapButton.cpp	\
+	CAdvmapInterface.cpp		\
+	CBattleInterface.cpp		\
+	CCallback.cpp			\
+	CCastleInterface.cpp		\
+	CCursorHandler.cpp		\
+	CGameInfo.cpp			\
+	CGameInterface.cpp		\
+	CHeroWindow.cpp			\
+	CMT.cpp				\
+	CMessage.cpp			\
+	CPlayerInterface.cpp		\
+	CPreGame.cpp			\
+	CThreadHelper.cpp		\
+	SDL_Extensions.cpp		\
+	SDL_framerate.cpp		\
+	client/CBitmapHandler.cpp	\
+	client/CConfigHandler.cpp	\
+	client/CCreatureAnimation.cpp	\
+	client/CSpellWindow.cpp		\
+	client/Client.cpp		\
+	client/Graphics.cpp		\
+	hch/CDefHandler.cpp		\
+	hch/CMusicHandler.cpp		\
+	hch/CSndHandler.cpp		\
+	mapHandler.cpp			\
+	client/NetPacksClient.cpp	\
+	SDLMain.m
+
+LIB_SOURCES = CConsoleHandler.cpp	\
+	CGameState.cpp			\
+	hch/CArtHandler.cpp		\
+	hch/CBuildingHandler.cpp	\
+	hch/CCreatureHandler.cpp	\
+	hch/CDefObjInfoHandler.cpp	\
+	hch/CGeneralTextHandler.cpp	\
+	hch/CHeroHandler.cpp		\
+	hch/CLodHandler.cpp		\
+	hch/CObjectHandler.cpp		\
+	hch/CSpellHandler.cpp		\
+	hch/CTownHandler.cpp		\
+	lib/Connection.cpp		\
+	lib/IGameCallback.cpp		\
+	lib/VCMI_Lib.cpp		\
+	lib/NetPacksLib.cpp		\
+	lib/RegisterTypes.cpp		\
+	map.cpp
+
+SERVER_SOURCES = \
+	server/CGameHandler.cpp		\
+	server/NetPacksServer.cpp	\
+	server/CVCMIServer.cpp
+
+GENIUS_SOURCES = \
+	AI/GeniusAI/CGeniusAI.cpp	\
+	AI/GeniusAI/DLLMain.cpp
+
+OBJECTS=$(CLIENT_SOURCES:.cpp=.o)
+CLIENT_OBJECTS=$(OBJECTS:.m=.o)
+LIB_OBJECTS=$(LIB_SOURCES:.cpp=.o)
+SERVER_OBJECTS=$(SERVER_SOURCES:.cpp=.o)
+GENIUS_OBJECTS=$(GENIUS_SOURCES:.cpp=.o)
+
+all: $(CLIENT_SOURCES) $(LIB_SOURCES) $(SERVER_SOURCES) $(VCMI_CLIENT) $(VCMI_SERVER) $(GENIUS_AI)
+
+update:
+	svn co https://vcmi.svn.sourceforge.net/svnroot/vcmi/trunk .
+
+$(VCMI_CLIENT): $(CLIENT_OBJECTS) $(VCMI_LIB)
+	$(CC) $(LDFLAGS) $(CLIENT_OBJECTS) $(VCMI_LIB) -o $@ $(BOOSTLIBS) -lz
+
+$(VCMI_SERVER): $(SERVER_OBJECTS) $(VCMI_LIB)
+	$(CC) $(SERVER_OBJECTS) $(VCMI_LIB) -o $@ $(BOOSTLIBS)
+
+$(GENIUS_AI): $(GENIUS_OBJECTS) $(VCMI_LIB)
+	$(CC) -dynamiclib -install_name $@ $(GENIUS_OBJECTS) $(VCMI_LIB) -o $@
+
+$(VCMI_LIB): $(LIB_OBJECTS)
+	$(CC) -dynamiclib -install_name $@ $(LIB_OBJECTS) -o $@ $(BOOSTLIBS) -lz
+
+.cpp.o:
+	$(CC) -c $(OPTIM) $(DEBUG) $(CFLAGS) $< -o $@
+
+.m.o:
+	$(CC) -c $(OPTIM) $(DEBUG) $(CFLAGS) $< -o $@
+	
+clean:
+	rm -f $(CLIENT_OBJECTS) $(SERVER_OBJECTS) $(LIB_OBJECTS) $(GENIUS_OBJECTS) $(VCMI_CLIENT) $(VCMI_SERVER) $(GENIUS_AI) $(VCMI_LIB)

+ 1 - 1
hch/CBuildingHandler.cpp

@@ -99,7 +99,7 @@ void CBuildingHandler::loadBuildings()
 		{
 			box = it = 0;
 			ofs.getline(line,100);
-			if(!line[0])
+			if(!line[0] || line[0] == '\n' || line[0] == '\r')
 				ofs.getline(line,100);
 			std::string linia(line);
 			bool areboxes=true;

+ 3 - 1
hch/CTownHandler.cpp

@@ -91,7 +91,9 @@ void CTownHandler::loadNames()
 			of >> town;
 			while(true)
 			{
-				of.getline(bufname,75);if(!(*bufname))of.getline(bufname,75);
+				of.getline(bufname,75);
+				if(!bufname[0] || bufname[0] == '\n' || bufname[0] == '\r')
+					of.getline(bufname,75);
 				std::istringstream ifs(bufname);
 				ifs >> build;
 				if(build<0)

+ 2 - 2
hch/CVideoHandler.h

@@ -114,7 +114,7 @@ struct SMKStruct
 class DLLHandler
 {
 public:
-#if !defined(__amigaos4__) && !defined(__unix__)
+#if !defined(__amigaos4__) && !defined(__unix__) && !defined(__APPLE__)
 	HINSTANCE dll;
 #else
 	void *dll;
@@ -131,7 +131,7 @@ class CBIKHandler
 public:
 	DLLHandler ourLib;
 	int newmode;
-#if !defined(__amigaos4__) && !defined(__unix__)
+#if !defined(__amigaos4__) && !defined(__unix__) && !defined(__APPLE__)
 	HANDLE hBinkFile;
 #else
 	void *hBinkFile;

+ 2 - 2
lib/NetPacks.h

@@ -668,11 +668,11 @@ struct BattleStackAttacked : public CPackForClient//3005
 	ui8 flags; //1 - is stack killed; 2 - is there special effect to be shown;
 	ui32 effect; //set only if flag 2 is present
 
-	bool killed() //if target stack was killed
+	bool killed() const//if target stack was killed
 	{
 		return flags & 1;
 	}
-	bool isEffect() //if target stack was killed
+	bool isEffect() const//if target stack was killed
 	{
 		return flags & 2;
 	}

+ 1 - 1
lib/NetPacksLib.cpp

@@ -428,7 +428,7 @@ DLL_EXPORT void BattleAttack::applyGs( CGameState *gs )
 		attacker->counterAttacks--;
 	if(shot())
 		attacker->shots--;
-	BOOST_FOREACH(BattleStackAttacked &stackAttacked, bsa)
+	BOOST_FOREACH(BattleStackAttacked stackAttacked, bsa)
 		stackAttacked.applyGs(gs);
 }
 

+ 2 - 7
server/CGameHandler.cpp

@@ -485,7 +485,8 @@ void CGameHandler::prepareAttacked(BattleStackAttacked &bsa, CStack *def)
 void CGameHandler::prepareAttack(BattleAttack &bat, CStack *att, CStack *def)
 {
 	bat.stackAttacking = att->ID;
-	std::set<BattleStackAttacked>::iterator bsa = bat.bsa.insert(BattleStackAttacked()).first;
+	std::set<BattleStackAttacked>::iterator i = bat.bsa.insert(BattleStackAttacked()).first;
+	BattleStackAttacked *bsa = (BattleStackAttacked *) &*i;
 
 	bsa->stackAttacked = def->ID;
 	bsa->damageAmount = BattleInfo::calculateDmg(att, def, gs->getHero(att->attackerOwned ? gs->curB->hero1 : gs->curB->hero2), gs->getHero(def->attackerOwned ? gs->curB->hero1 : gs->curB->hero2), bat.shot());//counting dealt damage
@@ -836,13 +837,7 @@ void CGameHandler::run(bool resume)
 			{
 				boost::posix_time::time_duration p;
 				p = boost::posix_time::milliseconds(200);
-#ifdef _MSC_VER
 				states.cv.timed_wait(lock,p); 
-#else
-				boost::xtime time={0,0};
-				time.nsec = static_cast<boost::xtime::xtime_nsec_t>(p.total_nanoseconds());
-				states.cv.timed_wait(lock,time);
-#endif
 			}
 		}
 	}