Merge remote-tracking branch 'ryzomcore/develop' into feature/develop-atys
commit
5c3b0cf14b
@ -0,0 +1,15 @@
|
|||||||
|
title Ryzom Core: 0_setup.py (RING LANDSCAPE)
|
||||||
|
0_setup.py --noconf -ipj continents/r2_desert continents/r2_forest continents/r2_jungle continents/r2_lakes continents/r2_roots
|
||||||
|
title Ryzom Core: 1_export.py (RING LANDSCAPE)
|
||||||
|
1_export.py -ipj continents/r2_desert continents/r2_forest continents/r2_jungle continents/r2_lakes continents/r2_roots
|
||||||
|
title Ryzom Core: 2_build.py (RING LANDSCAPE)
|
||||||
|
2_build.py -ipj continents/r2_desert continents/r2_forest continents/r2_jungle continents/r2_lakes continents/r2_roots
|
||||||
|
title Ryzom Core: 3_install.py (RING LANDSCAPE)
|
||||||
|
3_install.py -ipj continents/r2_desert continents/r2_forest continents/r2_jungle continents/r2_lakes continents/r2_roots
|
||||||
|
title Ryzom Core: a1_worldedit_data.py (RING LANDSCAPE)
|
||||||
|
a1_worldedit_data.py
|
||||||
|
title Ryzom Core: b1_client_dev.py (RING LANDSCAPE)
|
||||||
|
b1_client_dev.py
|
||||||
|
title Ryzom Core: b2_shard_data.py (RING LANDSCAPE)
|
||||||
|
b2_shard_data.py
|
||||||
|
title Ryzom Core: Ready (RING LANDSCAPE)
|
@ -0,0 +1,11 @@
|
|||||||
|
FILE(GLOB SRC *.cpp *.h *.rc)
|
||||||
|
|
||||||
|
SOURCE_GROUP("" FILES ${SRC})
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(nl_unbuild_flora ${SRC})
|
||||||
|
|
||||||
|
TARGET_LINK_LIBRARIES(nl_unbuild_flora nel3d nelmisc nelligo nelgeorges)
|
||||||
|
NL_DEFAULT_PROPS(nl_unbuild_flora "NeL, Tools, Ligo: Unbuild Flora")
|
||||||
|
NL_ADD_RUNTIME_FLAGS(nl_unbuild_flora)
|
||||||
|
|
||||||
|
INSTALL(TARGETS nl_unbuild_flora RUNTIME DESTINATION ${NL_BIN_PREFIX} COMPONENT toolsligo)
|
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
@ -0,0 +1,42 @@
|
|||||||
|
#include <windows.h>
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
IDI_MAIN_ICON ICON DISCARDABLE "gold_pill.ico"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define NL_FILEEXT "_d"
|
||||||
|
#else
|
||||||
|
#define NL_FILEEXT ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION NL_VERSION_RC
|
||||||
|
PRODUCTVERSION NL_VERSION_RC
|
||||||
|
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS VS_FF_DEBUG
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS VOS_NT_WINDOWS32
|
||||||
|
FILETYPE VFT_APP
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "CompanyName", AUTHOR
|
||||||
|
VALUE "FileDescription", "NeL Unbuild Flora"
|
||||||
|
VALUE "FileVersion", NL_VERSION
|
||||||
|
VALUE "LegalCopyright", COPYRIGHT
|
||||||
|
VALUE "OriginalFilename", "nl_unbuild_flora" NL_FILEEXT ".exe"
|
||||||
|
VALUE "ProductName", "NeL Tools"
|
||||||
|
VALUE "ProductVersion", NL_PRODUCT_VERSION
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x9, 1200
|
||||||
|
END
|
||||||
|
END
|
@ -0,0 +1,442 @@
|
|||||||
|
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
// Copyright (C) 2019 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
|
||||||
|
//
|
||||||
|
// 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/>.
|
||||||
|
//
|
||||||
|
// This utility is intended to rescue a lost flora .primitive file.
|
||||||
|
// It only recovers the generated flora positions, it cannot recover
|
||||||
|
// the flora zones.
|
||||||
|
//
|
||||||
|
// Author: Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
|
||||||
|
|
||||||
|
// #include "../../3d/zone_lib/zone_utility.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
#include <nel/misc/file.h>
|
||||||
|
#include <nel/misc/common.h>
|
||||||
|
#include <nel/misc/cmd_args.h>
|
||||||
|
#include <nel/misc/string_view.h>
|
||||||
|
|
||||||
|
#include <nel/georges/u_form.h>
|
||||||
|
#include <nel/georges/u_form_elm.h>
|
||||||
|
#include <nel/georges/u_form_loader.h>
|
||||||
|
|
||||||
|
#include <nel/3d/scene_group.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <vector>
|
||||||
|
#include <list>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace NLMISC;
|
||||||
|
using namespace NL3D;
|
||||||
|
using namespace NLGEORGES;
|
||||||
|
//using namespace NLLIGO;
|
||||||
|
|
||||||
|
namespace /* anonymous */
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Process:
|
||||||
|
- Load all .plant sheets, map from .shape to .plant and bounding radius (Reference: prim_export, main.cpp)
|
||||||
|
- Load all source igs (Reference: ig_info, ig_info.cpp)
|
||||||
|
- Load all reference igs, remove matching entries from source igs
|
||||||
|
- Generate primitives
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
std::string s_DfnDir; /* R:\leveldesign\DFN */
|
||||||
|
std::string s_LeveldesignDir; /* R:\leveldesign\game_elem\plant\ecosystem */
|
||||||
|
std::string s_SourceDir; /* R:\reference\2008_july\data\r2_desert2 */
|
||||||
|
std::string s_ReferenceDir; /* R:\pipeline\export\continents\r2_desert\zone_lighted_ig_land */
|
||||||
|
std::string s_PrimitiveFile; /* R:\graphics\primitive\r2_desert\r2_desert.primitive */
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Debug arguments:
|
||||||
|
|
||||||
|
"R:\leveldesign\DFN" "R:\leveldesign\game_elem\plant\ecosystem" "R:\reference\2008_july\data\r2_desert2" "R:\pipeline\export\continents\r2_desert\zone_lighted_ig_land" "R:\graphics\primitive\r2_desert\r2_desert.primitive"
|
||||||
|
"R:\leveldesign\DFN" "R:\leveldesign\game_elem\plant\ecosystem" "R:\reference\2008_july\data\r2_forest2" "R:\pipeline\export\continents\r2_forest\zone_lighted_ig_land" "R:\graphics\primitive\r2_forest\r2_forest.primitive"
|
||||||
|
"R:\leveldesign\DFN" "R:\leveldesign\game_elem\plant\ecosystem" "R:\reference\2008_july\data\r2_jungle2" "R:\pipeline\export\continents\r2_jungle\zone_lighted_ig_land" "R:\graphics\primitive\r2_jungle\r2_jungle.primitive"
|
||||||
|
"R:\leveldesign\DFN" "R:\leveldesign\game_elem\plant\ecosystem" "R:\reference\2008_july\data\r2_lakes2" "R:\pipeline\export\continents\r2_lakes\zone_lighted_ig_land" "R:\graphics\primitive\r2_lakes\r2_lakes.primitive"
|
||||||
|
"R:\leveldesign\DFN" "R:\leveldesign\game_elem\plant\ecosystem" "R:\reference\2008_july\data\r2_roots2" "R:\pipeline\export\continents\r2_roots\zone_lighted_ig_land" "R:\graphics\primitive\r2_roots\r2_roots.primitive"
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct CPoint
|
||||||
|
{
|
||||||
|
std::string ZoneLwr;
|
||||||
|
|
||||||
|
CVector Pos; /* Position, height not necessarily specified (X="26218.738281" Y="-1092.078979" Z="0.000000") */
|
||||||
|
float Angle; /* (2.827213) */
|
||||||
|
float Scale; /* Scale (0.643217) */
|
||||||
|
std::string Shape;
|
||||||
|
|
||||||
|
bool Plant;
|
||||||
|
std::string Form; /* (FY_S2_savantree_B) */
|
||||||
|
std::string Name; /* Generated unique name (ilot_008_savantree 13) */
|
||||||
|
float Radius; /* Bounding radius (calculated from plant sheet and scale) (0.450252) */
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
<CHILD TYPE="CPrimPoint">
|
||||||
|
<PT X="26060.041016" Y="-1033.684692" Z="0.000000"/>
|
||||||
|
<ANGLE VALUE="4.806300"/>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>class</NAME>
|
||||||
|
<STRING>prim</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>form</NAME>
|
||||||
|
<STRING>FY_S2_savantree_B</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>layer</NAME>
|
||||||
|
<STRING>0</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>name</NAME>
|
||||||
|
<STRING>ilot_008_savantree 15</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>radius</NAME>
|
||||||
|
<STRING>0.784730</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>scale</NAME>
|
||||||
|
<STRING>1.121043</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
</CHILD>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <?xml version="1.0"?>
|
||||||
|
<PRIMITIVES VERSION="1">
|
||||||
|
<ROOT_PRIMITIVE TYPE="CPrimNode">
|
||||||
|
<ALIAS LAST_GENERATED="0"/>
|
||||||
|
<CHILD TYPE="CPrimNode">
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>class</NAME>
|
||||||
|
<STRING>flora</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<PROPERTY TYPE="string">
|
||||||
|
<NAME>name</NAME>
|
||||||
|
<STRING>R2 flora 1</STRING>
|
||||||
|
</PROPERTY>
|
||||||
|
<CHILD ... />
|
||||||
|
<CHILD ... />
|
||||||
|
<CHILD ... />
|
||||||
|
...
|
||||||
|
</CHILD>
|
||||||
|
</ROOT_PRIMITIVE>
|
||||||
|
</PRIMITIVES>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
instance fy_s2_savantree_c.shape : x = 23031.2, y = -1269.2, z = 75.8, sx = 0.5, sy = 0.5, sz = 0.5
|
||||||
|
instance fy_s2_savantree_c.shape : x = 22906.6, y = -1148.1, z = 79.6, sx = 0.6, sy = 0.6, sz = 0.6
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct CPlant
|
||||||
|
{
|
||||||
|
std::string Form;
|
||||||
|
std::string Shape;
|
||||||
|
float Radius;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<std::string, CPlant> s_ShapeToForm;
|
||||||
|
std::list<CPoint> s_Instances;
|
||||||
|
|
||||||
|
bool loadLeveldesign()
|
||||||
|
{
|
||||||
|
UFormLoader *formLoader = UFormLoader::createLoader();
|
||||||
|
struct CRel0 { CRel0(UFormLoader *v) : m(v) {} ~CRel0() { UFormLoader::releaseLoader(m); } UFormLoader *m; } rel0(formLoader);
|
||||||
|
|
||||||
|
std::vector<std::string> plants;
|
||||||
|
CPath::getFileList("plant", plants);
|
||||||
|
|
||||||
|
for (std::vector<std::string>::iterator it(plants.begin()), end(plants.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
printf("%s\n", nlUtf8ToMbcs(*it));
|
||||||
|
CSmartPtr <UForm> form = formLoader->loadForm(*it);
|
||||||
|
if (!form)
|
||||||
|
continue;
|
||||||
|
CPlant plant;
|
||||||
|
plant.Form = toLowerAscii(*it);
|
||||||
|
if (!form->getRootNode().getValueByName(plant.Shape, "3D.Shape"))
|
||||||
|
continue;
|
||||||
|
if (plant.Shape.empty())
|
||||||
|
{
|
||||||
|
if (!form->getRootNode().getValueByName(plant.Shape, "3D.SpringFX.FXName"))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (plant.Shape.empty())
|
||||||
|
continue;
|
||||||
|
(void)plant.Shape.c_str();
|
||||||
|
toLowerAscii(&plant.Shape[0]);
|
||||||
|
if (!form->getRootNode().getValueByName(plant.Radius, "3D.Bounding Radius"))
|
||||||
|
continue;
|
||||||
|
printf(" = '%s', %f\n", nlUtf8ToMbcs(plant.Shape), plant.Radius);
|
||||||
|
s_ShapeToForm[plant.Shape] = plant;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool loadInstances()
|
||||||
|
{
|
||||||
|
std::vector<std::string> igs;
|
||||||
|
CPath::getPathContent(s_SourceDir, true, false, true, igs);
|
||||||
|
|
||||||
|
for (std::vector<std::string>::iterator it(igs.begin()), end(igs.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
if (CFile::getExtension(*it) != nlstr("ig"))
|
||||||
|
continue;
|
||||||
|
printf("%s\n", nlUtf8ToMbcs(*it));
|
||||||
|
CInstanceGroup ig;
|
||||||
|
CIFile inputStream;
|
||||||
|
if (!inputStream.open(*it))
|
||||||
|
{
|
||||||
|
nlwarning("Unable to open %s\n", (*it).c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ig.serial(inputStream);
|
||||||
|
CVector gpos = ig.getGlobalPos();
|
||||||
|
if (gpos.x != 0.0f || gpos.y != 0.0f || gpos.z != 0.0f)
|
||||||
|
{
|
||||||
|
nlwarning("Invalid global pos: %f, %f, %f", gpos.x, gpos.y, gpos.z);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
string zoneLwr = toLowerAscii(CFile::getFilenameWithoutExtension(*it));
|
||||||
|
for (ptrdiff_t i = 0; i < (ptrdiff_t)ig._InstancesInfos.size(); ++i)
|
||||||
|
{
|
||||||
|
CInstanceGroup::CInstance &info = ig._InstancesInfos[i];
|
||||||
|
CPoint instance;
|
||||||
|
instance.Pos = info.Pos;
|
||||||
|
instance.Angle = info.Rot.getAngle();
|
||||||
|
instance.Scale = info.Scale.z;
|
||||||
|
instance.Shape = toLowerAscii(info.Name);
|
||||||
|
printf("%s\n", nlUtf8ToMbcs(instance.Shape));
|
||||||
|
std::map<std::string, CPlant>::iterator formIt = s_ShapeToForm.find(instance.Shape);
|
||||||
|
if (formIt != s_ShapeToForm.end())
|
||||||
|
{
|
||||||
|
instance.Form = formIt->second.Form;
|
||||||
|
instance.Name = CFile::getFilenameWithoutExtension(instance.Form) + nlstr("_") + zoneLwr + nlstr("_") + toString(i);
|
||||||
|
instance.Radius = instance.Scale * formIt->second.Radius;
|
||||||
|
printf(" = %f, %f, %f, %f, %f, '%s', '%s', %f\n", instance.Pos.x, instance.Pos.y, instance.Pos.z, instance.Angle, instance.Scale, nlUtf8ToMbcs(instance.Form), nlUtf8ToMbcs(instance.Name), instance.Radius);
|
||||||
|
instance.Plant = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
instance.Plant = false;
|
||||||
|
}
|
||||||
|
s_Instances.push_back(instance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool eraseReference()
|
||||||
|
{
|
||||||
|
std::vector<std::string> igs;
|
||||||
|
CPath::getPathContent(s_ReferenceDir, true, false, true, igs);
|
||||||
|
|
||||||
|
for (std::vector<std::string>::iterator it(igs.begin()), end(igs.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
if (CFile::getExtension(*it) != nlstr("ig"))
|
||||||
|
continue;
|
||||||
|
printf("%s\n", nlUtf8ToMbcs(*it));
|
||||||
|
CInstanceGroup ig;
|
||||||
|
CIFile inputStream;
|
||||||
|
if (!inputStream.open(*it))
|
||||||
|
{
|
||||||
|
nlwarning("Unable to open %s\n", (*it).c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ig.serial(inputStream);
|
||||||
|
CVector gpos = ig.getGlobalPos();
|
||||||
|
if (gpos.x != 0.0f || gpos.y != 0.0f || gpos.z != 0.0f)
|
||||||
|
{
|
||||||
|
nlwarning("Invalid global pos: %f, %f, %f", gpos.x, gpos.y, gpos.z);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
string zoneLwr = toLowerAscii(CFile::getFilenameWithoutExtension(*it));
|
||||||
|
for (ptrdiff_t i = 0; i < (ptrdiff_t)ig._InstancesInfos.size(); ++i)
|
||||||
|
{
|
||||||
|
CInstanceGroup::CInstance &info = ig._InstancesInfos[i];
|
||||||
|
string shape = toLowerAscii(info.Name);
|
||||||
|
printf("%s\n", nlUtf8ToMbcs(shape));
|
||||||
|
bool erased = false;
|
||||||
|
for (std::list<CPoint>::iterator it(s_Instances.begin()), end(s_Instances.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
const CPoint &instance = *it;
|
||||||
|
if (instance.Pos.x == info.Pos.x
|
||||||
|
&& instance.Pos.y == info.Pos.y
|
||||||
|
&& instance.Shape == shape)
|
||||||
|
{
|
||||||
|
printf(" = Found and erased\n");
|
||||||
|
s_Instances.erase(it);
|
||||||
|
erased = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!erased)
|
||||||
|
printf(" = NOT FOUND!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool eraseNonPlants()
|
||||||
|
{
|
||||||
|
for (std::list<CPoint>::iterator it(s_Instances.begin()), end(s_Instances.end()); it != end;)
|
||||||
|
{
|
||||||
|
const CPoint &instance = *it;
|
||||||
|
if (!instance.Plant)
|
||||||
|
{
|
||||||
|
printf("Erase '%s' because it's not a plant!\n", nlUtf8ToMbcs(instance.Shape));
|
||||||
|
std::list<CPoint>::iterator nextIt = it;
|
||||||
|
++nextIt;
|
||||||
|
s_Instances.erase(it);
|
||||||
|
it = nextIt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool writeFlora()
|
||||||
|
{
|
||||||
|
ofstream fo;
|
||||||
|
#ifdef NL_OS_WINDOWS
|
||||||
|
fo.open(utf8ToWide(s_PrimitiveFile));
|
||||||
|
#else
|
||||||
|
fo.open(s_PrimitiveFile);
|
||||||
|
#endif
|
||||||
|
fo << "<?xml version=\"1.0\"?>\n";
|
||||||
|
fo << "<PRIMITIVES VERSION=\"1\">\n";
|
||||||
|
fo << " <ROOT_PRIMITIVE TYPE=\"CPrimNode\">\n";
|
||||||
|
fo << " <ALIAS LAST_GENERATED=\"0\"/>\n";
|
||||||
|
fo << " <CHILD TYPE=\"CPrimNode\">\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>class</NAME>\n";
|
||||||
|
fo << " <STRING>flora</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>name</NAME>\n";
|
||||||
|
fo << " <STRING>" << CFile::getFilenameWithoutExtension(s_PrimitiveFile) << "_flora</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
for (std::list<CPoint>::iterator it(s_Instances.begin()), end(s_Instances.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
const CPoint &instance = *it;
|
||||||
|
fo << " <CHILD TYPE=\"CPrimPoint\">\n";
|
||||||
|
fo << " <PT X=\"" << instance.Pos.x << "\" Y=\"" << instance.Pos.y << "\" Z=\"0.000000\"/>\n";
|
||||||
|
fo << " <ANGLE VALUE=\"" << instance.Angle << "\"/>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>class</NAME>\n";
|
||||||
|
fo << " <STRING>prim</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>form</NAME>\n";
|
||||||
|
fo << " <STRING>" << CFile::getFilenameWithoutExtension(instance.Form) << "</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>layer</NAME>\n";
|
||||||
|
fo << " <STRING>0</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>name</NAME>\n";
|
||||||
|
fo << " <STRING>" << instance.Name << "</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>radius</NAME>\n";
|
||||||
|
fo << " <STRING>" << instance.Radius << "</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " <PROPERTY TYPE=\"string\">\n";
|
||||||
|
fo << " <NAME>scale</NAME>\n";
|
||||||
|
fo << " <STRING>" << instance.Scale << "</STRING>\n";
|
||||||
|
fo << " </PROPERTY>\n";
|
||||||
|
fo << " </CHILD>\n";
|
||||||
|
}
|
||||||
|
fo << " </CHILD>\n";
|
||||||
|
fo << " </ROOT_PRIMITIVE>\n";
|
||||||
|
fo << "</PRIMITIVES>\n";
|
||||||
|
printf("Generated:\n%s\n", nlUtf8ToMbcs(s_PrimitiveFile));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool unbuildFlora()
|
||||||
|
{
|
||||||
|
CPath::addSearchPath(s_DfnDir, true, false);
|
||||||
|
CPath::addSearchPath(s_LeveldesignDir, true, false);
|
||||||
|
|
||||||
|
return loadLeveldesign()
|
||||||
|
&& loadInstances()
|
||||||
|
&& eraseReference()
|
||||||
|
&& eraseNonPlants()
|
||||||
|
&& writeFlora();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool unbuildFlora(NLMISC::CCmdArgs &args)
|
||||||
|
{
|
||||||
|
s_DfnDir = args.getAdditionalArg("dfn")[0];
|
||||||
|
s_LeveldesignDir = args.getAdditionalArg("leveldesign")[0];
|
||||||
|
s_SourceDir = args.getAdditionalArg("source")[0];
|
||||||
|
s_ReferenceDir = args.getAdditionalArg("reference")[0];
|
||||||
|
s_PrimitiveFile = args.getAdditionalArg("primitive")[0];
|
||||||
|
|
||||||
|
return unbuildFlora();
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* anonymous namespace */
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
NLMISC::CApplicationContext myApplicationContext;
|
||||||
|
|
||||||
|
NLMISC::CCmdArgs args;
|
||||||
|
|
||||||
|
args.addAdditionalArg("dfn", "Input folder with DFN");
|
||||||
|
args.addAdditionalArg("leveldesign", "Input folder with plant sheets");
|
||||||
|
args.addAdditionalArg("source", "Input folder with IGs containing flora");
|
||||||
|
args.addAdditionalArg("reference", "Input folder with IGs missing flora");
|
||||||
|
args.addAdditionalArg("primitive", "Output flora primitive file");
|
||||||
|
|
||||||
|
if (!args.parse(argc, argv))
|
||||||
|
{
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!unbuildFlora(args))
|
||||||
|
{
|
||||||
|
args.displayHelp();
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* end of file */
|
Loading…
Reference in New Issue