From b8505bd7dfa6da03edd0b17cc94e0cf7c6b71999 Mon Sep 17 00:00:00 2001 From: kervala Date: Thu, 17 Dec 2015 13:04:56 +0100 Subject: [PATCH] Merge with develop --- .../tools/3d/panoply_maker/panoply_maker.cpp | 171 ++++----- .../server/src/ai_service/ai_grp_fauna.cpp | 328 +++++++++--------- .../server/src/ai_service/ai_instance.cpp | 6 +- 3 files changed, 255 insertions(+), 250 deletions(-) diff --git a/code/nel/tools/3d/panoply_maker/panoply_maker.cpp b/code/nel/tools/3d/panoply_maker/panoply_maker.cpp index 9a434d438..ac9bbc3d7 100644 --- a/code/nel/tools/3d/panoply_maker/panoply_maker.cpp +++ b/code/nel/tools/3d/panoply_maker/panoply_maker.cpp @@ -90,14 +90,14 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str */ static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::string &fileNameWithExtension, bool mustDivideBy2); - + /// replace slashes by the matching os value in a file name static std::string replaceSlashes(const std::string &src) { std::string result = src; for(uint k = 0; k < result.size(); ++k) - #ifdef NL_OS_WINDOWS + #ifdef NL_OS_WINDOWS if (result[k] == '/') result[k] = '\\'; #else if (result[k] == '\\') result[k] = '/'; @@ -109,7 +109,7 @@ static std::string replaceSlashes(const std::string &src) ///===================================================== int main(int argc, char* argv[]) -{ +{ // Filter addSearchPath NLMISC::createDebug(); @@ -122,7 +122,7 @@ int main(int argc, char* argv[]) std::string _Path_Input_TexBases; std::string _Path_Input_Masks; - std::string _Path_Output_MaksOptimized; + std::string _Path_Output_MasksOptimized; std::string _Path_Output_Gtm; std::string _Path_Output_Cgi; @@ -162,10 +162,10 @@ int main(int argc, char* argv[]) { } - /// repertory output of masks optimized created + /// optimized masks output directory created try { - _Path_Output_MaksOptimized = NLMISC::CPath::standardizePath(cf.getVar ("output_path_mask_optimized").asString()); + _Path_Output_MasksOptimized = NLMISC::CPath::standardizePath(cf.getVar ("output_path_mask_optimized").asString()); } catch (const NLMISC::EUnknownVar &) { @@ -192,8 +192,7 @@ int main(int argc, char* argv[]) } catch (const std::exception &e) { - nlwarning("Panoply building failed."); - nlwarning(e.what()); + nlerror("Panoply building failed: %s", e.what()); return -1; } @@ -203,7 +202,7 @@ int main(int argc, char* argv[]) { CInfoMaskGeneration infoMaskGen(_Path_Input_TexBases, _Path_Input_Masks, - _Path_Output_MaksOptimized, + _Path_Output_MasksOptimized, _Path_Output_Gtm, argv[3], 1); @@ -228,11 +227,11 @@ int main(int argc, char* argv[]) if (argc != 2) { - nlwarning("usage : %s [config_file name]", argv[0]); + nlinfo("Usage : %s [config_file name]", argv[0]); return -1; } - CBuildInfo bi; + CBuildInfo bi; ///////////////////////////////////////// // reads infos from the config files // @@ -259,7 +258,7 @@ int main(int argc, char* argv[]) catch (const NLMISC::EUnknownVar &) { } - + /// input try { @@ -310,7 +309,7 @@ int main(int argc, char* argv[]) /// default ascii character for unused masks try { - bi.DefaultSeparator = cf.getVar ("default_separator").asString(); + bi.DefaultSeparator = cf.getVar ("default_separator").asString(); } catch (const NLMISC::EUnknownVar &) { @@ -319,7 +318,7 @@ int main(int argc, char* argv[]) /// extension for bitmaps try { - NLMISC::CConfigFile::CVar &bitmap_extensions = cf.getVar ("bitmap_extensions"); + NLMISC::CConfigFile::CVar &bitmap_extensions = cf.getVar ("bitmap_extensions"); for (uint k = 0; k < (uint) bitmap_extensions.size(); ++k) { std::string ext = "." + bitmap_extensions.asString(k); @@ -327,8 +326,8 @@ int main(int argc, char* argv[]) if (std::find(bi.BitmapExtensions.begin(), bi.BitmapExtensions.end(), ext) == bi.BitmapExtensions.end()) { bi.BitmapExtensions.push_back(ext); - } - } + } + } } catch (const NLMISC::EUnknownVar &) { @@ -338,7 +337,7 @@ int main(int argc, char* argv[]) try { - bi.LowDefShift = cf.getVar ("low_def_shift").asInt(); + bi.LowDefShift = cf.getVar ("low_def_shift").asInt(); } catch (const NLMISC::EUnknownVar &) { @@ -349,8 +348,7 @@ int main(int argc, char* argv[]) } catch (const std::exception &e) { - nlwarning("Panoply building failed."); - nlwarning(e.what()); + nlerror("Panoply building failed: %s", e.what()); return -1; } @@ -363,7 +361,7 @@ int main(int argc, char* argv[]) } catch (const std::exception &e) { - nlwarning("Something went wrong while building bitmap : %s", e.what()); + nlerror("Something went wrong while building bitmap: %s", e.what()); return -1; } return 0; @@ -377,7 +375,7 @@ int main(int argc, char* argv[]) static void validateCgiInfo() { NLMISC::CIFile f; - + vector temp; uint version; @@ -391,7 +389,7 @@ static void validateCgiInfo() } catch(const std::exception &e) { - nlwarning("Panoply building failed."); + nlerror("Panoply building failed: %s", e.what()); } uint16 a = temp.size(); @@ -409,15 +407,15 @@ static void validateGtmInfo() ///====================================================== static void BuildMasksFromConfigFile(NLMISC::CConfigFile &cf, TColorMaskVect &colorMasks) - + { - /// get a list of the alpha mask extensions + /// get a list of the alpha mask extensions NLMISC::CConfigFile::CVar &mask_extensions = cf.getVar ("mask_extensions"); colorMasks.resize(mask_extensions.size()); /// For each kind of mask, build a list of the color modifiers for (uint k = 0; k < (uint) mask_extensions.size(); ++k) - { + { colorMasks[k].MaskExt = mask_extensions.asString(k); NLMISC::CConfigFile::CVar &luminosities = cf.getVar (colorMasks[k].MaskExt + "_luminosities"); NLMISC::CConfigFile::CVar &contrasts = cf.getVar (colorMasks[k].MaskExt + "_constrasts"); @@ -427,7 +425,7 @@ static void BuildMasksFromConfigFile(NLMISC::CConfigFile &cf, NLMISC::CConfigFile::CVar &colorIDs = cf.getVar (colorMasks[k].MaskExt + "_color_id"); if (luminosities.size() != contrasts.size() - || luminosities.size() != hues.size() + || luminosities.size() != hues.size() || luminosities.size() != lightness.size() || luminosities.size() != saturation.size() || luminosities.size() != colorIDs.size() @@ -455,7 +453,7 @@ static void BuildColoredVersions(const CBuildInfo &bi) { if (!NLMISC::CFile::isExists(bi.InputPath)) { - nlwarning(("Path not found : " + bi.InputPath).c_str()); + nlerror("Path not found: %s", bi.InputPath.c_str()); return; } for(uint sizeVersion= 0; sizeVersion<2; sizeVersion++) @@ -473,16 +471,16 @@ static void BuildColoredVersions(const CBuildInfo &bi) { for (uint l = 0; l < bi.BitmapExtensions.size(); ++l) { - std::string fileExt = "." + NLMISC::strupr(NLMISC::CFile::getExtension(files[k])); + std::string fileExt = "." + NLMISC::strupr(NLMISC::CFile::getExtension(files[k])); if (fileExt == bi.BitmapExtensions[l]) { - //nlwarning("Processing : %s ", files[k].c_str()); + //nlwarning("Processing : %s ", files[k].c_str()); try { if (CheckIfNeedRebuildColoredVersionForOneBitmap(bi, NLMISC::CFile::getFilename(files[k]), sizeVersion==1) ) - { - BuildColoredVersionForOneBitmap(bi, + { + BuildColoredVersionForOneBitmap(bi, NLMISC::CFile::getFilename(files[k]), sizeVersion==1); } @@ -493,7 +491,7 @@ static void BuildColoredVersions(const CBuildInfo &bi) } catch (const std::exception &e) { - nlwarning("Processing of %s failed : %s \n", files[k].c_str(), e.what()); + nlerror("Processing of %s failed: %s", files[k].c_str(), e.what()); } } } @@ -502,7 +500,7 @@ static void BuildColoredVersions(const CBuildInfo &bi) } -/// used to loop throiugh the process, avoiding unused masks +/// used to loop throiugh the process, avoiding unused masks struct CLoopInfo { NLMISC::CBitmap Mask; @@ -512,11 +510,11 @@ struct CLoopInfo ///====================================================== -static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::string &fileNameWithExtension, +static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::string &fileNameWithExtension, bool mustDivideBy2) -{ +{ if (bi.CachePath.empty()) return true; - uint32 srcDate = (uint32) NLMISC::CFile::getFileModificationDate(replaceSlashes(bi.InputPath + fileNameWithExtension)); + uint32 srcDate = (uint32) NLMISC::CFile::getFileModificationDate(replaceSlashes(bi.InputPath + fileNameWithExtension)); static std::vector masks; /// check the needed masks masks.clear(); @@ -530,16 +528,16 @@ static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, c std::string maskFileName = NLMISC::CPath::lookup(maskName, false, false); if (!maskFileName.empty()) // found the mask ? - { + { CLoopInfo li; li.Counter = 0; li.MaskID = k; if (NLMISC::CFile::fileExists(maskFileName)) { - srcDate = std::max(srcDate, (uint32) NLMISC::CFile::getFileModificationDate(replaceSlashes(maskFileName))); - masks.push_back(li); - } + srcDate = std::max(srcDate, (uint32) NLMISC::CFile::getFileModificationDate(replaceSlashes(maskFileName))); + masks.push_back(li); + } } } @@ -550,7 +548,7 @@ static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, c return true; else { - // Must now if was moved beetween normal dir and d4/ dir. + // Must now if was moved beetween normal dir and d4/ dir. CHLSBankTextureInfo hlsInfo; // read .hlsInfo cache CIFile f; @@ -565,7 +563,7 @@ static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, c // ok, can move the cache if (!NLMISC::CFile::moveFile(outputHLSInfo, cacheHLSInfo)) { - nlwarning(("Couldn't move " + cacheHLSInfo + " to " + outputHLSInfo).c_str()); + nlerror("Couldn't move %s to %s", cacheHLSInfo.c_str(), outputHLSInfo.c_str()); return true; } } @@ -573,33 +571,34 @@ static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, c /// check is each generated texture has the same date or is more recent for(;;) - { + { uint l; std::string outputFileName = fileName; - + /// build current tex name for (l = 0; l < masks.size(); ++l) { uint maskID = masks[l].MaskID; - uint colorID = masks[l].Counter; + uint colorID = masks[l].Counter; /// complete the file name outputFileName += bi.DefaultSeparator + bi.ColorMasks[maskID].CMs[colorID].ColID; } - // compare date + // compare date std::string searchName = replaceSlashes(bi.CachePath + outputFileName + bi.OutputFormat); - if ((uint32) NLMISC::CFile::getFileModificationDate(searchName) < srcDate) - { - return true; // not found or more old => need rebuild + if ((uint32) NLMISC::CFile::getFileModificationDate(searchName) < srcDate) + { + return true; // not found or more old => need rebuild } // get version that is in the cache std::string cacheDest = bi.OutputPath + outputFileName + bi.OutputFormat; + if (!NLMISC::CFile::moveFile(cacheDest, searchName)) { - nlwarning(("Couldn't move " + searchName + " to " + cacheDest).c_str()); + nlerror("Couldn't move %s to %s", searchName.c_str(), cacheDest.c_str()); return true; - } + } /// increment counters for (l = 0; l < (uint) masks.size(); ++l) @@ -624,9 +623,9 @@ static bool CheckIfNeedRebuildColoredVersionForOneBitmap(const CBuildInfo &bi, c ///====================================================== -static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::string &fileNameWithExtension, +static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::string &fileNameWithExtension, bool mustDivideBy2) -{ +{ uint32 depth; NLMISC::CBitmap srcBitmap; NLMISC::CBitmap resultBitmap; @@ -641,16 +640,19 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str actualInputPath= bi.InputPath; // load + std::string fullInputBitmapPath = actualInputPath + fileNameWithExtension; + NLMISC::CIFile is; try { - if (is.open(actualInputPath + fileNameWithExtension)) + if (is.open(fullInputBitmapPath)) { depth = srcBitmap.load(is); if (depth == 0 || srcBitmap.getPixels().empty()) { - throw NLMISC::Exception(std::string("Failed to load bitmap ") + actualInputPath + fileNameWithExtension); + throw NLMISC::Exception("Failed to load bitmap"); } + if (srcBitmap.PixelFormat != NLMISC::CBitmap::RGBA) { srcBitmap.convertToType(NLMISC::CBitmap::RGBA); @@ -658,17 +660,17 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str } else { - nlwarning("Unable to open %s. Processing next", (actualInputPath + fileNameWithExtension).c_str()); + nlerror("Unable to open %s. Processing next", fullInputBitmapPath.c_str()); return; - } + } } - catch (const NLMISC::Exception &) + catch (const NLMISC::Exception &e) { - nlwarning("File or format error with : %s. Processing next...", fileNameWithExtension.c_str()); + nlerror("File or format error with %s (%s). Processing next...", fullInputBitmapPath.c_str(), e.what()); return; } } - + /// **** Build and prepare build of the .hlsinfo to write. CHLSBankTextureInfo hlsInfo; CBitmap hlsInfoSrcBitmap; @@ -703,7 +705,7 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str std::string maskFileName = NLMISC::CPath::lookup(maskName, false, false); if (!maskFileName.empty()) // found the mask ? - { + { CLoopInfo li; li.Counter = 0; li.MaskID = k; @@ -714,14 +716,10 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str { if (is.open(maskFileName)) - { - if (li.Mask.load(is) == 0) + { + if (li.Mask.load(is) == 0 || li.Mask.getPixels().empty()) { - throw NLMISC::Exception(std::string("Failed to load mask ") + maskFileName); - } - if (li.Mask.getPixels().empty()) - { - throw NLMISC::Exception(std::string("Failed to load mask ") + maskFileName); + throw NLMISC::Exception("Failed to load mask"); } if (li.Mask.PixelFormat != NLMISC::CBitmap::RGBA) @@ -735,17 +733,18 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str { throw NLMISC::Exception("Bitmap and mask do not have the same size"); } + masks.push_back(li); } else { - nlwarning("Unable to open %s. Processing next", maskFileName.c_str()); + nlerror("Unable to open %s. Processing next", maskFileName.c_str()); return; } } catch (const std::exception &e) { - nlwarning("Error with : %s : %s. Aborting this bitmap processing", maskFileName.c_str(), e.what()); + nlerror("Error with %s: %s. Aborting this bitmap processing", maskFileName.c_str(), e.what()); return; } } @@ -762,14 +761,14 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str } - // **** generate each texture + // **** generate each texture // NB : if there are no masks the texture just will be copied for(;;) - { + { resultBitmap = srcBitmap; uint l; std::string outputFileName = fileName; - + // Add an instance entry to the hlsInfo uint instId= (uint)hlsInfo.Instances.size(); hlsInfo.Instances.resize(instId+1); @@ -797,17 +796,19 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str /// complete the file name outputFileName += bi.DefaultSeparator + bi.ColorMasks[maskID].CMs[colorID].ColID; } - - // save good hlsInfo instance name - hlsTextInstance.Name= outputFileName + bi.OutputFormat; - nlwarning("Writing %s", outputFileName.c_str()); + // save good hlsInfo instance name + hlsTextInstance.Name = outputFileName + bi.OutputFormat; + + nlinfo("Writing %s", outputFileName.c_str()); /// Save the result. We let propagate exceptions (if there's no more space disk it useless to continue...) { + std::string fullOutputPath = bi.OutputPath + "/" + outputFileName + bi.OutputFormat; + try { NLMISC::COFile os; - if (os.open(bi.OutputPath + "/" + outputFileName + bi.OutputFormat)) + if (os.open(fullOutputPath)) { // divide by 2 when needed. if(mustDivideBy2) @@ -824,17 +825,17 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str } else { - nlwarning(("Couldn't open " + bi.OutputPath + outputFileName + bi.OutputFormat + " for writing").c_str()); + nlerror("Couldn't open %s for writing", fullOutputPath.c_str()); } } catch(const NLMISC::EStream &e) { - nlwarning(("Couldn't write " + bi.OutputPath + outputFileName + bi.OutputFormat + " : " + e.what()).c_str()); + nlerror("Couldn't write %s: %s", fullOutputPath.c_str(), e.what()); } } - - /// increment counters + + /// increment counters for (l = 0; l < (uint) masks.size(); ++l) { ++ (masks[l].Counter); @@ -853,14 +854,16 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str } // **** save the TMP hlsInfo + std::string fullHlsInfoPath = bi.HlsInfoPath + fileName + ".hlsinfo"; + NLMISC::COFile os; - if (os.open(bi.HlsInfoPath + fileName + ".hlsinfo")) + if (os.open(fullHlsInfoPath)) { os.serial(hlsInfo); } else { - nlwarning(("Couldn't write " + bi.HlsInfoPath + fileName + ".hlsinfo").c_str()); + nlerror("Couldn't write %s", fullHlsInfoPath.c_str()); } } diff --git a/code/ryzom/server/src/ai_service/ai_grp_fauna.cpp b/code/ryzom/server/src/ai_service/ai_grp_fauna.cpp index 6cd657ff2..c9a493763 100644 --- a/code/ryzom/server/src/ai_service/ai_grp_fauna.cpp +++ b/code/ryzom/server/src/ai_service/ai_grp_fauna.cpp @@ -45,7 +45,7 @@ static char const* stateName(CSpawnGroupFauna::TState s) // helper : get a fauna xyr zone from a base zone or a zone reference static inline const CFaunaGenericPlace *getFaunaGenericPlace(const CAIPlace *place) -{ +{ const CFaunaGenericPlace *faunaPlace = dynamic_cast(place); nlassert(faunaPlace); return faunaPlace; @@ -75,11 +75,11 @@ CSpawnGroupFauna::CSpawnGroupFauna(CPersistent& owner, RYAI_MAP_CRU { // variables for CAIMgrFauna's update prioritisation system _UpdatePriority = 0; // 0..15 - priority class (distance based - 0 is highest priority) - + _Leader = (CBotFauna*)NULL; - + _Timer.set(0); - + // pick a spawn place sint spawnPlace = getPersistent().getNextPlace(NULL, CAIPlaceXYRFauna::FLAG_SPAWN); if (spawnPlace == CGrpFauna::INVALID_PLACE) @@ -88,40 +88,40 @@ CSpawnGroupFauna::CSpawnGroupFauna(CPersistent& owner, RYAI_MAP_CRU // seek place with the smallest index sint minIndex = INT_MAX; for (uint k = 0; k < getPersistent().places().size(); ++k) - { + { const CFaunaGenericPlace *place = getFaunaGenericPlace(getPersistent().places()[k]); minIndex = std::min((sint) place->getIndex(), minIndex); } for (uint k = 0; k < getPersistent().places().size(); ++k) - { + { const CFaunaGenericPlace *place = getFaunaGenericPlace(getPersistent().places()[k]); if ((sint) place->getIndex() == minIndex) { candidates.push_back(k); } } - spawnPlace = (sint) candidates[rand() % candidates.size()]; - //nlwarning("No spawn place found for group %s, using place with smallest index", getPersistent().getName().c_str()); + spawnPlace = (sint) candidates[rand() % candidates.size()]; + //nlwarning("No spawn place found for group %s, using place with smallest index", getPersistent().getName().c_str()); } setPlace(spawnPlace); _CenterPos = _TargetPlace->midPos(); - + // make sure memory's been allocated for the bots if (bots().size()==0) getPersistent().allocateBots(); - + if (bots().size()!=0) { uint32 const spawnTimer = getPersistent().timer(CGrpFauna::SPAWN_TIME); _Timer.set(spawnTimer); } - + // setup the update priority system variables _LastUpdate = CTimeInterface::gameCycle(); _DeltaTime = 1; - + _CurrentCycle = 0; - + setMustDespawnBots(false); } @@ -138,14 +138,14 @@ void CSpawnGroupFauna::despawnGrp() // critical code (despawn 'this' object). } void CSpawnGroupFauna::recalcUpdatePriorityDeltaAndGroupPos() -{ +{ // recalculate the priority delta score for the group based on players in vision bool speedUpdate = false; - + sint32 grpPosx = 0; sint32 grpPosy = 0; sint32 nbBots = 0; - + FOREACH(it, CCont, bots()) { CBotFauna *bot=NLMISC::safe_cast(*it); @@ -159,39 +159,39 @@ void CSpawnGroupFauna::recalcUpdatePriorityDeltaAndGroupPos() grpPosy+=(sint32)(pos.y().asInt()*(1.0/1000.0)); nbBots++; } - + if (botFauna->havePlayersAround()) { speedUpdate=true; break; - } - + } + } - + } if (nbBots>0) { _CenterPos = CAIVector(grpPosx/nbBots,grpPosy/nbBots); } - + if (speedUpdate) _UpdatePriority = 1; else _UpdatePriority = 31; - + // if players are approaching then crop our move time uint32 curTime = CTimeInterface::gameCycle (); if (((sint32)(curTime-_LastUpdate))>(_UpdatePriority+1)) _LastUpdate = curTime-(_UpdatePriority+1); - + _DeltaTime = curTime-_LastUpdate; } CBotFauna* CSpawnGroupFauna::findLeader() { CBotFauna* possibleLeader = NULL; - + CCont::iterator it = bots().begin(); CCont::iterator itEnd = bots().end(); while (it!=itEnd) @@ -214,21 +214,21 @@ CBotFauna* CSpawnGroupFauna::findLeader() void CSpawnGroupFauna::update() { H_AUTO(GrpFaunaUpdate); - + ++AISStat::GrpTotalUpdCtr; ++AISStat::GrpFaunaUpdCtr; - + getPersistent().updateStateInstance(); - + if (_CurrentCycle==std::numeric_limits::max()) return; - + // Respawn // breakable { H_AUTO(GrpFaunaUpdateDealWithDead); checkDespawn (); - + if (nbBotToRespawn()>0) { if (nbSpawnedBot()>0) // (getPersistent().bots().size()/2)) @@ -246,23 +246,23 @@ void CSpawnGroupFauna::update() } } } - + // recalculate our priority rating in function of distance from player // if players are approaching then crop our move time recalcUpdatePriorityDeltaAndGroupPos(); - + // identify the leader, call type-dependent update and calculate group position and radius { H_AUTO(GrpFaunaUpdateByType); - + H_TIME(GrpFaunaUpdateFindLeader, _Leader = findLeader();); // locate the first live bot and treat them as the group leader - + // update the state variable (think about changing state) H_TIME(GrpFaunaUpdateCheckTimer, checkTimers();); - + H_TIME(GrpFaunaUpdateGeneralUpdate, generalUpdate();); - + // re-find leader as it could have been despawn .. _Leader = findLeader(); } @@ -273,10 +273,10 @@ void CSpawnGroupFauna::update() void CSpawnGroupFauna::generalUpdate(TState state) { H_TIME(GrpFaunaReorganize, reorganize(bots().begin(), bots().end());); - + { H_AUTO(GrpFaunaUpdDespawnTest); - + if ( !mustDespawnBots() && getUpdatePriority ()>(2<<3) && !getPersistent().timeAllowSpawn() ) // 40*3 -> more than 120 meters far from players @@ -284,10 +284,10 @@ void CSpawnGroupFauna::generalUpdate(TState state) setMustDespawnBots (true); } } - + if (state==StateUndefined) state=CGrpFauna::cycles[_CurrentCycle]._Activity; - + // call a type-dependent update switch (getPersistent().getType()) { @@ -306,7 +306,7 @@ void CSpawnGroupFauna::generalUpdate(TState state) } } break; - + case FaunaTypePlant: { H_AUTO(GrpFaunaUpdPlant); @@ -322,7 +322,7 @@ void CSpawnGroupFauna::generalUpdate(TState state) } } break; - + default: nlwarning("CSpawnGroupFauna::update() FAILED because group type not valid: %d",getPersistent().getType()); } } @@ -351,7 +351,7 @@ void CSpawnGroupFauna::updateSpawning() for (i=0;iisSpawned()) { @@ -378,8 +378,8 @@ void CSpawnGroupFauna::updateSpawning() } - - + + // by definition there must be a bot type nlassert(iisSpawned()) { - const CAIPos leaderPos(_Leader->getSpawn()->pos()); + const CAIPos leaderPos(_Leader->getSpawn()->pos()); const CAIPos midPos=_TargetPlace->midPos(); // better is very possible. - + if (leaderPos.distTo(midPos)<_TargetPlace->getRadius()) // si leader dans la zone. { - _ArrivedInZone=true; // we desactivate the boolean. + _ArrivedInZone=true; // we desactivate the boolean. const CFaunaGenericPlace *faunaPlace = getFaunaGenericPlace(targetPlace()); NLMISC::CRandom rnd; uint32 stayTime = faunaPlace->getMinStayTime() + (sint32) (rnd.frand() * ((sint32) faunaPlace->getMaxStayTime() - (sint32) faunaPlace->getMinStayTime())); _Timer.set(stayTime); /* - nlwarning("Group %s : Setting stay time to %d in place %s with index %d", - getPersistent().getName().c_str(), + nlwarning("Group %s : Setting stay time to %d in place %s with index %d", + getPersistent().getName().c_str(), (int) stayTime, faunaPlace->getName().c_str(), (int) faunaPlace->getIndex()); @@ -528,7 +528,7 @@ void CSpawnGroupFauna::checkTimers() } } - + } else { @@ -553,17 +553,17 @@ void CSpawnGroupFauna::despawnBots(bool immediately) } CAIPos const& CSpawnGroupFauna::magnetPos() const -{ +{ return targetPlace()->midPos(); } float CSpawnGroupFauna::magnetRadiusNear() const -{ +{ return targetPlace()->getRadius()*(7.0f/8.0f); } float CSpawnGroupFauna::magnetRadiusFar() const -{ +{ return targetPlace()->getRadius()*(9.0f/8.0f); } @@ -603,19 +603,19 @@ CGrpFauna::CGrpFauna(CMgrFauna* mgr, CAIAliasDescriptionNode* aliasTree, RYAI_MA , CDynGrpBase() , CPersistentStateInstance(*mgr->getStateMachine()) { - + // state - + _CurPopulation = std::numeric_limits::max(); - + _CurrentCycle = std::numeric_limits::max(); - - // default values. + + // default values. setTimer(EAT_TIME, refTimer(EAT_TIME)); setTimer(REST_TIME, refTimer(REST_TIME)); setTimer(SPAWN_TIME, refTimer(SPAWN_TIME)); - setTimer(CORPSE_TIME, refTimer(CORPSE_TIME)); - setTimer(RESPAWN_TIME, refTimer(RESPAWN_TIME)); + setTimer(CORPSE_TIME, refTimer(CORPSE_TIME)); + setTimer(RESPAWN_TIME, refTimer(RESPAWN_TIME)); } void CGrpFauna::stateChange(CAIState const* oldState, CAIState const* newState) @@ -630,8 +630,8 @@ std::string CGrpFauna::getOneLineInfoString() const std::vector CGrpFauna::getMultiLineInfoString() const { std::vector container; - - + + pushTitle(container, "CGrpFauna"); pushEntry(container, "id=" + CGroup::getIndexString()); container.back() += " alias=" + getAliasString(); @@ -642,7 +642,7 @@ std::vector CGrpFauna::getMultiLineInfoString() const CPopulation const* pop = *it; uint32 index = pop->getChildIndex(); pushEntry(container, "- population["+toString(index)+"]: "+((_CurPopulation==index)? "* ACTIVE *": "")); - + for (uint j=0; jsize(); ++j) { CPopulationRecord& popRecord = (*pop)[j]; @@ -661,8 +661,8 @@ std::vector CGrpFauna::getMultiLineInfoString() const container.push_back(" " + *itString); } pushFooter(container); - - + + return container; } @@ -684,26 +684,26 @@ CAliasTreeOwner* CGrpFauna::createChild(IAliasCont* cont, CAIAliasDescriptionNod { if (!cont) return NULL; - + CAliasTreeOwner* child = NULL; - + switch (aliasTree->getType()) { // create the child and adds it to the corresponding position. case AITypePlaceFauna: - child = new CAIPlaceXYRFauna(this, aliasTree); + child = new CAIPlaceXYRFauna(this, aliasTree); break; case AITypePlace: { - std::string const& name = aliasTree->getName(); + std::string const& name = aliasTree->getName(); CAIPlaceXYRFauna *faunaPlace = new CAIPlaceXYRFauna(this, aliasTree); - child = faunaPlace; + child = faunaPlace; uint placeIndex = faunaPlace->setupFromOldName(name); - nlassert(placeIndex!=std::numeric_limits::max()); + nlassert(placeIndex!=std::numeric_limits::max()); if (placeIndex!=std::numeric_limits::max()) cont->addAliasChild(child, placeIndex); - + return child; } break; @@ -711,7 +711,7 @@ CAliasTreeOwner* CGrpFauna::createChild(IAliasCont* cont, CAIAliasDescriptionNod child = new CPopulation(this, aliasTree); break; } - + if (child) cont->addAliasChild(child); return child; @@ -726,13 +726,13 @@ void CGrpFauna::displayPlaces(CStringWriter& stringWriter) const } -CGrpFauna::~CGrpFauna() +CGrpFauna::~CGrpFauna() { if (isSpawned()) // to avoid bad CDbgPtr link interpretation { despawnGrp(); } - + // unlink all child persistent state instance while (!_PSIChilds.empty()) { @@ -750,12 +750,12 @@ void CGrpFauna::setEvent(uint eventId) void CGrpFauna::serviceEvent (const CServiceEvent &info) { CGroup::serviceEvent(info); - + if ((info.getServiceName() == "EGS") && (info.getEventType() == CServiceEvent::SERVICE_UP)) { processStateEvent(getEventContainer().EventEGSUp); } - + } NLMISC::CSmartPtr CGrpFauna::createSpawnGroup() @@ -767,7 +767,7 @@ bool CGrpFauna::spawn() { if (!getSpawnCounter().remainToMax()) return false; - + setStartState(getStartState()); // stateInstance. return spawnPop(std::numeric_limits::max()); } @@ -778,7 +778,7 @@ bool CGrpFauna::timeAllowSpawn(uint32 popVersion) const { popVersion = _CurPopulation; } - + CPopulation* popPtr = _Populations[popVersion]; #ifdef NL_DEBUG nlassert(popPtr); @@ -788,7 +788,7 @@ bool CGrpFauna::timeAllowSpawn(uint32 popVersion) const return false; } TSpawnType st = popPtr->getSpawnType(); - + bool const& isDay = CTimeInterface::isDay(); return (st==SpawnTypeAlways) || (isDay&&st==SpawnTypeDay) || (!isDay&&st==SpawnTypeNight); @@ -806,7 +806,7 @@ bool CGrpFauna::spawnPop(uint popVersion) || !places()[EAT_PLACE]->worldValidPos().isValid() || !places()[REST_PLACE]->worldValidPos().isValid()) // coz time is not initialized yet .. return false;*/ - + // check compatibility. /* { @@ -829,7 +829,7 @@ bool CGrpFauna::spawnPop(uint popVersion) checkArcs(*_Places[k]); } - + // check flags .. for (uint32 i=0;i::max() && popVersion>=_Populations.size()) { nlwarning("CGrpFauna::spawn(idx) FAILED for group %s because idx (%d) >= _Populations.size() (%d)",this->CGroup::getFullName().c_str(),popVersion,_Populations.size()); return false; } - - popVersion = ~0; - + + popVersion = std::numeric_limits::max(); + // if we are in a cycle. - if (_CurrentCycle!=~0) + if (_CurrentCycle != std::numeric_limits::max()) { Cycle const& cycle = _Cycles[_CurrentCycle]; - + // this to avoid bug dues to bad data initialization. do { ++_CurrentCycleIndex; - } while ( _CurrentCycleIndex<(sint32)cycle._PopList.size() + } + while ( _CurrentCycleIndex<(sint32)cycle._PopList.size() && !_Populations[cycle._PopList[_CurrentCycleIndex]]); - + if (_CurrentCycleIndex<(sint32)cycle._PopList.size()) { popVersion=cycle._PopList[_CurrentCycleIndex]; + if (!timeAllowSpawn(popVersion)) { - popVersion=~0; + popVersion = std::numeric_limits::max(); } } - - if (popVersion==~0) + + if (popVersion == std::numeric_limits::max()) { - _CurrentCycle = ~0; + _CurrentCycle = std::numeric_limits::max(); } } - + // if the population version has not been specified then select one at weighted random with day/night difference. - if (popVersion==~0) + if (popVersion == std::numeric_limits::max()) { uint32 totalWeight = 0; - + // we can precalculate this, but it won't appears so much to be called. FOREACH(it, CCont, _Populations) { @@ -889,10 +891,10 @@ bool CGrpFauna::spawnPop(uint popVersion) continue; totalWeight += pop.getWeight(); } - + if (totalWeight==0) return false; - + { sint32 rnd = CAIS::rand32(totalWeight); FOREACH(it, CCont, _Populations) @@ -900,62 +902,62 @@ bool CGrpFauna::spawnPop(uint popVersion) CPopulation const& pop = *(*it); if (!timeAllowSpawn(pop.getChildIndex())) continue; - + rnd -= pop.getWeight(); if (rnd>0) // we found the population to spawn. :) continue; - + popVersion=pop.getChildIndex(); break; } } - + #if !FINAL_VERSION - nlassert(popVersion!=~0); + nlassert(popVersion != std::numeric_limits::max()); #endif - if (popVersion==~0) + if (popVersion == std::numeric_limits::max()) return false; - + // find if we are starting a new cycle .. for (uint32 i=0;i<_Cycles.size();i++) { nlassert(_Cycles[i]._PopList.size()>0); if (_Cycles[i]._PopList[0]!=popVersion) continue; - + _CurrentCycle = i; _CurrentCycleIndex = 0; } } - + if (popVersion >= _Populations.size()) { nlwarning("Problem with pop size for group id %s, NAME = %s", this->CGroup::getFullName().c_str(), getName().c_str() ); return false; } - + // setup the pointer to the current population _CurPopulation = popVersion; - + // check that we have a defined spawn location if (!_Places[SPAWN_PLACE]) { nlwarning("CGrpFauna::spawn(idx) FAILED for group %s because _spawnPlace==NULL",this->CGroup::getFullName().c_str()); return false; } - + // if the group is already spawned despawn it if (isSpawned()) { despawnGrp(); } - - nlassert(_CurPopulation!=~0); - + + nlassert(_CurPopulation != std::numeric_limits::max()); + ////////////////////////////////////////////////////////////////////////// - // Init the group type. - setType ((*_Populations[_CurPopulation])[0].getCreatureSheet()->FaunaType()); // gets the first population record of the population to spawn. - + // Init the group type. + setType ((*_Populations[_CurPopulation])[0].getCreatureSheet()->FaunaType()); // gets the first population record of the population to spawn. + { uint32 botCount=0; uint32 i; @@ -966,7 +968,7 @@ bool CGrpFauna::spawnPop(uint popVersion) if ( curPop[i].getBotCount(getCountMultiplierFlag()) == 0 || curPop[i].getCreatureSheet()->FaunaType() == getType()) continue; - + if (getGroupDesc()) // Dyn system. { nlwarning("****** WARNING: Different Fauna Type in Template Group %s", getGroupDesc()->getFullName().c_str()); @@ -977,36 +979,36 @@ bool CGrpFauna::spawnPop(uint popVersion) } } bots().setChildSize(botCount); // set the good size for bots vector. - + for (i=0;i::max(); } // reads cycle from primitive (string representation). void CGrpFauna::setCyles(std::string const& cycles) { uint32 strIndex = 0; - uint32 curCycle = ~0; - + uint32 curCycle = std::numeric_limits::max(); + while (strIndex='A' && carac<='Z') carac += 'a'-'A'; - + if (carac>='a' && carac<='z') { - if (curCycle==~0) + if (curCycle == std::numeric_limits::max()) { curCycle = (uint32)_Cycles.size(); _Cycles.push_back(Cycle()); @@ -1016,22 +1018,22 @@ void CGrpFauna::setCyles(std::string const& cycles) } else { - curCycle = ~0; + curCycle = std::numeric_limits::max(); } } } -void CGrpFauna::setPopulation(CPopulation* pop) +void CGrpFauna::setPopulation(CPopulation* pop) { CPopulation* sameAliasPop = NULL; - uint32 index = ~0; - + uint32 index = std::numeric_limits::max(); + if (pop) sameAliasPop = _Populations.getChildByAlias(pop->getAlias()); - + if (pop && pop->size()==0) // no population record :( pop=NULL; - + if (sameAliasPop) // Alias already present ? { index = sameAliasPop->getChildIndex(); @@ -1041,7 +1043,7 @@ void CGrpFauna::setPopulation(CPopulation* pop) { _Populations.addChild(pop); // else simply add it to the populations container } - + // if it was the current population, respawn it. (to check with designers?) if (index==_CurPopulation) { @@ -1057,24 +1059,24 @@ void CGrpFauna::setPopulation(CPopulation* pop) void CGrpFauna::allocateBots() { uint maxPopulation = 0; - + // work out how much space we need CCont::iterator it = populations().begin(); CCont::iterator itEnd = populations().end(); - + while (it!=itEnd) { CPopulation* pop = *(it); uint count=0; - + for (sint j=(sint)pop->size()-1;j>=0;j--) count+=(*pop)[j].getBotCount(getCountMultiplierFlag()); - + if (count>maxPopulation) - maxPopulation=count; + maxPopulation=count; ++it; } - + _Bots.setChildSize(maxPopulation); for (uint32 i=0;i(getOwner()); +{ + return *static_cast(getOwner()); } CAIS::CCounter& CGrpFauna::getSpawnCounter() @@ -1134,13 +1136,13 @@ sint CGrpFauna::getNextPlace(const CFaunaGenericPlace *startPlace, CAIPlaceXYRFa } } else - { + { sint minIndex = INT_MAX; sint firstIndex = INT_MAX; if (startPlace->getReachNext()) { for (uint k = 0; k < _Places.size(); ++k) - { + { const CFaunaGenericPlace *place = getFaunaGenericPlace(_Places[k]); firstIndex = std::min(firstIndex, (sint) place->getIndex()); if (place->getIndex() < minIndex && place->getIndex() > startPlace->getIndex()) @@ -1165,9 +1167,9 @@ sint CGrpFauna::getNextPlace(const CFaunaGenericPlace *startPlace, CAIPlaceXYRFa } } } - // includes all places reachable from the arcs list + // includes all places reachable from the arcs list for (uint k = 0; k < _Places.size(); ++k) - { + { const CFaunaGenericPlace *place = getFaunaGenericPlace(_Places[k]); if (place != startPlace && place->getFlag(wantedFlag)) { @@ -1192,7 +1194,7 @@ sint CGrpFauna::getNextPlace(const CFaunaGenericPlace *startPlace, CAIPlaceXYRFa if (!activeCandidates.empty()) { return (sint) activeCandidates[rand() % activeCandidates.size()]; - } + } // if current place is valid then don't move if (startPlace && startPlace->getActive()) return CAIPlaceXYRFauna::INVALID_PLACE; // otherwise select a place in unactive places @@ -1210,7 +1212,7 @@ bool CGrpFauna::checkArcs(const CAIPlace &startPlace) const if (startPlaceGeneric->getReachNext()) { for (uint k = 0; k < _Places.size(); ++k) - { + { const CFaunaGenericPlace *place = getFaunaGenericPlace(_Places[k]); firstIndex = std::min(firstIndex, (sint) place->getIndex()); if (place->getIndex() < minIndex && place->getIndex() > startPlaceGeneric->getIndex()) @@ -1226,22 +1228,22 @@ bool CGrpFauna::checkArcs(const CAIPlace &startPlace) const { RYAI_MAP_CRUNCH::CCompatibleResult res; areCompatiblesWithoutStartRestriction(startPlace.worldValidPos(), _Places[k]->worldValidPos(), getAStarFlag(), res); - if (!res.isValid()) return false; + if (!res.isValid()) return false; } } } - // includes all places reachable from the arcs list + // includes all places reachable from the arcs list for (uint k = 0; k < _Places.size(); ++k) - { + { const CFaunaGenericPlace *place = getFaunaGenericPlace(_Places[k]); if (place != startPlaceGeneric) - { + { if (std::find(startPlaceGeneric->getArcs().begin(), startPlaceGeneric->getArcs().end(), place->getIndex()) != startPlaceGeneric->getArcs().end()) { // this place is in current arc list RYAI_MAP_CRUNCH::CCompatibleResult res; areCompatiblesWithoutStartRestriction(startPlace.worldValidPos(), _Places[k]->worldValidPos(), getAStarFlag(), res); - if (!res.isValid()) return false; + if (!res.isValid()) return false; } } } @@ -1249,7 +1251,7 @@ bool CGrpFauna::checkArcs(const CAIPlace &startPlace) const } void CSpawnGroupFauna::setPlace(int placeIndex) -{ +{ const CFaunaGenericPlace *place = getFaunaGenericPlace(getPersistent().places()[placeIndex]); //nlwarning("Going to place %s with index %d", getPersistent().places()[placeIndex]->getName().c_str(), place->getIndex()); @@ -1257,7 +1259,7 @@ void CSpawnGroupFauna::setPlace(int placeIndex) { nlwarning("Bad place index for fauna group %s", getPersistent().getName().c_str()); } - + // const CFaunaGenericPlace *faunaPlace = getFaunaGenericPlace(getPersistent().places()[placeIndex]); // nlwarning("Group %s : Chosing place %s (%d) with graph index %d", getPersistent().getName().c_str(), faunaPlace->getName().c_str(), placeIndex, (int) faunaPlace->getIndex()); diff --git a/code/ryzom/server/src/ai_service/ai_instance.cpp b/code/ryzom/server/src/ai_service/ai_instance.cpp index f7034807a..d97c0b0fa 100644 --- a/code/ryzom/server/src/ai_service/ai_instance.cpp +++ b/code/ryzom/server/src/ai_service/ai_instance.cpp @@ -412,7 +412,7 @@ CAIEntity* CAIInstance::tryToGetEntity(char const* str, CAIS::TSearchType search CManager *mgrPtr=NULL; CGroup *grpPtr=NULL; CBot *botPtr=NULL; - uint32 localIndex=~0; + uint32 localIndex = std::numeric_limits::max(); mgr = id; while((*id!=':')&&(*id!=0)) id++; @@ -635,7 +635,7 @@ static CAIVector randomPos(double dispersionRadius) { return CAIVector(0., 0.); } - uint32 const maxLimit=((uint32)~0U)>>1; + const uint32 maxLimit = std::numeric_limits::max() >>1; double rval = (double)CAIS::rand32(maxLimit)/(double)maxLimit; // [0-1[ double r = dispersionRadius*sqrt(rval); rval = (double)CAIS::rand32(maxLimit)/(double)maxLimit; // [0-1[ @@ -896,7 +896,7 @@ void cbEventNpcGroupScript( NLNET::CMessage& msgin, const std::string &serviceNa msgin.serial(messageVersion); nlassert(messageVersion==1); msgin.serial(nbString); - + string eid; string firstCommand; msgin.serial(eid); // Player or boteid