diff --git a/source/glest_game/ai/path_finder.cpp b/source/glest_game/ai/path_finder.cpp index feaebc64..fc2ca74e 100644 --- a/source/glest_game/ai/path_finder.cpp +++ b/source/glest_game/ai/path_finder.cpp @@ -159,6 +159,12 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu //printf("Unit Pathfind Unit [%d - %s] from = %s to = %s frameIndex = %d\n",unit->getId(),unit->getType()->getName().c_str(),unit->getPos().getString().c_str(),finalPos.getString().c_str(),frameIndex); if(frameIndex >= 0) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[findPath] "); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + clearUnitPrecache(unit); } if(unit->getFaction()->canUnitsPathfind() == true) { @@ -171,6 +177,11 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu snprintf(szBuf,8096,"canUnitsPathfind() == false"); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"canUnitsPathfind() == false"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return tsBlocked; } @@ -214,6 +225,12 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu unit->setCurrentUnitTitle(szBuf); } + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return tsArrived"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + return tsArrived; } @@ -235,6 +252,13 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu } } + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return tsMoving"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + return tsMoving; } } @@ -247,6 +271,13 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu advPath->pop(); unit->setTargetPos(pos); } + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return tsMoving"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + return tsMoving; } } @@ -264,6 +295,11 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu snprintf(szBuf,8096,"path->isStuck() == true unit->getLastStuckPos() [%s] finalPos [%s] path->getBlockCount() [%d] tolerance: %d",unit->getLastStuckPos().getString().c_str(),finalPos.getString().c_str(),path->getBlockCount(),unit->isLastStuckFrameWithinCurrentFrameTolerance()); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"path->isStuck() == true unit->getLastStuckPos() [%s] finalPos [%s] path->getBlockCount() [%d] tolerance: %d",unit->getLastStuckPos().getString().c_str(),finalPos.getString().c_str(),path->getBlockCount(),unit->isLastStuckFrameWithinCurrentFrameTolerance()); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } //printf("$$$$ Unit STILL BLOCKED for [%d - %s]\n",unit->getId(),unit->getFullName().c_str()); return tsBlocked; @@ -286,6 +322,12 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu snprintf(szBuf,8096,"maxNodeCount: %d",maxNodeCount); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"maxNodeCount: %d",maxNodeCount); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + } //int unitFactionIndex = unit->getFactionIndex(); @@ -304,9 +346,20 @@ TravelState PathFinder::findPath(Unit *unit, const Vec2i &finalPos, bool *wasStu snprintf(szBuf,8096,"calling aStar()"); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"calling aStar()"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } ts = aStar(unit, finalPos, false, frameIndex, maxNodeCount,&searched_node_count); + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"called aStar() ts: %d",ts); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + //post actions switch(ts) { case tsBlocked: @@ -859,6 +912,12 @@ void PathFinder::astarJPS(std::map cameFrom, Node *& node, TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout, int frameIndex, int maxNodeCount, uint32 *searched_node_count) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"In aStar()"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + Chrono chrono; if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) chrono.start(); @@ -968,10 +1027,21 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"return factions[unitFactionIndex].precachedTravelState[unit->getId()];"); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return factions[unitFactionIndex].precachedTravelState[unit->getId()];"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return factions[unitFactionIndex].precachedTravelState[unit->getId()]; } else { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"clearUnitPrecache(unit);"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + clearUnitPrecache(unit); } } @@ -988,6 +1058,11 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"return factions[unitFactionIndex].precachedTravelState[unit->getId()];"); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return factions[unitFactionIndex].precachedTravelState[unit->getId()];"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return factions[unitFactionIndex].precachedTravelState[unit->getId()]; } @@ -995,6 +1070,12 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout } } else { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"clearUnitPrecache(unit);"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + clearUnitPrecache(unit); if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { @@ -1100,6 +1181,11 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"return ts: %d",ts); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return ts: %d",ts); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return ts; } @@ -1167,6 +1253,11 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"return ts: %d",ts); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return ts: %d",ts); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return ts; } @@ -1348,6 +1439,11 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"calling aStar()"); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"calling aStar()"); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return aStar(unit, targetPos, false, frameIndex, pathFindNodesAbsoluteMax); } @@ -1359,6 +1455,12 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"nodeLimitReached: %d",nodeLimitReached); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"nodeLimitReached: %d",nodeLimitReached); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } + } if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled == true && chrono.getMillis() > 1) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld nodeLimitReached = %d whileLoopCount = %d nodePoolCount = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,chrono.getMillis(),nodeLimitReached,whileLoopCount,factions[unitFactionIndex].nodePoolCount); @@ -1541,6 +1643,11 @@ TravelState PathFinder::aStar(Unit *unit, const Vec2i &targetPos, bool inBailout snprintf(szBuf,8096,"return ts: %d",ts); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"return ts: %d",ts); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } return ts; } diff --git a/source/glest_game/type_instances/faction.h b/source/glest_game/type_instances/faction.h index 8632e96d..82151487 100644 --- a/source/glest_game/type_instances/faction.h +++ b/source/glest_game/type_instances/faction.h @@ -167,6 +167,8 @@ private: std::map > > mapSharedPathFinderCache; + std::vector worldSynchThreadedLogList; + public: Faction(); ~Faction(); @@ -180,6 +182,27 @@ public: throw megaglest_runtime_error("class Faction is NOT safe to assign!"); } + inline void addWorldSynchThreadedLogList(const string &data) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true) { + worldSynchThreadedLogList.push_back(data); + } + } + inline void clearWorldSynchThreadedLogList() { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true) { + worldSynchThreadedLogList.clear(); + } + } + inline void dumpWorldSynchThreadedLogList() { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true) { + if(worldSynchThreadedLogList.empty() == false) { + for(unsigned int index = 0; index < worldSynchThreadedLogList.size(); ++index) { + SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,worldSynchThreadedLogList[index].c_str()); + } + worldSynchThreadedLogList.clear(); + } + } + } + inline const bool * aproxCanMoveSoonCached(int size, Field field, const Vec2i &pos1, const Vec2i &pos2) const { const bool *result = NULL; // std::map > >::const_iterator iterFind1 = mapSharedPathFinderCache.find(size); diff --git a/source/glest_game/type_instances/unit.cpp b/source/glest_game/type_instances/unit.cpp index 1cd201a7..9ba92df4 100644 --- a/source/glest_game/type_instances/unit.cpp +++ b/source/glest_game/type_instances/unit.cpp @@ -3498,10 +3498,14 @@ void Unit::exploreCells() { } void Unit::logSynchData(string file,int line,string source) { + logSynchDataCommon(file,line,source,false); +} +void Unit::logSynchDataThreaded(string file,int line,string source) { + logSynchDataCommon(file,line,source,true); +} +void Unit::logSynchDataCommon(string file,int line,string source,bool threadedMode) { if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true) { - char szBuf[8096]=""; - snprintf(szBuf,8096, "FrameCount [%d] Unit = %d [%s][%s] pos = %s, lastPos = %s, targetPos = %s, targetVec = %s, meetingPos = %s, progress [%f], progress2 [%d]\nUnit Path [%s]\n", getFrameCount(), @@ -3529,6 +3533,23 @@ void Unit::logSynchData(string file,int line,string source) { lastFile = file; lastSource = source; + string logDataText = ""; + char szBufDataText[8096]=""; + snprintf(szBufDataText,8096,"----------------------------------- START [FRAME %d UNIT: %d - %s] ------------------------------------------------\n",getFrameCount(),this->id,this->getType()->getName().c_str()); + logDataText = szBufDataText; + + snprintf(szBufDataText,8096,"[%s::%d]\n",extractFileFromDirectoryPath(file).c_str(),line); + logDataText += szBufDataText; + + if(source != "") { + snprintf(szBufDataText,8096,"%s ",source.c_str()); + logDataText += szBufDataText; + } + snprintf(szBufDataText,8096,"%s\n",szBuf); + logDataText += szBufDataText; + snprintf(szBufDataText,8096,"------------------------------------ END [FRAME %d UNIT: %d - %s] ------------------------------------------------\n",getFrameCount(),this->id,this->getType()->getName().c_str()); + logDataText += szBufDataText; +/* SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,"----------------------------------- START [FRAME %d UNIT: %d - %s] ------------------------------------------------\n",getFrameCount(),this->id,this->getType()->getName().c_str()); SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,"[%s::%d]\n",extractFileFromDirectoryPath(file).c_str(),line); if(source != "") { @@ -3536,6 +3557,13 @@ void Unit::logSynchData(string file,int line,string source) { } SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,"%s\n",szBuf); SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,"------------------------------------ END [FRAME %d UNIT: %d - %s] ------------------------------------------------\n",getFrameCount(),this->id,this->getType()->getName().c_str()); +*/ + if(threadedMode == false) { + SystemFlags::OutputDebug(SystemFlags::debugWorldSynch,"%s",logDataText.c_str()); + } + else { + this->faction->addWorldSynchThreadedLogList(logDataText); + } } } } diff --git a/source/glest_game/type_instances/unit.h b/source/glest_game/type_instances/unit.h index 49690e70..a3f9f88c 100644 --- a/source/glest_game/type_instances/unit.h +++ b/source/glest_game/type_instances/unit.h @@ -720,6 +720,8 @@ public: //void addCurrentTargetPathTakenCell(const Vec2i &target,const Vec2i &cell); void logSynchData(string file,int line,string source=""); + void logSynchDataThreaded(string file,int line,string source=""); + std::string toString() const; bool needToUpdate(); @@ -766,6 +768,8 @@ private: void checkUnitLevel(); void morphAttackBoosts(Unit *unit); + + void logSynchDataCommon(string file,int line,string source="",bool threadedMode=false); }; }}// end namespace diff --git a/source/glest_game/world/unit_updater.cpp b/source/glest_game/world/unit_updater.cpp index 901dee7f..6e25ffee 100644 --- a/source/glest_game/world/unit_updater.cpp +++ b/source/glest_game/world/unit_updater.cpp @@ -356,6 +356,11 @@ void UnitUpdater::updateUnitCommand(Unit *unit, int frameIndex) { void UnitUpdater::updateStop(Unit *unit, int frameIndex) { // Nothing to do if(frameIndex >= 0) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateStop]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } clearUnitPrecache(unit); return; } @@ -436,6 +441,11 @@ void UnitUpdater::updateMove(Unit *unit, int frameIndex) { snprintf(szBuf,8096,"[updateMove] pos [%s] unit [%d - %s] cmd [%s]",pos.getString().c_str(),unit->getId(),unit->getFullName().c_str(),command->toString().c_str()); unit->logSynchData(__FILE__,__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateMove] pos [%s] unit [%d - %s] cmd [%s]",pos.getString().c_str(),unit->getId(),unit->getFullName().c_str(),command->toString().c_str()); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); @@ -468,6 +478,18 @@ void UnitUpdater::updateMove(Unit *unit, int frameIndex) { break; } } + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateMove] tsValue [%d]",tsValue); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateMove] tsValue [%d]",tsValue); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s] Line: %d took msecs: %lld --------------------------- [END OF METHOD] ---------------------------\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); } @@ -481,6 +503,11 @@ void UnitUpdater::updateAttack(Unit *unit, int frameIndex) { snprintf(szBuf,8096,"[updateAttack]"); unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttack]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } Chrono chrono; if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) chrono.start(); @@ -561,10 +588,14 @@ void UnitUpdater::updateAttack(Unit *unit, int frameIndex) { if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { char szBuf[8096]=""; - snprintf(szBuf,8096,"[updateAttack] pos [%s] unit->getPos() [%s]", - pos.getString().c_str(),unit->getPos().getString().c_str()); + snprintf(szBuf,8096,"[updateAttack] pos [%s] unit->getPos() [%s]",pos.getString().c_str(),unit->getPos().getString().c_str()); unit->logSynchData(__FILE__,__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttack] pos [%s] unit->getPos() [%s]",pos.getString().c_str(),unit->getPos().getString().c_str()); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); @@ -662,6 +693,12 @@ void UnitUpdater::updateAttack(Unit *unit, int frameIndex) { } } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttack] tsValue [%d]",tsValue); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); } } @@ -675,6 +712,11 @@ void UnitUpdater::updateAttack(Unit *unit, int frameIndex) { void UnitUpdater::updateAttackStopped(Unit *unit, int frameIndex) { // Nothing to do if(frameIndex >= 0) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttackStopped]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } clearUnitPrecache(unit); return; } @@ -691,8 +733,13 @@ void UnitUpdater::updateAttackStopped(Unit *unit, int frameIndex) { const AttackStoppedCommandType *asct= static_cast(command->getCommandType()); Unit *enemy=NULL; - if(unit->getCommandSize() > 1) - { + if(unit->getCommandSize() > 1) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttackStopped]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + unit->finishCommand(); // attackStopped is skipped if somthing else is queued after this. return; } @@ -703,13 +750,31 @@ void UnitUpdater::updateAttackStopped(Unit *unit, int frameIndex) { if(result.first == true) { unit->setCurrSkill(asct->getAttackSkillType()); unit->setTarget(result.second); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttackStopped]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } } else if(attackableOnRange(unit, &enemy, asct->getAttackSkillType(),(frameIndex >= 0))) { unit->setCurrSkill(asct->getAttackSkillType()); unit->setTarget(enemy); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttackStopped]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } } else { unit->setCurrSkill(asct->getStopSkillType()); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateAttackStopped]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } } if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s] Line: %d took msecs: %lld --------------------------- [END OF METHOD] ---------------------------\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); @@ -769,6 +834,18 @@ std::pair UnitUpdater::unitBeingAttacked(const Unit *unit) { // ==================== updateBuild ==================== void UnitUpdater::updateBuild(Unit *unit, int frameIndex) { + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + Chrono chrono; if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) chrono.start(); @@ -802,8 +879,26 @@ void UnitUpdater::updateBuild(Unit *unit, int frameIndex) { unit->getPos().getString().c_str(),command->getPos().getString().c_str(),buildPos.getString().c_str()); unit->logSynchData(__FILE__,__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild] unit->getPos() [%s] command->getPos() [%s] buildPos [%s]", + unit->getPos().getString().c_str(),command->getPos().getString().c_str(),buildPos.getString().c_str()); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } tsValue = pathFinder->findPath(unit, buildPos, NULL, frameIndex); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild] tsValue: %d",tsValue); + unit->logSynchData(__FILE__,__LINE__,szBuf); + } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild] tsValue: %d",tsValue); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + } break; default: @@ -938,11 +1033,24 @@ void UnitUpdater::updateBuild(Unit *unit, int frameIndex) { //if unit is killed while building then u==NULL; if(builtUnit != NULL && builtUnit != command->getUnit()) { if(SystemFlags::getSystemSettingType(SystemFlags::debugUnitCommands).enabled) SystemFlags::OutputDebug(SystemFlags::debugUnitCommands,"In [%s::%s Line: %d] builtUnit is not the command's unit!\n",__FILE__,__FUNCTION__,__LINE__); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild]"); + unit->logSynchData(__FILE__,__LINE__,szBuf); + } + unit->setCurrSkill(scStop); } else if(builtUnit == NULL || builtUnit->isBuilt()) { if(SystemFlags::getSystemSettingType(SystemFlags::debugUnitCommands).enabled) SystemFlags::OutputDebug(SystemFlags::debugUnitCommands,"In [%s::%s Line: %d] builtUnit is NULL or ALREADY built\n",__FILE__,__FUNCTION__,__LINE__); + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild]"); + unit->logSynchData(__FILE__,__LINE__,szBuf); + } + unit->finishCommand(); unit->setCurrSkill(scStop); @@ -950,6 +1058,12 @@ void UnitUpdater::updateBuild(Unit *unit, int frameIndex) { else if(builtUnit == NULL || builtUnit->repair()) { if(SystemFlags::getSystemSettingType(SystemFlags::debugUnitCommands).enabled) SystemFlags::OutputDebug(SystemFlags::debugUnitCommands,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateBuild]"); + unit->logSynchData(__FILE__,__LINE__,szBuf); + } + const CommandType *ct = (command != NULL ? command->getCommandType() : NULL); //building finished unit->finishCommand(); @@ -978,6 +1092,12 @@ void UnitUpdater::updateHarvestEmergencyReturn(Unit *unit, int frameIndex) { return; } + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvestEmergencyReturn]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + //printf("\n#1 updateHarvestEmergencyReturn\n"); Command *command= unit->getCurrCommand(); @@ -1043,6 +1163,18 @@ void UnitUpdater::updateHarvestEmergencyReturn(Unit *unit, int frameIndex) { } void UnitUpdater::updateHarvest(Unit *unit, int frameIndex) { + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + Chrono chrono; if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) chrono.start(); @@ -1104,6 +1236,12 @@ void UnitUpdater::updateHarvest(Unit *unit, int frameIndex) { //printf("%%----------- unit [%s - %d] CHANGING RESOURCE POS from [%s] to [%s]\n",unit->getFullName().c_str(),unit->getId(),command->getOriginalPos().getString().c_str(),clickPos.getString().c_str()); if(frameIndex < 0) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest] clickPos [%s]",clickPos.getString().c_str()); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + command->setPos(clickPos); } } @@ -1118,8 +1256,19 @@ void UnitUpdater::updateHarvest(Unit *unit, int frameIndex) { if (canHarvestDestPos == true ) { if(frameIndex < 0) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest]"); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + unit->setLastHarvestResourceTarget(NULL); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest]"); + unit->logSynchDataThreaded(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } canHarvestDestPos = (map->getSurfaceCell(Map::toSurfCoords(targetPos)) != NULL && map->getSurfaceCell(Map::toSurfCoords(targetPos))->getResource() != NULL && map->getSurfaceCell(Map::toSurfCoords(targetPos))->getResource()->getType() != NULL); @@ -1143,12 +1292,24 @@ void UnitUpdater::updateHarvest(Unit *unit, int frameIndex) { default: throw megaglest_runtime_error("detected unsupported pathfinder type!"); } + + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest] targetPos [%s]",targetPos.getString().c_str()); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } } if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] took msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,chrono.getMillis()); } } if(canHarvestDestPos == false) { if(frameIndex < 0) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex < 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest] targetPos [%s]",targetPos.getString().c_str()); + unit->logSynchData(extractFileFromDirectoryPath(__FILE__).c_str(),__LINE__,szBuf); + } + unit->setLastHarvestResourceTarget(&targetPos); } @@ -1160,6 +1321,12 @@ void UnitUpdater::updateHarvest(Unit *unit, int frameIndex) { unit->getPos().getString().c_str(),command->getPos().getString().c_str()); unit->logSynchData(__FILE__,__LINE__,szBuf); } + else if(SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled == true && frameIndex >= 0) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"[updateHarvest] unit->getPos() [%s] command->getPos() [%s]", + unit->getPos().getString().c_str(),command->getPos().getString().c_str()); + unit->logSynchDataThreaded(__FILE__,__LINE__,szBuf); + } //if not continue walking bool wasStuck = false; diff --git a/source/glest_game/world/world.cpp b/source/glest_game/world/world.cpp index 8a98f539..f1f19816 100644 --- a/source/glest_game/world/world.cpp +++ b/source/glest_game/world/world.cpp @@ -67,7 +67,7 @@ World::World() { fogOfWarSmoothing= config.getBool("FogOfWarSmoothing"); fogOfWarSmoothingFrameSkip= config.getInt("FogOfWarSmoothingFrameSkip"); - MaxExploredCellsLookupItemCache= config.getInt("MaxExploredCellsLookupItemCache",intToStr(MaxExploredCellsLookupItemCache).c_str()); + //MaxExploredCellsLookupItemCache= config.getInt("MaxExploredCellsLookupItemCache",intToStr(MaxExploredCellsLookupItemCache).c_str()); frameCount= 0; //nextUnitId= 0; @@ -519,6 +519,7 @@ void World::updateAllFactionUnits() { Faction *faction = getFaction(i); faction->clearUnitsPathfinding(); faction->clearAproxCanMoveSoonCached(); + faction->clearWorldSynchThreadedLogList(); } if(showPerfStats) { @@ -592,6 +593,8 @@ void World::updateAllFactionUnits() { int totalUnitsProcessed = 0; for(int i = 0; i < factionCount; ++i) { Faction *faction = getFaction(i); + + faction->dumpWorldSynchThreadedLogList(); faction->clearUnitsPathfinding(); std::map mapCommandCount;