diff --git a/source/glest_game/ai/path_finder.cpp b/source/glest_game/ai/path_finder.cpp index 570bc3d5..c6f28cf0 100644 --- a/source/glest_game/ai/path_finder.cpp +++ b/source/glest_game/ai/path_finder.cpp @@ -83,6 +83,7 @@ PathFinder::~PathFinder() { for(int i = 0; i < GameConstants::maxPlayers; ++i) { factions[i].nodePool.clear(); } + factions.clear(); map=NULL; } diff --git a/source/glest_game/type_instances/faction.h b/source/glest_game/type_instances/faction.h index f35ac5bd..b476e12c 100644 --- a/source/glest_game/type_instances/faction.h +++ b/source/glest_game/type_instances/faction.h @@ -21,10 +21,12 @@ #include "game_constants.h" #include "command_type.h" #include "base_thread.h" +#include #include "leak_dumper.h" using std::map; using std::vector; +using std::set; using Shared::Graphics::Texture2D; using namespace Shared::PlatformCommon; @@ -132,10 +134,20 @@ private: std::map switchTeamVotes; int currentSwitchTeamVoteFactionIndex; + set livingUnits; + set livingUnitsp; + public: Faction(); ~Faction(); + void addLivingUnits(int id) { livingUnits.insert(id); } + void addLivingUnitsp(Unit *unit) { livingUnitsp.insert(unit); } + + bool isUnitInLivingUnitsp(Unit *unit) { return (livingUnitsp.find(unit) != livingUnitsp.end()); } + void deleteLivingUnits(int id) { livingUnits.erase(id); } + void deleteLivingUnitsp(Unit *unit) { livingUnitsp.erase(unit); } + void init( FactionType *factionType, ControlType control, TechTree *techTree, Game *game, int factionIndex, int teamIndex, int startLocationIndex, bool thisFaction, bool giveResources); diff --git a/source/glest_game/type_instances/unit.cpp b/source/glest_game/type_instances/unit.cpp index 5205fb5a..0b8d591c 100644 --- a/source/glest_game/type_instances/unit.cpp +++ b/source/glest_game/type_instances/unit.cpp @@ -241,8 +241,8 @@ const int Unit::maxDeadCount= 1000; //time in until the corpse disapears - shoul const float Unit::highlightTime= 0.5f; const int Unit::invalidId= -1; -set Unit::livingUnits; -set Unit::livingUnitsp; +//set Unit::livingUnits; +//set Unit::livingUnitsp; // ============================ Constructor & destructor ============================= @@ -342,8 +342,8 @@ Unit::Unit(int id, UnitPathInterface *unitpath, const Vec2i &pos, const UnitType this->currSkill = getType()->getFirstStOfClass(scStop); this->currentAttackBoostOriginatorEffect.skillType = this->currSkill; - livingUnits.insert(id); - livingUnitsp.insert(this); + this->faction->addLivingUnits(id); + this->faction->addLivingUnitsp(this); addItemToVault(&this->hp,this->hp); addItemToVault(&this->ep,this->ep); @@ -359,17 +359,9 @@ Unit::Unit(int id, UnitPathInterface *unitpath, const Vec2i &pos, const UnitType Unit::~Unit() { badHarvestPosList.clear(); - //Just to be sure, should already be removed - if (livingUnits.erase(id)) { - if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); - //Only an error if not called at end - } + this->faction->deleteLivingUnits(id); + this->faction->deleteLivingUnitsp(this); - //Just to be sure, should already be removed - if (livingUnitsp.erase(this)) { - if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); - - } //remove commands static string mutexOwnerId = string(__FILE__) + string("_") + intToStr(__LINE__); MutexSafeWrapper safeMutex(&mutexCommands,mutexOwnerId); @@ -1206,7 +1198,7 @@ CommandResult Unit::finishCommand() { this->unitPath->clear(); while (commands.empty() == false) { - if (commands.front()->getUnit() != NULL && livingUnitsp.find(commands.front()->getUnit()) == livingUnitsp.end()) { + if (commands.front()->getUnit() != NULL && this->faction->isUnitInLivingUnitsp(commands.front()->getUnit()) == false) { safeMutex.Lock(); delete commands.front(); commands.erase(commands.begin()); @@ -1326,8 +1318,8 @@ void Unit::undertake() { //unitUpdater->clearUnitPrecache(this); unitUpdater->removeUnitPrecache(this); - livingUnits.erase(id); - livingUnitsp.erase(this); + this->faction->deleteLivingUnits(id); + this->faction->deleteLivingUnitsp(this); faction->removeUnit(this); } diff --git a/source/glest_game/type_instances/unit.h b/source/glest_game/type_instances/unit.h index 1f9bf831..8b93fd89 100644 --- a/source/glest_game/type_instances/unit.h +++ b/source/glest_game/type_instances/unit.h @@ -16,7 +16,6 @@ #include "particle.h" #include "skill_type.h" #include "game_constants.h" -#include #include "platform_common.h" #include #include "leak_dumper.h" @@ -33,8 +32,6 @@ using Shared::Graphics::Model; using Shared::PlatformCommon::Chrono; using Shared::PlatformCommon::ValueCheckerVault; -using std::set; - class Map; class Faction; class Unit; @@ -271,10 +268,6 @@ public: static const float highlightTime; static const int invalidId; - static set livingUnits; - static set livingUnitsp; - - private: const int id; int hp; diff --git a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp index 3c1fb156..eb36acd0 100644 --- a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp +++ b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp @@ -65,55 +65,57 @@ void PlatformContextGl::init(int colorBits, int depthBits, int stencilBits,bool int resW = PlatformCommon::Private::ScreenWidth; int resH = PlatformCommon::Private::ScreenHeight; -#ifndef WIN32 - string mg_icon_file = ""; -#if defined(CUSTOM_DATA_INSTALL_PATH_VALUE) - if(fileExists(CUSTOM_DATA_INSTALL_PATH_VALUE + "megaglest.bmp")) { - mg_icon_file = CUSTOM_DATA_INSTALL_PATH_VALUE + "megaglest.bmp"; - } -#endif - - if(mg_icon_file == "" && fileExists("megaglest.bmp")) { - mg_icon_file = "megaglest.bmp"; - } - if(mg_icon_file != "") { - - if(icon != NULL) { - SDL_FreeSurface(icon); - icon = NULL; - } - - icon = SDL_LoadBMP(mg_icon_file.c_str()); - //SDL_Surface *icon = IMG_Load("megaglest.ico"); - - -//#if !defined(MACOSX) - // Set Icon (must be done before any sdl_setvideomode call) - // But don't set it on OS X, as we use a nicer external icon there. -//#if WORDS_BIGENDIAN -// SDL_Surface* icon= SDL_CreateRGBSurfaceFrom((void*)logo,32,32,8,128,0xff000000,0x00ff0000,0x0000ff00,0); -//#else -// SDL_Surface* icon= SDL_CreateRGBSurfaceFrom((void*)logo,32,32,32,128,0x000000ff,0x0000ff00,0x00ff0000,0xff000000); -//#endif - - //printf("In [%s::%s Line: %d] icon = %p\n",__FILE__,__FUNCTION__,__LINE__,icon); - if(icon == NULL) { - printf("Error: %s\n", SDL_GetError()); - } - if(icon != NULL) { - SDL_WM_SetIcon(icon, NULL); - } - } -#endif - - if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] about to set resolution: %d x %d, colorBits = %d.\n",__FILE__,__FUNCTION__,__LINE__,resW,resH,colorBits); - - if(screen != NULL) { - SDL_FreeSurface(screen); - screen = NULL; - } - if(Window::getMasterserverMode() == false) { + + #ifndef WIN32 + string mg_icon_file = ""; + #if defined(CUSTOM_DATA_INSTALL_PATH_VALUE) + if(fileExists(CUSTOM_DATA_INSTALL_PATH_VALUE + "megaglest.bmp")) { + mg_icon_file = CUSTOM_DATA_INSTALL_PATH_VALUE + "megaglest.bmp"; + } + #endif + + if(mg_icon_file == "" && fileExists("megaglest.bmp")) { + mg_icon_file = "megaglest.bmp"; + } + if(mg_icon_file != "") { + + if(icon != NULL) { + SDL_FreeSurface(icon); + icon = NULL; + } + + icon = SDL_LoadBMP(mg_icon_file.c_str()); + //SDL_Surface *icon = IMG_Load("megaglest.ico"); + + + //#if !defined(MACOSX) + // Set Icon (must be done before any sdl_setvideomode call) + // But don't set it on OS X, as we use a nicer external icon there. + //#if WORDS_BIGENDIAN + // SDL_Surface* icon= SDL_CreateRGBSurfaceFrom((void*)logo,32,32,8,128,0xff000000,0x00ff0000,0x0000ff00,0); + //#else + // SDL_Surface* icon= SDL_CreateRGBSurfaceFrom((void*)logo,32,32,32,128,0x000000ff,0x0000ff00,0x00ff0000,0xff000000); + //#endif + + //printf("In [%s::%s Line: %d] icon = %p\n",__FILE__,__FUNCTION__,__LINE__,icon); + if(icon == NULL) { + printf("Error: %s\n", SDL_GetError()); + } + if(icon != NULL) { + SDL_WM_SetIcon(icon, NULL); + } + } + #endif + + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] about to set resolution: %d x %d, colorBits = %d.\n",__FILE__,__FUNCTION__,__LINE__,resW,resH,colorBits); + + if(screen != NULL) { + SDL_FreeSurface(screen); + screen = NULL; + } + + screen = SDL_SetVideoMode(resW, resH, colorBits, flags); if(screen == 0) { std::ostringstream msg;