private void SaveWorld(World world) { string[] paths = GetWorldPaths(); string worldName = Path.GetFileName(paths[0]); string root = GetWorldsRoot() + "/" + worldName + "/"; world.NullifyEmpties(); File.WriteAllText(root + "World.json", SDKUtil.SerializeObject(world)); }
private static bool UpdateWorldData(string worldName) { string root = GetWorldsRoot() + "/" + worldName + "/"; World world = SDKUtil.ReadJSONFileDirect <World>(root + "World.json"); if (world == null) { EditorUtility.DisplayDialog("Error", $"World.json file for {worldName} seems corrupted and needs to be fixed first.", "OK"); return(false); } string worldBasePath = Path.GetDirectoryName(AssetDatabase.GUIDToAssetPath(AssetDatabase.AssetPathToGUID(root + "World.json"))) + "/Pieces"; world.objectSpecs = new List <ObjectSpec>(); string[] assets = AssetDatabase.FindAssets("*", new[] { root + "Pieces" }); foreach (string asset in assets) { string assetPath = AssetDatabase.GUIDToAssetPath(asset); if (!assetPath.ToLower().EndsWith(".prefab")) { continue; } GameObject prefab = PrefabUtility.LoadPrefabContents(assetPath); if (prefab.TryGetComponent(out ExtendedAttributes ea)) { if (!ea.spec.IsDefault()) { string prefix = Path.GetDirectoryName(assetPath); if (prefix != null && prefix.Length > worldBasePath.Length) { prefix = prefix.Substring(worldBasePath.Length + 1) + "/"; prefix = prefix.Replace('\\', '/'); } else { prefix = ""; } string fileName = Path.GetFileNameWithoutExtension(assetPath); ea.spec.objectKey = prefix + fileName; world.objectSpecs.Add(ea.spec); } } if (prefab != null) { PrefabUtility.UnloadPrefabContents(prefab); } } // increase version if (string.IsNullOrEmpty(world.version)) { world.version = "0.0.1"; } else { if (Version.TryParse(world.version, out Version version)) { world.version = $"{version.Major}.{version.Minor}.{version.Build + 1}"; } else { world.version = "0.0.1"; Debug.LogError($"World.json of {worldName} contained an unreadable version. Resetting to {world.version}."); } } world.versionCode++; // write back world.NullifyEmpties(); File.WriteAllText(root + "World.json", SDKUtil.SerializeObject(world)); return(true); }