28 #include <ext/rapidjson/document.h>
29 #include <ext/rapidjson/stringbuffer.h>
30 #include <ext/rapidjson/writer.h>
54 using rapidjson::Document;
55 using rapidjson::StringBuffer;
56 using rapidjson::Value;
57 using rapidjson::Writer;
59 void SceneWriter::write(
const string& pathName,
const string& fileName,
Scene* scene)
61 scene->
setFileName((pathName.empty() ==
false?pathName +
"/":
"") + fileName);
64 jDocument.SetObject();
65 auto& jAllocator = jDocument.GetAllocator();
66 jDocument.AddMember(
"version", Value(
"1.99", jAllocator), jAllocator);
76 jLight.AddMember(
"id", Value(i), jAllocator);
77 jLight.AddMember(
"ar", Value(light->getAmbient().getRed()), jAllocator);
78 jLight.AddMember(
"ag", Value(light->getAmbient().getGreen()), jAllocator);
79 jLight.AddMember(
"ab", Value(light->getAmbient().getBlue()), jAllocator);
80 jLight.AddMember(
"aa", Value(light->getAmbient().getAlpha()), jAllocator);
81 jLight.AddMember(
"dr", Value(light->getDiffuse().getRed()), jAllocator);
82 jLight.AddMember(
"dg", Value(light->getDiffuse().getGreen()), jAllocator);
83 jLight.AddMember(
"db", Value(light->getDiffuse().getBlue()), jAllocator);
84 jLight.AddMember(
"da", Value(light->getDiffuse().getAlpha()), jAllocator);
85 jLight.AddMember(
"sr", Value(light->getSpecular().getRed()), jAllocator);
86 jLight.AddMember(
"sg", Value(light->getSpecular().getGreen()), jAllocator);
87 jLight.AddMember(
"sb", Value(light->getSpecular().getBlue()), jAllocator);
88 jLight.AddMember(
"sa", Value(light->getSpecular().getAlpha()), jAllocator);
89 jLight.AddMember(
"px", Value(light->getPosition().getX()), jAllocator);
90 jLight.AddMember(
"py", Value(light->getPosition().getY()), jAllocator);
91 jLight.AddMember(
"pz", Value(light->getPosition().getZ()), jAllocator);
92 jLight.AddMember(
"pw", Value(light->getPosition().getW()), jAllocator);
93 jLight.AddMember(
"sdx", Value(light->getSpotDirection().getX()), jAllocator);
94 jLight.AddMember(
"sdy", Value(light->getSpotDirection().getY()), jAllocator);
95 jLight.AddMember(
"sdz", Value(light->getSpotDirection().getZ()), jAllocator);
96 jLight.AddMember(
"se", Value(light->getSpotExponent()), jAllocator);
97 jLight.AddMember(
"sco", Value(light->getSpotCutOff()), jAllocator);
98 jLight.AddMember(
"ca", Value(light->getConstantAttenuation()), jAllocator);
99 jLight.AddMember(
"la", Value(light->getLinearAttenuation()), jAllocator);
100 jLight.AddMember(
"qa", Value(light->getQuadraticAttenuation()), jAllocator);
101 jLight.AddMember(
"e", Value(light->isEnabled()), jAllocator);
102 jLights.PushBack(jLight, jAllocator);
105 jDocument.AddMember(
"lights", jLights, jAllocator);
110 jSceneLibrary.SetArray();
111 for (
auto prototype: sceneLibrary->getPrototypes()) {
113 jPrototype.SetObject();
114 if (prototype->isEmbedded() ==
true) {
115 Value jEmbeddedPrototype;
116 jEmbeddedPrototype.SetObject();
117 PrototypeWriter::write(
122 jPrototype.AddMember(
"type", Value(prototype->getType()->getName(), jAllocator), jAllocator);
123 jPrototype.AddMember(
"entity", jEmbeddedPrototype, jAllocator);
125 jPrototype.AddMember(
"id", Value().SetInt(prototype->getId()), jAllocator);
126 jPrototype.AddMember(
"e", Value(prototype->isEmbedded()), jAllocator);
127 jPrototype.AddMember(
"pf", Value(prototype->getFileName(), jAllocator), jAllocator);
128 jSceneLibrary.PushBack(jPrototype, jAllocator);
130 jDocument.AddMember(
"models", jSceneLibrary, jAllocator);
134 Value jSceneProperties;
135 jSceneProperties.SetArray();
138 Value jSceneProperty;
139 jSceneProperty.SetObject();
140 jSceneProperty.AddMember(
"name", Value(sceneProperty->getName(), jAllocator), jAllocator);
141 jSceneProperty.AddMember(
"value", Value(sceneProperty->getValue(), jAllocator), jAllocator);
142 jSceneProperties.PushBack(jSceneProperty, jAllocator);
144 jDocument.AddMember(
"properties", jSceneProperties, jAllocator);
149 jEntities.SetArray();
153 const auto& transform = sceneEntity->getTransform();
154 const auto& translation = transform.getTranslation();
155 const auto& scale = transform.getScale();
159 jEntity.AddMember(
"id", Value(sceneEntity->getId(), jAllocator), jAllocator);
160 jEntity.AddMember(
"descr", Value(sceneEntity->getDescription(), jAllocator), jAllocator);;
161 jEntity.AddMember(
"mid", Value(sceneEntity->getPrototype()->getId()), jAllocator);
162 jEntity.AddMember(
"tx", Value(translation.getX()), jAllocator);
163 jEntity.AddMember(
"ty", Value(translation.getY()), jAllocator);
164 jEntity.AddMember(
"tz", Value(translation.getZ()), jAllocator);
165 jEntity.AddMember(
"sx", Value(scale.getX()), jAllocator);
166 jEntity.AddMember(
"sy", Value(scale.getY()), jAllocator);
167 jEntity.AddMember(
"sz", Value(scale.getZ()), jAllocator);
168 jEntity.AddMember(
"rx", Value(rotationAroundXAxis.getAngle()), jAllocator);
169 jEntity.AddMember(
"ry", Value(rotationAroundYAxis.getAngle()), jAllocator);
170 jEntity.AddMember(
"rz", Value(rotationAroundZAxis.getAngle()), jAllocator);
171 jEntity.AddMember(
"r", Value(sceneEntity->getReflectionEnvironmentMappingId(), jAllocator), jAllocator);
172 Value jEntityProperties;
173 jEntityProperties.SetArray();
174 for (
auto sceneEntityProperty: sceneEntity->getProperties()) {
175 Value jSceneEntityProperty;
176 jSceneEntityProperty.SetObject();
177 jSceneEntityProperty.AddMember(
"name", Value(sceneEntityProperty->getName(), jAllocator), jAllocator);
178 jSceneEntityProperty.AddMember(
"value", Value(sceneEntityProperty->getValue(), jAllocator), jAllocator);
179 jEntityProperties.PushBack(jSceneEntityProperty, jAllocator);
181 jEntity.AddMember(
"properties", jEntityProperties, jAllocator);
182 jEntities.PushBack(jEntity, jAllocator);
184 jDocument.AddMember(
"objects", jEntities, jAllocator);
185 jDocument.AddMember(
"objects_eidx", Value(scene->
getEntityIdx()), jAllocator);
190 Value jSkyShaderParameters;
191 jSkyShaderParameters.SetObject();
193 jSkyShaderParameters.AddMember(
194 Value(shaderParameterName, jAllocator),
195 Value(skyShaderParameters.getShaderParameter(shaderParameterName).getValueAsString(), jAllocator),
199 jDocument.AddMember(
"skyshader", jSkyShaderParameters, jAllocator);
205 Value jEnabledPostProcessingShaders;
206 jEnabledPostProcessingShaders.SetArray();
209 jEnabledPostProcessingShaders.PushBack(Value(shaderId, jAllocator), jAllocator);
212 Value jAllPostProcessingShaderParameters;
213 jAllPostProcessingShaderParameters.SetObject();
217 if (shaderParameters ==
nullptr)
continue;
219 Value jShaderParameters;
220 jShaderParameters.SetObject();
222 jShaderParameters.AddMember(
223 Value(shaderParameterName, jAllocator),
224 Value(shaderParameters->getShaderParameter(shaderParameterName).getValueAsString(), jAllocator),
229 jAllPostProcessingShaderParameters.AddMember(
230 Value(shaderId, jAllocator),
236 Value jPostProcessingShaderParameters;
237 jPostProcessingShaderParameters.SetObject();
238 jPostProcessingShaderParameters.AddMember(
239 Value(
"enabled", jAllocator),
240 jEnabledPostProcessingShaders,
243 jPostProcessingShaderParameters.AddMember(
244 Value(
"parameters", jAllocator),
245 jAllPostProcessingShaderParameters,
249 jDocument.AddMember(
"postprocessingshaders", jPostProcessingShaderParameters, jAllocator);
252 jDocument.AddMember(
"gui", Value(scene->
getGUIFileName(), jAllocator), jAllocator);
256 Writer<StringBuffer> writer(strbuf);
257 jDocument.Accept(writer);
260 FileSystem::getInstance()->setContentFromString(pathName, fileName, strbuf.GetString());
Color 4 definition class.
@ SHADERTYPE_POSTPROCESSING
static const vector< string > getRegisteredShader(ShaderType type, bool sort=true)
Returns registered shaders for given type.
static const vector< string > getShaderParameterNames(const string &shaderId)
Returns shader parameter names of shader with given id.
TDME2 engine entity shader parameters.
Represents rotation orders of a model.
int getAxisYIndex() const
int getAxisXIndex() const
int getAxisZIndex() const
const BaseProperty * getPropertyAt(int idx) const
Get property by index.
Base property model class.
Scene prototype library definition.
void setFileName(const string &fileName)
Set up scene file name including relative path.
RotationOrder * getRotationOrder()
bool isPostProcessingShaderEnabled(const string &shaderId)
Is post processing shader enabled.
UniquePtrSequenceIterator< SceneLight > getLights()
const EntityShaderParameters & getSkyShaderParameters()
Get sky shader parameters.
UniquePtrSequenceIterator< SceneEntity > getEntities()
const string & getGUIFileName()
SceneLibrary * getLibrary()
unordered_set< string > getEnabledPostProcessingShader()
Return enabled processing shader.
const EntityShaderParameters * getPostProcessingShaderParameters(const string &shaderId)
Get post processing shader parameters.
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Vector4 class representing vector4 mathematical structure and operations with x, y,...
File system singleton class.
const string & getName() const