示例#1
0
bool SceneLoader::Load(SECore::Scene* scene, const TCHAR* filename)
{
	bool ret = false;
	Json::Value root;
	CHECK(scene);
	CHECK(LoadJsonFromFile(filename, root));

	if (root.isMember("Config"))
	{
		const Json::Value& configRoot = root["Config"];
		if (configRoot.isMember("ShowGizmo"))
			scene->GetConfig()->EnableGizmo(configRoot["ShowGizmo"].asBool());
		if (configRoot.isMember("AmbientColor"))
		{
			scene->GetConfig()->SetAmbientColor(Json2Color(configRoot["AmbientColor"]));
		}
	}

	CHECK(root.isMember("Entities"));
	CHECK(root["Entities"].isArray());

	size_t entityCount = root["Entities"].size();

	for (size_t i = 0; i < entityCount; ++i)
	{
		SECore::Scene::Entity* entity = scene->CreateEntity();
		const Json::Value& entityRoot = root["Entities"][i];

		if (entityRoot.isMember("Prefab"))
		{
			CString filename = MStr2WStr(entityRoot["Prefab"].asCString());
			Json::Value prefab;
			LoadJsonFromFile(filename, prefab);
			LoadEntity(scene->GetCore(), entity, prefab);
		}
		
		LoadEntity(scene->GetCore(), entity, entityRoot);
	}

	size_t lightCount = root["Lights"].size();
	for (size_t i = 0; i < lightCount; i++)
	{
		LoadLight(scene, root["Lights"][i]);
	}

	ret = true;
Exit0:
	return ret;
}
Json::Value ReadDisplayData()
{
	Json::Value jsonData;
	char filePath[MAX_PATH];
	sprintf_s(filePath, "%s/DBM_MuseumData.json", GetUserDirectory().c_str());
	LoadJsonFromFile(filePath, jsonData);
	return jsonData;
}