| 251 | } |
| 252 | |
| 253 | void Scene::load(vili::node& data) |
| 254 | { |
| 255 | if (!data["Meta"].is_null()) |
| 256 | { |
| 257 | vili::node& meta = data.at("Meta"); |
| 258 | m_levelName = meta.at("name"); |
| 259 | } |
| 260 | else |
| 261 | throw Exceptions::MissingSceneFileBlock(m_levelFileName, "Meta", EXC_INFO); |
| 262 | |
| 263 | if (data.contains("View")) |
| 264 | { |
| 265 | vili::node& view = data.at("View"); |
| 266 | m_camera.setSize(view.at("size")); |
| 267 | double x = 0.f; |
| 268 | double y = 0.f; |
| 269 | Transform::Units unit = Transform::Units::SceneUnits; |
| 270 | if (view.contains("position")) |
| 271 | { |
| 272 | vili::node& position = view.at("position"); |
| 273 | if (position.contains("x")) |
| 274 | { |
| 275 | x = position["x"]; |
| 276 | } |
| 277 | if (position.contains("y")) |
| 278 | { |
| 279 | y = position["y"]; |
| 280 | } |
| 281 | if (position.contains("unit")) |
| 282 | { |
| 283 | unit = Transform::stringToUnits(position.at("unit")); |
| 284 | } |
| 285 | } |
| 286 | m_cameraInitialPosition = Transform::UnitVector(x, y, unit); |
| 287 | m_cameraInitialReferential = Transform::Referential::TopLeft; |
| 288 | if (view.contains("referential")) |
| 289 | { |
| 290 | m_cameraInitialReferential |
| 291 | = Transform::Referential::FromString(view.at("referential")); |
| 292 | } |
| 293 | Debug::Log->debug("<Scene> Set Camera Position at : {0}, {1} using " |
| 294 | "Referential {2}", |
| 295 | m_cameraInitialPosition.x, m_cameraInitialPosition.y, |
| 296 | m_cameraInitialReferential.toString()); |
| 297 | m_camera.setPosition(m_cameraInitialPosition, m_cameraInitialReferential); |
| 298 | } |
| 299 | else |
| 300 | throw Exceptions::MissingSceneFileBlock(m_levelFileName, "View", EXC_INFO); |
| 301 | |
| 302 | if (!data["Sprites"].is_null()) |
| 303 | { |
| 304 | for (auto [spriteId, sprite] : data.at("Sprites").items()) |
| 305 | { |
| 306 | this->createSprite(spriteId).load(sprite); |
| 307 | } |
| 308 | } |
| 309 | |
| 310 | this->reorganizeLayers(); |
no test coverage detected