mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-23 09:28:45 +00:00
Add missing r2_islands_textures tool
--HG-- branch : develop
This commit is contained in:
parent
96664ec19c
commit
07ee9a4469
8 changed files with 2624 additions and 8 deletions
|
@ -48,7 +48,7 @@
|
|||
|
||||
|
||||
// Server share
|
||||
#include "server_share/bmp4image.h"
|
||||
#include "game_share/bmp4image.h"
|
||||
#include "server_share/continent_container.h"
|
||||
|
||||
|
||||
|
|
|
@ -23,9 +23,7 @@ IF(WITH_LIGO AND WITH_NET)
|
|||
ADD_SUBDIRECTORY(sheets_packer)
|
||||
ENDIF(WITH_LIGO AND WITH_NET)
|
||||
|
||||
IF(WITH_RYZOM_CLIENT)
|
||||
ADD_SUBDIRECTORY(client)
|
||||
ENDIF(WITH_RYZOM_CLIENT)
|
||||
|
||||
ADD_SUBDIRECTORY(server)
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
|
||||
IF(WITH_RYZOM_CLIENT)
|
||||
ADD_SUBDIRECTORY( client_patcher )
|
||||
|
||||
IF( WITH_QT )
|
||||
ADD_SUBDIRECTORY( client_config_qt )
|
||||
ENDIF( WITH_QT )
|
||||
ENDIF(WITH_RYZOM_CLIENT)
|
||||
|
||||
ADD_SUBDIRECTORY( r2_islands_textures )
|
||||
|
|
17
code/ryzom/tools/client/r2_islands_textures/CMakeLists.txt
Normal file
17
code/ryzom/tools/client/r2_islands_textures/CMakeLists.txt
Normal file
|
@ -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)
|
29
code/ryzom/tools/client/r2_islands_textures/main.cpp
Normal file
29
code/ryzom/tools/client/r2_islands_textures/main.cpp
Normal file
|
@ -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;
|
||||
}
|
2326
code/ryzom/tools/client/r2_islands_textures/screenshot_islands.cpp
Normal file
2326
code/ryzom/tools/client/r2_islands_textures/screenshot_islands.cpp
Normal file
File diff suppressed because it is too large
Load diff
241
code/ryzom/tools/client/r2_islands_textures/screenshot_islands.h
Normal file
241
code/ryzom/tools/client/r2_islands_textures/screenshot_islands.h
Normal file
|
@ -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 a new issue