|
From: Greg <evo...@us...> - 2005-12-18 21:37:20
|
Update of /cvsroot/evolutionlejeu/evolutionlejeu/Evolution/Atlas In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20446/Evolution/Atlas Modified Files: Atlas.dsp GeoProvince.cpp GeoProvince.h GeoWorld.cpp GeoWorld.h Log Message: ADD : process province dimensions ADD : adjust governor map to province (in dev) Index: Atlas.dsp =================================================================== RCS file: /cvsroot/evolutionlejeu/evolutionlejeu/Evolution/Atlas/Atlas.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Atlas.dsp 22 Jul 2005 23:29:55 -0000 1.6 --- Atlas.dsp 18 Dec 2005 21:37:03 -0000 1.7 *************** *** 65,69 **** # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c ! # ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../ELib/" /I "../Protogonos" /I "../Eris" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD BASE RSC /l 0x40c /d "_DEBUG" # ADD RSC /l 0x40c /d "_DEBUG" --- 65,69 ---- # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c ! # ADD CPP /nologo /MTd /W4 /Gm /GX /ZI /Od /I "../../ELib/" /I "../Protogonos" /I "../Eris" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x40c /d "_DEBUG" # ADD RSC /l 0x40c /d "_DEBUG" Index: GeoProvince.cpp =================================================================== RCS file: /cvsroot/evolutionlejeu/evolutionlejeu/Evolution/Atlas/GeoProvince.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** GeoProvince.cpp 17 Aug 2005 16:12:10 -0000 1.3 --- GeoProvince.cpp 18 Dec 2005 21:37:03 -0000 1.4 *************** *** 26,29 **** --- 26,32 ---- xmlObj.AddToXmlStdVector( "adj_prov", m_vecAdjacentProvinces ); xmlObj.AddToXml( "size", m_iSquareNumber ); + + xmlObj.AddAttribute( "dimns", m_dimNorthSouth ); + xmlObj.AddAttribute( "dimwe", m_dimWestEast ); } *************** *** 35,38 **** --- 38,44 ---- xmlObj.GetIntVecFromXml( "adj_prov", & m_vecAdjacentProvinces ); m_iSquareNumber = xmlObj.GetIntFromXml( "size" ); + + m_dimNorthSouth = (GeoDimension) xmlObj.GetAttribute( "dimns" ).ToInt(); + m_dimWestEast = (GeoDimension) xmlObj.GetAttribute( "dimwe" ).ToInt(); } *************** *** 71,73 **** { return m_iSquareNumber; ! } \ No newline at end of file --- 77,87 ---- { return m_iSquareNumber; ! } ! ! void GeoProvince::_SetGeoDatas( GeoCode gc, GeoDimension dimNorthSouth, GeoDimension dimWestEast ) ! { ! m_geoGeoCenter = gc; ! ! m_dimNorthSouth = dimNorthSouth; ! m_dimWestEast = dimWestEast; ! } Index: GeoProvince.h =================================================================== RCS file: /cvsroot/evolutionlejeu/evolutionlejeu/Evolution/Atlas/GeoProvince.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** GeoProvince.h 17 Aug 2005 16:12:10 -0000 1.3 --- GeoProvince.h 18 Dec 2005 21:37:03 -0000 1.4 *************** *** 17,22 **** void FromXml( XmlNode xmlParent ); ! void _SetGeoCenter( GeoCode gc ) { m_geoGeoCenter = gc; } GeoCode GetGeoCenter() { return m_geoGeoCenter; } virtual void _OnAddSquare(); --- 17,26 ---- void FromXml( XmlNode xmlParent ); ! void _SetGeoDatas( GeoCode gc, GeoDimension dimNorthSouth, GeoDimension dimWestEast ); ! GeoCode GetGeoCenter() { return m_geoGeoCenter; } + GeoDimension GetDimensionNorthSouth() { return m_dimNorthSouth; } + GeoDimension GetDimensionWestEast() { return m_dimWestEast; } + virtual void _OnAddSquare(); *************** *** 30,33 **** --- 34,38 ---- GeoCode m_geoGeoCenter; + GeoDimension m_dimNorthSouth, m_dimWestEast; int m_iSquareNumber; std::vector<provinceId> m_vecAdjacentProvinces; Index: GeoWorld.cpp =================================================================== RCS file: /cvsroot/evolutionlejeu/evolutionlejeu/Evolution/Atlas/GeoWorld.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** GeoWorld.cpp 9 Nov 2005 14:56:34 -0000 1.16 --- GeoWorld.cpp 18 Dec 2005 21:37:03 -0000 1.17 *************** *** 110,114 **** ComputeProvinces( world, pCallBack ); ! ComputeProvinceCenters(); ComputeProvinceAdjacency(); } --- 110,114 ---- ComputeProvinces( world, pCallBack ); ! ComputeProvinceGeographicDatas(); ComputeProvinceAdjacency(); } *************** *** 602,607 **** ! void GeoWorld::ComputeProvinceCenters() { IWorld &world = IWorld::GetInstance(); --- 602,609 ---- ! void GeoWorld::ComputeProvinceGeographicDatas() { + // Compute provinces centers and geographic dimensions + IWorld &world = IWorld::GetInstance(); *************** *** 611,614 **** --- 613,618 ---- std::vector<float> vecYCoord( iProvinceNbr, 0.0f ); std::vector<int> vecNbrSquare( iProvinceNbr, 0 ); + + std::vector<ProvinceExtremities> vecExtremities( iProvinceNbr ); int iWorldWidth = world.GetWorldWidth(); *************** *** 640,657 **** } float fNbrSquare = (float) vecNbrSquare[ idProv ]; vecXCoord[ idProv ] = ( vecXCoord[ idProv ] * fNbrSquare + iRealLon ) / ( fNbrSquare + 1.0f ); vecYCoord[ idProv ] = ( vecYCoord[ idProv ] * fNbrSquare + coLat ) / ( fNbrSquare + 1.0f ); vecNbrSquare[ idProv ] ++; } } } ! // Set province centers for( provinceId provId = 0; provId < iProvinceNbr; provId ++ ) { EvoRef<IGeoProvince> province = world.GetIProvince( provId )->GetIGeoProvince(); ! province->_SetGeoCenter( GeoCode( GEOCODE_LOW, (Coord) vecXCoord[ provId ], (Coord) vecYCoord[ provId ] ) ); } } --- 644,680 ---- } + // Compute province center : + // compute the average latitude and the average longitude term by terms : + // average with N+1 terms = ( (average with N terms )*N + term ) / ( N+1 ) + float fNbrSquare = (float) vecNbrSquare[ idProv ]; vecXCoord[ idProv ] = ( vecXCoord[ idProv ] * fNbrSquare + iRealLon ) / ( fNbrSquare + 1.0f ); vecYCoord[ idProv ] = ( vecYCoord[ idProv ] * fNbrSquare + coLat ) / ( fNbrSquare + 1.0f ); vecNbrSquare[ idProv ] ++; + + // Store province extremities + vecExtremities[ idProv ].coLatMax = max( vecExtremities[ idProv ].coLatMax, coLat ); + vecExtremities[ idProv ].coLatMin = min( vecExtremities[ idProv ].coLatMin, coLat ); + vecExtremities[ idProv ].coLonMax = max( vecExtremities[ idProv ].coLonMax, (Coord) iRealLon ); + vecExtremities[ idProv ].coLonMin = min( vecExtremities[ idProv ].coLonMin, (Coord) iRealLon ); } } } ! // Set province centers & dimensions for( provinceId provId = 0; provId < iProvinceNbr; provId ++ ) { EvoRef<IGeoProvince> province = world.GetIProvince( provId )->GetIGeoProvince(); ! ! Coord lonCenter = (Coord)( ( vecExtremities[ provId ].coLonMax + vecExtremities[ provId ].coLonMin ) / 2 ); ! Coord latCenter = (Coord)( ( vecExtremities[ provId ].coLatMax + vecExtremities[ provId ].coLatMin ) / 2 ); ! ! GeoCode gcCenter( GEOCODE_LOW, lonCenter, latCenter ) ; ! ! GeoDimension dimNorthSouth = (GeoDimension)( vecExtremities[ provId ].coLatMax - vecExtremities[ provId ].coLatMin + 1 ); ! GeoDimension dimWestEast = (GeoDimension)( vecExtremities[ provId ].coLonMax - vecExtremities[ provId ].coLonMin + 1 ); ! ! province->_SetGeoDatas( gcCenter, dimNorthSouth, dimWestEast ); } } Index: GeoWorld.h =================================================================== RCS file: /cvsroot/evolutionlejeu/evolutionlejeu/Evolution/Atlas/GeoWorld.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** GeoWorld.h 9 Nov 2005 14:56:34 -0000 1.8 --- GeoWorld.h 18 Dec 2005 21:37:03 -0000 1.9 *************** *** 48,52 **** void ComputeProvinces( IWorld &world, void (*pCallBack)(float, const char*) ); ! void ComputeProvinceCenters(); void ComputeProvinceAdjacency(); --- 48,52 ---- void ComputeProvinces( IWorld &world, void (*pCallBack)(float, const char*) ); ! void ComputeProvinceGeographicDatas(); void ComputeProvinceAdjacency(); *************** *** 56,59 **** --- 56,74 ---- private: + class ProvinceExtremities + { + public: + ProvinceExtremities( Coord coLon, Coord coLat ) + : coLatMax( coLat ), coLatMin( coLat ), coLonMax( coLon ), coLonMin( coLon ) + {} + + ProvinceExtremities() + : coLatMax( 0 ), coLatMin( COORD_LOW_MAX ), coLonMax( 0 ), coLonMin( COORD_LOW_MAX ) + {} + + Coord coLatMax, coLatMin, coLonMax, coLonMin; + }; + + private: Altitude m_SeaLevel; |