You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
58 lines
1.3 KiB
namespace Mapbox.Unity.Utilities.DebugTools
|
|
{
|
|
using UnityEngine;
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
public class ScenesList : ScriptableObject
|
|
{
|
|
public SceneData[] SceneList;
|
|
|
|
//ensure that linked scenes are stored in this object
|
|
#if UNITY_EDITOR
|
|
|
|
public void LinkScenes()
|
|
{
|
|
for (int i = 0; i < SceneList.Length; i++)
|
|
{
|
|
if (!ThisAssetContainsScene(SceneList[i]))
|
|
{
|
|
//duplicate the asset
|
|
var path = AssetDatabase.GetAssetPath(this);
|
|
var newScene = ScriptableObject.CreateInstance<SceneData>();
|
|
newScene.name = SceneList[i].name;
|
|
newScene.ScenePath = SceneList[i].ScenePath;
|
|
newScene.Text = SceneList[i].Text;
|
|
newScene.Image = SceneList[i].Image;
|
|
|
|
//assign it to the current scene list
|
|
AssetDatabase.AddObjectToAsset(newScene, path);
|
|
SceneList[i] = newScene;
|
|
|
|
//save the scenelist
|
|
EditorUtility.SetDirty(this);
|
|
AssetDatabase.SaveAssets();
|
|
|
|
//TODO: clean up unreferenced sub-assets with Destroy
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool ThisAssetContainsScene(SceneData scene)
|
|
{
|
|
var path = AssetDatabase.GetAssetPath(this);
|
|
Object[] assets = AssetDatabase.LoadAllAssetsAtPath(path);
|
|
foreach (var asset in assets)
|
|
{
|
|
if (asset == scene)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
|