khanat-opennel-code/code/nel/src/ligo/ligo_material.cpp

96 lines
2.3 KiB
C++

// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// 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 "ligo_material.h"
// Ligo include
#include "ligo_error.h"
//using namespace NL3D;
namespace NLLIGO
{
// ***************************************************************************
bool CMaterial::build (const CZoneTemplate &tplt, const CLigoConfig &config, CLigoError &errors)
{
// Clear errors
errors.clear ();
// Edge vector
const std::vector<CZoneEdge> &edges = tplt.getEdges ();
// This template should have 4 edges
if (edges.size() != 4)
{
errors.MainError = CLigoError::MustHave4Edges;
return false;
}
// The 1st edge must be symetrical
if (!edges[0].isSymetrical (config, errors))
return false;
// Error code
bool ok = true;
// The others must be the same edges
uint edge;
for (edge=1; edge<edges.size(); edge++)
{
// The same edge ?
if (!edges[0].isTheSame (edges[edge], config, errors))
{
// Error
ok = false;
}
}
// Build ?
if (ok)
{
// Ok, build the material
_ZoneEdge = edges[0];
}
// Return error code
return ok;
}
// ***************************************************************************
void CMaterial::serial (NLMISC::IStream &s)
{
// Serial the main node
s.xmlPush ("LIGO_MATERIAL");
// Serial the header
s.serialCheck ((uint32)'TMOL');
// Serial the version
/*sint ver =*/ s.serialVersion (0);
// Serial the zoneedge
s.xmlSerial (_ZoneEdge, "ZONE_EDGE");
// Close the main node
s.xmlPop ();
}
// ***************************************************************************
}