void SceneLoader::load(const string& path, Resources& resources) { logDebug("Start loading scene %s", path.c_str()); uint t0 = Engine::timems(); m_environment = Json(); load_internal(path, resources); if (!m_environment.is_null() && world->has_system<RenderSystem>()) { RenderSystem& renderer = world->get_system<RenderSystem>(); renderer.env() = parseEnvironment(m_environment, resources, dirname(path)); renderer.device().setEnvironment(&renderer.env()); } Entity cameraEnt; if (world->has_tagged_entity("camera")) { cameraEnt = world->get_entity_by_tag("camera"); } else { cameraEnt = world->create(); cameraEnt.tag("camera"); } if (!cameraEnt.has<Camera>()) { cameraEnt.add<Camera>(); Camera& camera = cameraEnt.get<Camera>(); float ar = Engine::width() / (float)Engine::height(); camera.makePerspective(45, ar, 0.1, 1000); if (cameraEnt.has<Transform>()) { Transform& trans = cameraEnt.get<Transform>(); camera.updateViewMatrix(trans.position, trans.rotation); } else { camera.view = glm::lookAt(vec3(0, 0, 1), vec3(0, 0, 0), vec3(0, 1, 0)); } } resources.startAsyncLoading(); uint t1 = Engine::timems(); logDebug("Loaded scene %s in %dms with %d models, %d bodies, %d lights, %d prefabs", path.c_str(), t1 - t0, numModels, numBodies, numLights, prefabs.size()); }