paysages3d/src/definition/CloudLayerDefinition.cpp

93 lines
2 KiB
C++
Raw Normal View History

2013-11-15 22:26:44 +00:00
#include "CloudLayerDefinition.h"
#include "Curve.h"
#include "NoiseGenerator.h"
#include "SurfaceMaterial.h"
#include "PackStream.h"
#include "FloatNode.h"
2013-11-15 22:26:44 +00:00
CloudLayerDefinition::CloudLayerDefinition(DefinitionNode* parent):
DefinitionNode(parent, "layer", "cloudlayer")
2013-11-15 22:26:44 +00:00
{
2013-12-04 21:52:18 +00:00
type = CIRRUS;
altitude = 0.5;
scaling = 0.5;
coverage = 0.5;
xoffset = new FloatNode(this, "xoffset");
zoffset = new FloatNode(this, "zoffset");
2013-11-15 22:26:44 +00:00
}
CloudLayerDefinition::~CloudLayerDefinition()
{
}
CloudLayerDefinition* CloudLayerDefinition::newCopy(const CloudLayerDefinition& other, DefinitionNode* parent)
2013-11-15 22:26:44 +00:00
{
CloudLayerDefinition* layer = new CloudLayerDefinition(parent);
other.copy(layer);
return layer;
}
CloudLayerDefinition* CloudLayerDefinition::newCopy(DefinitionNode* parent) const
2013-11-15 22:26:44 +00:00
{
CloudLayerDefinition* layer = new CloudLayerDefinition(parent);
copy(layer);
return layer;
}
void CloudLayerDefinition::save(PackStream* stream) const
{
DefinitionNode::save(stream);
2013-11-15 22:26:44 +00:00
int clouds_type = (int)type;
stream->write(&clouds_type);
2013-12-04 21:52:18 +00:00
stream->write(&altitude);
stream->write(&scaling);
stream->write(&coverage);
noise_state.save(stream);
2013-11-15 22:26:44 +00:00
}
void CloudLayerDefinition::load(PackStream* stream)
{
DefinitionNode::load(stream);
2013-11-15 22:26:44 +00:00
int clouds_type;
stream->read(&clouds_type);
type = (CloudsType)clouds_type;
2013-12-04 21:52:18 +00:00
stream->read(&altitude);
stream->read(&scaling);
stream->read(&coverage);
2013-11-15 22:26:44 +00:00
noise_state.load(stream);
2013-11-15 22:26:44 +00:00
validate();
}
void CloudLayerDefinition::copy(DefinitionNode* _destination) const
2013-11-15 22:26:44 +00:00
{
DefinitionNode::copy(_destination);
2013-11-15 22:26:44 +00:00
CloudLayerDefinition* destination = (CloudLayerDefinition*)_destination;
destination->type = type;
2013-12-04 21:52:18 +00:00
destination->altitude = altitude;
destination->scaling = scaling;
destination->coverage = coverage;
noise_state.copy(&destination->noise_state);
2013-11-15 22:26:44 +00:00
}
void CloudLayerDefinition::validate()
{
DefinitionNode::validate();
2013-12-04 21:52:18 +00:00
if (scaling < 0.1)
2013-11-15 22:26:44 +00:00
{
2013-12-04 21:52:18 +00:00
scaling = 0.1;
2013-11-15 22:26:44 +00:00
}
}