OvertakingLegend/Assets/Plugins/vHierarchy/VHierarchyDataComponent.cs

95 lines
2.5 KiB
C#

#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.ShortcutManagement;
using System.Reflection;
using System.Linq;
using UnityEngine.UIElements;
using UnityEngine.SceneManagement;
using UnityEditor.SceneManagement;
using UnityEditor.Experimental.SceneManagement;
using Type = System.Type;
using static VHierarchy.VHierarchyData;
using static VHierarchy.Libs.VUtils;
using static VHierarchy.Libs.VGUI;
namespace VHierarchy
{
[ExecuteInEditMode]
public abstract class VHierarchyDataComponent : MonoBehaviour, ISerializationCallbackReceiver
{
public void Awake()
{
void register()
{
VHierarchy.dataComponents_byScene[gameObject.scene] = this;
}
void handleSceneDuplication()
{
if (sceneData == null) return;
if (!sceneData.goDatas_byGlobalId.Any()) return;
var curSceneGuid = gameObject.scene.path.ToGuid();
var dataSceneGuid = sceneData.goDatas_byGlobalId.Keys.First().guid;
if (curSceneGuid == dataSceneGuid) return;
var newDic = new SerializableDictionary<GlobalID, GameObjectData>();
foreach (var kvp in sceneData.goDatas_byGlobalId)
newDic[new GlobalID(kvp.Key.ToString().Replace(dataSceneGuid, curSceneGuid))] = kvp.Value;
sceneData.goDatas_byGlobalId = newDic;
EditorSceneManager.MarkSceneDirty(gameObject.scene);
EditorSceneManager.SaveScene(gameObject.scene);
}
register();
handleSceneDuplication();
}
public SceneData sceneData;
public void OnBeforeSerialize() => VHierarchy.firstDataCacheLayer.Clear();
public void OnAfterDeserialize() => VHierarchy.firstDataCacheLayer.Clear();
[CustomEditor(typeof(VHierarchyDataComponent), true)]
class Editor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
var style = EditorStyles.label;
style.wordWrap = true;
SetGUIEnabled(false);
BeginIndent(0);
Space(4);
EditorGUILayout.LabelField("This component stores vHierarchy icons and colors that are assigned to objects in this scene", style);
Space(2);
EndIndent(10);
ResetGUIEnabled();
}
}
}
}
#endif