feat: improve fps controller / add fog and ambient light to the scene
This commit is contained in:
@@ -300,6 +300,15 @@ bool SceneSerializer::Save(Scene& scene, const std::filesystem::path& path) {
|
||||
if (scene.m_CurrentCameraId != InvalidObjectId) {
|
||||
root["currentCamera"] = scene.m_CurrentCameraId;
|
||||
}
|
||||
const SceneEnvironment& environment = scene.GetEnvironment();
|
||||
root["environment"] = {
|
||||
{"ambientColor", {environment.ambientColor.x, environment.ambientColor.y, environment.ambientColor.z}},
|
||||
{"ambientIntensity", environment.ambientIntensity},
|
||||
{"fogColor", {environment.fogColor.x, environment.fogColor.y, environment.fogColor.z}},
|
||||
{"fogDensity", environment.fogDensity},
|
||||
{"skyboxRotationSpeed", environment.skyboxRotationSpeed},
|
||||
{"skyboxRotation", environment.skyboxRotation},
|
||||
};
|
||||
|
||||
for (const auto& objectPtr : scene.GetObjects()) {
|
||||
if (!objectPtr || objectPtr->IsBeingDestroyed()) {
|
||||
@@ -573,6 +582,23 @@ bool SceneSerializer::ConstructScene(Scene& scene, LoadResult& result,
|
||||
scene.m_name = root.at("name").get<std::string>();
|
||||
}
|
||||
scene.m_CurrentCameraId = root.value("currentCamera", InvalidObjectId);
|
||||
scene.m_Environment = SceneEnvironment{};
|
||||
if (root.contains("environment") && root.at("environment").is_object()) {
|
||||
const auto& data = root.at("environment");
|
||||
SceneEnvironment& environment = scene.m_Environment;
|
||||
const auto readColor = [&data](const char* key, glm::vec3& color) {
|
||||
if (data.contains(key) && data.at(key).is_array() && data.at(key).size() == 3) {
|
||||
const auto& value = data.at(key);
|
||||
color = {value.at(0).get<float>(), value.at(1).get<float>(), value.at(2).get<float>()};
|
||||
}
|
||||
};
|
||||
readColor("ambientColor", environment.ambientColor);
|
||||
environment.ambientIntensity = data.value("ambientIntensity", environment.ambientIntensity);
|
||||
readColor("fogColor", environment.fogColor);
|
||||
environment.fogDensity = data.value("fogDensity", environment.fogDensity);
|
||||
environment.skyboxRotationSpeed = data.value("skyboxRotationSpeed", environment.skyboxRotationSpeed);
|
||||
environment.skyboxRotation = data.value("skyboxRotation", environment.skyboxRotation);
|
||||
}
|
||||
|
||||
if (progressCallback) progressCallback(0.9f);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user