Hide over the limit landmarks instead deleting them
This commit is contained in:
parent
f26e595ad3
commit
4185369ce9
5 changed files with 40 additions and 61 deletions
|
@ -529,36 +529,18 @@ void CContinentManager::serialUserLandMarks(NLMISC::IStream &f)
|
||||||
f.serialCont(dummy);
|
f.serialCont(dummy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The number of stored landmarks is not checked at this time, but if we receive a
|
|
||||||
// lower value in the server database, we will cut down using checkNumberOfUserLandmarks()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
// checkNumberOfLandmarks
|
// updateUserLandMarks
|
||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
void CContinentManager::checkNumberOfUserLandmarks( uint maxNumber )
|
void CContinentManager::updateUserLandMarks()
|
||||||
{
|
{
|
||||||
for ( TContinents::iterator it=_Continents.begin(); it!=_Continents.end(); ++it )
|
|
||||||
{
|
|
||||||
CContinent *cont = (*it).second;
|
|
||||||
if ( cont->UserLandMarks.size() > maxNumber )
|
|
||||||
{
|
|
||||||
// Just cut down the last landmarks (in case of hacked file)
|
|
||||||
if ( cont == _Current )
|
|
||||||
{
|
|
||||||
CGroupMap *pMap = dynamic_cast<CGroupMap*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:actual_map"));
|
CGroupMap *pMap = dynamic_cast<CGroupMap*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:actual_map"));
|
||||||
if ( pMap )
|
if ( pMap )
|
||||||
pMap->removeExceedingUserLandMarks( maxNumber );
|
pMap->updateUserLandMarks();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cont->UserLandMarks.resize( maxNumber );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -112,8 +112,8 @@ public:
|
||||||
// load / saves all user landMarks
|
// load / saves all user landMarks
|
||||||
void serialUserLandMarks(NLMISC::IStream &f);
|
void serialUserLandMarks(NLMISC::IStream &f);
|
||||||
|
|
||||||
// ensure the number of landmarks per continent does not exceed maxNumber
|
// rebuild visible landmarks on current map
|
||||||
void checkNumberOfUserLandmarks( uint maxNumber );
|
void updateUserLandMarks();
|
||||||
|
|
||||||
// load / saves all fow maps
|
// load / saves all fow maps
|
||||||
void serialFOWMaps();
|
void serialFOWMaps();
|
||||||
|
|
|
@ -2390,8 +2390,9 @@ void CGroupMap::createContinentLandMarks()
|
||||||
|
|
||||||
// Continent Landmarks
|
// Continent Landmarks
|
||||||
createLMWidgets(_CurContinent->ContLandMarks);
|
createLMWidgets(_CurContinent->ContLandMarks);
|
||||||
|
uint nbUserLandMarks = std::min( uint(_CurContinent->UserLandMarks.size()), CContinent::getMaxNbUserLandMarks());
|
||||||
// User Landmarks
|
// User Landmarks
|
||||||
for(k = 0; k < _CurContinent->UserLandMarks.size(); ++k)
|
for(k = 0; k < nbUserLandMarks; ++k)
|
||||||
{
|
{
|
||||||
NLMISC::CVector2f mapPos;
|
NLMISC::CVector2f mapPos;
|
||||||
worldToMap(mapPos, _CurContinent->UserLandMarks[k].Pos);
|
worldToMap(mapPos, _CurContinent->UserLandMarks[k].Pos);
|
||||||
|
@ -2429,7 +2430,8 @@ void CGroupMap::updateUserLandMarks()
|
||||||
removeLandMarks(_UserLM);
|
removeLandMarks(_UserLM);
|
||||||
|
|
||||||
// Re create User Landmarks
|
// Re create User Landmarks
|
||||||
for(k = 0; k < _CurContinent->UserLandMarks.size(); ++k)
|
uint nbUserLandMarks = std::min( uint(_CurContinent->UserLandMarks.size()), CContinent::getMaxNbUserLandMarks());
|
||||||
|
for(k = 0; k < nbUserLandMarks; ++k)
|
||||||
{
|
{
|
||||||
NLMISC::CVector2f mapPos;
|
NLMISC::CVector2f mapPos;
|
||||||
worldToMap(mapPos, _CurContinent->UserLandMarks[k].Pos);
|
worldToMap(mapPos, _CurContinent->UserLandMarks[k].Pos);
|
||||||
|
@ -2520,7 +2522,7 @@ CCtrlButton *CGroupMap::addUserLandMark(const NLMISC::CVector2f &pos, const ucst
|
||||||
void CGroupMap::removeUserLandMark(CCtrlButton *button)
|
void CGroupMap::removeUserLandMark(CCtrlButton *button)
|
||||||
{
|
{
|
||||||
if (_CurContinent == NULL) return;
|
if (_CurContinent == NULL) return;
|
||||||
nlassert(_CurContinent->UserLandMarks.size() == _UserLM.size());
|
nlassert(_CurContinent->UserLandMarks.size() >= _UserLM.size());
|
||||||
for(uint k = 0; k < _UserLM.size(); ++k)
|
for(uint k = 0; k < _UserLM.size(); ++k)
|
||||||
{
|
{
|
||||||
if (_UserLM[k] == button)
|
if (_UserLM[k] == button)
|
||||||
|
@ -2528,6 +2530,13 @@ void CGroupMap::removeUserLandMark(CCtrlButton *button)
|
||||||
delCtrl(_UserLM[k]);
|
delCtrl(_UserLM[k]);
|
||||||
_UserLM.erase(_UserLM.begin() + k);
|
_UserLM.erase(_UserLM.begin() + k);
|
||||||
_CurContinent->UserLandMarks.erase(_CurContinent->UserLandMarks.begin() + k);
|
_CurContinent->UserLandMarks.erase(_CurContinent->UserLandMarks.begin() + k);
|
||||||
|
|
||||||
|
if (_CurContinent->UserLandMarks.size() > _UserLM.size())
|
||||||
|
{
|
||||||
|
// if user has over the limit landmarks, then rebuild visible markers
|
||||||
|
updateUserLandMarks();
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2537,7 +2546,7 @@ void CGroupMap::removeUserLandMark(CCtrlButton *button)
|
||||||
void CGroupMap::updateUserLandMark(CCtrlButton *button, const ucstring &newTitle, const CUserLandMark::EUserLandMarkType lmType)
|
void CGroupMap::updateUserLandMark(CCtrlButton *button, const ucstring &newTitle, const CUserLandMark::EUserLandMarkType lmType)
|
||||||
{
|
{
|
||||||
if (_CurContinent == NULL) return;
|
if (_CurContinent == NULL) return;
|
||||||
nlassert(_CurContinent->UserLandMarks.size() == _UserLM.size());
|
nlassert(_CurContinent->UserLandMarks.size() >= _UserLM.size());
|
||||||
for(uint k = 0; k < _UserLM.size(); ++k)
|
for(uint k = 0; k < _UserLM.size(); ++k)
|
||||||
{
|
{
|
||||||
if (_UserLM[k] == button)
|
if (_UserLM[k] == button)
|
||||||
|
@ -2557,7 +2566,7 @@ CUserLandMark CGroupMap::getUserLandMark(CCtrlButton *button) const
|
||||||
{
|
{
|
||||||
CUserLandMark ulm;
|
CUserLandMark ulm;
|
||||||
if (_CurContinent == NULL) return ulm;
|
if (_CurContinent == NULL) return ulm;
|
||||||
nlassert(_CurContinent->UserLandMarks.size() == _UserLM.size());
|
nlassert(_CurContinent->UserLandMarks.size() >= _UserLM.size());
|
||||||
for(uint k = 0; k < _UserLM.size(); ++k)
|
for(uint k = 0; k < _UserLM.size(); ++k)
|
||||||
{
|
{
|
||||||
if (_UserLM[k] == button)
|
if (_UserLM[k] == button)
|
||||||
|
@ -2569,15 +2578,6 @@ CUserLandMark CGroupMap::getUserLandMark(CCtrlButton *button) const
|
||||||
|
|
||||||
return ulm;
|
return ulm;
|
||||||
}
|
}
|
||||||
//============================================================================================================
|
|
||||||
void CGroupMap::removeExceedingUserLandMarks(uint maxNumber)
|
|
||||||
{
|
|
||||||
while (_UserLM.size() > maxNumber)
|
|
||||||
{
|
|
||||||
removeUserLandMark(_UserLM.back());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//============================================================================================================
|
//============================================================================================================
|
||||||
uint CGroupMap::getNumUserLandMarks() const
|
uint CGroupMap::getNumUserLandMarks() const
|
||||||
|
|
|
@ -171,8 +171,6 @@ public:
|
||||||
void targetLandmark(CCtrlButton *lm);
|
void targetLandmark(CCtrlButton *lm);
|
||||||
// get the world position of a landmark or return vector Null if not found
|
// get the world position of a landmark or return vector Null if not found
|
||||||
void getLandmarkPosition(const CCtrlButton *lm, NLMISC::CVector2f &worldPos);
|
void getLandmarkPosition(const CCtrlButton *lm, NLMISC::CVector2f &worldPos);
|
||||||
// remove some landmarks if there are too many
|
|
||||||
void removeExceedingUserLandMarks(uint maxNumber);
|
|
||||||
|
|
||||||
//Remove and re-create UserLandMarks
|
//Remove and re-create UserLandMarks
|
||||||
void updateUserLandMarks();
|
void updateUserLandMarks();
|
||||||
|
|
|
@ -1810,8 +1810,7 @@ bool CInterfaceManager::loadConfig (const string &filename)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CInterfaceManager::CDBLandmarkObs::update(ICDBNode *node)
|
void CInterfaceManager::CDBLandmarkObs::update(ICDBNode *node)
|
||||||
{
|
{
|
||||||
uint nbBonusLandmarks = ((CCDBNodeLeaf*)node)->getValue32();
|
ContinentMngr.updateUserLandMarks();
|
||||||
ContinentMngr.checkNumberOfUserLandmarks( STANDARD_NUM_USER_LANDMARKS + nbBonusLandmarks );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue