parent
96664ec19c
commit
07ee9a4469
@ -1,5 +1,10 @@
|
|||||||
|
|
||||||
|
IF(WITH_RYZOM_CLIENT)
|
||||||
ADD_SUBDIRECTORY( client_patcher )
|
ADD_SUBDIRECTORY( client_patcher )
|
||||||
|
|
||||||
IF( WITH_QT )
|
IF( WITH_QT )
|
||||||
ADD_SUBDIRECTORY( client_config_qt )
|
ADD_SUBDIRECTORY( client_config_qt )
|
||||||
ENDIF( WITH_QT )
|
ENDIF( WITH_QT )
|
||||||
|
ENDIF(WITH_RYZOM_CLIENT)
|
||||||
|
|
||||||
|
ADD_SUBDIRECTORY( r2_islands_textures )
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
FILE(GLOB SRC *.cpp *.h)
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(r2_islands_textures ${SRC})
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(${RZ_SERVER_SRC_DIR} ${LIBXML2_INCLUDE_DIR})
|
||||||
|
TARGET_LINK_LIBRARIES(r2_islands_textures
|
||||||
|
ryzom_gameshare
|
||||||
|
ryzom_aishare
|
||||||
|
${LIBXML2_LIBRARIES}
|
||||||
|
nelmisc
|
||||||
|
nel3d)
|
||||||
|
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS})
|
||||||
|
|
||||||
|
NL_DEFAULT_PROPS(r2_islands_textures "Ryzom, Tools, Server: R2 Islands Textures")
|
||||||
|
NL_ADD_RUNTIME_FLAGS(r2_islands_textures)
|
||||||
|
|
||||||
|
INSTALL(TARGETS r2_islands_textures RUNTIME DESTINATION ${RYZOM_BIN_PREFIX} COMPONENT tools)
|
@ -0,0 +1,29 @@
|
|||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#include <nel/3d/u_driver.h>
|
||||||
|
#include "screenshot_islands.h"
|
||||||
|
|
||||||
|
using namespace NLMISC;
|
||||||
|
using namespace R2;
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
CScreenshotIslands screenshotIslands = CScreenshotIslands::getInstance();
|
||||||
|
screenshotIslands.buildScreenshots();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,241 @@
|
|||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef CL_SCRRENSHOT_ISLANDS_H
|
||||||
|
#define CL_SCRRENSHOT_ISLANDS_H
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
#include "nel/misc/singleton.h"
|
||||||
|
#include "nel/misc/vector_2f.h"
|
||||||
|
#include "nel/misc/rgba.h"
|
||||||
|
#include "nel/misc/bitmap.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
namespace NL3D
|
||||||
|
{
|
||||||
|
class UScene;
|
||||||
|
class ULandscape;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace R2
|
||||||
|
{
|
||||||
|
class CProximityZone;
|
||||||
|
|
||||||
|
typedef uint16 TBufferEntry;
|
||||||
|
typedef std::vector<TBufferEntry> TBuffer;
|
||||||
|
typedef std::vector<uint32> TOffsetsVector;
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// class CScreenshotIslands
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
struct CIslandData
|
||||||
|
{
|
||||||
|
NLMISC::CVector2f EntryPoint;
|
||||||
|
NLMISC::CVector2f Max;
|
||||||
|
NLMISC::CVector2f Min;
|
||||||
|
|
||||||
|
CIslandData()
|
||||||
|
{
|
||||||
|
EntryPoint = NLMISC::CVector2f(0, 0);
|
||||||
|
Max = NLMISC::CVector2f(0, 0);
|
||||||
|
Min = NLMISC::CVector2f(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
CIslandData(float x, float y)
|
||||||
|
{
|
||||||
|
EntryPoint = NLMISC::CVector2f(x, y);
|
||||||
|
Max = NLMISC::CVector2f(0, 0);
|
||||||
|
Min = NLMISC::CVector2f(0, 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CContinentData
|
||||||
|
{
|
||||||
|
std::string SmallBank;
|
||||||
|
std::string FarBank;
|
||||||
|
std::string IGFile;
|
||||||
|
std::string CoarseMeshMap;
|
||||||
|
NLMISC::CVector2f ZoneMin;
|
||||||
|
NLMISC::CVector2f ZoneMax;
|
||||||
|
std::list< std::string > Islands;
|
||||||
|
NLMISC::CRGBA Ambiant;
|
||||||
|
NLMISC::CRGBA Diffuse;
|
||||||
|
|
||||||
|
CContinentData() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::map< const std::string, CProximityZone> TIslandsData;
|
||||||
|
typedef std::map< NLMISC::CVector2f, bool > TIslandsMap;
|
||||||
|
typedef std::map< const std::string, CContinentData > TContinentsData;
|
||||||
|
typedef std::map< std::string, std::list< NLMISC::CVector2f > > TIslandsBordersMap;
|
||||||
|
|
||||||
|
class CScreenshotIslands : public NLMISC::CSingleton<CScreenshotIslands>
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CScreenshotIslands();
|
||||||
|
|
||||||
|
void buildScreenshots();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
|
void loadIslands();
|
||||||
|
|
||||||
|
void buildIslandsTextures();
|
||||||
|
|
||||||
|
void getBuffer(NL3D::UScene * scene, NL3D::ULandscape * landscape, NLMISC::CBitmap &btm);
|
||||||
|
|
||||||
|
bool getPosFromZoneName(const std::string &name, NLMISC::CVector2f &dest);
|
||||||
|
|
||||||
|
void writeProximityBufferToTgaFile(const std::string& fileName,const TBuffer& buffer,
|
||||||
|
uint32 scanWidth,uint32 scanHeight);
|
||||||
|
|
||||||
|
void processProximityBuffer(TBuffer& inputBuffer, uint32 lineLength, TBuffer& resultBuffer);
|
||||||
|
|
||||||
|
void buildBackTextureHLS(const std::string & islandName, const NLMISC::CBitmap & islandBitmap);
|
||||||
|
|
||||||
|
void searchIslandsBorders();
|
||||||
|
|
||||||
|
void attenuateIslandBorders(const std::string & islandName, NLMISC::CBitmap & islandBitmap, const CProximityZone & islandData);
|
||||||
|
|
||||||
|
TIslandsData _IslandsData;
|
||||||
|
TIslandsMap _IslandsMap;
|
||||||
|
TContinentsData _ContinentsData;
|
||||||
|
std::list< std::string > _SeasonSuffixes;
|
||||||
|
int _MeterPixelSize;
|
||||||
|
std::string _OutDirectory;
|
||||||
|
std::list< std::string > _TempFileNames;
|
||||||
|
TIslandsBordersMap _BorderIslands;
|
||||||
|
bool _Vegetation;
|
||||||
|
bool _InverseZTest;
|
||||||
|
|
||||||
|
NLMISC::CRGBA _BackColor;
|
||||||
|
NLMISC::CBitmap _BackBitmap;
|
||||||
|
std::string _CompleteIslandsFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CProximityZone
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef std::vector<uint32> TOffsets;
|
||||||
|
|
||||||
|
// ctor
|
||||||
|
// scanWidth and scanHeight define the dimentions of the buffer that this zone is being extracted from
|
||||||
|
// xOffset and yOffset are for re-mapping coordinates from buffer-relative to absolute ryzom world coordinates
|
||||||
|
CProximityZone(uint32 scanWidth=0,uint32 scanHeight=0,sint32 xOffset=0, sint32 yOffset=0);
|
||||||
|
|
||||||
|
// add an 'accessible position' to a zone (offset is y*scanWidth+x)
|
||||||
|
bool add(uint32 offset);
|
||||||
|
|
||||||
|
// zone dimention accessors (note that zone dimentions line up with 160x160 world zones)
|
||||||
|
// note that this means that the zone bounds may extend outside the scan area
|
||||||
|
uint32 getZoneWidth() const;
|
||||||
|
uint32 getZoneHeight() const;
|
||||||
|
sint32 getZoneXMin() const;
|
||||||
|
sint32 getZoneYMin() const;
|
||||||
|
uint32 getZoneXMax() const;
|
||||||
|
uint32 getZoneYMax() const;
|
||||||
|
|
||||||
|
// read accessors for the bounding limits that define the area occupied by the accessible points
|
||||||
|
uint32 getBoundXMin() const;
|
||||||
|
uint32 getBoundYMin() const;
|
||||||
|
uint32 getBoundXMax() const;
|
||||||
|
uint32 getBoundYMax() const;
|
||||||
|
|
||||||
|
// read accessor for the _Offsets vector
|
||||||
|
// this is a vector of offsets into the scan area. It needs to be remapped to zone offsets
|
||||||
|
// via the remapOffset() routine in order to be used to index into a zone buffer
|
||||||
|
const TOffsets& getOffsets() const;
|
||||||
|
|
||||||
|
// remap a scan buffer offset to a zone offset by decomposing into x and y parts and
|
||||||
|
// subtracting getZoneXMin() and getZoneYMin()
|
||||||
|
uint32 remapOffset(uint32 bufferOffset) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// parameters setup at construction time, giving info on the context that we're in
|
||||||
|
uint32 _ScanWidth;
|
||||||
|
uint32 _ScanHeight;
|
||||||
|
sint32 _XOffset;
|
||||||
|
sint32 _YOffset;
|
||||||
|
uint32 _MaxOffset;
|
||||||
|
|
||||||
|
// the vector of points that are part of this zone
|
||||||
|
TOffsets _Offsets;
|
||||||
|
|
||||||
|
// the min and max coords of the points that are part of this zone
|
||||||
|
uint32 _XMax;
|
||||||
|
uint32 _XMin;
|
||||||
|
uint32 _YMax;
|
||||||
|
uint32 _YMin;
|
||||||
|
|
||||||
|
// border add to bouding zone (pixels number)
|
||||||
|
int _BorderPixels;
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
// class CProximityMapBuffer
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class CProximityMapBuffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef std::vector<CProximityZone> TZones;
|
||||||
|
|
||||||
|
// load a cwmap2 file and setup this object from its contents
|
||||||
|
// the 'name' parameter is the full file name of the file to load with path and extension
|
||||||
|
void load(const std::string& name);
|
||||||
|
|
||||||
|
// scan the buffer to generate the set of non-connecting zones that it contains
|
||||||
|
void calculateZones(TZones& zones);
|
||||||
|
|
||||||
|
// generate the proximity map for a given zone
|
||||||
|
void generateZoneProximityMap(const CProximityZone& zone,TBuffer& zoneBuffer);
|
||||||
|
|
||||||
|
// read accessors...
|
||||||
|
const TBuffer& getBuffer() const;
|
||||||
|
uint32 getScanHeight() const;
|
||||||
|
uint32 getScanWidth() const;
|
||||||
|
|
||||||
|
// buffer coordinate to world coordinate offsets...
|
||||||
|
sint32 _XOffset;
|
||||||
|
sint32 _YOffset;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// private routine used by generateZoneProximityMap() to setup the zoneBuffer with the accessible points set
|
||||||
|
void _prepareBufferForZoneProximityMap(const CProximityZone& zone,TBuffer& zoneBuffer,TOffsetsVector& accessiblePoints);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// the width and heilght of the scan zone (ie the dimentions of the buffer)
|
||||||
|
uint32 _ScanWidth;
|
||||||
|
uint32 _ScanHeight;
|
||||||
|
|
||||||
|
// vector representing 2d array of points [_ScanHeight][_ScanWidth]
|
||||||
|
TBuffer _Buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue