2013-11-15 22:26:44 +00:00
|
|
|
#include "CloudLayerDefinition.h"
|
|
|
|
|
|
|
|
#include "Curve.h"
|
|
|
|
#include "NoiseGenerator.h"
|
|
|
|
#include "SurfaceMaterial.h"
|
|
|
|
#include "PackStream.h"
|
2015-10-15 15:52:03 +00:00
|
|
|
#include "FloatNode.h"
|
2013-11-15 22:26:44 +00:00
|
|
|
|
2015-12-10 23:36:50 +00:00
|
|
|
CloudLayerDefinition::CloudLayerDefinition(DefinitionNode *parent, const string &name)
|
2015-11-20 00:07:31 +00:00
|
|
|
: DefinitionNode(parent, name, "cloudlayer") {
|
2013-12-04 21:52:18 +00:00
|
|
|
type = CIRRUS;
|
|
|
|
altitude = 0.5;
|
|
|
|
scaling = 0.5;
|
|
|
|
coverage = 0.5;
|
2015-10-15 15:52:03 +00:00
|
|
|
|
|
|
|
xoffset = new FloatNode(this, "xoffset");
|
|
|
|
zoffset = new FloatNode(this, "zoffset");
|
2013-11-15 22:26:44 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
CloudLayerDefinition::~CloudLayerDefinition() {
|
2013-11-15 22:26:44 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
CloudLayerDefinition *CloudLayerDefinition::newCopy(const CloudLayerDefinition &other, DefinitionNode *parent) {
|
2015-11-20 00:07:31 +00:00
|
|
|
CloudLayerDefinition *layer = new CloudLayerDefinition(parent, other.getName());
|
2013-11-15 22:26:44 +00:00
|
|
|
other.copy(layer);
|
|
|
|
return layer;
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
CloudLayerDefinition *CloudLayerDefinition::newCopy(DefinitionNode *parent) const {
|
2015-11-20 00:07:31 +00:00
|
|
|
CloudLayerDefinition *layer = new CloudLayerDefinition(parent, getName());
|
2013-11-15 22:26:44 +00:00
|
|
|
copy(layer);
|
|
|
|
return layer;
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void CloudLayerDefinition::save(PackStream *stream) const {
|
2015-08-12 20:21:10 +00:00
|
|
|
DefinitionNode::save(stream);
|
2013-11-17 21:47:27 +00:00
|
|
|
|
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);
|
2013-12-31 14:50:28 +00:00
|
|
|
|
|
|
|
noise_state.save(stream);
|
2013-11-15 22:26:44 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void CloudLayerDefinition::load(PackStream *stream) {
|
2015-08-12 20:21:10 +00:00
|
|
|
DefinitionNode::load(stream);
|
2013-11-17 21:47:27 +00:00
|
|
|
|
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
|
|
|
|
2013-12-31 14:50:28 +00:00
|
|
|
noise_state.load(stream);
|
|
|
|
|
2013-11-15 22:26:44 +00:00
|
|
|
validate();
|
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void CloudLayerDefinition::copy(DefinitionNode *_destination) const {
|
2015-08-12 20:21:10 +00:00
|
|
|
DefinitionNode::copy(_destination);
|
2013-11-17 21:47:27 +00:00
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
CloudLayerDefinition *destination = (CloudLayerDefinition *)_destination;
|
2013-11-15 22:26:44 +00:00
|
|
|
|
|
|
|
destination->type = type;
|
2013-12-04 21:52:18 +00:00
|
|
|
destination->altitude = altitude;
|
|
|
|
destination->scaling = scaling;
|
|
|
|
destination->coverage = coverage;
|
2013-12-31 14:50:28 +00:00
|
|
|
|
|
|
|
noise_state.copy(&destination->noise_state);
|
2013-11-15 22:26:44 +00:00
|
|
|
}
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
void CloudLayerDefinition::validate() {
|
2015-10-15 15:52:03 +00:00
|
|
|
DefinitionNode::validate();
|
|
|
|
|
2015-11-09 21:30:46 +00:00
|
|
|
if (scaling < 0.1) {
|
2013-12-04 21:52:18 +00:00
|
|
|
scaling = 0.1;
|
2013-11-15 22:26:44 +00:00
|
|
|
}
|
|
|
|
}
|