#include <zone_manager.h>
Inheritance diagram for NL3D::CZoneManager:
Nevrax France
Definition at line 52 of file zone_manager.h.
Public Member Functions | |
void | checkZonesAround (uint x, uint y, uint area) |
void | clear () |
Remove all zones. | |
CZoneManager () | |
Constructor. | |
void | getListZoneId (uint x, uint y, uint sizeArea, std::vector< uint16 > &l) |
void | getListZoneName (uint x, uint y, uint sizeArea, std::list< std::pair< std::string, uint32 > > &l) |
uint | getNumZoneLeftToLoad () |
Return the count of zone left to load. | |
uint16 | getZoneId (uint x, uint y) const |
std::pair< std::string, uint32 > | getZoneName (uint x, uint y, uint cx, uint cy) |
std::string | getZoneNameFromId (uint16 zoneid) |
std::string | getZonePath (void) |
getZonePath : Get Path for zone loading | |
void | getZonePos (uint16 zoneId, uint &x, uint &y) const |
bool | isLoading () const |
Does the manager is loading ? | |
bool | isRemoving () const |
Does the manager is removing ? | |
bool | isWorkComplete (SZoneManagerWork &rWork) |
Is a work has been completed ? | |
void | setZonePath (std::string zonePath) |
setZonePath : Set Path for zone loading | |
void | setZoneTileColor (bool monochrome, float factor) |
set the zone tile color (if false tile are monochromed with the tile color) | |
~CZoneManager () | |
Destructor. | |
Private Attributes | |
uint16 | _IdZoneToRemove |
uint32 | _LastX |
uint32 | _LastY |
std::vector< uint16 > | _LoadedZones |
std::list< CLoadingZone > | _LoadingZones |
bool | _RemovingZone |
std::vector< uint16 > | _ZoneList |
std::string | _zonePath |
Path for zone loading. | |
float | _ZoneTileColorFactor |
bool | _ZoneTileColorMono |
|
Constructor.
Definition at line 46 of file zone_manager.cpp. References _RemovingZone, _ZoneTileColorFactor, and _ZoneTileColorMono.
00047 { 00048 _RemovingZone= false; 00049 _ZoneTileColorMono = true; 00050 _ZoneTileColorFactor = 1.0f; 00051 } |
|
Destructor.
Definition at line 54 of file zone_manager.cpp.
00055 { 00056 } |
|
checkZonesAround : Add/Remove all zomes around a certain point If a work is currently completed remove it and began another one Definition at line 80 of file zone_manager.cpp. References _IdZoneToRemove, _LastY, _LoadedZones, _LoadingZones, _RemovingZone, _ZoneList, _ZoneTileColorFactor, _ZoneTileColorMono, NLMISC::CTaskManager::addTask(), NL3D::CZoneSearch::getListZoneId(), NL3D::CZoneSearch::getZoneNameFromId(), NL3D::CZoneSearch::getZonePos(), uint, uint16, uint32, v, x, y, NL3D::CZoneManager::CLoadingZone::Zone, NL3D::CZoneManager::CLoadingZone::ZoneToAddId, and NL3D::CZoneManager::CLoadingZone::ZoneToAddName. Referenced by NL3D::CLandscapeUser::loadAllZonesAround(), NL3D::CLandscapeUser::refreshAllZonesAround(), and NL3D::CLandscapeUser::refreshZonesAround().
00081 { 00082 if (_RemovingZone) return; 00083 00084 // Obtain the new set of zones around 00085 if ((x != _LastX) || (y != _LastY)) 00086 getListZoneId (x, y, area, _ZoneList); 00087 _LastX = x; 00088 _LastY = y; 00089 00090 // Look if we have zone loaded that is not needed anymore 00091 uint32 i, j; 00092 for (i = 0; i < _LoadedZones.size(); ++i) 00093 { 00094 // If the loadedzone i do not appear in the zone list so we have to remove it 00095 bool bFound = false; 00096 uint16 nLoadedZone = _LoadedZones[i]; 00097 for (j = 0; j < _ZoneList.size(); ++j) 00098 { 00099 if (_ZoneList[j] == nLoadedZone) 00100 { 00101 bFound = true; 00102 break; 00103 } 00104 } 00105 00106 if (!bFound) 00107 { 00108 // Remove the zone nLoadedZone 00109 _IdZoneToRemove = nLoadedZone; 00110 _RemovingZone = true; 00111 return; 00112 } 00113 } 00114 00115 // Look if we have zone not already loaded 00116 for (i = 0; i < _ZoneList.size(); ++i) 00117 { 00118 // If the zone requested do not appear in the zone loaded list so we have to load it 00119 bool bFound = false; 00120 uint16 nZone = _ZoneList[i]; 00121 for (j = 0; j < _LoadedZones.size(); ++j) 00122 { 00123 if (_LoadedZones[j] == nZone) 00124 { 00125 bFound = true; 00126 break; 00127 } 00128 } 00129 00130 if (!bFound) 00131 { 00132 // Already loading ? 00133 std::list<CLoadingZone>::iterator ite = _LoadingZones.begin (); 00134 while (ite != _LoadingZones.end()) 00135 { 00136 if (ite->ZoneToAddId == nZone) 00137 break; 00138 00139 // Next loading zone 00140 ite++; 00141 } 00142 00143 // Not loading ? 00144 if (ite == _LoadingZones.end()) 00145 { 00146 // Add a new zone to load 00147 _LoadingZones.push_back(CLoadingZone ()); 00148 CLoadingZone &newZone = _LoadingZones.back(); 00149 newZone.ZoneToAddName = getZoneNameFromId(nZone); 00150 newZone.ZoneToAddId = nZone; 00151 newZone.Zone = NULL; 00152 00153 // We have to load this zone ! and return because only one load at a time 00154 CAsyncFileManager &rAFM = CAsyncFileManager::getInstance(); 00155 00156 // Make a position 00157 uint x, y; 00158 getZonePos (newZone.ZoneToAddId, x, y); 00159 // rAFM.addTask (new CZoneLoadingTask(newZone.ZoneToAddName, &newZone.Zone, CVector ((float)x, -(float)y, 0))); 00160 CVector v = CVector ((float)x, -(float)y, 0); 00161 rAFM.addTask (new CZoneLoadingTask(newZone.ZoneToAddName, &newZone.Zone, v, _ZoneTileColorMono, _ZoneTileColorFactor)); 00162 } 00163 } 00164 } 00165 } |
|
Remove all zones.
Definition at line 220 of file zone_manager.cpp. References _LoadedZones, _LoadingZones, _RemovingZone, and nlassert. Referenced by NL3D::CLandscapeUser::removeAllZones().
00221 { 00222 nlassert(_LoadingZones.size() == 0); 00223 _LoadedZones.clear(); 00224 _RemovingZone = false; 00225 } |
|
Definition at line 158 of file zone_search.cpp. References NL3D::CZoneSearch::_NbZoneX, NL3D::CZoneSearch::_NbZoneY, NL3D::CZoneSearch::_SizeZoneX, NL3D::CZoneSearch::_SizeZoneY, NL3D::CZoneSearch::getZoneId(), sint, uint, x, and y. Referenced by checkZonesAround().
00159 { 00160 sint startPosX, startPosY; 00161 uint lastPosX, lastPosY, sizeAreaX, sizeAreaY; 00162 00163 startPosX = x - sizeArea; 00164 startPosY = y - sizeArea; 00165 00166 sizeArea += sizeArea; 00167 sizeAreaX = sizeAreaY = sizeArea; 00168 00169 if(startPosX < 0) 00170 { 00171 sizeAreaX += startPosX; 00172 startPosX = 0; 00173 } 00174 00175 lastPosX = startPosX + sizeAreaX; 00176 if(lastPosX >= (_NbZoneX * _SizeZoneX)) 00177 { 00178 sizeAreaX -= _NbZoneX * _SizeZoneX - lastPosX; 00179 lastPosX = _NbZoneX * _SizeZoneX - 1; 00180 } 00181 00182 if(startPosY < 0) 00183 { 00184 sizeAreaY += startPosY; 00185 startPosY = 0; 00186 } 00187 00188 lastPosY = startPosY + sizeAreaY; 00189 if(lastPosY >= (_NbZoneY * _SizeZoneY)) 00190 { 00191 sizeAreaY -= _NbZoneY * _SizeZoneY - lastPosY; 00192 lastPosY = _NbZoneY * _SizeZoneY - 1; 00193 } 00194 00195 l.clear(); 00196 00197 for(uint i = startPosY; i <= lastPosY; i += _SizeZoneY) 00198 { 00199 for(uint j = startPosX; j <= lastPosX; j += _SizeZoneX) 00200 { 00201 l.push_back(getZoneId(j, i)); 00202 } 00203 } 00204 } |
|
Definition at line 96 of file zone_search.cpp. References NL3D::CZoneSearch::_NbZoneX, NL3D::CZoneSearch::_NbZoneY, NL3D::CZoneSearch::_SizeZoneX, NL3D::CZoneSearch::_SizeZoneY, NL3D::CZoneSearch::getZoneName(), sint, uint, x, and y.
00097 { 00098 sint startPosX, startPosY; 00099 uint lastPosX, lastPosY, sizeAreaX, sizeAreaY; 00100 00101 startPosX = x - sizeArea; 00102 startPosY = y - sizeArea; 00103 00104 sizeArea += sizeArea; 00105 sizeAreaX = sizeAreaY = sizeArea; 00106 00107 if(startPosX < 0) 00108 { 00109 sizeAreaX += startPosX; 00110 startPosX = 0; 00111 } 00112 00113 lastPosX = startPosX + sizeAreaX; 00114 if(lastPosX >= (_NbZoneX * _SizeZoneX)) 00115 { 00116 sizeAreaX -= _NbZoneX * _SizeZoneX - lastPosX; 00117 lastPosX = _NbZoneX * _SizeZoneX - 1; 00118 } 00119 00120 if(startPosY < 0) 00121 { 00122 sizeAreaY += startPosY; 00123 startPosY = 0; 00124 } 00125 00126 lastPosY = startPosY + sizeAreaY; 00127 if(lastPosY >= (_NbZoneY * _SizeZoneY)) 00128 { 00129 sizeAreaY -= _NbZoneY * _SizeZoneY - lastPosY; 00130 lastPosY = _NbZoneY * _SizeZoneY - 1; 00131 } 00132 00133 l.clear(); 00134 00135 for(uint i = startPosY; i <= lastPosY; i += _SizeZoneY) 00136 { 00137 for(uint j = startPosX; j <= lastPosX; j += _SizeZoneX) 00138 { 00139 l.push_back(getZoneName(j, i, x, y)); 00140 } 00141 } 00142 } |
|
Return the count of zone left to load.
Definition at line 59 of file zone_manager.cpp. References _LoadedZones, _ZoneList, uint, and uint32. Referenced by NL3D::CLandscapeUser::refreshAllZonesAround().
00060 { 00061 // Make a set of the loaded zone 00062 set<uint16> zoneLoaded; 00063 uint32 i; 00064 for (i = 0; i < _LoadedZones.size(); ++i) 00065 { 00066 zoneLoaded.insert (_LoadedZones[i]); 00067 } 00068 00069 // Check for each zone in the list if they are loaded or not 00070 uint zoneCount = 0; 00071 for (i = 0; i < _ZoneList.size(); ++i) 00072 { 00073 if (zoneLoaded.find (_ZoneList[i]) == zoneLoaded.end ()) 00074 zoneCount++; 00075 } 00076 return zoneCount; 00077 } |
|
Definition at line 144 of file zone_search.cpp. References NL3D::CZoneSearch::_SizeZoneX, NL3D::CZoneSearch::_SizeZoneY, uint, uint16, x, and y. Referenced by NL3D::CZoneSearch::getListZoneId().
|
|
Get the zone name corresponding to coordinate
Definition at line 67 of file zone_search.cpp. References NL3D::CZoneSearch::_SizeZoneX, NL3D::CZoneSearch::_SizeZoneY, uint, uint32, x, and y. Referenced by NL3D::CZoneSearch::getListZoneName(), and NL3D::CLandscapeUser::getZoneName().
00068 { 00069 char name[13]; 00070 00071 uint zoneY = y / _SizeZoneY + 1; 00072 uint zoneX = x / _SizeZoneX; 00073 00074 uint zoneCenterY = cy / _SizeZoneY + 1; 00075 uint zoneCenterX = cx / _SizeZoneX; 00076 00077 uint32 distance = (zoneX - zoneCenterX) * (zoneX - zoneCenterX) + (zoneY - zoneCenterY) * (zoneY - zoneCenterY); 00078 00079 char firstLetter = zoneX / 26 + 'A'; 00080 char secondLetter = zoneX % 26 + 'A'; 00081 00082 sprintf(name, "%d_%c%c.zonel", zoneY, firstLetter, secondLetter); 00083 00084 return make_pair<string, uint32>(string(name), distance); 00085 } |
|
Definition at line 206 of file zone_search.cpp. References sint, uint16, x, and y. Referenced by checkZonesAround(), and isWorkComplete().
|
|
getZonePath : Get Path for zone loading
Definition at line 112 of file zone_manager.h. References _zonePath.
00112 { return _zonePath; } |
|
Definition at line 152 of file zone_search.cpp. References NL3D::CZoneSearch::_SizeZoneY, uint, uint16, x, and y. Referenced by checkZonesAround().
|
|
Does the manager is loading ?
Definition at line 93 of file zone_manager.h. References _LoadingZones. Referenced by NL3D::CLandscapeUser::loadAllZonesAround(), NL3D::CLandscapeUser::refreshAllZonesAround(), and NL3D::CLandscapeUser::removeAllZones().
00093 {return _LoadingZones.size () != 0;} |
|
Does the manager is removing ?
Definition at line 96 of file zone_manager.h. References _RemovingZone. Referenced by NL3D::CLandscapeUser::refreshAllZonesAround().
00096 {return _RemovingZone;} |
|
Is a work has been completed ?
Definition at line 168 of file zone_manager.cpp. References _IdZoneToRemove, _LoadedZones, _LoadingZones, _RemovingZone, NL3D::CZoneSearch::getZoneNameFromId(), NL3D::CZoneManager::SZoneManagerWork::IdZoneToRemove, NL3D::CZoneManager::SZoneManagerWork::NameZoneAdded, NL3D::CZoneManager::SZoneManagerWork::NameZoneRemoved, uint32, NL3D::CZoneManager::SZoneManagerWork::Zone, NL3D::CZoneManager::SZoneManagerWork::ZoneAdded, and NL3D::CZoneManager::SZoneManagerWork::ZoneRemoved. Referenced by NL3D::CLandscapeUser::loadAllZonesAround(), NL3D::CLandscapeUser::refreshZonesAround(), and NL3D::CLandscapeUser::removeAllZones().
00169 { 00170 // Check if there is someting to add 00171 std::list<CLoadingZone>::iterator ite = _LoadingZones.begin (); 00172 while (ite != _LoadingZones.end()) 00173 { 00174 // Loaded ? 00175 if (ite->Zone) 00176 { 00177 rWork.ZoneAdded = true; 00178 rWork.NameZoneAdded = ite->ZoneToAddName; 00179 rWork.ZoneRemoved = false; 00180 rWork.IdZoneToRemove = 0; 00181 rWork.NameZoneRemoved = ""; 00182 rWork.Zone = const_cast<CZone*>(ite->Zone); 00183 _LoadedZones.push_back (ite->ZoneToAddId); 00184 00185 // Remove from loading zone 00186 _LoadingZones.erase(ite); 00187 return true; 00188 } 00189 00190 // Next zone 00191 ite++; 00192 } 00193 00194 if (_RemovingZone) 00195 { 00196 _RemovingZone = false; 00197 rWork.ZoneAdded = false; 00198 rWork.NameZoneAdded = ""; 00199 rWork.ZoneRemoved = true; 00200 rWork.IdZoneToRemove = _IdZoneToRemove; 00201 rWork.NameZoneRemoved = getZoneNameFromId(_IdZoneToRemove); 00202 uint32 i, j; 00203 for (i = 0 ; i < _LoadedZones.size(); ++i) 00204 if (_LoadedZones[i] == _IdZoneToRemove) 00205 break; 00206 if (i < _LoadedZones.size()) 00207 { 00208 for (j = i; j < _LoadedZones.size()-1; ++j) 00209 _LoadedZones[j] = _LoadedZones[j+1]; 00210 _LoadedZones.resize(_LoadedZones.size()-1); 00211 } 00212 rWork.Zone = NULL; 00213 return true; 00214 } 00215 00216 return false; 00217 } |
|
setZonePath : Set Path for zone loading Accessors Definition at line 109 of file zone_manager.h. References _zonePath.
00109 { _zonePath = zonePath; } |
|
set the zone tile color (if false tile are monochromed with the tile color)
Definition at line 115 of file zone_manager.h. References _ZoneTileColorFactor, and _ZoneTileColorMono. Referenced by NL3D::CLandscapeUser::setTileColor().
00115 { _ZoneTileColorMono = monochrome; _ZoneTileColorFactor = factor; } |
|
Definition at line 150 of file zone_manager.h. Referenced by checkZonesAround(), and isWorkComplete(). |
|
Definition at line 129 of file zone_manager.h. |
|
Definition at line 129 of file zone_manager.h. Referenced by checkZonesAround(). |
|
Definition at line 126 of file zone_manager.h. Referenced by checkZonesAround(), clear(), getNumZoneLeftToLoad(), and isWorkComplete(). |
|
Definition at line 146 of file zone_manager.h. Referenced by checkZonesAround(), clear(), isLoading(), and isWorkComplete(). |
|
Definition at line 149 of file zone_manager.h. Referenced by checkZonesAround(), clear(), CZoneManager(), isRemoving(), and isWorkComplete(). |
|
Definition at line 128 of file zone_manager.h. Referenced by checkZonesAround(), and getNumZoneLeftToLoad(). |
|
Path for zone loading.
Definition at line 124 of file zone_manager.h. Referenced by getZonePath(), and setZonePath(). |
|
Definition at line 121 of file zone_manager.h. Referenced by checkZonesAround(), CZoneManager(), and setZoneTileColor(). |
|
Definition at line 120 of file zone_manager.h. Referenced by checkZonesAround(), CZoneManager(), and setZoneTileColor(). |