54 lines
2.0 KiB
C#
54 lines
2.0 KiB
C#
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
using RPGCreationKit.CellsSystem;
|
|||
|
|
|||
|
namespace RPGCreationKit.CellsSystem
|
|||
|
{
|
|||
|
[CustomPropertyDrawer(typeof(SceneAttribute))]
|
|||
|
public class SceneDrawer : PropertyDrawer
|
|||
|
{
|
|||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|||
|
{
|
|||
|
if (property.propertyType == SerializedPropertyType.String)
|
|||
|
{
|
|||
|
var sceneObject = GetSceneObject(property.stringValue);
|
|||
|
var scene = EditorGUI.ObjectField(position, label, sceneObject, typeof(SceneAsset), true);
|
|||
|
if (scene == null)
|
|||
|
{
|
|||
|
property.stringValue = "";
|
|||
|
}
|
|||
|
else if (scene.name != property.stringValue)
|
|||
|
{
|
|||
|
var sceneObj = GetSceneObject(scene.name);
|
|||
|
if (sceneObj == null)
|
|||
|
{
|
|||
|
Debug.LogWarning("The scene " + scene.name + " cannot be used. To use this scene add it to the build settings for the project");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
property.stringValue = scene.name;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
EditorGUI.LabelField(position, label.text, "[Scene] attributes can only be used on the type string.");
|
|||
|
}
|
|||
|
protected SceneAsset GetSceneObject(string sceneObjectName)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(sceneObjectName))
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
foreach (var editorScene in EditorBuildSettings.scenes)
|
|||
|
{
|
|||
|
if (editorScene.path.IndexOf(sceneObjectName) != -1)
|
|||
|
{
|
|||
|
return AssetDatabase.LoadAssetAtPath(editorScene.path, typeof(SceneAsset)) as SceneAsset;
|
|||
|
}
|
|||
|
}
|
|||
|
Debug.LogWarning("Scene [" + sceneObjectName + "] cannot be used. Add this scene to the 'Scenes in the Build' in build settings.");
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|