This commit is contained in:
Mikhail 2024-10-01 07:42:54 +08:00
parent 04423b2274
commit bb6c2cec43
12 changed files with 66 additions and 114 deletions

View File

@ -1,6 +1,5 @@
#if UNITY_EDITOR #if UNITY_EDITOR
using DCFApixels.DragonECS.Unity.RefRepairer.Editors; using DCFApixels.DragonECS.Unity.RefRepairer.Editors;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEditor; using UnityEditor;
using UnityEditor.SceneManagement; using UnityEditor.SceneManagement;
@ -20,8 +19,28 @@ namespace DCFApixels.DragonECS.Unity.Editors
wnd.Show(); wnd.Show();
} }
//private List<ContainerMissingRefs> _missingTypes; private MissingRefContainer _missingRefContainer = new MissingRefContainer();
//private readonly CollectorMissingTypes _collectorMissingTypes = new CollectorMissingTypes();
private void OnGUI()
{
if (_missingRefContainer.IsEmplty)
{
if(GUILayout.Button("Collect missing references"))
{
if (TryInit())
{
_missingRefContainer.Collect();
}
}
return;
}
_missingRefContainer.MissingsResolvingDatas
}
private bool TryInit() private bool TryInit()
{ {
@ -47,7 +66,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
EditorSceneManager.SaveScene(dirtyScene); EditorSceneManager.SaveScene(dirtyScene);
} }
//_missingTypes = _collectorMissingTypes.Collect(); _missingRefContainer.Collect();
return true; return true;
} }
} }

View File

@ -17,6 +17,11 @@ namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
public CollectedAssetMissingRecord[] collectedMissingTypesBuffer = null; public CollectedAssetMissingRecord[] collectedMissingTypesBuffer = null;
public int collectedMissingTypesBufferCount = 0; public int collectedMissingTypesBufferCount = 0;
public readonly Dictionary<TypeData, MissingsResolvingData> MissingsResolvingDatas = new Dictionary<TypeData, MissingsResolvingData>(); public readonly Dictionary<TypeData, MissingsResolvingData> MissingsResolvingDatas = new Dictionary<TypeData, MissingsResolvingData>();
public MissingsResolvingData[] MissingsResolvingDataValues;
public bool IsEmplty
{
get { return collectedMissingTypesBufferCount == 0; }
}
#region Clear/RemoveResolved #region Clear/RemoveResolved
public void Clear() public void Clear()
@ -93,6 +98,7 @@ namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
CollectByScriptableObjects(); CollectByScriptableObjects();
CollectByScenes(); CollectByScenes();
MissingsResolvingDataValues = MissingsResolvingDatas.Values.ToArray();
for (int i = collectedMissingTypesBufferCount; i < oldCollectedMissingTypesBufferCount; i++) for (int i = collectedMissingTypesBufferCount; i < oldCollectedMissingTypesBufferCount; i++)
{ {
collectedMissingTypesBuffer[i] = default; collectedMissingTypesBuffer[i] = default;

View File

@ -40,21 +40,21 @@ namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
{ {
if (container.collectedMissingTypesBufferCount <= 0) { return; } if (container.collectedMissingTypesBufferCount <= 0) { return; }
MissingsResolvingData[] missingsResolvingDatas = container.MissingsResolvingDatas.Values.Where(o => o.IsResolved).ToArray(); //MissingsResolvingData[] missingsResolvingDatas = container.MissingsResolvingDatas.Values.Where(o => o.IsResolved).ToArray();
for (int i = 0; i < container.collectedMissingTypesBufferCount; i++) for (int i = 0; i < container.collectedMissingTypesBufferCount; i++)
{ {
ref var missing = ref container.collectedMissingTypesBuffer[i]; ref var missing = ref container.collectedMissingTypesBuffer[i];
if (missing.IsNull) { continue; } if (missing.IsNull) { continue; }
var unityObjectData = missing.UnityObject; var unityObjectData = missing.UnityObject;
using (var file = new FileScope(AssetDatabase.GUIDToAssetPath(unityObjectData.AssetGuid))) using (var file = new FileScope(unityObjectData.GetLocalAssetPath()))
{ {
int startRepaierLineIndex = 0;//Ýòî íóæíî ÷òîáû ñêèïàòü óæå "îòðåìîíòèðîâàííóþ" ÷àñòü ôàéë. int startRepaierLineIndex = 0;//Ýòî íóæíî ÷òîáû ñêèïàòü óæå "îòðåìîíòèðîâàííóþ" ÷àñòü ôàéë.
// òóò èòåðèðóþñü ïî áëîêó missingsResolvingDatas ñ îäèíàêîâûì þíèòè îáúåêòîì, òàê êàê òàêèå èäåóò ïîäðÿò // òóò èòåðèðóþñü ïî áëîêó missingsResolvingDatas ñ îäèíàêîâûì þíèòè îáúåêòîì, òàê êàê òàêèå èäåóò ïîäðÿò
do do
{ {
bool isAnySkiped = false; //bool isAnySkiped = false;
int lineIndex = NextRefLine(file.lines, startRepaierLineIndex); int lineIndex = NextRefLine(file.lines, startRepaierLineIndex);
while (lineIndex > 0) while (lineIndex > 0)
{ {
@ -71,14 +71,15 @@ namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
if (isChanged == false) if (isChanged == false)
{ {
isAnySkiped = true; //isAnySkiped = true;
} }
else else
{ {
if (isAnySkiped == false) break;
{ //if (isAnySkiped == false)
startRepaierLineIndex = lineIndex; //{
} // startRepaierLineIndex = lineIndex;
//}
} }
lineIndex = NextRefLine(file.lines, lineIndex); lineIndex = NextRefLine(file.lines, lineIndex);
} }

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 495419751a448a848853d4df10955da7 guid: 7fb76d31aa28c1d42b68087f23db29ec
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -1,21 +0,0 @@
#if UNITY_EDITOR
using DCFApixels.DragonECS.Unity.RefRepairer.Internal;
using System.Collections.Generic;
namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
{
//internal class ContainerMissingRefs
//{
// public readonly TypeData TypeData;
// public readonly string ReplacedLine;
// public readonly List<MissingTypeData> ManagedReferencesMissingTypeDatas = new List<MissingTypeData>(4);
// public readonly bool IsHasMetaIDRegistry;
// public ContainerMissingRefs(TypeData typeData)
// {
// TypeData = typeData;
// ReplacedLine = RepaireFileUtility.GenerateReplacedLine(typeData);
// IsHasMetaIDRegistry = MetaIDRegistry.instance.TryGetMetaID(TypeData, out _);
// }
//}
}
#endif

View File

@ -1,18 +0,0 @@
#if UNITY_EDITOR
using UnityEditor;
namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
{
//internal readonly struct MissingTypeData
//{
// public readonly ManagedReferenceMissingType Data;
// public readonly UnityObjectDataBase UnityObject;
//
// public MissingTypeData(ManagedReferenceMissingType missingType, UnityObjectDataBase unityObject)
// {
// Data = missingType;
// UnityObject = unityObject;
// }
//}
}
#endif

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 447f4a0f7419475438468e8f08d8b7cd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 7999f2711e8e3e040b8ae48ce5acec71 guid: f41c9df5930a6b44cbe9d043e224b514
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -1,19 +0,0 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine.SceneManagement;
namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
{
internal class SceneObjectData : UnityObjectDataBase
{
private readonly GUID _assetGUID;
public readonly string SceneName;
public sealed override GUID AssetGuid { get { return _assetGUID; } }
public SceneObjectData(Scene scene)
{
_assetGUID = AssetDatabase.GUIDFromAssetPath(scene.path);
SceneName = scene.name;
}
}
}
#endif

View File

@ -1,19 +0,0 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityObject = UnityEngine.Object;
namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
{
internal class UnityObjectData : UnityObjectDataBase
{
private readonly GUID _assetGUID;
public readonly UnityObject UnityObject;
public sealed override GUID AssetGuid { get { return _assetGUID; } }
public UnityObjectData(UnityObject unityObject, string pathToPrefab)
{
_assetGUID = AssetDatabase.GUIDFromAssetPath(pathToPrefab);
UnityObject = unityObject;
}
}
}
#endif

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 0037513c31abb5d4ebd572d2fd17ccec
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,16 +1,41 @@
#if UNITY_EDITOR #if UNITY_EDITOR
using UnityEditor; using UnityEditor;
using UnityEngine.SceneManagement;
using UnityObject = UnityEngine.Object;
namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors namespace DCFApixels.DragonECS.Unity.RefRepairer.Editors
{ {
internal abstract class UnityObjectDataBase internal abstract class UnityObjectDataBase
{ {
//public string LocalAssetPath => AssetDatabase.GUIDToAssetPath(AssetGuid);
public abstract GUID AssetGuid { get; } public abstract GUID AssetGuid { get; }
public string GetLocalAssetPath() public string GetLocalAssetPath()
{ {
return AssetDatabase.GUIDToAssetPath(AssetGuid); return AssetDatabase.GUIDToAssetPath(AssetGuid);
} }
} }
internal class UnityObjectData : UnityObjectDataBase
{
private readonly GUID _assetGUID;
public readonly UnityObject UnityObject;
public sealed override GUID AssetGuid { get { return _assetGUID; } }
public UnityObjectData(UnityObject unityObject, string pathToPrefab)
{
_assetGUID = AssetDatabase.GUIDFromAssetPath(pathToPrefab);
UnityObject = unityObject;
}
}
internal class SceneObjectData : UnityObjectDataBase
{
private readonly GUID _assetGUID;
public readonly string SceneName;
public sealed override GUID AssetGuid { get { return _assetGUID; } }
public SceneObjectData(Scene scene)
{
_assetGUID = AssetDatabase.GUIDFromAssetPath(scene.path);
SceneName = scene.name;
}
}
} }
#endif #endif