| 189 | } |
| 190 | |
| 191 | vili::node Scene::dump() const |
| 192 | { |
| 193 | vili::node result; |
| 194 | |
| 195 | // Meta |
| 196 | result["Meta"] = vili::object { { "name", m_levelName } }; |
| 197 | |
| 198 | // View |
| 199 | result["View"] = vili::object {}; |
| 200 | result["View"]["size"] = m_camera.getSize().y / 2; |
| 201 | result["View"]["position"] = vili::object { { "x", m_cameraInitialPosition.x }, |
| 202 | { "y", m_cameraInitialPosition.y }, |
| 203 | { "unit", unitsToString(m_cameraInitialPosition.unit) } }; |
| 204 | result["View"]["referential"] = m_cameraInitialReferential.toString("{}"); |
| 205 | |
| 206 | // Sprites |
| 207 | if (!m_spriteArray.empty()) |
| 208 | result["Sprites"] = vili::object {}; |
| 209 | for (auto& sprite : m_spriteArray) |
| 210 | { |
| 211 | if (sprite->getParentId().empty()) |
| 212 | { |
| 213 | result["Sprites"][sprite->getId()] = sprite->dump(); |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | // Collisions |
| 218 | if (!m_colliderArray.empty()) |
| 219 | result["Collisions"] = vili::object {}; |
| 220 | for (auto& collider : m_colliderArray) |
| 221 | { |
| 222 | if (collider->getParentId().empty()) |
| 223 | { |
| 224 | result["Collisions"][collider->getId()] = collider->dump(); |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | // GameObjects |
| 229 | if (!m_gameObjectArray.empty()) |
| 230 | result["GameObjects"] = vili::object {}; |
| 231 | for (auto& gameObject : m_gameObjectArray) |
| 232 | { |
| 233 | result["GameObjects"][gameObject->getId()] = gameObject->dump(); |
| 234 | } |
| 235 | |
| 236 | // Scripts |
| 237 | if (!m_scriptArray.empty()) |
| 238 | { |
| 239 | result["Script"] = vili::object {}; |
| 240 | if (m_scriptArray.size() == 1) |
| 241 | { |
| 242 | result.at("Script")["source"] = m_scriptArray[0]; |
| 243 | } |
| 244 | else |
| 245 | { |
| 246 | result.at("Script")["sources"] |
| 247 | = vili::array(m_scriptArray.begin(), m_scriptArray.end()); |
| 248 | } |